|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% I" E1 J! `) Y, M
#include <linux/init.h>2 w$ L" f' k) y+ H& ?
#include <linux/module.h>
: V; A" M) t" l5 d/ a3 p4 i#include <linux/kernel.h>) u P. A- M+ x
#include <linux/types.h>
* I P2 H2 N- T/ t#include <linux/gpio.h>) n% d& m; ^1 d C1 V
#include <linux/leds.h>5 m% c3 I8 G4 d. ?. p
#include <linux/platform_device.h>: b- e% X" Y7 C+ [3 h* v% n
6 F: g3 n0 w3 v) E& _0 t# S
#include <asm/mach-types.h>
) X( M6 P2 v _+ L% d#include <asm/mach/arch.h>2 I& R/ _ k. i) k
#include <mach/da8xx.h>
3 {" P; |7 g, i; ]* A( Z#include <mach/mux.h>
# f2 t% N" G* n6 S7 L
2 h w! |! W" o6 q0 x, ~" Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ v& ^% U3 Y( e& ^. y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 E+ z7 n' |+ r) b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 w' Z, i8 `9 E S- p9 @& @8 t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 M: X7 ]: D0 N
. L+ _' v- N) L, ]! o* V/* assign the tl som board LED-GPIOs*/
3 O; z: y# B1 J- x, Astatic const short da850_evm_tl_user_led_pins[] = {
/ i( B/ C8 Y* U6 o. G# ?1 S /* These pins are definition at <mach/mux.h> file */
6 {4 v# `, r* k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( g- k8 s1 a; a. S8 x5 Z* _
-1
% R- R* q) _4 }* |3 x0 q9 a7 z; T};5 y. M& @) S/ J; ?; x% g
m6 R) y/ W' E4 G
static struct gpio_led da850_evm_tl_leds[] = {
+ A& x6 S1 J+ w: {5 ~$ B" f7 n {
6 Y* s* T/ e! O: x; u$ [# a& h3 t .active_low = 0,
( @+ z! d1 o/ z! K x+ D" }9 N* E .gpio = DA850_USER_LED0,
3 r- V$ W% \$ |$ h' A .name = "user_led0",( E4 A' Y7 {- G! R
.default_trigger = "default-on",) n1 G# H5 A5 Z& A
},7 Z7 A, \2 @: U1 K' q
{
, f6 m& e6 y; H1 O0 H ~( z .active_low = 0,5 _& d: _" c6 Y! ?9 m/ d0 x
.gpio = DA850_USER_LED1,
) k2 G+ Z$ J9 g .name = "user_led1",2 R. z$ `' u% Q4 s' T& z' l- g( z6 k
.default_trigger = "default-on",* l" U% l- l- R0 ~! F, N/ Q
},- ^( j& c8 p- l7 s- d8 @% K
{
" u L% ]# p! k) Q3 T .active_low = 0,/ V7 R2 T1 {8 f
.gpio = DA850_USER_LED2,
* z8 u8 N& w. q' Z& u .name = "user_led2",
6 ~ q1 c* ]' Q1 ?/ M .default_trigger = "default-on",! L" m' U9 L3 f# k) `/ g8 I
},/ o- w6 Y1 y a/ Y! @- ?
{
* \" z1 C5 S. g7 O; `2 U2 G$ w) T .active_low = 0,
) i" G/ w5 P+ o7 _' l' c' M4 ] .gpio = DA850_USER_LED3,
# |; O1 I$ S A- ^ .name = "user_led3",
: w6 ~( ]8 X% D8 f .default_trigger = "default-on",! z3 m9 Y0 T/ D1 r8 [
},
& U5 c2 }# M9 G) A; n};/ g7 ?# u/ G y8 z0 j1 L: u6 Y
; i) G8 e/ }, C3 W# j' h. tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 |3 p" W- _! [/ A .leds = da850_evm_tl_leds,& r% f& u# G) \+ k2 T v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 ~ M' r& J6 `5 s1 _. ~" H; J6 X};
. X" q( P2 n# E6 l7 N/ e# r$ }( x3 e% e5 v1 A! @8 \( j
static void led_dev_release(struct device *dev)+ ?4 \, S5 w: x5 o- u _! _: J; r
{& v& a) S, n( p' u$ o. W4 h2 d
};% z, b2 c( a( T( L2 D9 F+ u' {
6 g, v8 |- L* _# c$ ~+ Hstatic struct platform_device da850_evm_tl_leds_device = {! }- g2 |. Z% S7 z9 ^7 p6 ?) ~
.name = "leds-gpio",4 c9 B/ J1 F% [6 e+ f
.id = 1,) e% S6 ^# `" o
.dev = {) C1 A* R1 v0 r$ r3 V9 R- G
.platform_data = &da850_evm_tl_leds_pdata,; n6 \* F* }% F; X0 |
.release = led_dev_release,
# l! a- Q; ?6 X1 G' \ }1 A7 P/ B( Y7 G, \+ B o% G% ~
};! }6 m% b( d5 H2 K q7 j
0 }8 p/ Q- ]4 X4 {
static int __init led_platform_init(void)/ u1 N4 o. f) J' |' G6 r
{; E0 E7 L8 x- l% J7 p) a
int ret;
$ B4 _- p/ C; t$ Q A Z#if 02 J- l% ?" M% `/ V$ S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); X% H; j& Y3 D
if (ret)
6 d- u. B! t: j" O* a3 @# F8 { pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 K8 U% x0 T' a( U "%d\n", ret);, m& G" y/ j; K& t( U5 E. x" N
#endif
% u. v: ~" T) m& j! t- b ret = platform_device_register(&da850_evm_tl_leds_device);: q9 _2 b/ R* _2 d* s
if (ret)$ `& x% F# d$ U6 V) i
pr_warning("Could not register som GPIO expander LEDS");. t1 r2 f4 b" U- K, w7 m, j
else
0 d4 n5 c k" h3 G printk(KERN_INFO "LED register sucessful!\n");
, m& u. q% A, G" I" U. h) x# e" h
. {0 w& I/ Q' N+ f' L. P/ E return ret;) p0 c; T2 V, @% K0 [8 c1 [2 W
}% O6 M( [+ ]: ~' c
' F* U0 Y0 ]; r/ R( u3 y3 p& x- h
static void __exit led_platform_exit(void)
- N2 g7 N8 a1 Y; V/ _* t$ Q: I{4 X+ H% T1 V$ Q1 k
platform_device_unregister(&da850_evm_tl_leds_device);
% v. M8 o7 n8 V. j1 E9 V; M0 Y5 L; i& a; o
printk(KERN_INFO "LED unregister!\n");
" K' ?% V( D% s+ s& @6 r}
: E/ _- N9 ?# `! k- f6 P$ T4 ~5 _5 _* F6 |# u! x& P
module_init(led_platform_init);
p1 W2 P9 N# K: B9 _% _module_exit(led_platform_exit);6 m- o$ o. d: M- ]2 x
G/ l$ \$ T; x# J* g C+ w% k9 v9 A0 k- C ~
MODULE_DESCRIPTION("Led platform driver");! C# o2 l( u7 C5 L2 F7 T
MODULE_AUTHOR("Tronlong");
) Z1 R" j" I8 K5 M6 R, _) R+ sMODULE_LICENSE("GPL");) m3 \. a0 |$ {( c
0 E- A1 {& N0 d/ M
|
|