|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! S8 b- g8 B/ P' G
#include <linux/init.h>
8 [8 y* H; M6 u( M) S$ q) u#include <linux/module.h>: m, b5 c) Z2 z q: Y
#include <linux/kernel.h>( Y+ R1 t2 p# C
#include <linux/types.h>
$ O2 S: ~6 c. z! C; z# Q' F#include <linux/gpio.h>
. ~4 { b1 n- m* z7 }* `' ^& q#include <linux/leds.h>
3 K, p/ y# v8 Y, Z4 i6 t* p#include <linux/platform_device.h>+ `: s% Y5 N% \; _/ _5 R4 V2 z1 z
i. [7 j- r4 v! b$ S0 X
#include <asm/mach-types.h>
6 S% s6 ]8 {5 B#include <asm/mach/arch.h>, _ x1 f+ ?) O& U# s" k- o! l, S
#include <mach/da8xx.h>
0 n% c' F% i* F2 b0 @; {9 b8 n#include <mach/mux.h>, A* X# r! P8 E; H" ^" J
6 R! Y' A& X9 A. V#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# N% s) p" C. Q3 H! P) Y B$ F4 d& L#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ z5 A: N8 _# K5 V) n1 W
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 l7 B( i1 o; C9 ^$ c" D4 l, Z- U#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" X3 e/ S3 L6 s* [
2 D( L3 o6 s& d) N6 V& z/ a
/* assign the tl som board LED-GPIOs*/
2 U2 Z! p2 R+ i/ g7 Ostatic const short da850_evm_tl_user_led_pins[] = {4 y9 w6 X; x5 f; W! o: P9 D
/* These pins are definition at <mach/mux.h> file */' u4 l' l( _7 d- v( g
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 r" X& X/ }9 z
-1- e. t' ^9 L2 w. O
};
+ _" b6 X3 q8 z0 u+ s! z% ]' p9 w
9 M- y& G- j7 r9 p1 Vstatic struct gpio_led da850_evm_tl_leds[] = {
8 P; z# G1 f& x( M7 I2 V2 Y" D" I {0 A! U6 u0 a( _; ~
.active_low = 0,5 B0 `' j0 d$ C, _& \7 z
.gpio = DA850_USER_LED0,+ d$ A* }" n2 P' X& E! C# T( L, s/ V
.name = "user_led0",- a6 Q; u" n* }0 n: c8 {4 J
.default_trigger = "default-on",
8 M i1 u( Z" f6 w3 F! d0 k* Y },1 e7 L. ^; D3 H1 o( z9 P% L
{4 m1 e/ a' d' E5 C
.active_low = 0,
4 \" c; o# k* M8 |9 e .gpio = DA850_USER_LED1,
) f B3 [0 c7 c2 W7 P+ { .name = "user_led1",
5 M: v/ f# i9 X% a2 h% ^: D .default_trigger = "default-on",
" m5 e) [8 ^8 g0 D8 X* e6 ~ },
. Y4 X# d. ^$ x( |: t; L) m- ~ {1 \: l2 u% E6 ?3 |7 ~
.active_low = 0,
* w& m. G) \+ k0 H) h .gpio = DA850_USER_LED2,
; U4 n. W2 s+ H& \; {: g3 A .name = "user_led2",
: F" {: v: \( P9 z1 E% ] .default_trigger = "default-on",
. X/ O, H% W! q- X },9 h: U( U9 A; Z3 N; H! {" I) F0 ^
{
7 M' P3 t( h$ B! z, D7 P5 V# @! p0 d .active_low = 0,9 E$ A9 A: r6 L5 r" l
.gpio = DA850_USER_LED3,
- b" ^+ A% Q- j4 z. x9 |: e .name = "user_led3", s1 m- j" K& R
.default_trigger = "default-on"," I. w% C4 z- v6 W( }
},/ v5 v6 a& ]- o# j2 q4 e
};
. W5 _: f& _% ^1 ]6 g
4 w2 E! f+ w4 xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 x: {4 y0 U% n% C# K* t2 l .leds = da850_evm_tl_leds,9 k/ p7 A$ M8 A0 d
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' f6 k3 }" \( |) H3 h* B4 y};
% E" b, K4 V2 Z6 t- w: l n+ U$ F I' N/ R
static void led_dev_release(struct device *dev)
( ]+ S |: u/ P* n! N{4 |6 g* x& U3 Y3 M8 y9 b) r
};
% C6 X. W+ U7 j+ F( I
" [: g' u/ _. O$ ?, Rstatic struct platform_device da850_evm_tl_leds_device = {0 g- M0 u0 S6 s: R& ~
.name = "leds-gpio",7 V2 q/ r& \. O6 M
.id = 1,0 X: m8 l. h$ D
.dev = {
3 s8 \9 A$ g H+ L; u$ { .platform_data = &da850_evm_tl_leds_pdata,
; L8 ?* m4 P9 R$ Q$ a" ^ .release = led_dev_release,
/ H W3 g4 o' _% S6 r* |: r7 \ }
% K) n. u- ^' \};/ b) Y G7 h: t$ b _
' ?1 C) a# }( H9 u; N' }static int __init led_platform_init(void): U( L0 T9 m' k
{
+ E i: Q |4 e0 Q; |. f5 x int ret;
+ a3 d4 p6 O. r, k! W) B- `#if 0# D# B: g. K8 p6 q- A( ^3 f
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* W7 k2 ]( p) @ if (ret)2 k1 D8 ]; }3 ^* Q0 D
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( P2 {0 @3 f; Z "%d\n", ret);& X: D9 x$ z. X0 { j
#endif( j, q6 \0 ?# U- v# z
ret = platform_device_register(&da850_evm_tl_leds_device);4 {$ @6 @; `% o: J" u/ T. ?# n
if (ret)
$ I" U: s+ T% j, q: v+ {8 U; e X pr_warning("Could not register som GPIO expander LEDS");6 f2 d, V: O4 q7 O$ B# m& R
else K3 l2 p# b d" c; i
printk(KERN_INFO "LED register sucessful!\n");5 ]( b1 U w( G$ J+ D
' k; J9 H5 y i' a3 j
return ret;$ V, S) p& A, `# p4 x8 r5 \+ m" B: f
} d; y1 j3 f% C& [* u& U/ Q5 V
/ n g" C2 j% g% a- l# n
static void __exit led_platform_exit(void)' |: o# @) E4 k* l# h
{0 t( `- F/ g$ y6 ?, _2 F
platform_device_unregister(&da850_evm_tl_leds_device);/ o4 F: [+ |. K \: M8 R
8 y1 h- N8 C V
printk(KERN_INFO "LED unregister!\n");* D( {+ Z& e. ?6 z3 N* H
}
! c7 p/ h0 V7 t [, s5 a& x1 d, ^2 _$ m6 K8 v) N
module_init(led_platform_init);. L( Y" w {$ l& W' X
module_exit(led_platform_exit);
" x. K9 W( X5 y/ G$ R7 r& A2 v: M7 h
MODULE_DESCRIPTION("Led platform driver");
1 ^- O# A& F# s% LMODULE_AUTHOR("Tronlong");
# d/ X4 Q8 \! R% l+ qMODULE_LICENSE("GPL");/ D: l* X! ?) i. a
% }$ D' H/ O; e: e8 I) B |
|