|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 o L( g3 X m( s4 b q2 [#include <linux/init.h>+ _8 ]" {+ {8 o5 P
#include <linux/module.h>& e4 t0 D8 @) a: B/ a5 n8 y: B
#include <linux/kernel.h>. H# r) g( U/ o5 n% R8 d
#include <linux/types.h>0 ]) ~ h; ?5 S9 Q
#include <linux/gpio.h>
/ c' z% C: T/ w* U#include <linux/leds.h>: n3 V+ d3 E- j8 @
#include <linux/platform_device.h> E4 B1 A! {; @. D2 F
3 u( ^$ y1 r% D; c( I#include <asm/mach-types.h>
( _! J2 w r5 W# H#include <asm/mach/arch.h>
" }: o# B- K% u6 T#include <mach/da8xx.h>
+ Y1 }9 ?3 Z8 T#include <mach/mux.h>6 S4 m5 J/ `6 |. X
' w6 F! t4 r1 `' ]+ _3 }; o, [#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 d+ K7 \/ Q: ~; Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 H& `& G8 A5 a& N# X* Z* V# }4 |& u#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 d2 f9 Q$ H2 [ Z7 o& ~7 c
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 o5 i+ N' z9 t0 O7 b" j
1 U4 J# C' W8 F# \/* assign the tl som board LED-GPIOs*/
! h, \; a- m1 l0 R' i" L. r9 ~static const short da850_evm_tl_user_led_pins[] = {
4 K9 T m( @7 i8 _( { /* These pins are definition at <mach/mux.h> file */
7 V& m. g. r7 v/ i" {, M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) C% [ H' k% R0 K9 E( M -1+ Q. [5 N" U5 k( W
};- T! z0 m/ @/ b' t
* Q. H1 L; e3 N" ?3 Istatic struct gpio_led da850_evm_tl_leds[] = {
6 ^7 Z( [7 T! _6 u {
) d+ M! D) X0 h; Z0 ~7 M- N+ ^% L .active_low = 0,/ `, d2 x/ E9 f) U
.gpio = DA850_USER_LED0,
% J8 [# e" _9 |( g$ L! G .name = "user_led0",- p" T6 w9 }- a3 ^! V
.default_trigger = "default-on",
9 f; A5 X, h( P# u8 u; S },0 W4 k$ G6 k# G) q, K
{
* C q$ R" X( Y& \+ h: E% g .active_low = 0,/ o& M* K& F9 F" s/ w$ V& x
.gpio = DA850_USER_LED1,
) n; E7 f3 |0 x) r .name = "user_led1",; c3 M" c$ [5 k9 V2 {0 T. c$ \
.default_trigger = "default-on",
& z: y& S4 s8 W8 B P/ L; ~) K },
+ O' d( p' P6 ], @ {" M: z5 L/ P( O3 J& v
.active_low = 0,
& o: d- J) l) [7 _ .gpio = DA850_USER_LED2,3 D% x6 p7 ?7 O5 u! N, Y
.name = "user_led2",: Z( h$ v* Z* B& c: p
.default_trigger = "default-on",% d5 s2 U$ D8 ?& r
},$ K& W, A# a2 e* W- Q
{
: b/ f, V$ T/ ]& X8 a* O8 g .active_low = 0,% j1 F! y; M7 X$ K' \3 q
.gpio = DA850_USER_LED3,) p; z7 b$ T1 s. b+ p
.name = "user_led3",
: b- r. o8 G, s' N3 w; w .default_trigger = "default-on",6 H) L% E" o0 E6 {4 D# W+ h
},
$ I2 n7 @% `, r8 A' t};
- V/ E, n8 j0 Z8 |/ B6 O+ B; N- j" I
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 J' \: A" `7 H
.leds = da850_evm_tl_leds,* z; U' b# w% Q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, D7 `, A8 O$ `( H; d};/ a# v5 F) z. T6 E1 n* u# I( f
3 M) r6 O! t# h
static void led_dev_release(struct device *dev)
2 a, ]9 Y: G: n{
) Z d% `: H# ]6 g8 K% V) L};
3 P) I$ A- \6 @) L: |) b8 q" |7 S5 f ^7 K' O5 u/ W1 \6 X
static struct platform_device da850_evm_tl_leds_device = {! G9 u' n7 P2 e
.name = "leds-gpio",3 v) D7 \7 l9 k6 Z
.id = 1,4 {( m! F0 ]- V. u3 s+ K: O
.dev = {& x! C9 C: y8 _9 g8 f B
.platform_data = &da850_evm_tl_leds_pdata,
/ p0 P5 c8 n* J9 g7 L .release = led_dev_release,- ]/ R8 S; B; R$ ~
}# x4 g+ Q' N5 b4 z4 e9 c; U8 B
};0 j2 p: O) t4 P! t
# G9 @( Y! F& L+ F/ Z& d
static int __init led_platform_init(void)
, A. B% x+ F6 ^{
_1 a0 U+ K* T( A int ret;& @) U7 t Q% W* `1 ]6 o
#if 0
* y0 n! k% p3 @3 m5 j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ g/ v+ O5 k3 N( c if (ret)' J, `$ `9 B% r( `+ ~6 J f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ e; F4 C3 {, a, J) K "%d\n", ret);
# Z1 u, H F4 [#endif% F- y4 G# t( ?& M: l! [% p
ret = platform_device_register(&da850_evm_tl_leds_device);
, C; P& U2 c3 B' L% J; K9 S if (ret)
% K f# p' V$ [4 X! y; M: u pr_warning("Could not register som GPIO expander LEDS");- t) R9 ?2 Q X5 z; j- N
else
6 q; B: P6 e$ R! G1 {/ ? printk(KERN_INFO "LED register sucessful!\n");5 P( G' g6 F) k5 u
6 T. o, \/ X$ u
return ret;
& \+ M; w" L& b" s/ h2 @; t}
6 k0 ]1 x3 |4 B J9 K, U* \
/ `% a4 G! T1 Estatic void __exit led_platform_exit(void)8 _; |! R# \7 q* C8 G' ?# @. X4 P
{
& Y r6 X0 ^1 `1 x/ w* t2 I( x platform_device_unregister(&da850_evm_tl_leds_device);7 l1 X/ I) u. m0 T
! a1 G1 Y& r" E* P printk(KERN_INFO "LED unregister!\n");6 E' u8 }5 ?! ]1 m- O9 d
}8 ^( q8 @. y0 ^- E
1 B! {, M0 I9 g) P3 {. B" Y$ l% V
module_init(led_platform_init);3 n0 Q8 L# F c, M$ N F
module_exit(led_platform_exit);
7 T" j8 T+ M | Y2 E+ \2 l9 I5 a2 f. Z' s' { K1 B
MODULE_DESCRIPTION("Led platform driver");
7 _+ k7 b4 H4 v) h, IMODULE_AUTHOR("Tronlong");
; g# n; l2 S& a$ ^MODULE_LICENSE("GPL");
9 D; s% _3 }! }, u/ J; ]! K* K% m; f5 x5 ^
|
|