|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( R2 \$ ~; l. U9 y9 K; J#include <linux/init.h>
& E( a& R, y; C#include <linux/module.h>: Y* J9 |# L% A- \5 S' y
#include <linux/kernel.h>1 D' o: p, H1 }
#include <linux/types.h>
5 D# a) o5 q7 q/ E/ B#include <linux/gpio.h>4 p5 y, g( Z- ?. @# l: C, g" m
#include <linux/leds.h>
& p# B8 D4 a1 W% D/ O. |#include <linux/platform_device.h>
2 P( X; c- |; {5 f
: f' P3 E1 g( |) `$ {; o' T#include <asm/mach-types.h>
8 \* H) \$ A: j1 v/ R$ \ z#include <asm/mach/arch.h>' ?9 T6 p; F9 y9 [5 d2 b
#include <mach/da8xx.h>
% d8 ~1 |7 p0 ~; Y& r) v# a#include <mach/mux.h>9 [6 s8 w8 D4 R6 S( b0 _
3 m+ i7 d3 \- K1 Y, I/ a- b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ N4 Z/ x1 y; P9 f$ G A+ y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, C7 u& Z% e ^) d" a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ \9 O9 I& I$ Q; H# Y5 r- {" Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 l+ }3 f4 q1 U7 f8 v4 b5 f5 H+ H6 B. b" R1 p
/* assign the tl som board LED-GPIOs*/
5 |! h2 @+ g7 s y( S7 {static const short da850_evm_tl_user_led_pins[] = {! ?8 E0 W' m+ c7 i9 U& L! M: Z
/* These pins are definition at <mach/mux.h> file */" n! i+ b& x4 A; t; W3 ]# g t, i1 C
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ d2 {1 U+ W: G) e+ R! \
-1& d, I+ z1 b+ u9 }' c
};
$ [# ? H7 I% W' F+ h0 Z, z1 l) B, z m, S7 V1 K& y! I7 E" b
static struct gpio_led da850_evm_tl_leds[] = {1 }9 V% P, o4 b) d
{
/ X# w6 g2 u6 S) w+ s9 | .active_low = 0,0 S- ~, ^8 n. U$ \0 J! N
.gpio = DA850_USER_LED0,
6 Q. R4 O; s1 R- e2 d7 ?7 ^ .name = "user_led0",
: q6 \( v% E" k) ]. y' o .default_trigger = "default-on",
0 s+ s6 L3 [% ^ },0 t) T6 U/ z) e% C! p1 ?: D
{2 r$ ]) t. D! m4 V: d/ Q, P
.active_low = 0,
9 m9 `% Y; Y/ Z7 D: ?% y .gpio = DA850_USER_LED1,; H: `: G" O8 f) z1 j# H
.name = "user_led1",% V+ W/ a' P+ V2 h9 G: ^. f
.default_trigger = "default-on",
- Z1 p( I( r c },4 ~9 E8 }& x6 s6 X& ^
{- U$ H% @: j# [) J( Q e5 U
.active_low = 0,2 q- R4 v9 i: c: G) {+ b# ]
.gpio = DA850_USER_LED2,
) m" E2 v, s9 ^ .name = "user_led2",
' W! k5 B' E3 y4 M: ?" a .default_trigger = "default-on",+ t( R+ a3 c7 i1 F$ {9 j7 U3 J9 r
},
# u! X( j' k' M: k+ c2 ? {) G$ t+ @ N* @7 p3 ]
.active_low = 0,
* u5 F' @4 o+ T1 i .gpio = DA850_USER_LED3,0 ?& X! |7 T0 [- Q
.name = "user_led3",
9 }; i' F0 `/ h4 _+ G) q% ` .default_trigger = "default-on",+ y+ }! d4 h7 r" ^
},
. Y' j# ?( ]6 h: Y1 Y" w/ p};" d5 l& n* P) P
. A5 d* l6 z; C* sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( D2 {4 e+ Z/ Q4 |9 F7 D
.leds = da850_evm_tl_leds,
4 n- x6 s- F2 s; r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 ~8 n0 M* J7 x. S
};/ A: `- ], M( s H$ O
3 x6 [ v" o0 ?3 [- \ m" mstatic void led_dev_release(struct device *dev)
X& @9 T' k- K. E8 P% s% Z; c* L8 b{1 p: h T8 Q- n* v! j2 z
};: d( M+ d6 B+ ]0 V6 E+ P! B
2 y0 r- d# K, d8 Ostatic struct platform_device da850_evm_tl_leds_device = {# @/ q( M( Y& `; m
.name = "leds-gpio",
0 t1 X" m7 E/ S0 y. ^6 H3 L .id = 1,
7 K4 G; Y6 @5 h/ _" r4 i! `! y7 X .dev = {* h V- d9 s) d/ E) ]
.platform_data = &da850_evm_tl_leds_pdata,& s, ?/ ?% c- r6 S9 L$ `. G) ?
.release = led_dev_release,
6 X# J7 X$ l2 g- ~ }! c3 }( p* h* J) P
};
6 l) p4 y6 o7 r# ^5 j! U
: l4 a3 c0 w, T% s, y. nstatic int __init led_platform_init(void). j& r; K! y. ]2 [0 V+ n3 r
{
) B( {4 C) c" t$ w5 _4 ^* R int ret;
/ L X: a$ w9 K( L1 j( K* t#if 0
$ _0 O0 ]; d6 H- r' A9 d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 G2 E- d n/ M: y* z if (ret)3 T: z$ Y$ A* j, l& N" s0 Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. f& q4 B- ^* G8 t }# m- F) D1 q+ \ "%d\n", ret);
# H5 p. C, r; k, j#endif
6 M: _% ] u; U9 } ret = platform_device_register(&da850_evm_tl_leds_device);
) x0 {! K0 i5 ]% M( h7 ^, H1 b; Z* T2 P: e if (ret)' K0 m6 I/ j) u3 M* F) f/ @
pr_warning("Could not register som GPIO expander LEDS");1 Y9 h" L2 A s! l- D! E9 U0 B* |
else
9 t! u# W; Z3 G$ \/ L printk(KERN_INFO "LED register sucessful!\n");
1 u% G8 l- [! |; L7 G9 Q% @
4 V$ U; E' S7 D+ Z& N; s return ret;) U3 _1 r2 }9 i1 q# t- B8 S# f) }
}
- `3 X3 y1 [7 L6 |
+ I! |, A/ _4 S/ M7 k b" fstatic void __exit led_platform_exit(void)6 W, e% C6 |/ e: P/ |" [
{3 ] {( m5 S# y/ S" p: n4 K4 ?
platform_device_unregister(&da850_evm_tl_leds_device);
8 W, v/ R5 Q, r9 G
3 c) Z+ d c) R. y7 X: B printk(KERN_INFO "LED unregister!\n");+ g- `8 J2 i2 D/ L7 u3 V" w
}
' t) m0 i2 v/ H/ s& J% r9 K. _# R/ x0 O- y1 V
module_init(led_platform_init);1 l9 l% }$ f; B1 @+ A
module_exit(led_platform_exit);. |" h& ]6 g: ~4 J
0 f3 C( v2 W2 W/ g9 j$ T* yMODULE_DESCRIPTION("Led platform driver");8 o, g' n) Y! P0 G! ?/ T$ J
MODULE_AUTHOR("Tronlong");- k; y0 X. N" L( P/ r+ p
MODULE_LICENSE("GPL");
) M0 z+ h) k% }% e* T0 ^2 O/ w1 ]
|
|