|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ u% f; ]9 F" v5 a2 N4 u6 v# b
#include <linux/init.h>; F) _8 p, q% b; ?
#include <linux/module.h>5 d+ D5 v/ i6 v9 i2 A7 t4 Y) K* f
#include <linux/kernel.h>
8 Q& [& `- d2 J9 ^0 T+ K% J$ K#include <linux/types.h>/ h" Z8 w. N5 e
#include <linux/gpio.h>
2 f$ b' Z' y5 ~, i+ F#include <linux/leds.h>$ J7 z3 j' d7 @& W9 E" Q# Y' [! ]
#include <linux/platform_device.h>3 S f$ O5 Y2 Z' v( ^' y6 m# n; \
6 e( q4 j8 Z" Q4 D+ f0 }5 T
#include <asm/mach-types.h>
6 r" j8 k& A# X# J#include <asm/mach/arch.h>3 l5 x# G% M! l
#include <mach/da8xx.h>
' P; F+ J; S! E% Y& E, X#include <mach/mux.h>
# L) I! [3 y, o$ t) f
8 w9 E3 A' y# ?# I% x#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 E: N& E9 x! j) D- j
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. L* E0 _; d' T% h#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( O) ?8 j1 d2 w9 t/ o r+ I3 e#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 S, g' A8 t5 P+ ?3 D! G s$ c
8 B7 C2 @* Q" F7 X- V1 v/* assign the tl som board LED-GPIOs*/" \2 q, r1 x( H# j, A
static const short da850_evm_tl_user_led_pins[] = {- j3 N ]4 k. T, t
/* These pins are definition at <mach/mux.h> file */7 Y" K7 w) @ Q3 {, R# ~' |
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. v% s6 {4 ?" z1 k
-1
F$ h: V* \9 y7 T( c: h1 W};
; L: {$ P+ z4 S
0 N& T7 u# `; Z$ Bstatic struct gpio_led da850_evm_tl_leds[] = {5 {! U5 V$ q$ @) U: G9 i8 Q
{$ G8 V/ ]' h# |+ N
.active_low = 0,3 x, @9 Y' z Y$ z. K
.gpio = DA850_USER_LED0,- |; ^- A8 R' g* j' ~* S
.name = "user_led0",! B Q' ]+ m z; L& D0 s- Y" W% o3 S
.default_trigger = "default-on",8 u7 G' f& V: w: V
},
5 {$ _0 n( }% i! ~ {) W/ F9 U- Z( Z8 x% V* s$ E
.active_low = 0,
' q% k0 u8 K x. P c0 i" U6 t .gpio = DA850_USER_LED1,5 E9 V, m3 z, R. R8 i) {. j# g" @) T
.name = "user_led1",
# A# n* _6 e' o# ? .default_trigger = "default-on",
. p* j; {1 ~% @) q },+ J4 R$ u; p# J/ ?
{. F$ f2 r+ F$ {, ^, E" u6 U2 z& t; E
.active_low = 0,
$ f0 O- M7 M) ] .gpio = DA850_USER_LED2,% Q' J( B$ ~1 Q2 i; J# g* @
.name = "user_led2",* P- n; a% Z% r6 l/ Y
.default_trigger = "default-on",& x2 H, R" p6 U
},
5 h7 F0 u# ` y' m {0 {& A( b4 j/ L
.active_low = 0,
5 z' T0 M( C3 H' E3 l1 A: Y( G" | .gpio = DA850_USER_LED3,
3 C8 V+ O7 A- Y5 p .name = "user_led3",
" N+ ^0 @$ r2 P .default_trigger = "default-on",
' K' G$ E: D+ M9 k, D9 X },
$ {/ }9 k2 Z \" n5 Y};
; B. q s' L2 a$ K$ P+ d! T( G% T3 V
' v, n1 ]. V1 n; W7 @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
}0 a6 w% ?4 d' w .leds = da850_evm_tl_leds,; Q' Y. M0 l/ ?! i; D( N
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 p, x5 T: ]1 g( a4 m
};
" ]/ J" ?; [3 \0 ?2 v" e3 M1 T
6 p; Q0 F) `+ j* Nstatic void led_dev_release(struct device *dev)! v* R/ Q! ~; L4 t7 u. t
{- { p$ j7 H5 `& I2 T! E
};
- _$ \8 c; G; v5 P. W/ g* Y9 F' F0 ~, K
static struct platform_device da850_evm_tl_leds_device = {
9 z, Q+ @$ F1 n# W .name = "leds-gpio",8 k5 d' Z# S9 G& S
.id = 1,9 h. W$ z' w, t1 x
.dev = {
+ m R+ l" l! [: L. Y! @9 ~3 O .platform_data = &da850_evm_tl_leds_pdata,
2 v! f0 r! _ J .release = led_dev_release,& `. C0 [! a% @9 }- J3 ^
}% F7 p+ [1 V2 w" Z; q: q$ S' j
};. ~6 l$ B- e" m6 k, w3 ~, X9 L
3 Q* r! B" H. m. a3 \8 \
static int __init led_platform_init(void)# \: B9 k) n4 h& q" C+ C) X
{: A. g `7 m) C$ b+ K) U' r
int ret;( R m9 V( S9 g! v: ]
#if 0
$ [/ H! w' Z6 b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, D; Q+ }. u0 V+ o
if (ret)
: p7 | j5 T3 `& ^$ x$ t5 E pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 W" g' Z& M1 E
"%d\n", ret);
, k6 n% ?/ Q4 t6 L#endif9 G7 {0 E. E* S3 m. X) T
ret = platform_device_register(&da850_evm_tl_leds_device);0 X6 ^( l: p1 A3 c
if (ret)* _8 Q" l! U- {% N: i% S3 \: p
pr_warning("Could not register som GPIO expander LEDS");6 x4 J: M' E0 E& g0 j0 e
else
2 g7 i" f' A2 w: g& Z printk(KERN_INFO "LED register sucessful!\n");# N: h. _ X' C5 u# R$ f# S
( ?- P7 ^" h' X
return ret;4 X3 v8 r' _7 L$ x3 A
}
0 @. C. Q: x$ T+ l/ {
`% F/ a) z8 U+ \static void __exit led_platform_exit(void)6 N; }7 X- C: Y3 N$ N1 x; K
{9 n9 A4 l$ S$ H+ Z Q5 Q
platform_device_unregister(&da850_evm_tl_leds_device);5 _7 N6 q& F4 a2 \
* m) k' K! w1 g" X1 R printk(KERN_INFO "LED unregister!\n");
/ [& Q) `2 e( m( r}5 c0 r% ^- `3 U' U$ {# r
1 g. h$ V: T: ?& r3 H
module_init(led_platform_init);
0 S! N9 v2 U6 O$ Tmodule_exit(led_platform_exit);
# }7 R; h- S) n) s$ l
9 b3 e6 b; P9 R( I7 Y+ t* }, @) oMODULE_DESCRIPTION("Led platform driver");- s3 M$ N3 F% @! O* ~) a4 l2 T8 ?
MODULE_AUTHOR("Tronlong");; q" l- [" L; a
MODULE_LICENSE("GPL");3 l3 ^! \+ [# B8 g
" r6 ?8 j$ Y7 J' x! K* F |
|