|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 S* K* K. e; G4 \) \; R) I- ^#include <linux/init.h>6 w9 q. X3 ^% ^- p1 S, z3 r
#include <linux/module.h>
# C- n% f4 G. p# l! B. X#include <linux/kernel.h>
, ^+ J8 J! |4 p8 c#include <linux/types.h>
5 P- J( ]6 m* e4 F( M, K" ?! h#include <linux/gpio.h>) d8 Q( O# Y) n6 X' V2 U
#include <linux/leds.h>
; v1 `) [# o x& N- h#include <linux/platform_device.h>
! g+ `$ O0 |/ R' Q4 R, `7 w( e( V3 k& D9 P- M) V* K
#include <asm/mach-types.h>. }0 z2 a) k# y# t1 ^/ @) z5 {
#include <asm/mach/arch.h>
6 C' z) ?% O0 |) _#include <mach/da8xx.h>
$ W0 M& k& C( V$ N0 u, @" }9 r#include <mach/mux.h>! H3 e3 Z z% C" d
; f* i# c% R% X# F, J
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 G# h1 c- u1 V* d. I8 i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% n4 }% f3 L8 \' |3 E: t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 _ _$ K _$ s9 i- n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). V8 C* `3 R8 C% n& N+ J
. O, A8 R1 R3 b+ X& _6 K! _* [/* assign the tl som board LED-GPIOs*/
$ Y2 z( G8 R! `" zstatic const short da850_evm_tl_user_led_pins[] = {
2 M, L, `, V& A /* These pins are definition at <mach/mux.h> file */4 R2 I% M& E6 C3 U5 R, w
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% S7 N1 N! p4 I3 z, E0 W -1 @3 y; J8 ^( p" ~" ?
};
2 U% T7 X, J0 e1 Z4 R7 w$ h ?3 q! l
static struct gpio_led da850_evm_tl_leds[] = {
0 Z2 K* o- B; a; z) x. h+ F( R: `0 o {1 s7 Z! L; t) n0 Z
.active_low = 0,
: B: |$ l y) \ .gpio = DA850_USER_LED0,
, v* e# f% @1 g+ g' U/ a5 q .name = "user_led0",
& o; A: q: T! h) \9 a .default_trigger = "default-on"," o6 R! ]5 F _/ ^
},
8 X! f$ r- y6 |8 ?8 F {
# A. [. |0 m- ?$ F& a. V .active_low = 0,
* e A2 a6 i1 z G- g# a ]2 I' U .gpio = DA850_USER_LED1,! N; a7 v* @& ^9 V. ]
.name = "user_led1",
% o& I! a5 y6 ?/ _& p .default_trigger = "default-on",! Y5 O) q, o2 x" k( | w
},
6 a$ e( ^/ y; K7 C+ U; E, B9 u {2 f9 p- r& F+ o$ n2 K e
.active_low = 0,; V, n" E+ I8 y0 ?2 e9 i, m
.gpio = DA850_USER_LED2, W9 _4 c u- ]! Q. y
.name = "user_led2",0 O/ a6 a/ G' Q; F/ e1 F- Q: u% X9 g
.default_trigger = "default-on",
, w* W0 i+ `: ]0 Z: e },
8 E# a" h. y9 ~+ v+ }4 o {5 {$ L* w; T! P L; |4 L
.active_low = 0,
' d+ Y6 ]7 g, A( e0 c .gpio = DA850_USER_LED3,
8 i- L4 U8 E/ Q7 a, f( T$ w .name = "user_led3",+ a6 v( C. _" D3 A. N* v
.default_trigger = "default-on",- F4 ~ `' |# e% I, h3 s0 l
},
& e5 Z, U! v* `( { w! o};
# I( j; e% i+ _* b) f
5 d4 k; ^# H% \% j# ?/ X+ L9 z: t: I7 istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( \# b- N2 v2 F7 U/ K5 ]7 T; x) O; N
.leds = da850_evm_tl_leds,
, z% m! Y/ s0 a- V& d4 z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 P" c' P# {) N) t8 W
};& G3 r; N4 _9 f% k, E1 { `
/ T* H: G! P: H" u& D7 a' L, [static void led_dev_release(struct device *dev)# X6 {2 ~* m4 ^2 u
{- Q2 Q5 Z" L% T& N+ W5 P c
};: r% N* p$ v* X X7 r3 f# V
4 K ]/ r6 J3 A6 \& y2 {6 A" f5 u
static struct platform_device da850_evm_tl_leds_device = {
- t: }# P: d6 l3 E .name = "leds-gpio",; H/ r+ I2 F! F; f: ]
.id = 1,
3 }1 u0 j0 ^: I! A+ Q% K .dev = {
) l3 f8 T! c2 V/ u5 J .platform_data = &da850_evm_tl_leds_pdata,
/ R9 b! o( y% S' M4 w( J5 f .release = led_dev_release,1 V- y# t: t2 A3 t5 z5 z
}) \5 R t) A3 p5 C! ^, g
};
) v7 }5 P& |! S6 X j9 o
k# x5 Q. D+ Y8 t+ p, x+ sstatic int __init led_platform_init(void)7 ~; r0 d/ Z1 G- f D3 O: o2 g0 Y* e
{( B" `# z9 E- D* q2 T
int ret;, z1 o& X. B0 G+ }2 }6 m% u) ^
#if 09 ]) r: r" _0 l" P) d; Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, R/ y! G2 ], W! `
if (ret)
& w' q0 y' n3 y4 S( W' U pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 l4 q4 M& j' S1 D {( y7 X "%d\n", ret);1 k. k( F& {9 G. [7 g [8 ?1 F7 I
#endif
0 i7 N" {$ h0 Q* M ret = platform_device_register(&da850_evm_tl_leds_device);9 N; ` X" M! `8 L$ b3 L5 ?4 o: m
if (ret)
( `1 m$ C! P8 Q) Q. _8 a, A8 b9 ` pr_warning("Could not register som GPIO expander LEDS");
3 c7 }+ c5 {* L' j8 U else
9 t, ]0 b8 r7 I, h4 @7 L printk(KERN_INFO "LED register sucessful!\n");) n" K# v3 b9 Z
# U7 _ b; O! n5 ?: {
return ret;
0 U' J# y, F# o; r" I}
, g7 b/ ^+ N6 l1 a! H5 N# n" M2 |! E8 Z( S' d" v: W
static void __exit led_platform_exit(void)
+ H D; l0 v) m7 o! b R{+ J: n3 h* [! B O
platform_device_unregister(&da850_evm_tl_leds_device);
! M4 z) \1 }' j
, `& }$ E5 Q& y2 Q3 @ y( N9 v printk(KERN_INFO "LED unregister!\n");
( v# t4 X0 j; c: p- h2 l- k}
9 ]7 D) s* [1 V+ ~, s' T" u5 |3 G& @: q ^: H M
module_init(led_platform_init);
3 d+ o+ K" z7 L0 d3 h' nmodule_exit(led_platform_exit);+ L8 `2 I* N7 v* _ U4 }$ a0 \
6 C% k1 T8 L5 F6 b6 Z( T: E( ^ d
MODULE_DESCRIPTION("Led platform driver");# _) `7 U& C/ z0 N6 Y
MODULE_AUTHOR("Tronlong");% D( @5 V3 ?! R5 f; f9 V
MODULE_LICENSE("GPL");
; h- n) D# u! \6 y2 A9 B8 X# Z; A# w' U3 K( X6 ~
|
|