|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# b! |0 T; H b& a: F( i
#include <linux/init.h>1 k$ d5 v# F4 h& P8 ~) D
#include <linux/module.h>
b; D! a7 K9 d; h1 S#include <linux/kernel.h>
' K( D! u2 \- }7 x#include <linux/types.h>
# E7 h. z& i& Z4 H o- o#include <linux/gpio.h>
6 J( g; w1 p9 S+ I" l" C4 t#include <linux/leds.h>
2 ^6 P# {. g% S$ A#include <linux/platform_device.h>
( Q( B# \6 X& D; K8 j$ b' m/ B! U9 ]: ?; |$ \
#include <asm/mach-types.h>: f# d6 r1 x6 Y6 k
#include <asm/mach/arch.h>
* p3 [0 p) _: a$ N; U* U2 E5 Q#include <mach/da8xx.h>/ v! i$ q- v9 \, e
#include <mach/mux.h>1 O! @% y5 A# g# ]
) s% R/ O: K! C9 x0 a+ d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ H* C8 d7 w% j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ `5 a* Y/ c& U {3 n
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( T; H& r; P1 @" G4 r" X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 }+ [2 j0 N- o6 F0 q' @$ j6 m/ Q3 I! Z: I. q0 c f% Z- C9 N
/* assign the tl som board LED-GPIOs*/
; [9 K6 t& b; s3 Q& ^) T& @$ lstatic const short da850_evm_tl_user_led_pins[] = {1 y% k# s! _& e0 [; ?. T
/* These pins are definition at <mach/mux.h> file */8 H' u" t& |1 a5 S6 N
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 V$ ^& O0 }) K$ R -1; j9 M1 i5 V. ?
};1 u9 g9 D! f7 j! `
( S% m* l& Z1 l. [7 E( Ystatic struct gpio_led da850_evm_tl_leds[] = {: e5 r% p5 e, P1 D7 B8 t! U( l
{
" l# m' M9 u" E .active_low = 0,
, f% ?3 I9 n+ W8 a# a+ j .gpio = DA850_USER_LED0,
! b* U7 b% k5 K9 u- r; R$ `7 D4 ~ .name = "user_led0",
% R) w5 k" ^9 R, f .default_trigger = "default-on",9 c( f; e% `7 T
},
' p, O, \) U4 \7 t3 { {
) d+ t3 m$ y% H- t2 I& C, u .active_low = 0,$ E- p1 C8 @) J# q; D& o' h
.gpio = DA850_USER_LED1,/ l) p) \6 q4 E. |5 O1 Y
.name = "user_led1",
' e9 [) m6 z5 ^! {" A .default_trigger = "default-on",
6 z5 d2 k) i7 o- W },
# V! q H1 d H; n# J4 ]" u( ?' z {
0 P, {' ]: r: {$ Y .active_low = 0,- L* _9 O& a( v4 q7 n/ ] o
.gpio = DA850_USER_LED2,, ?. `! v: d. O& L( z! d0 J
.name = "user_led2",* u( G0 \4 i9 o/ ]) }
.default_trigger = "default-on",
. M& ], N9 z: Z; \% ^7 l },! m2 T: v& D) ~
{
0 p9 f9 @* x J .active_low = 0,& k0 `. {5 d- ]
.gpio = DA850_USER_LED3,
) R. }5 x- v Z .name = "user_led3",
0 H. _4 P0 b0 U! I) } .default_trigger = "default-on",! m1 J* t! h: e3 z/ _; O1 r
},; v, B0 `0 o4 ?( K
};' |7 A% P" S# B, `
9 `& `: K( H3 A+ Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 \+ h3 m+ ^& v" S# W) u1 a .leds = da850_evm_tl_leds,/ q J8 P) X; u5 j, n- y* O+ G* Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 @- P& X* B; V3 S. y6 c
};, E+ _7 B; P3 p7 B3 d
; }% ^, @+ t6 y9 Y! y) Fstatic void led_dev_release(struct device *dev)
2 H$ J( P( r8 ^& h' Y* F1 H! U8 O6 ]{
9 q+ d; j2 r5 Y' R};
, h2 `1 |+ k4 D& |
, E& K5 m( e) f/ c9 zstatic struct platform_device da850_evm_tl_leds_device = {; a5 j9 a! O# Q" ^7 x
.name = "leds-gpio",8 j$ G8 z l% l, m5 C& `: [
.id = 1,' i) p8 W3 p8 w$ s6 T1 @8 n
.dev = {4 Z7 e6 F' W* R# L4 p, _1 I
.platform_data = &da850_evm_tl_leds_pdata,
: ^" X! u: } n7 J3 ^7 y* L7 Z .release = led_dev_release,2 e M& Z2 e8 f3 c6 t3 |$ u# e) C9 O
}
# |$ { I/ M/ z) B- u2 M$ \" h};
9 F5 e( j+ [$ X; J8 G4 ?
: d( l* C4 u1 B6 [static int __init led_platform_init(void)9 k# R w$ M' o" h) T+ [+ k
{
- l/ h, {+ S2 q* j% R int ret;7 j9 T* \! @% n6 |# B8 Q
#if 0" O3 i) X0 D& k0 B
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- J1 c+ u% Y3 u* I6 d2 G! C' S if (ret)
) y4 f* s# m5 O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 `/ {; }, p( J o
"%d\n", ret);
a& n- U. }3 k' S8 K d# J5 Q' Q#endif
$ u( ^% @3 {" r: o9 @3 F( A" L8 T ret = platform_device_register(&da850_evm_tl_leds_device);
+ U: c: I8 b$ N5 j9 A8 u, W if (ret)
Y$ I/ g- c) ]9 x8 f# ^ pr_warning("Could not register som GPIO expander LEDS");
+ H0 ]/ x$ j! I else
2 ?" _, S a: z) y( ?6 K4 }7 z printk(KERN_INFO "LED register sucessful!\n");
. C% z3 J; f0 K* M6 a* `8 y7 `5 \; a, a0 D7 w) ?5 L o1 |- l
return ret;7 L% p2 a( b0 A, m8 U
}
# V9 G3 y% f( U" \( F, \
! F( Y: C' o4 X6 Z; O, S, ~: Istatic void __exit led_platform_exit(void)' m" A, [" ?8 }" c
{; X$ W2 N3 J) i6 u7 U. e/ M4 l4 b
platform_device_unregister(&da850_evm_tl_leds_device);. q) p% v- ?, R5 e
( ^. T; D% Y M, O printk(KERN_INFO "LED unregister!\n");2 ~* ?5 `5 s8 {' a8 A. i1 G
}
. A; y! ~! ^! K+ |+ a5 _. B$ y+ Q7 V1 D! H, \5 e
module_init(led_platform_init);
" C' H- i6 o- j* G& Z. \, Kmodule_exit(led_platform_exit);. l. Z1 r% O3 i2 E5 X0 }0 h! J8 S
. }5 E( T+ `1 \/ pMODULE_DESCRIPTION("Led platform driver");! C' z0 v1 M" n$ I$ Q
MODULE_AUTHOR("Tronlong");
8 J0 ^$ O7 A; p, y1 C2 BMODULE_LICENSE("GPL");
5 l5 U5 p( I( ?! }" N$ W/ e) V/ |/ ]( D( ~1 k9 [3 U
|
|