|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 w; _* ?; B" ]* p#include <linux/init.h>
4 }1 Y- w! s9 u' E) r; e#include <linux/module.h>5 w/ }5 I' u7 z# q: O
#include <linux/kernel.h>
. o! C" `. ]& }! Q#include <linux/types.h>" B+ Z$ p2 C% }0 }, Z4 l& A- S$ h2 x$ h# Q
#include <linux/gpio.h>5 L: f# \, S0 ^% e/ w. _' L
#include <linux/leds.h>
0 C1 N) n# j# f3 r3 d#include <linux/platform_device.h> h4 |7 |4 j% I
. @ H0 m L U) q! ~
#include <asm/mach-types.h>9 W4 f" G% m" O. ?3 C
#include <asm/mach/arch.h>
) C/ \, R0 f' ?2 v1 k+ @#include <mach/da8xx.h>
( H: j$ W0 y0 }. ^#include <mach/mux.h>
2 z! t; S7 o& [ Y1 w8 ?) d$ N- Q0 S" f0 z# K6 k7 y+ N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' Y6 `% f+ R$ x+ F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* ~( {5 X! Q* E! p& q$ y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 J" ?- ]1 h6 Z8 ^! m9 v* r
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" d5 V2 ^/ ?; B- W) @0 N# g6 a) O
3 _. B4 S" k0 z2 C9 Q( v2 U( d/* assign the tl som board LED-GPIOs*/, @9 o C3 S; e* P# }
static const short da850_evm_tl_user_led_pins[] = {
* J1 ]$ c/ D' W- {4 Y( v /* These pins are definition at <mach/mux.h> file */' J+ u( U" a+ J( y) O% `
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 |2 x" \- E: m
-1
. E0 G, j% w& W3 r" c};
3 [) \- P& i4 {+ t$ s0 g0 L- e% T7 }$ k
static struct gpio_led da850_evm_tl_leds[] = {
0 m3 W" v* G: X: ]! L. A {8 p! i3 G5 P- f: V2 M! m
.active_low = 0,% k. L4 u4 O4 o! q
.gpio = DA850_USER_LED0,
; V$ u5 ?3 b3 s9 S' a .name = "user_led0",
. k8 N/ E, q7 X3 v2 Y .default_trigger = "default-on",8 I6 [7 P0 O% l5 k9 Q
},
5 _, T8 _& I' U* D; \. [/ B; A1 i9 h {
9 o( X7 K g) b5 d1 q7 A .active_low = 0,2 ]: g; u- P5 N0 ^$ }2 c5 {$ T
.gpio = DA850_USER_LED1,
" n) b2 y# f0 H6 ` .name = "user_led1",9 f9 p6 l4 O N% o
.default_trigger = "default-on",
1 c9 i5 m' t) T$ p },8 O$ \" A4 E, I/ J% B
{
, ~. k& c( k# \8 D( s2 ] .active_low = 0,, @& |: t7 p. {% E3 H
.gpio = DA850_USER_LED2,- d o* q; k% s7 f2 I# I
.name = "user_led2",6 P+ L' u z( D7 a; h* a/ p9 t" ^) }
.default_trigger = "default-on",! _+ X; |% M- ~+ m* H7 `+ K
}, H' B9 S" {% _1 x# h* |
{
& P( @# r! O9 J8 ?4 j, X .active_low = 0,
0 ~& v h6 O& @, ^2 p- A9 ]' N3 e .gpio = DA850_USER_LED3,
+ M3 k' |' Q; P: y+ |9 C .name = "user_led3",% C7 q+ r- ?3 n9 r3 S, n
.default_trigger = "default-on"," x1 w5 ^, {5 p6 x$ s
},# s, I# X0 a4 M/ @
};
1 n6 N# s3 |, N, R- |6 l. r1 r5 S3 C3 B! p
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 _! Q. L5 V8 R .leds = da850_evm_tl_leds,1 ?3 I5 q4 j, M$ W1 V
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# a$ d, T0 {( H) g! j9 n R' \}; q$ u/ c- @4 s) o& Y' ~) Y
& y7 `$ d6 N7 \/ d6 _ Lstatic void led_dev_release(struct device *dev)
, j1 ?8 v8 w: k$ a; U) s{
; K" }0 G2 X. O};
' Z/ [& h; P0 m3 }. l, u0 [) H* m# j) w& f
static struct platform_device da850_evm_tl_leds_device = { ` [+ j6 o9 ?
.name = "leds-gpio",+ G/ u0 `2 f0 l* C2 J/ P2 E- v
.id = 1,1 i9 V$ e2 v7 h O
.dev = {3 ` o/ S9 N' }$ `. Y6 l
.platform_data = &da850_evm_tl_leds_pdata,
# E5 `" [7 G8 A& E6 j1 ^4 W) v: c/ L .release = led_dev_release,
- y9 Y$ t! S. z" D0 q8 P }
* c) `" D2 j$ t V% e- D* F};
9 {# J3 i/ o$ W/ T! X: I+ @, ^1 _. |" e8 P+ M3 h0 a3 A
static int __init led_platform_init(void)
- @: ?; q+ I7 G c' f8 w{
1 ^, d+ p" l* J9 D W int ret;& L& _. Y9 S# p$ T7 A p
#if 03 |4 O% M' [; c8 O, v, N" T5 `+ }' L
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
L; S5 @' N9 O0 `) S if (ret)
* D; J; g6 @) y( M6 V( w; M pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; \9 j0 n1 b2 A+ ^/ H: c) y "%d\n", ret);
0 r/ q# q$ P |. k0 t( p0 Q: u#endif+ X% u% w7 }, `9 K
ret = platform_device_register(&da850_evm_tl_leds_device);
7 T: @' J/ d p T+ ]5 Q& l0 w5 k if (ret)
% V( o! N! M0 j% W- Z- r, T' s6 c pr_warning("Could not register som GPIO expander LEDS");( Q4 q( {$ o' E" g/ I
else
1 r) @# O5 A$ I printk(KERN_INFO "LED register sucessful!\n");
6 u# o& e; V' n; X1 s! q J- {1 u6 {( S+ m4 p- r
return ret;
/ Z5 Q2 H" w* G0 d}1 X$ o5 c% d% k& u1 G6 E7 e
9 C% N8 L) |: j; Q2 J6 [* b
static void __exit led_platform_exit(void)( `1 n1 \0 w3 ~. l" m0 C* g1 H, B) d
{3 N+ K W9 ?( U5 u' D
platform_device_unregister(&da850_evm_tl_leds_device);
2 H' L' F) F/ t5 p- J- r6 A0 G5 l8 R' |- x6 E u/ O0 ]4 N1 ]
printk(KERN_INFO "LED unregister!\n");' {5 L1 @: c5 [8 b8 }
}
# k: H5 v3 v; H' G1 x& ?/ ?" s: Z8 w8 u+ e
module_init(led_platform_init);
/ I2 I4 V j- j3 `: l% E# L" ~module_exit(led_platform_exit);% b- E" o7 }; F/ K9 h4 @
; L/ z* ?- x$ u: M$ WMODULE_DESCRIPTION("Led platform driver");
& X1 G3 X& ^3 j4 f& r( L: ~6 fMODULE_AUTHOR("Tronlong");
, k, J% m7 [3 \4 I( d/ tMODULE_LICENSE("GPL");
2 u( @! m/ J, Q: z* E0 L
5 U) q$ x' w3 Y" z9 N+ D% T- X |
|