|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& i. k" ]/ m* C/ _" a#include <linux/init.h>
, H9 _( V5 C' O l#include <linux/module.h>
; F; v& R/ `/ R" y1 P2 T#include <linux/kernel.h>7 {! z# {/ w1 e9 q# ]- J/ j" o# G: X
#include <linux/types.h>
# N5 w* Z- t! }- g) P( d#include <linux/gpio.h>- P& _0 p' L1 n; p$ S
#include <linux/leds.h>( U, H& ?) T' C3 n4 D
#include <linux/platform_device.h>9 U4 s4 v: o- z2 T& s( Q+ o
8 \5 d1 `- w" R
#include <asm/mach-types.h>
6 j! ]1 w. W0 o. g) g#include <asm/mach/arch.h>3 C8 {) N9 d* Z& r9 x8 p
#include <mach/da8xx.h>
% V9 |0 t" |0 c+ Z- o#include <mach/mux.h>7 r! Z$ d: w* l6 U
8 E( y v% K: d
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 Z5 H8 b! o: R4 V/ r# o8 h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& n1 _2 f2 L1 t+ w4 ?- P3 C/ M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): f* [, ~5 q. a# ]1 l
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" u8 h4 [. n; f8 L" x( r4 J$ i
1 W! Q" o( a& e a, K+ ?. W
/* assign the tl som board LED-GPIOs*/# U0 h5 H1 d' k! ?( o: _7 Z
static const short da850_evm_tl_user_led_pins[] = {
; ^0 a9 w2 Y' D1 j /* These pins are definition at <mach/mux.h> file */- e9 r; O; S3 V
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) I' N1 Q4 q$ I" G -1& D6 x ]5 ^+ f: s" S: X
};
2 C8 {$ T0 n1 j9 Y4 v" G) y! L3 {6 K e) N
static struct gpio_led da850_evm_tl_leds[] = {
, p3 [1 R" ^: M- B; @- T$ { {
+ l1 I% m. S+ J' ~$ ~- ~ .active_low = 0,
4 X& r8 K! p# D5 p9 ]/ R: b .gpio = DA850_USER_LED0,
- r6 A0 U( n, D- z$ a- Y5 [4 O .name = "user_led0",
) S4 ^. n$ |* C0 |" @- _. u8 T$ { .default_trigger = "default-on",
5 s7 q8 i5 t. l },
]9 t- }6 w( B: x6 v6 ~ {
! Y/ T2 t7 o- g6 o/ I1 v .active_low = 0,; C e; r; O, m
.gpio = DA850_USER_LED1,
! d9 r1 m/ ?+ e; z8 f) V# x .name = "user_led1",& {) B5 M. `7 C% D
.default_trigger = "default-on",
( e$ r- d0 o- C- x& x }, y1 V' ]' | W- J( q
{
" l7 J1 m! x6 F9 ]( x- v/ e% P .active_low = 0,4 S8 h( h6 l- `1 E" ?/ i
.gpio = DA850_USER_LED2,. y& K3 ~6 w. |8 [& X, n
.name = "user_led2",
& U" u" u+ H# g U2 X .default_trigger = "default-on",( B2 L7 j+ n, R! @
},
7 F7 E7 K1 \% M {# H; x7 M7 |3 Y/ Z3 B# P" \5 o
.active_low = 0,& q6 s4 H8 L" L( K% D7 e. x( ]
.gpio = DA850_USER_LED3,- Q) n v- a" A. V
.name = "user_led3",
: ]2 P h7 a5 o' g" @2 R3 W .default_trigger = "default-on",2 g! a/ Z' z* z# Y1 R$ C/ r
},% u; Z% E! d h- p
};$ H8 i, z6 a* N9 h4 v1 X; u
9 T/ \0 Z0 i( {/ z) D4 n2 |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 j" q. E$ g3 z& o6 Y8 N. x2 A
.leds = da850_evm_tl_leds,
" r1 b$ G/ S' i) D, P( ?! |$ a% r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, R$ n" C+ M( P( }- a/ o
};9 {! b8 I' @; q! n, d
$ b E6 H8 f) A6 W$ \5 W; D
static void led_dev_release(struct device *dev)% R$ V# N# b- d. ?
{% O: `7 Z- E7 t! Y' _6 P8 f0 K2 }
};1 y" N: Q4 q) }3 A7 O n) H" A
, n, ^6 g* \/ I, M
static struct platform_device da850_evm_tl_leds_device = {
0 k- x9 I2 l& T, X, m( p .name = "leds-gpio",
; L1 p, _* P7 Q6 O( `3 ]$ c .id = 1,6 L& [! C% P6 O* A. }3 O' s
.dev = {
, I( Q/ p6 a. ] .platform_data = &da850_evm_tl_leds_pdata,# ?: {, z' `1 ^; W, z/ I
.release = led_dev_release,6 J( L u+ ?) w/ I+ o
}
: ?' N' M5 y# n5 ? R% M# w};- }1 {. J- ^- e. P! U
# `8 I# S2 r5 C4 r* tstatic int __init led_platform_init(void)0 o K) y) o2 }, m0 k' K
{, O; j, i# n4 W% m+ N
int ret;
v$ E& t. y! F p4 f: z4 d#if 0% n2 y3 T9 T3 }2 j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& y( k, a0 h, A if (ret)
& b, W6 o/ R! N# Y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 r$ u# y+ G* I3 u
"%d\n", ret);
$ T+ D0 T" W+ L# Y2 `9 M#endif7 v: t" f. I8 p8 ~3 C1 s
ret = platform_device_register(&da850_evm_tl_leds_device);
1 A: ]6 f5 |6 Y3 s$ W: ~ if (ret)
/ f' O/ c: M% R7 m! t! U) k3 G pr_warning("Could not register som GPIO expander LEDS");
7 @4 p/ A- _8 E2 O. N else
9 o+ z4 _0 k7 _& ?, t* b/ t printk(KERN_INFO "LED register sucessful!\n");
0 A# ~5 l: w' x6 g& x8 M9 R+ N4 J* P
return ret;- l5 S2 v/ \( h+ S# P( e1 F$ P2 E
}
. S, T) X% a% _! L0 r* E, v9 S: k7 o. v8 z& t7 ]: K; d7 W
static void __exit led_platform_exit(void)! x0 d) z. E2 Q, v& ^
{
6 t/ ^5 d! C, h4 ?) D platform_device_unregister(&da850_evm_tl_leds_device);2 T& ]! h0 [* {/ m+ g" w: i
5 S- o' C, k5 m. h: K" D3 D; `
printk(KERN_INFO "LED unregister!\n");; S) k& k4 B5 U- J" @. m |4 V0 c
}
) o! H* i Q- p/ ~' e+ E9 x# f& K4 z" Y& \3 z/ p0 U
module_init(led_platform_init);
5 U! @! \7 n7 o3 U. Amodule_exit(led_platform_exit);
; A5 H! `: S5 ^; ]4 I: S' J! z' D# W r& S6 o
MODULE_DESCRIPTION("Led platform driver");1 v: \3 o5 Z) W) n' @& w1 t
MODULE_AUTHOR("Tronlong");0 I6 Y5 j+ h& r5 q5 {4 A
MODULE_LICENSE("GPL");7 ]4 |# ~5 Q/ f" a
7 d' T; k Y7 T
|
|