|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' W- L2 i E# s6 j) ~5 l. ~, L
#include <linux/init.h>
, P3 m- T( C" c/ E9 s {' {#include <linux/module.h>0 c T3 h- i$ j8 k
#include <linux/kernel.h>
' v |; W+ t* s2 O- n4 j#include <linux/types.h>8 q9 S5 q4 x$ M) f% m" O
#include <linux/gpio.h>
7 E; [1 F" c1 B#include <linux/leds.h>+ ~( i8 }1 N( t
#include <linux/platform_device.h>
, k3 M' E/ `5 D' ?- ~7 {, Z$ n9 c2 k" H( I% k+ A% P3 G* f
#include <asm/mach-types.h>" k W8 j" F1 G# L
#include <asm/mach/arch.h>
" i) S! Z1 W. ~3 n3 Z1 C3 F#include <mach/da8xx.h>: ~' J- h; I `0 j; `7 }% T9 x
#include <mach/mux.h>
6 S! S# o4 M/ t. _( ^& _% [, Q2 d' d8 H) _$ \
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 c6 k [4 s* Q4 k) f) e
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 H& k$ k! R' N C% `0 p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 v- L3 |, v1 z @, ^#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# L, M) z/ y! I1 Q
0 s9 i: ]1 S: ]/* assign the tl som board LED-GPIOs*/1 y5 o; B8 R( \
static const short da850_evm_tl_user_led_pins[] = {
8 C) I5 f3 d" G) \- `1 v /* These pins are definition at <mach/mux.h> file */7 @6 t; W7 t0 D+ q: @" [+ [7 g
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 N9 E R: V& ^2 R1 Q K -19 ?% k" c* {; P8 M1 |+ K0 s
};2 _' Z7 Z- F. x; X# B8 B
* W$ B" n6 X r7 I" a; B
static struct gpio_led da850_evm_tl_leds[] = {
1 e- w- O: i! `9 C' S) o- k {/ Q) \% R* N3 L$ F' `. u
.active_low = 0," W9 k7 C) s# b% E* P3 e7 b- |
.gpio = DA850_USER_LED0,
7 a6 h& F7 S( R5 c7 G6 j' T0 |7 o" f/ s .name = "user_led0",. Q# y5 f* z' ^% y/ T) `) _& x
.default_trigger = "default-on",
% \% K6 N, j) x5 A5 l q% O; e },
$ }( v1 \5 J4 ^- E {
6 m; E( p. H& t; }! g- s* q .active_low = 0," @( z4 e( E K; j1 Y; ~
.gpio = DA850_USER_LED1, {1 k1 J6 e" Y) ?! Z, V+ w
.name = "user_led1",
; t& ]) C2 A6 J( |0 l: [, Y .default_trigger = "default-on",
B8 f* t) k$ j2 S1 d: y },
/ \, g9 Z1 b$ {' `& O' u8 y3 d/ ?% K {6 T# B Q+ F6 ~3 t I
.active_low = 0,
/ a% ?9 ?/ s; \3 g% r .gpio = DA850_USER_LED2,8 v* x3 B C2 ~- T+ c3 [% d/ e
.name = "user_led2",
0 e$ S; W7 ]& j" z k! H0 |4 P .default_trigger = "default-on",& Q# u# @( i N, n1 K; W9 \
},
5 [; I& @0 B; q( f* g3 K6 J, t {
7 m+ T, A: P7 `* { .active_low = 0,
* g' z+ ~4 N( C, h% U .gpio = DA850_USER_LED3,
4 o1 ~) C1 c4 e$ V" p& A+ u .name = "user_led3",
2 Y. F8 L( `. }6 o .default_trigger = "default-on",8 Y* w$ y0 S; z- R8 |; t9 D
},0 ?" d: l8 A" u5 `- O& [0 [5 U `
};
( t) u( |+ g0 v! O" e& [1 }2 S+ i% u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( b7 k6 g: m% q: h .leds = da850_evm_tl_leds,
& q! ]7 ]% c1 g( \! o2 t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* X7 h2 t; H# w' n) g4 N" r" j/ `};6 g; Z! m' x" k
3 `/ N' b( T- H3 o. O
static void led_dev_release(struct device *dev)& Z4 D; t) q7 O8 L$ q
{* S! x( H2 `4 T$ N2 Y
};# m6 c% n q5 ~5 {* o
: r$ o" @% |: ]static struct platform_device da850_evm_tl_leds_device = {# [5 w& Y* o1 Q
.name = "leds-gpio",
4 \! t( d+ Y5 O/ S9 U .id = 1,
/ X' H' Y! Q+ s# x. n& z- s .dev = {6 m) {% c* d1 L/ {; n8 g
.platform_data = &da850_evm_tl_leds_pdata,7 F( @, z% _" n' H- f
.release = led_dev_release,; ^4 `8 v3 w' v) \. h
}+ N6 K! z6 ?0 i/ r5 j- B7 k- i
};
/ F5 t) d+ a, [( B# S; d
7 W( U, T o; r; |2 Fstatic int __init led_platform_init(void)* D/ x7 S0 X: [" y% t" M+ @, m
{) w$ @2 Z( e8 J( b
int ret;0 B7 ^- M- k4 {: g5 B
#if 09 ?6 O6 A- F1 H" M9 X. h1 w) K
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
}4 V2 ~" X; ]2 @' M4 Y: Y if (ret)7 V6 j; q: `8 ], U+ z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 Y$ _8 M7 |+ b; L6 y "%d\n", ret);
9 L0 O7 O, S. g0 |& u5 h( n R# V#endif& d E. D% }3 _8 \
ret = platform_device_register(&da850_evm_tl_leds_device);
' D5 P1 Y; ~ R [7 W$ ] if (ret)
8 E% A9 A6 J; j/ h' F pr_warning("Could not register som GPIO expander LEDS");6 i* K% e' |/ ~ s! a
else
4 q9 R, m) D% U) l+ E B( O7 F( B printk(KERN_INFO "LED register sucessful!\n");' n# W7 q5 n+ Z' H. n
' w( { \# l7 b* w9 S return ret;
" C. i. t- d/ T- O}, F7 c5 O* h" j4 V4 j, F. e* o
, u- i8 g% m6 g. }% S; _8 E) b, u
static void __exit led_platform_exit(void) G( J# }8 } a/ F- y" g
{8 P0 y4 d- P. V
platform_device_unregister(&da850_evm_tl_leds_device);& [- i% I/ Y: c' P) z# {" G
! i, J" \# U) m( B printk(KERN_INFO "LED unregister!\n");8 ^, I8 v5 \0 F# t" O3 a* O
}
7 J9 h" T1 O+ r6 Y' W+ e" I% F$ {/ c# L: J
module_init(led_platform_init);/ a$ P% k& v9 V6 F
module_exit(led_platform_exit);
" \+ C" I$ @- }% r: U( v3 g
% K) B8 J7 E7 L# w v- M. P2 aMODULE_DESCRIPTION("Led platform driver");0 e5 P& E) e: n2 T4 p0 }+ B
MODULE_AUTHOR("Tronlong");5 h- b% c, f0 L( S7 _( h
MODULE_LICENSE("GPL");
1 c- u% f% ^ c/ g) L+ e; @- R, W0 }6 `3 t* o
|
|