|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% {0 B6 X+ g) [' U6 O# @ L#include <linux/init.h> A4 G% y7 g/ [ S8 k
#include <linux/module.h>
- W5 [: f8 U) u6 l9 J/ ]#include <linux/kernel.h>
! o s( s2 O9 U2 e+ T# B#include <linux/types.h>8 g& U! }/ u7 }; h, @. X
#include <linux/gpio.h>
" {% R/ L5 m. U/ }1 J+ M! o( A& b#include <linux/leds.h> ?9 _) g+ D" J C. A
#include <linux/platform_device.h>$ q% L7 ?* w1 z
7 f1 B) }1 _: F* \+ D
#include <asm/mach-types.h>. F# U3 @9 X: o1 g
#include <asm/mach/arch.h>' K5 G) ~" \& e+ f0 N' v$ Q! @8 X
#include <mach/da8xx.h>
- ?4 R0 t+ i& q% k) `0 y4 @4 l#include <mach/mux.h>3 V u( Y. F9 h* ^! M9 ]( M$ ?, o
2 u+ z- V8 x& ~: ?, p1 R; b#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) x8 B- e0 V0 x8 ]#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' M1 [5 S6 p K6 h4 t& Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- B8 ^' {+ n& L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& Z6 ^* S, F9 ?' C2 |& @8 w9 F( r$ a7 z5 D
/* assign the tl som board LED-GPIOs*/
" h( e$ ]8 s2 B" A. a/ B+ y& h9 |: sstatic const short da850_evm_tl_user_led_pins[] = {8 t+ q% F& r% M7 W7 v. F$ [
/* These pins are definition at <mach/mux.h> file */
6 w# h7 z+ C8 o+ F& K& q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- t2 Z: l* A z' L
-17 Z, ]2 E0 R" \9 B& D
};
3 U& a. i: v! I `/ A
0 z. \4 H/ Q% astatic struct gpio_led da850_evm_tl_leds[] = {8 B: @* P. o8 h
{3 E0 }, a5 d1 \- j* O
.active_low = 0,1 j3 l: `# _4 e( B; W# `7 t
.gpio = DA850_USER_LED0,
1 d* u. x4 i1 g7 u .name = "user_led0",
& I6 x3 v- Q; E5 \# z .default_trigger = "default-on",1 U3 `4 s/ s- v' e3 y
},
" l8 b% \# {1 c2 t$ l% Q {
6 a8 _7 n& V) I+ n' p .active_low = 0,
) J+ p) F O u .gpio = DA850_USER_LED1,
' H% V9 k$ \( O, B( N: g .name = "user_led1",1 H3 @9 W8 V# `3 R5 I
.default_trigger = "default-on",& W0 u8 U2 N+ I
},/ ~% `* g) `$ d5 t# j+ K
{
8 v/ I+ u9 T- E) @( ? .active_low = 0,
7 p* S( _4 n% z, S .gpio = DA850_USER_LED2,
K! x% }: `% r+ W! e& M2 ^+ _, }3 [ .name = "user_led2",
- t( y6 m3 N) g .default_trigger = "default-on",* s1 R. ^. J+ A, C6 t
},' r Q' d& h1 R; r" t8 g
{- W# C; W* u9 K! G/ [4 m( @( s" |
.active_low = 0,) [& s! o: [/ R; D: u# `
.gpio = DA850_USER_LED3,2 b5 @5 i+ n1 f" [. }
.name = "user_led3",
) @4 C- q9 X! @( H' [5 w/ i) @7 M- C# [ .default_trigger = "default-on",
6 k; P" B& V3 J G3 O1 r7 n9 B$ s },3 h# C L' [$ W; k) B5 U# @
};
0 D7 Q) z3 ?6 m( u5 i& m% \
# p$ r8 k. I2 z# z4 a0 ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( ~( k5 V9 ^, L1 n$ H/ g4 z) W" }1 J
.leds = da850_evm_tl_leds,
G, v2 B e1 P0 q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, ~) U, @% y1 Z0 ~9 y% ~- K1 d
};( c' w# X' d/ M. B4 {) }
* V n$ D, F: z. A6 Y5 X3 qstatic void led_dev_release(struct device *dev)# b' Y6 F" w7 @/ ]2 n0 N$ D
{
: e4 R3 p" W* E};
6 y$ ^9 ]' S. E" S; p! r0 H) ]% z. N3 g" ^' W3 Y/ v/ x/ e
static struct platform_device da850_evm_tl_leds_device = {
" V3 r1 `9 j" Z L1 G' z! y9 \" c .name = "leds-gpio",0 ]$ x* U& t; [; P i, }
.id = 1,
! f( Q5 r8 ^) @: r .dev = {
4 s; J& J( @7 \/ c: q+ ~ .platform_data = &da850_evm_tl_leds_pdata,
2 R( x6 N2 E/ T$ ] .release = led_dev_release,/ s$ D5 o: x9 g6 n
}5 F* i2 ^9 q1 }0 W+ M
};/ F6 @; g1 Z9 Z! P: @$ `- W" |6 p
+ P8 Y7 Q. b( L2 v, i; C' ~6 Kstatic int __init led_platform_init(void)
0 N& m& `! u# o2 z7 _. X0 C{ k2 q3 [2 C* K# j1 c: D6 j
int ret;$ E* |* _* ^6 H& f
#if 0
' z- o a1 y+ }2 A; t" j' `9 b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. W5 I! d' N" }* ^1 r if (ret)* [ M0 R- z8 o E( |
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ G0 M. B8 X$ F9 d6 O
"%d\n", ret); E, v, F: |. P" ~6 T5 L
#endif
' n7 b3 \3 Q7 F% y1 d b6 v ret = platform_device_register(&da850_evm_tl_leds_device);0 m0 \7 T" a# P% A( n" p# K
if (ret)
$ l/ Q" ^# n: p4 i) A( B pr_warning("Could not register som GPIO expander LEDS");
1 c! U9 Y d8 o" G+ _" r" c0 ^6 Q else
5 M) F* G: O$ m3 d printk(KERN_INFO "LED register sucessful!\n");
& A& Y5 @- m) C, S) X2 _& T
/ M& B! \3 \& R return ret;
- T, L8 b8 |! r2 ~4 J, L( f}
6 L# o( A# W) e( \( W
+ g7 r2 |* q- C4 fstatic void __exit led_platform_exit(void), o' s) K6 `9 C+ O) K; C
{1 l/ z4 k5 ?( ?3 X( q6 Q( y$ m
platform_device_unregister(&da850_evm_tl_leds_device); N' U8 R j x) u% X) S
6 f; B+ @3 @% h+ x3 M. s- T) _( |; b
printk(KERN_INFO "LED unregister!\n");' n9 q( X0 a: c( ^% e3 E
}
, G9 K$ D) E+ A) \: D, K
$ e* {1 P, R/ Z% @% q$ A- `( I. ]( cmodule_init(led_platform_init);
1 p; h4 s4 m/ u' G, g& k1 q' imodule_exit(led_platform_exit);- L6 W- l. H9 ]. s
+ C7 q0 [+ A/ A; A8 {7 f! A6 u- \
MODULE_DESCRIPTION("Led platform driver");
a H9 R. p' ~- ]MODULE_AUTHOR("Tronlong");( y8 E6 p/ C1 q# E3 q3 L9 A
MODULE_LICENSE("GPL");
9 o$ u- H6 `3 F& ~7 D3 ]7 K& ?5 H* \
|
|