|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 L* r6 s' C' `, t#include <linux/init.h>- g0 r+ `+ {/ i' m1 V C8 A
#include <linux/module.h>3 p& M; a2 @' K8 L6 p. [7 Y
#include <linux/kernel.h>
. p5 l: R+ |. o3 b: f9 S/ a" x& Z#include <linux/types.h>' W- L; n, W+ E7 J1 a5 W5 s
#include <linux/gpio.h>& M' D' c: ~' j* j- ]! K
#include <linux/leds.h>: q, J! J9 s0 k; L0 Q7 O C9 G; k
#include <linux/platform_device.h>5 L6 V# q6 y! Z4 O
/ A- M1 b z" I" Q/ N! o1 W; K
#include <asm/mach-types.h>
, d" _) k ]' x; m1 h#include <asm/mach/arch.h> y3 _6 ?. C5 e W: G' W9 q$ A- x
#include <mach/da8xx.h>( h1 A8 [. x+ s5 C& |' ~
#include <mach/mux.h>" `2 n6 P( a* C; ?
5 q, ?- E& h+ ], b& ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. g8 i: [4 V# Z, g2 o5 t#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- j9 f3 `, Y) D* e3 g- }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% t2 E+ t: H% D( j/ s; o3 h$ w# ^#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* e$ J1 c5 d4 V% i4 ^7 k
/ s, a6 b1 T, p3 R5 a/* assign the tl som board LED-GPIOs*/2 v5 ?1 d6 ~) z: D- ~
static const short da850_evm_tl_user_led_pins[] = {
: E7 z6 t. B6 {. i% n7 p /* These pins are definition at <mach/mux.h> file */
! Q+ ^; F4 v4 {( ]- s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% _8 l9 R. C+ _1 p
-1- M1 H4 Q3 e% x! G9 N* R7 m
};
- b2 z, E0 y( a* E7 w4 E" o3 d3 Z# P& l, c6 N9 O: p
static struct gpio_led da850_evm_tl_leds[] = {. z4 a( y) M& t
{
3 g, r( c$ T) @& X$ v8 f3 S .active_low = 0,
t( d& e4 m$ Y) e .gpio = DA850_USER_LED0,7 Q( ]& P1 X: v. w* a
.name = "user_led0",: J' P+ r8 ?( p/ l
.default_trigger = "default-on",9 A. i# I( B0 L' f* H8 a _
},& j. S) z- y2 n8 s+ \1 h% O' J# S
{
8 Y3 q/ R% Y: ]# O' C6 U1 X .active_low = 0,# K4 l/ _# o( l) ~2 R' b
.gpio = DA850_USER_LED1,5 M3 N5 F0 H( @0 _0 Y
.name = "user_led1",- k: y% y' h& R, N8 @ Z
.default_trigger = "default-on",) O1 j+ Q0 y6 e# ?
}, l- V9 f S$ s) D) t
{4 }$ x- }8 _+ s
.active_low = 0,
5 ?5 y$ m6 x; H4 ~ .gpio = DA850_USER_LED2,
8 n( @- T& |+ j; A3 h% `2 w2 |6 \ .name = "user_led2",
1 b& r3 B* z" `" S .default_trigger = "default-on",
" r- T4 C( ~/ N },0 _ z: E1 Z4 q d+ }2 |
{1 K8 L/ Z/ Z+ D [
.active_low = 0,
8 S, @1 \. C# i; q .gpio = DA850_USER_LED3,! ]( Z& S; M1 ~
.name = "user_led3",. Q# k2 q! @ O; x. g4 Y `8 O
.default_trigger = "default-on",- Y9 c3 p, T% [7 K8 N3 H }3 @
},
6 m" `1 q5 i7 H" G; A};/ i N& f3 Z2 B
0 r& C3 e$ `% P; G7 U, hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ K3 ?3 ?( v6 Y# N) c
.leds = da850_evm_tl_leds,/ Q' R( n( {" m/ y0 c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* L* e# c+ J/ ^( k9 J3 I- D};
% X5 F7 \: P) S5 B* @
- J# t j& J6 |7 Ostatic void led_dev_release(struct device *dev)
. c6 ^& R, S' p: P# ^{9 i0 n: ^) [( c6 f8 z- @: B
};9 b( E% L& }; j K& `% r$ D
% f" p r+ @+ X7 pstatic struct platform_device da850_evm_tl_leds_device = {* `) ~# c n% b) Z+ c6 T
.name = "leds-gpio",0 W* \7 D2 a* t
.id = 1,' H7 _1 `) f. C( M
.dev = {
4 l/ n4 d" U8 {0 ]& A .platform_data = &da850_evm_tl_leds_pdata,
E9 Z! R6 h8 A! ~0 D5 P5 h: o% O .release = led_dev_release,
" [# R2 t+ |9 k# K' K' i) `0 [1 N }
1 F" I& [- c7 t! c, g};
# y* X( I1 o0 ]6 W& K5 F. k! L5 I* B+ ?, D+ K6 C9 C. I4 l
static int __init led_platform_init(void)
0 m3 }6 U2 F4 D{# x9 z$ Z/ A3 b) {9 a) t
int ret;# R# {7 W# O& W: ]) ]
#if 0" p7 W* w: G7 r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% _( f* }. ~. W! D- f
if (ret)7 i% _9 o$ ? |# R
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& n7 X. t4 x- E7 E "%d\n", ret);2 |% B. Q7 Q% f$ o, i/ J
#endif) K E$ P' R. o# `3 q1 E1 c' {' f
ret = platform_device_register(&da850_evm_tl_leds_device);" O c8 _/ L+ j4 M
if (ret)+ t1 `3 b$ W8 `0 e7 X. W
pr_warning("Could not register som GPIO expander LEDS");
6 O; e! F5 p# Z) g" q$ n else
& t. i0 j: }- y- p9 f printk(KERN_INFO "LED register sucessful!\n");( c, h5 ~' ~! Q. ^2 r- m5 f5 E* }9 P
& _) B6 U: M$ q9 p' _5 p return ret;0 X1 {& R5 P% w9 ~
}
9 ]5 B* m2 i; q" I& S" C& s) c l. R( G" h' y- e, s, X( v5 @
static void __exit led_platform_exit(void)! q1 T2 ^9 I7 I' n8 r
{
4 C. A" R- L! P0 g( } platform_device_unregister(&da850_evm_tl_leds_device);
0 h) u+ F7 T8 }( m( G# ]4 m2 Z, `) @9 N, i+ d$ N" r
printk(KERN_INFO "LED unregister!\n");4 c' v! D/ V/ m
} r5 [: n" F. z% _8 Q- s: d7 j; e
, g ~% p7 g! }4 ]* f7 k
module_init(led_platform_init);& @, M$ c9 @/ y) N! e
module_exit(led_platform_exit);
8 ]- g# U z l
; \1 {; y7 L+ j; U- W: nMODULE_DESCRIPTION("Led platform driver");
* K0 _) W) V- v: k: e2 ?MODULE_AUTHOR("Tronlong");% X- I# {- X/ k- G; [
MODULE_LICENSE("GPL");
& W7 A' \& @( |' N( o/ z: t: t0 u+ M1 V( U: x
|
|