|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ V& `" v1 K! ^0 r" X' T4 @, K
#include <linux/init.h>
1 Q0 E: N$ W, @#include <linux/module.h>
) R; U+ n: r& H5 n$ u#include <linux/kernel.h>* K4 j) V( M9 ?3 t _
#include <linux/types.h>
% A7 R3 E3 h# G* A#include <linux/gpio.h>
G" J* t! e0 Z' j3 R#include <linux/leds.h>
4 F( {, G* i \0 v#include <linux/platform_device.h>
$ i5 [9 b8 E, h7 P: A' ?+ Q+ P5 _# V3 V t. W( K" p( |' J; y' K
#include <asm/mach-types.h>& v( c% s2 l' n9 B$ m
#include <asm/mach/arch.h>
* G9 S2 T) Z* s#include <mach/da8xx.h>
4 n, v, y& Z2 J4 }#include <mach/mux.h>
- ?$ s# V [/ Q5 a# c9 i7 I9 g2 F' U- h5 F8 i
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); z' l9 v1 q0 c( H) `! `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! K: X% h- w8 h8 y# f! e2 J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 t, K- o1 b0 |. r0 q7 D) C
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! G2 g1 w8 i) T l. b
) T* [. a' T1 {7 E/* assign the tl som board LED-GPIOs*/9 T0 |- @% {9 Z6 W+ G4 P5 k, }
static const short da850_evm_tl_user_led_pins[] = {
& P, W0 M2 X5 R O; {7 m2 j /* These pins are definition at <mach/mux.h> file */
8 a: e" f @+ V/ X. G- E8 v( n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% b/ k8 `5 M* d3 d+ Y/ b -1, F6 ?: c5 H6 U) a3 r- h
};3 }7 R2 i. L! b0 P7 }/ q' N
1 X) H; z$ L2 r! O. l7 g4 nstatic struct gpio_led da850_evm_tl_leds[] = {" h" N$ H% J& o: E& e
{1 I4 C# l% F& d5 l* M; R
.active_low = 0,
; a2 t) q4 O: l9 h$ H! q; W .gpio = DA850_USER_LED0,
8 p' Y/ c5 I; C7 O' i3 q" K9 A) h W .name = "user_led0",
. o; i6 h4 J0 c# H8 i p .default_trigger = "default-on",$ G; y' w0 n, k: Q5 g" G+ ]: ?
}," i; M5 p$ B. V* {0 X
{4 d% e. N3 Q9 q |/ h! q
.active_low = 0,
& o2 n& [# w9 C8 k .gpio = DA850_USER_LED1,
3 R; i n ?2 f- z& _/ @ .name = "user_led1",: u$ f& _$ ^2 z: T% k
.default_trigger = "default-on",
, F9 _) y, j2 p1 m$ @/ ] i+ c$ A5 K1 E },+ S$ a) c* i# F' n5 N1 }) v4 P
{
5 U+ A1 [% X/ M .active_low = 0,# D0 o! Q5 Z, S! C8 i
.gpio = DA850_USER_LED2,# x9 V4 M1 v6 n/ E. a9 Q g% A, F' |
.name = "user_led2",
1 O% J' i% D' ? .default_trigger = "default-on",3 c, H2 ?& I! v) F
},
2 G8 x! I+ V+ ~' X) b {8 W8 z. a# Y( z5 F2 \
.active_low = 0,
5 f" D( Z) i+ R1 F8 u) a! X .gpio = DA850_USER_LED3,
- f5 M$ n- S& i) m |! V& | .name = "user_led3",
9 v; G" H g+ h3 a .default_trigger = "default-on",8 q X. d7 u2 X& M
},2 H* @9 W5 u9 S+ S; R) P
};
7 { P, M5 V5 w, {9 v& U5 n/ Z+ z$ B! P6 N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) `% }' t- }- _; X; q5 Q .leds = da850_evm_tl_leds,
, U/ R) ^6 h. n+ n; j3 _* o$ U+ z" t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 H) L P9 c) Z+ D- G};
, z. D2 z4 t/ d9 J D5 O/ X; M6 y6 T2 J! F) a
static void led_dev_release(struct device *dev)
4 z+ V/ _7 i5 K( {; j" ^{
: |) T$ o) ` W7 e" z+ Q};
: E% X/ s2 D5 k, H( Y
/ Z9 p7 t6 p0 F2 O- Cstatic struct platform_device da850_evm_tl_leds_device = {& z4 l, ^7 \5 `7 ^* i
.name = "leds-gpio",
0 ~* e' b4 g: B! l .id = 1,
& F# _% ~( b' X .dev = {5 z' n8 D6 P) Y) Q, g' ?& X, ~* N
.platform_data = &da850_evm_tl_leds_pdata,
6 l9 _) M! g! W6 Z# r1 P .release = led_dev_release,) p0 Z6 R! g" j/ B
}: e1 Y7 f, e3 Q( @+ u a
};8 C1 n* e3 t: D
) [5 ~. `: V7 ]# G6 E
static int __init led_platform_init(void)
8 a+ Z0 g/ t- g0 z9 e{
( S& M3 ]4 a( v# l int ret;
4 k5 C; Q q9 }#if 0, C3 A8 H( v3 B' C2 J. M
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; }3 g8 | ]% E! U/ d8 G4 x) u
if (ret)
( ?; u3 E! e, C9 r/ i Y( |* J0 {0 U- e pr_warning("da850_evm_tl_leds_init : User LED mux failed :" P* @! @$ Z( T+ `
"%d\n", ret);4 ?$ P" [/ P8 u. b2 n
#endif
2 Z# {8 M$ x' |3 E$ a7 x$ `" w/ O c ret = platform_device_register(&da850_evm_tl_leds_device);
+ R( {1 A6 I2 `/ V if (ret)
$ x% W9 h6 \; r4 k' J pr_warning("Could not register som GPIO expander LEDS");; I7 i: y& A7 ]
else
# C5 {' h$ C6 v* s! G# { printk(KERN_INFO "LED register sucessful!\n");
: u6 A+ }0 {. s# M$ {2 @( E A0 z& ]6 s& \& F
return ret;) |: @& b( m# q; N: b$ k4 I; b
}% _5 A d. u p, D( ]- `8 k% R
$ T' V" |" j) E5 J% p' Rstatic void __exit led_platform_exit(void)) y, E: Q# {* Q: b
{
2 B% I# E; J: P' F! d platform_device_unregister(&da850_evm_tl_leds_device);
5 M( M* g' R7 k/ y0 q0 E
* \8 U$ i% V! `: _! n printk(KERN_INFO "LED unregister!\n");
8 I0 O1 d; f# S6 f# n d}8 a0 f, u9 k) [5 y t! [3 n/ ?
- ~/ y; W3 E& m- l/ ], T3 Y% lmodule_init(led_platform_init);
8 R7 x: r- }9 w+ R) W, g& o& e4 wmodule_exit(led_platform_exit);' u6 [8 }- i9 K& ?
) Z( t; W! I+ R
MODULE_DESCRIPTION("Led platform driver");
3 j% z$ H: y" iMODULE_AUTHOR("Tronlong");
0 q/ ~ E U7 GMODULE_LICENSE("GPL");
" v n2 N6 S5 E4 t( e7 \4 V9 {' c# \0 L
|
|