|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" Z$ J# l4 d. f+ v
#include <linux/init.h>
: G! F5 }) a& P#include <linux/module.h>
# G! X3 ]6 L; l4 D4 q#include <linux/kernel.h>% H* H! q8 }, h2 q6 X, F
#include <linux/types.h>
4 o, K7 \: K0 X, I; s6 W#include <linux/gpio.h>
) w# N" |* A8 e5 i#include <linux/leds.h>
+ s1 v% N+ D! ]5 e, t#include <linux/platform_device.h>' r/ u$ M+ ]1 H- O4 K
3 w" y2 L* k/ V: }" C4 Q0 a/ S#include <asm/mach-types.h>
' T( L- K* ]/ _& I& P#include <asm/mach/arch.h>
: q8 G7 r0 S+ c5 g7 B* r* Q, m K#include <mach/da8xx.h>" B1 d; Y. T1 M E4 [2 |
#include <mach/mux.h>
9 ~( k( e% \7 U9 e' l# m0 {
8 d( q. O# i5 K8 |7 I* Z/ ~#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
B7 a* }$ Y) U. L! X4 a, j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), W, h( z. h$ v& R% |! X# b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& w p r+ \- U+ q! v$ d8 [+ c
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, `- R1 O" F8 e, h4 Q
# a% K, [; x/ H% ~6 M+ Y- p- ^2 C4 W/* assign the tl som board LED-GPIOs*/! y9 p) R, R/ g" o p7 m
static const short da850_evm_tl_user_led_pins[] = {$ f/ b7 Z b- x, w, x
/* These pins are definition at <mach/mux.h> file */
& O+ m1 j' D, P1 f) Z( @& S; y* m DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& o N' m! C c9 O6 r
-1* L4 m& U0 P7 B( V ^. l* S" J
};* P. T' p& l. z
" K0 e2 q! n% r* {1 Z4 m) P6 H
static struct gpio_led da850_evm_tl_leds[] = {! _! q* V( R4 i* `/ i% n9 w
{: i, h0 f7 k, M2 r( g& h4 h
.active_low = 0,* H; D% L+ h: V5 R$ D
.gpio = DA850_USER_LED0,
+ x$ V, T* K, p |& n) g; \ .name = "user_led0", ?1 ?2 d- E: v E
.default_trigger = "default-on",
* E" v2 L$ S2 Z+ X: m/ \ },
2 U2 g' { u( T5 B: O {
0 S( ]# ]$ I+ o+ @) r$ p" M, V .active_low = 0,
$ I5 o: V8 N7 O5 l .gpio = DA850_USER_LED1,
) r* k$ w5 i% L) p: H0 w .name = "user_led1",
, b. Y9 {3 q: y$ G6 U( r z .default_trigger = "default-on",' I. l3 r: @7 t, J
},+ M7 \# H6 I6 N
{
! ]) y0 S4 E4 H. ^ ` .active_low = 0,
4 k j4 b* j0 H/ f .gpio = DA850_USER_LED2,; F& L3 f4 |/ q
.name = "user_led2",! I/ A2 k- n9 Y \# l- i
.default_trigger = "default-on",6 `) s4 ?* [& ^: @4 p% {( _
},
. ^# b; v8 I8 n( O h {
; F" R# X) Z7 _. p. s .active_low = 0,
' Z6 X: r3 E7 B( W1 B .gpio = DA850_USER_LED3,
7 `2 u3 ?: s1 B$ q( o, m/ G& _- M$ b .name = "user_led3",; W+ s5 y1 R0 L% B
.default_trigger = "default-on",
6 T7 j, Z: b+ c+ R },* q2 T) D3 E- f8 T1 i
};
% [) l1 d; F8 z- n& _$ _! U
& T; L) n) x3 h7 Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" G$ t2 ^) h. d3 y) Q# R
.leds = da850_evm_tl_leds,4 l% M$ k" t" h s: A
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: i0 o2 `& p7 n+ h};; e8 Z) c, R. |# D- k
* Q5 B) C* l4 W% ystatic void led_dev_release(struct device *dev)9 G5 {9 L' h# B# x
{. m, U0 D/ a6 X5 A4 f- x
};
2 \1 L1 a. W* H: c4 C/ y/ V; i- C. @; K: u: S8 p) n
static struct platform_device da850_evm_tl_leds_device = {
+ A: M4 `3 n- K; l8 [4 k1 I2 }$ { .name = "leds-gpio",3 I. G, a7 H" A+ l' N; G# M% [- [, T
.id = 1,
4 N0 ? E3 f" F .dev = {; X P5 d% T1 z% [9 _6 C! _5 d. W
.platform_data = &da850_evm_tl_leds_pdata,: h4 E7 p" T) P* R2 `
.release = led_dev_release,
5 t" [( w3 A9 i8 ?! N; d }
0 Z& C% v' Z2 y3 z& e" V* J};/ C# Q) X! G& C" {7 n' j5 @: l
1 V+ r* h7 m3 i7 ~$ j5 X% Lstatic int __init led_platform_init(void)" L D c3 x7 Q6 W2 J* B& n
{& X4 c1 O0 o9 q; \* k7 t: a" a8 y
int ret;
* x4 M4 ?" ^ v#if 0
& H! l* r& y! n2 R$ B0 H ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& P+ d( g/ f0 E! ]# d( u if (ret)
& o/ }7 d4 Z$ ]) D& _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* r% m% a! U+ p
"%d\n", ret);
! h8 p4 f% S' Y( t1 [' t#endif" L+ {: w$ O" E& `! d
ret = platform_device_register(&da850_evm_tl_leds_device);
0 J, E, O- p" ^ if (ret)% v# z* M) q( w& @+ o; _' V
pr_warning("Could not register som GPIO expander LEDS");
0 K2 s' T( q+ X$ {1 C else
# s* M: O) {- g' L- j5 a$ Q% U$ X$ X printk(KERN_INFO "LED register sucessful!\n");
4 o/ ?1 X. Q* D3 `
% A9 W' d! H" B0 V& K2 }% P return ret;% M6 r9 z! Y0 c
}; ?& l8 X5 c" c L+ }& [9 E
$ X& @& K% t4 Wstatic void __exit led_platform_exit(void)8 [: b2 ^, y2 t% r3 J
{$ M. r ^+ y! ]8 d; l) ^* b
platform_device_unregister(&da850_evm_tl_leds_device);/ ?( E9 K$ x* p) p, w
% c% i. ]" h% U2 W* M8 c8 V5 V printk(KERN_INFO "LED unregister!\n");
0 c9 \9 \6 q2 ~% t& n}- F8 g9 p$ s/ D$ z( @6 ~
3 Q. O' h! }2 | K3 e, k" r
module_init(led_platform_init);4 u- ^5 |5 q7 C6 x/ d
module_exit(led_platform_exit);
* T; J. t; T; c. C
$ q4 }# K& h2 J2 p4 d6 n2 _2 qMODULE_DESCRIPTION("Led platform driver");3 L$ z$ I8 Z3 n( H2 p' [: v0 {8 }
MODULE_AUTHOR("Tronlong");6 I9 ^4 b% h t; B* o
MODULE_LICENSE("GPL");6 l- o) |% ?/ t0 u
- Y1 {( k$ ]2 P) {6 I# z* Q
|
|