|
求大神给下面的程序做注解,请稍详细些,谢谢。5 t* s& t+ x! m: P! o8 e* N
#include <linux/init.h>
1 o+ y3 X2 X) q( G3 n. l1 e#include <linux/module.h>
2 m8 C7 _: u7 }6 J+ v" r# n% g* s#include <linux/kernel.h>
# l# j* B+ _; F" d#include <linux/types.h>
9 y7 m; w; ~/ v5 E, C$ q0 i% L1 L#include <linux/gpio.h>5 R7 q. y9 j8 K {4 j
#include <linux/leds.h>
5 X7 n; g5 Q: k9 s3 v" h- \#include <linux/platform_device.h>1 w r3 v4 p! y
) f8 M: c# B- ]# f/ h( d7 J0 m
#include <asm/mach-types.h>; j- [9 u) i" L- ~% A
#include <asm/mach/arch.h>
% ~3 {% C g9 I. E& n#include <mach/da8xx.h>/ g/ \' h6 D. y. H
#include <mach/mux.h>8 s+ |4 l+ O3 x3 k( @; D
C% A) a) J3 n% S) G/ F" t
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; {- N* S3 X* E, {, I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 V) I) Z( X, Y) J' H+ B#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ J: B0 A. w; g& L8 Z9 @( f' @5 ~#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ X& s- {- w/ O9 f- j$ G+ Q3 y! i: ^! B! R6 p
/* assign the tl som board LED-GPIOs*/ R, }0 w1 R; D2 \* E: L
static const short da850_evm_tl_user_led_pins[] = {0 s+ C0 Y/ b$ U. x7 _
/* These pins are definition at <mach/mux.h> file */
& J: [- V }. R+ N( }2 W3 U( n; x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ ?- W8 M2 ], e1 F+ k -1
8 |+ A2 O: d8 c" `! g: m};5 K8 b7 u% u' W: p2 \+ V+ s
; [ r/ K( {% i% ^: X; @0 h! ?static struct gpio_led da850_evm_tl_leds[] = {
( Z" Q$ A: F& O( [0 n0 x {
% }1 \1 I1 `# g3 K9 X1 K .active_low = 0,! V2 z; Q# ?0 }7 T, n% M9 o
.gpio = DA850_USER_LED0,
& \5 n8 A7 K X* ]8 G* X' Q1 P3 I .name = "user_led0",; h$ M! I/ o# \$ H' l
.default_trigger = "default-on"," w( s- d" r4 {3 o3 c, ?6 X
},
% L# ?( {8 ^7 c" ]- k" Q {
5 W; h* r [0 o9 v) T, R5 y: x7 t .active_low = 0,9 t9 \8 a: I2 S( [
.gpio = DA850_USER_LED1,
# b( J3 I7 P1 }# @' R .name = "user_led1",
! R& J3 L! `4 D .default_trigger = "default-on",9 G; \ r" F% a1 \: M. ~
},) P: X$ E7 `$ i. k2 _
{
" y4 A! ^- s6 m4 f/ ~ .active_low = 0,) R7 F7 P- l3 E
.gpio = DA850_USER_LED2,
: {8 i/ x' W( [+ q! s .name = "user_led2",& z: R+ o8 d- t3 r2 O) s
.default_trigger = "default-on",
. k1 r8 B X* V& F3 R7 I( J },1 w- k' x( E5 B) j4 N
{+ \' b* U) x7 I7 ]/ K$ ?9 Y: V' u
.active_low = 0,
0 e6 a! m2 [- Q- s .gpio = DA850_USER_LED3,7 O9 y$ @+ a6 G1 I
.name = "user_led3",
4 a: J8 A6 B2 D7 y: o .default_trigger = "default-on",
& f! I- v1 J3 w$ ?' _" j },8 X, Y+ S2 e$ h2 a3 s0 I D
};8 ?% V! i( m& `9 m: X, X; ]
/ ?) ?- r9 b& G. g* U
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' I8 [9 A% M/ y( W2 E0 n/ E
.leds = da850_evm_tl_leds,' A9 w. r; }7 Y( J5 O2 N! C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 \# p. i' R8 ~ x$ i% J
};3 C- t! \) w- C# R) U
4 t, U5 y( Y: Ustatic void led_dev_release(struct device *dev)3 O: N4 S/ @) s: t; N6 Q, ?- P
{8 b7 o7 ^5 G% f7 r$ u
};
, _' l" Y, y* S$ r4 X# X
! q G! I7 @+ Estatic struct platform_device da850_evm_tl_leds_device = {
- C2 \+ G/ \3 ~, |/ N .name = "leds-gpio",/ O# ~! O; a$ I# r- w
.id = 1,
, }# Y/ a+ d1 |! g# Q4 i: r" r .dev = {
/ B& s# H) y1 s4 o. T .platform_data = &da850_evm_tl_leds_pdata,
3 S6 r" x) t# c7 ~8 s- p! Q .release = led_dev_release,; q) N3 @9 Z% b: V9 P9 y
}
: R; Q. N1 B# w) u, r! l; K};
) I2 `) R1 b% i. T, ?/ a
- \( {& r- h1 Q& s! U1 D' K9 gstatic int __init led_platform_init(void)
+ j' m2 L1 M D7 j{
6 p/ X( Q# @) c& t; c: O int ret;4 ~8 P5 A# o5 n5 U1 t
#if 0
" R+ e+ V/ ?5 g ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 D# i! R* [+ \! @, X8 G8 x
if (ret)
6 e' m9 h6 s8 y0 o* u& K pr_warning("da850_evm_tl_leds_init : User LED mux failed :") e( v. j: p% S8 K
"%d\n", ret);# N/ z3 \6 u; {7 }
#endif
( D% n7 ?0 f5 Y# W& m$ v ret = platform_device_register(&da850_evm_tl_leds_device);+ m! J( N7 N$ U b8 F. ] b
if (ret)
+ C5 F V. k& z) C' L, g. i pr_warning("Could not register som GPIO expander LEDS");8 A+ F$ |) ]% M% `( D3 o
else/ g6 Y, X3 c c0 i
printk(KERN_INFO "LED register sucessful!\n");
* x3 Q. m* S! Q6 B1 ?% A0 n+ \) [( t8 V9 R# H! H. F; h. {
return ret;5 b0 k0 a5 c* z1 }" N6 }
}6 d- c5 |! ?' v) B- } t; s# V
" F. ~% ?1 e" \, y8 v
static void __exit led_platform_exit(void)( F* ^+ H' e3 t8 R+ h2 H' E
{3 Q" ?& [5 V% X
platform_device_unregister(&da850_evm_tl_leds_device);
7 C. N6 j( z: T; e
* B' R& {0 N U6 _% x+ m% }4 `) q( K- z printk(KERN_INFO "LED unregister!\n");
$ n: A5 h( H+ Z- }; L) r}* q9 z6 K, n3 D7 K
' c) ^3 y8 n# d% s8 `# i1 q6 H
module_init(led_platform_init);
0 s9 r- @) x. f0 Zmodule_exit(led_platform_exit);, y- R! F/ J9 q2 V1 R
& T6 f! ?+ n4 U, [( [6 }: k: P2 q- mMODULE_DESCRIPTION("Led platform driver");
5 B5 U+ {, ~: ~: {MODULE_AUTHOR("Tronlong");
) n ~+ y ?7 r! nMODULE_LICENSE("GPL");
" f" e, Y& n) a2 W. ^2 T- c7 U4 L2 |: q0 |, t
|
|