|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& y' U% w( q# x( j3 ~. z+ r6 i1 l
#include <linux/init.h>
1 o' O- X" K6 j, l# k3 P#include <linux/module.h>
_0 N! P" F @- Q! k6 C+ z! O#include <linux/kernel.h>$ a R3 q8 H( V' G4 L* X5 @
#include <linux/types.h>; m5 h' G3 J' \: V& n5 W
#include <linux/gpio.h>
& \. {) ?& p9 w#include <linux/leds.h>& I3 r, s n& X( t
#include <linux/platform_device.h>) Y( S p0 p$ v/ U0 P
. y8 o" M1 W5 ]! }- q#include <asm/mach-types.h>
. C5 m% ^9 p$ S& V0 l1 q+ j#include <asm/mach/arch.h>
6 k" C& Z, U) b#include <mach/da8xx.h>
, H( y5 D2 ?7 x9 Z#include <mach/mux.h>; L& {5 g% B% r# B: D p, F) h" d+ `
* P* y8 n) n0 F4 T0 L% \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) x, \# G, j7 R1 Z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 n7 k Y2 c+ H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; H# Y" b8 M+ u5 T( V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- f- M& E3 G1 B& M- i3 ?! Y6 U6 F" g: d$ r
/* assign the tl som board LED-GPIOs*/ j9 ]4 S4 q/ ?% r) w! z# x6 @
static const short da850_evm_tl_user_led_pins[] = {3 Z- D, |+ \4 D3 b7 I" ^
/* These pins are definition at <mach/mux.h> file */
- V' x! D/ i. a' z1 H DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- p" H/ _ B. Y" \ K
-1! r+ L/ T! L& Y0 p" q
};
& z* C; y; e. b% v' E& B
3 d K) z/ b7 m/ N+ Z+ G. Zstatic struct gpio_led da850_evm_tl_leds[] = {% d6 L, C+ e% G0 v0 ^
{! ^% b/ i$ h s% `+ x
.active_low = 0,
% |& G+ C& `$ H .gpio = DA850_USER_LED0,( F& @: j6 r. I; l
.name = "user_led0",
/ y7 P1 N" {/ V+ E .default_trigger = "default-on",
6 o: t5 b: z. ]2 V6 x' j6 k/ T },' C" W/ o g9 z6 k
{
7 m& G: T Q( n# h+ V2 l .active_low = 0,
8 A9 k- N6 n" G. Z( g .gpio = DA850_USER_LED1,
( R I' o N9 m. c- ~' u9 C+ q; r .name = "user_led1",% ~. B) [( H$ |9 u( b
.default_trigger = "default-on",
! a8 x* m8 P2 f$ S; E; u; q5 e },, y' C% i4 b E V
{# L. K' N- m' z/ }
.active_low = 0,
4 K# d& H7 n9 p. _! \' ]' N" u8 v .gpio = DA850_USER_LED2,, M' ?; d8 y' u/ [. T" j
.name = "user_led2",: o! }; B" S% {- ^4 v- k
.default_trigger = "default-on",
- S. O* m v: ?1 l },
1 n7 I4 e" N2 q" _ }7 E2 D: M {; l: W) P! K! |; ?( @( S
.active_low = 0,6 g( |: B. ?: x |3 p" M+ z
.gpio = DA850_USER_LED3,
( Q+ @6 X3 W7 L# n .name = "user_led3",
' G/ u$ Y) \! v3 e: Y3 N4 q8 I* Y .default_trigger = "default-on",8 C# E$ x6 X6 L
},
" z* Z8 q3 y' Z, D' @' T# A4 X};
0 Z* \# D; x( x z* \( X% k0 p& `3 b M' W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 |' b0 y! m2 B3 J4 |8 Z
.leds = da850_evm_tl_leds,
1 @7 A+ q3 O% Y; q) Y. D .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! } n# G8 |; A* I% m2 O
};2 {+ r: q7 e/ c- x6 k
& H- q2 R, |# u4 C
static void led_dev_release(struct device *dev)
" w0 R0 d6 Q/ s( `, C' K9 D! `3 v{, q3 B0 ]( R4 S3 E( [+ f
};% N1 K) W1 ^* W
u, {: J( ? d" {( ]& X, A
static struct platform_device da850_evm_tl_leds_device = {" _; d1 c( I! f* E9 _) g
.name = "leds-gpio",( ?3 R! D G! S0 s, d& N1 [9 o
.id = 1,
8 k8 C; c9 |' N5 o$ l: R .dev = {
Z# v6 m1 _, v) T .platform_data = &da850_evm_tl_leds_pdata,+ h9 R$ ~( W. P% P7 w8 T" q4 k$ M
.release = led_dev_release,$ z/ n0 ~. q2 \1 s& \
}4 w7 W7 S" Z& Z/ P/ v; d4 c
};
( ]0 I& \: `0 i: Q5 H, P' m$ u1 K) E$ H( H; Q" d( n4 \
static int __init led_platform_init(void)
/ U* H* D4 d2 ^# q! N6 k3 E1 S{$ J7 `9 a- P4 q' b7 J
int ret;2 p: u# H h" ?
#if 0
1 f7 v, O% D; _, E m/ }0 O+ p ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ F3 r( M* N. u1 E# k. q. ~
if (ret)% W( D8 S) e& B0 a: G9 j8 Q) X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ z' O. t5 @* @( B, S) R
"%d\n", ret);
( @1 ?6 m. f: N& b#endif3 d0 q- ]' L: Y9 A4 i
ret = platform_device_register(&da850_evm_tl_leds_device);
9 @$ F; D# g. x0 |* { if (ret)
; i/ |0 O; \# s pr_warning("Could not register som GPIO expander LEDS");; ~! O0 X6 _# V% ~* @ B3 [7 y
else. K4 F5 O7 w7 ?& J& ?# o
printk(KERN_INFO "LED register sucessful!\n"); e- E3 @6 a1 o1 B! I# \6 D
9 G$ B. H* o; C3 @( I0 f
return ret;
& q# t X! y' R- b1 V5 M}
& H0 m7 Q$ T2 P( u/ v7 w+ G7 E
/ Y" D8 \% {9 V/ }+ Istatic void __exit led_platform_exit(void)! C7 w6 \& }# u/ p$ C" X+ S2 n
{" M. ^/ U. M" `1 M
platform_device_unregister(&da850_evm_tl_leds_device);! ~% r& m5 ?3 s6 F) W* E
2 [/ R3 H. U, y
printk(KERN_INFO "LED unregister!\n");
, l9 @0 o* ^" i}7 l1 E+ Z5 b$ g* s1 n1 a* s3 w
5 B% Q) k4 [8 g( {1 i$ V
module_init(led_platform_init);# ~9 v4 \4 x6 I! h2 W6 s$ t" m! C% {2 _
module_exit(led_platform_exit);2 \6 P' ^* l/ l2 P/ s" o/ V/ R
, |- b2 I2 P3 F2 x2 C7 u( Q7 G
MODULE_DESCRIPTION("Led platform driver");( A A# e5 L2 b% e8 \' L
MODULE_AUTHOR("Tronlong");: ~7 j. ?! \& c5 B, f9 \% Y# f
MODULE_LICENSE("GPL");
4 N0 Y/ }9 D! L7 E# J+ {
" v% t) x( N; x# V0 K |
|