|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% m- [* R+ d6 R# }9 D3 b
#include <linux/init.h>. n0 ^, K0 [3 t' e- m8 Z" ]
#include <linux/module.h>
' w3 [3 {/ u6 L/ J#include <linux/kernel.h>
! j/ r6 S a4 O1 G2 ?#include <linux/types.h>2 q# z N2 h- C. I, z& H. A9 n
#include <linux/gpio.h>
. q2 h: f# \, z#include <linux/leds.h>
, Q+ F) ?% y7 w3 [" {; O#include <linux/platform_device.h>6 c" S* }8 x$ E# Y
7 P9 |4 Q! D) t# c
#include <asm/mach-types.h>& N6 P _; o6 Y
#include <asm/mach/arch.h>
& {) Z, u8 }& i0 K#include <mach/da8xx.h>) D8 H( _2 d9 b( j! N3 ~
#include <mach/mux.h>
6 K) K' E, u/ z9 U9 L. {; ~) I, p% b) I6 x2 Y. m1 ^$ i
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- f% i/ \6 B2 d6 X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 P8 c* u" _' ~$ Q6 j#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* L- D( j) L1 V) g+ F& j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: A+ t: y! D9 }% `6 x
7 s( l# q7 Q2 R" O/* assign the tl som board LED-GPIOs*/
7 R1 e+ _- E& w; ostatic const short da850_evm_tl_user_led_pins[] = {
0 y: [' M8 Z z /* These pins are definition at <mach/mux.h> file */- ]' S3 ]$ s6 s8 D% {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 b3 k" u! n% d6 E: t
-1. a2 r) ]! M0 O" D; w# x. n
};7 p# R3 r8 Q# l$ J1 d% B
( T# ~% x% d& l0 E
static struct gpio_led da850_evm_tl_leds[] = {
; _* {' ]6 z. ]" u3 Z& J {
3 l8 u7 W* P; i: U" E .active_low = 0,
9 _' y9 n( X) M3 V' z .gpio = DA850_USER_LED0,
1 x) g3 i5 r v; ^* K$ j" M/ m$ `2 X .name = "user_led0",
) X8 H* n9 Z3 K0 ~, v7 W& \ .default_trigger = "default-on",
9 n+ s* U, ^) `. A },# Z W0 X* k: Y E, ?
{2 y% N1 f W* `. L8 \5 J Z A
.active_low = 0,
( o b# c/ o+ S4 Y) B, V .gpio = DA850_USER_LED1,
# H5 R8 N9 v2 v .name = "user_led1",( r) ~0 f! m/ I6 Y& M4 d5 Y T$ Y
.default_trigger = "default-on",
$ o2 |! B% v5 |- G7 A' h: h },' {! }% }0 d2 x( u2 ~" M
{
& t, z) j& _, T5 ?$ L .active_low = 0,
, K3 c" e& H; J3 [3 [3 N% _ .gpio = DA850_USER_LED2,
" N0 e2 L; {3 @ .name = "user_led2",
! F" G. x: J1 w2 ? .default_trigger = "default-on",
! Q% X6 I" n% a },2 W3 H1 T/ x* X5 M
{
3 A% q6 F) s" ~ .active_low = 0,
# Y, r& H& n ~! j: c/ B+ R .gpio = DA850_USER_LED3,2 a) i5 f& y4 v( z! ?
.name = "user_led3",
. Z, F; w! u. e8 B .default_trigger = "default-on",
2 X& R, ]# q& Y% ? },
; Y5 w* [, i0 M% j" b( e3 B$ N" a};
( l% e/ ?' T6 X' \/ G- u
1 \9 p8 H0 O' A1 R$ e- O0 astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 @$ Y. C! G1 K9 B .leds = da850_evm_tl_leds,
0 t( |% u' S7 Q$ y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! u" R* x( g6 s K& _1 w
};+ T! Z0 N2 O: U/ Y3 e; b
3 t& _& C/ b/ S6 K9 l3 r
static void led_dev_release(struct device *dev)
+ ]( ]# H: e9 i/ D8 [{6 t: \* q: i V) X+ F
};
5 _0 k) a1 ]4 k* S+ E+ D9 `9 M3 b% K0 w, d$ c
static struct platform_device da850_evm_tl_leds_device = {$ b; Q9 D- V+ n. \+ w2 F
.name = "leds-gpio",# G& [, y o/ n: f
.id = 1,+ v; s4 P' Y1 b4 F5 y, M8 A
.dev = {
# s. A1 u2 Z2 r" m6 m0 j4 m& k .platform_data = &da850_evm_tl_leds_pdata,
7 h% A* ?8 l# c3 S' z .release = led_dev_release, b7 v, B, j9 f; Q% s/ ]/ b" C
}8 k9 K; m$ Z: @& I2 ?/ I# g
};+ B) j% n! e/ f1 b( o! V
6 {5 R8 F9 W" _
static int __init led_platform_init(void)
$ s( V2 u* g+ x$ E }: y{9 ^, Q" b+ V5 ^' p p9 \& w
int ret;
! E$ M6 c* ?6 e! \+ f* ~#if 0' C' h' M6 e2 Z K7 V; N
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 y0 f' W7 [8 e5 T b; T5 ]1 G
if (ret)
- r" B) e1 v5 |* ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 B0 R% c. i: K, |# L "%d\n", ret);1 p P$ {0 x& K5 B
#endif% M' y- J! N- P) x, H! Y6 A
ret = platform_device_register(&da850_evm_tl_leds_device);
2 ~7 ?+ q' T: Z9 ]4 B if (ret)4 i& b, O5 {7 t
pr_warning("Could not register som GPIO expander LEDS");
9 j8 X9 P* m! a( Y4 v2 Y else& ?4 f& o2 o+ T
printk(KERN_INFO "LED register sucessful!\n");
) x. h# q u- O1 T1 ~2 A" j y+ L3 Q/ O5 e) C
return ret;2 a3 [* [6 ~0 F" e3 ], y
}
* b+ h3 q4 |9 T9 J% c% P1 C2 i" g/ x+ z0 }0 X; j
static void __exit led_platform_exit(void), z- o$ G1 N. F
{
5 j. ^% H8 C( f platform_device_unregister(&da850_evm_tl_leds_device);7 V( h) b F0 V
4 ^9 Y% e& m3 l8 Z- i: L# u" H printk(KERN_INFO "LED unregister!\n");
9 l1 f$ v! s% I/ E! w3 J}8 R- q, x8 y! V( n3 [2 h% w
. ]* N& R' ?% P A' Kmodule_init(led_platform_init);
4 O S. _, e8 V) h# Nmodule_exit(led_platform_exit);
5 e7 b' X( z) x( f+ J
4 f9 S- g0 z/ hMODULE_DESCRIPTION("Led platform driver");
; E' p5 T2 I5 L9 Q& j- Y- HMODULE_AUTHOR("Tronlong");) R+ a7 h5 W9 h! ~# f
MODULE_LICENSE("GPL");2 I% R7 \& j% }; s2 d
& {6 G- z) L6 x6 `; S7 k2 f |
|