|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ \+ F$ u& H0 b#include <linux/init.h>
9 u# R; q, x/ U1 L" W#include <linux/module.h>
5 O8 `, C; f/ y& l#include <linux/kernel.h>4 T" u5 w$ H& y; J
#include <linux/types.h>
) V0 V7 P$ }2 S3 `#include <linux/gpio.h>- [" T9 y' @$ p# l
#include <linux/leds.h>7 @- h- {% p8 m
#include <linux/platform_device.h>7 t# R/ M$ s2 `/ G! @( X
/ Q! E5 G# s! K1 R$ ]#include <asm/mach-types.h>
+ F1 B [+ F" U6 p#include <asm/mach/arch.h>+ a/ g- g1 G% l6 R* Y: m- f
#include <mach/da8xx.h> H2 S! v8 d& I! G a
#include <mach/mux.h>
! R# Y* j% b8 V
" O, H5 g: C9 R! O0 g' P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' q, d& p& j" g, k- |1 D1 e#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 V* D* I3 M# \7 z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' I* Z! X! a* {4 R+ H#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ N [" o% p7 P, y7 t# F& J" l6 S" w; Y1 F. x, m2 a
/* assign the tl som board LED-GPIOs*/
) \8 l# [& ?2 a5 x9 m% o) t; Nstatic const short da850_evm_tl_user_led_pins[] = {9 R( q U) {" c d
/* These pins are definition at <mach/mux.h> file */( Z1 \) ]0 q3 n. L& t8 a$ R( i3 U# C9 u3 q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' @; g* t% u/ s' E -1
1 f/ x) w9 y. f6 ]};' K$ n9 I3 \& z9 N3 m; o* N4 ]
0 s+ q7 f8 Z% C! r3 f, z' H: j8 t
static struct gpio_led da850_evm_tl_leds[] = {
6 @5 m' @% C2 J8 Y- a: `* z {6 |, L Y& v0 y9 F1 D p q: U( y
.active_low = 0,
1 `" K# Y; u+ }2 S .gpio = DA850_USER_LED0,' \8 z; j" `' B
.name = "user_led0",
" ?9 T4 \% A+ B' f6 |0 J# D# d0 { .default_trigger = "default-on",+ \& e. p! q3 R. S( t) P6 }
},' f+ h4 N. m1 t4 w
{4 U, }- q2 X- X0 }! X
.active_low = 0, ^% V5 f$ `7 s5 N+ E# h3 x; D
.gpio = DA850_USER_LED1,
* l0 N- G8 K' r! v: @% t, P .name = "user_led1",
8 R& ?, S# y( F6 _% O .default_trigger = "default-on",( G+ l0 O. K' l* h$ |( X9 M! b+ q
},
" {2 n# u$ T! o {
- e6 Y3 t8 s2 ?9 z2 Q, H e6 | .active_low = 0,6 O3 ~. ?) C2 c( x* o$ B; i
.gpio = DA850_USER_LED2,) l- }( N" U8 X+ K/ y! R
.name = "user_led2",; h4 y* h, Y( R
.default_trigger = "default-on",4 n: \) s' H, A X' k* D6 d" h
},
9 D0 P+ l) ^' `+ A" ` {' N& t- ~% T$ e4 X% J* d6 A
.active_low = 0,
. p- V# t2 ], j O .gpio = DA850_USER_LED3,- p7 W5 L. z* g. E. V( [( S. Q
.name = "user_led3",/ ]8 A- w. s" j3 J
.default_trigger = "default-on",0 v$ ~, K& n& }5 Y! Q
},
n) e# r7 ~. O! t7 p: z% g};& F* S# Y% w! v( l, u2 j# p
" w5 [% K7 X2 }) f# K% P: [static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 v4 h/ t$ S7 k# k3 i
.leds = da850_evm_tl_leds,
9 T3 U. J, m9 x2 T) t! f .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" P3 D8 L7 Q6 B# R2 l4 H8 n8 A};7 Z1 X7 S5 q+ X
, \# `# V- |! T# T o# p! j" ~static void led_dev_release(struct device *dev)+ B8 F1 |" q9 T; b
{6 t [/ b2 j0 o# ~: F
};* e/ [, J* K" ?$ U6 i# H
0 K8 Y2 z: I) f6 {/ D* j. tstatic struct platform_device da850_evm_tl_leds_device = {# ?+ a7 ~) _( P/ N! d3 g
.name = "leds-gpio",: @ c$ T& K$ I: B
.id = 1,
+ F, `" C0 K, g [% ~# ]' q .dev = {5 K' O- T0 h/ ^- h8 X
.platform_data = &da850_evm_tl_leds_pdata,
, m6 G2 R: F+ F% ~2 o% N% k! | Z .release = led_dev_release,
$ G- A% n+ S3 W( b# t. w" s9 y" j }6 j: K0 m) d" K2 w7 A
};
( W- O5 o4 Y( \
3 [- q' ~: j0 f9 _3 [static int __init led_platform_init(void)
9 M: ^) i) p$ ]$ C) ]( _{ r: L' s9 E( n" F, y; S; \
int ret;
( [" f% v) N! y! \2 u#if 0
: w& q3 D& o) j/ A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 u+ f% h4 `4 J8 J4 b/ ~3 h
if (ret)- t* ]9 V9 z+ C- B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% |/ r% F* |( x8 `5 D1 R0 X
"%d\n", ret);& Z0 ~7 j2 ?9 ^3 N* x8 G' Q
#endif
7 g" t- v! L% b1 w ret = platform_device_register(&da850_evm_tl_leds_device);7 B, R, s9 z; B+ w* h" e5 u
if (ret)
- j; r: ~" Q* q pr_warning("Could not register som GPIO expander LEDS");# |9 t2 v( l: L4 w1 S9 z
else8 }/ _, B3 m% z" u8 y* f5 X
printk(KERN_INFO "LED register sucessful!\n");* Y; {0 q3 d- A/ ^2 @0 ]# m
* _+ s/ L5 l. S6 n return ret;+ [7 B; Y! Q2 `9 O! `' p' t
}9 y; c/ B3 O. @( E
+ W* \$ s6 ^3 V1 [4 k* Q5 L \0 w
static void __exit led_platform_exit(void)# m& p$ a5 j4 L! Y' D+ I' @
{/ K' I3 s$ _) R; ^( z5 M& A
platform_device_unregister(&da850_evm_tl_leds_device);
; `, B1 K J4 x% p! U0 V* | D% P
0 N3 u$ H5 ~- Q* S2 [1 p printk(KERN_INFO "LED unregister!\n");
* C9 z4 c9 `& u1 A}
" e; b9 t! @9 d: b6 s# O* c* S7 ^! ^, j0 K; O- K {
module_init(led_platform_init);
4 |% c# | a0 C4 vmodule_exit(led_platform_exit);
/ @& v) ^5 t. j+ I3 r) s+ j. q3 T) Z, a* Q& H5 {: c
MODULE_DESCRIPTION("Led platform driver");7 f0 l; a' E! s( e
MODULE_AUTHOR("Tronlong");( {9 w( D, W# V
MODULE_LICENSE("GPL");( {9 W0 V$ l5 k! u, L9 E1 l
3 S7 d! Q0 n7 C6 h
|
|