|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 U- M3 a6 b' B4 u2 N#include <linux/init.h>: ]/ o9 ^% j. g" p* P
#include <linux/module.h>( W0 i( f# h3 p7 T7 ?9 I6 b4 c
#include <linux/kernel.h>+ e" w, p6 `0 W! H: h# k/ `' k* g
#include <linux/types.h>" Y, j6 H- Z: n8 O' e# A7 x J; F
#include <linux/gpio.h>
& l5 P9 X2 o$ Z! U#include <linux/leds.h>
; g" i7 l- `1 p. ?/ ^: Q#include <linux/platform_device.h>
# w9 t& e& Z, u' x g4 m( h* J; M+ t* s8 N
#include <asm/mach-types.h>
$ Y! ^5 m: Y0 l; W4 ?& T#include <asm/mach/arch.h>
7 M. m* l+ Q/ c#include <mach/da8xx.h>$ ^( H& [! H/ k
#include <mach/mux.h>
$ Q! H' P3 r$ y/ v
* ?0 U! l3 \) {- F h' o#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. b3 ?$ Y1 J$ `3 K" b- E- ]" I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 ~8 [1 F5 ]$ x
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 b/ u1 w8 n5 w5 [+ C* X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 x4 n. ~% }5 l' U2 a/ \; c' f
- a7 ?! W4 v0 ]. [, u0 s/* assign the tl som board LED-GPIOs*/
0 h% i& w/ R* l z% O' b" pstatic const short da850_evm_tl_user_led_pins[] = {
+ d- U J, [0 I, K6 W' h /* These pins are definition at <mach/mux.h> file */8 h; w5 Z8 e& H5 J* N7 }+ Z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: E! e1 h) {" P. \8 e& | -1
- z: w2 y: ?# k};5 k, _1 e( J3 J& O
4 }% u" ?& q$ w+ v$ S
static struct gpio_led da850_evm_tl_leds[] = {3 V( }4 i# g0 q2 {
{
& K: w% g9 B4 m I" M5 C& |, p; P .active_low = 0,
" _% y' p. l9 R; [ .gpio = DA850_USER_LED0,
v% ]2 U+ U8 d .name = "user_led0",
w* e2 ?& h0 J2 v .default_trigger = "default-on",. x l9 g2 B/ R; N9 r5 }
},7 E5 ]' W( q: n+ y% V4 M, x
{, F! L, `2 _5 o
.active_low = 0,, ^7 B2 y4 s% @; h$ n
.gpio = DA850_USER_LED1,& X* D5 ~- R7 \, D
.name = "user_led1",
2 z1 b1 f+ u0 e( a, f7 d .default_trigger = "default-on",% {& B, }6 c: j. B
},
" B0 U% p: @2 Y& v' O {
) U# G3 t' L, N" P .active_low = 0,! [$ J: _! ~. \0 N1 |+ l
.gpio = DA850_USER_LED2,
8 m5 R. N+ Y; G( n, }8 U5 I .name = "user_led2",. g8 A Y# T3 ?0 ~2 D4 U
.default_trigger = "default-on",9 F( }0 y( q9 G# o9 m2 j/ o. @
},
5 L: B- s6 B( e8 f {+ b7 h9 Q. M; U" K& X; Z a% o/ L
.active_low = 0,& M, L. C/ g3 @' a# J' D$ d
.gpio = DA850_USER_LED3,/ `: X6 @( b! @( a, E$ f9 j
.name = "user_led3",
( Q, P, o& [: W" t .default_trigger = "default-on", L' `, v. S, X5 q7 o7 r% M8 D
},
. q' S0 }" {6 x/ t2 S6 _};
: o* {# ^1 k$ F* {; G: ]& |8 p+ |# z5 f) F9 W$ S" \6 J, K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 ]3 ?) |5 W$ o4 g5 Y
.leds = da850_evm_tl_leds,6 l9 g* c4 U K
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ @# [& M. o" \# V/ ~5 c- o};7 ?* l. l% U" r# ?3 A3 U) |. P
5 r. z' p, s6 q) u6 v3 j
static void led_dev_release(struct device *dev)+ K5 ^) C, m2 K: `" u0 ]
{: A- e* D+ s" S; b+ g/ E4 w
};
: j& U- b0 t( |9 |: z& P! q0 g/ g
static struct platform_device da850_evm_tl_leds_device = {6 c" _& [; K) H2 E+ S D
.name = "leds-gpio",
' A! {1 u% `' m9 h1 X, C .id = 1,1 @- [' O- P w1 Z$ m3 C) e% k* D
.dev = {
' h& t' k+ } {: v9 Q5 _. X .platform_data = &da850_evm_tl_leds_pdata,
& b7 Q' ^' u+ {; i% X5 q .release = led_dev_release,
$ O/ G: H: q5 q# F$ Q: r0 \/ Z }
( B" x9 [1 D3 A7 C7 Y8 ^};
1 V' S) U6 z0 N" M# n; z7 D: \7 d- C/ o w! N% _7 }
static int __init led_platform_init(void)
. M* l) Z- F( Z3 n1 x{
# i7 H- }( I( I0 q7 F6 \, A' ], j int ret;6 `* K5 V6 ^; E, P" a3 o( I
#if 0 e( h8 p q9 t
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( y" _7 \: k8 s `" p' |/ s
if (ret)% U8 k& q1 X- F% i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ a# u( r0 R$ q" W' R
"%d\n", ret);
' b0 x' d8 x5 g+ C5 y& _#endif
' ]2 `; r( C: k9 @4 v; B1 j/ J1 b' v) ~" c ret = platform_device_register(&da850_evm_tl_leds_device);
0 B g) W8 d6 K if (ret)
& @& l2 q% g9 q+ c' A pr_warning("Could not register som GPIO expander LEDS");+ ^$ t$ n3 l ]! A3 |8 `
else2 J- \; m0 b% [4 o1 ]6 K2 f# n
printk(KERN_INFO "LED register sucessful!\n");# U2 C4 G& }& u) A# t0 n2 S
/ R6 e5 K% z% M( U3 e' c return ret;
+ j1 y, |7 d% n6 ?}
. W; y. n& y, @6 f8 x/ ^. T- N. {- @) k9 ^* f' n
static void __exit led_platform_exit(void)
4 V; a+ S7 }$ I S& j4 D: ?{
! @# k# I8 j) R# [3 @; k platform_device_unregister(&da850_evm_tl_leds_device);6 V: B4 P3 @+ ^. |$ X- J
% H N/ P' z2 ~5 a0 z. I
printk(KERN_INFO "LED unregister!\n");
8 z7 M# v) l7 I' a: B1 }}* p% g2 p- M" D l& G. o
( x% Z$ {& T# A8 ~1 ]: u& Z
module_init(led_platform_init);% P1 z8 p: C" o8 R
module_exit(led_platform_exit);
: B& @+ ~5 D c7 v X
1 _7 t$ m6 w$ v' C, T) f6 y" y; tMODULE_DESCRIPTION("Led platform driver");
: l3 L/ \/ U7 b, m& pMODULE_AUTHOR("Tronlong");
% R) y6 }4 e: R/ q+ ^9 |MODULE_LICENSE("GPL");- j3 x- Q4 k. v* |& [
V: P( o: {# K6 [
|
|