|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- z4 I. [% Y& t, W- x#include <linux/init.h>
1 g6 c; ?: s% Q: C* \- D#include <linux/module.h>2 i7 B7 Q) L5 J- w, ^3 l* y+ Q6 M
#include <linux/kernel.h>) W/ o# x- L* i% t3 e5 w: g
#include <linux/types.h>
+ L& Z3 ?) J" J( b#include <linux/gpio.h>
- P1 H, c- m) C" {0 `4 j#include <linux/leds.h>: m% }2 u. V: B! ] p$ E! |
#include <linux/platform_device.h>
4 q" @4 m! e% {* E9 H4 C/ N5 F. ~* w' Z, @' _4 L# }: ^5 o9 l( a! d
#include <asm/mach-types.h>
& E4 r6 }* O1 D: L#include <asm/mach/arch.h>
* F/ N7 V5 e' H5 c3 f* t#include <mach/da8xx.h>
' C) C$ p9 A2 d) N#include <mach/mux.h>: h+ s$ s1 T- n% Q7 V
) d) \- Z0 C5 c/ |) K: j3 c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 w# C+ K1 q8 r% w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 S6 l. e7 C2 [ {6 N' x; a- g
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% j) }+ B# o# b+ {( N) D
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 ~; t% N6 a+ z, `+ t0 L0 N
n7 Y, u) W. i) Q% t, J
/* assign the tl som board LED-GPIOs*/
+ K# b. k# P- z2 [6 Xstatic const short da850_evm_tl_user_led_pins[] = { `; ], \7 Z" f
/* These pins are definition at <mach/mux.h> file */
- L: n! @2 k' E' Q1 Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: ^. C, j# s; u6 O( E5 R) F
-1
3 e3 \9 l: h3 a) r8 q};
- c% ]% z2 K* h+ ~+ I
! p4 O$ j& d2 f, L6 mstatic struct gpio_led da850_evm_tl_leds[] = {
0 }+ B- Z8 z5 L) [/ o {6 B& g! Y+ m2 y' ?6 J+ T
.active_low = 0,
2 N, }; T: q# u .gpio = DA850_USER_LED0,
8 L! k' N9 X& l; U1 T* j+ @# o& V .name = "user_led0",
1 H* D. U% R" ^. r .default_trigger = "default-on"," S' ~3 {0 f- H
},
$ e/ u6 d/ h4 }. J {
# n$ ^, l- }) m& o% t .active_low = 0,
& C+ @6 J# @" R, u/ @9 _8 Z" I .gpio = DA850_USER_LED1, V# E* j, n( a7 ?
.name = "user_led1",
+ e/ h/ k& u7 h' f: ] .default_trigger = "default-on",
8 t; U9 k4 _8 A( v0 O },
2 T8 x6 \) V% y1 h3 m1 Q3 I {: ^0 P5 ?+ m* w7 L/ h
.active_low = 0,
3 q& k0 ^% p' r9 i .gpio = DA850_USER_LED2,; _3 J k0 |$ v/ s) z% j K+ c
.name = "user_led2"," j! _8 w0 H, d, N) G* X. D
.default_trigger = "default-on",
' k9 Q6 i- U1 e, g) h* y+ ? },
; d" P) |8 B% h' D/ { {
: R* H2 ?# J/ x5 s( b$ m .active_low = 0,
3 d9 \; Q; D7 ~& e .gpio = DA850_USER_LED3,
. g& g3 I% R! j' f3 t7 e3 n .name = "user_led3",- ^* ]0 ?" b2 Q, y! @
.default_trigger = "default-on",
) X1 L, W3 n# ]6 K' L1 e },
( ?9 C! |# r- i) h* H4 k& f};
A) E! o+ h4 W" y
8 i1 f- r& c; b4 \static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 p- G+ R& v3 y: ^, ^
.leds = da850_evm_tl_leds,7 C9 z: H! x. ?$ T0 T, q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( P, r* U! Y D( n9 I% `+ j' c};; P- X9 B" Q9 \6 X4 X% h
}/ |$ l6 ~4 `static void led_dev_release(struct device *dev)
2 I7 Q C" J0 }1 s8 l{
% |! m3 t# K/ y. u" M3 b& H};1 Z7 u3 Z0 @2 k& k+ a8 B5 l
8 G' o. S2 i6 y- v
static struct platform_device da850_evm_tl_leds_device = {: h4 x8 E; V0 Q3 s$ P, `5 V
.name = "leds-gpio",3 T# W; r8 h8 P* D' D# [( C4 F
.id = 1,+ Q7 [: P! |0 b- a+ A q( e# Z
.dev = {& j5 g& Y6 \: W% D# O2 ]9 t: [: g" j
.platform_data = &da850_evm_tl_leds_pdata,- m+ L3 H+ C7 P3 l
.release = led_dev_release,
1 y7 v7 d6 [8 ] } h6 a) C/ ~& e6 L! S7 F
};
: _/ L; @6 o- p! j- ~6 Y% B$ r+ y
static int __init led_platform_init(void)
! Z/ ]7 N% { [{6 c' b3 R' U( s) D
int ret;
1 [6 `5 C* J/ m g#if 0- ]4 X( r! _9 b; s) p' O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 u! f9 T% ]! m: P! i/ r" e if (ret)8 ~& |6 I1 \$ X9 e0 v2 U: u6 \% l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, c1 f5 Z2 ~+ D "%d\n", ret); [% N7 X1 h% h/ |
#endif$ a1 v: s8 B: f$ r4 i+ r8 S9 L
ret = platform_device_register(&da850_evm_tl_leds_device);0 L3 z5 v0 S% O) i
if (ret)
/ d: r9 c- q2 B! M pr_warning("Could not register som GPIO expander LEDS");
. ]1 J8 u$ r& _( n) T else
Y# ]0 d' s! P' s( @& i printk(KERN_INFO "LED register sucessful!\n");) v, ^! t ]' _) D) a3 i3 X: b
8 E7 X ^8 M1 S6 g' \- b3 s/ o( [
return ret;
1 }# Z7 k/ P. D0 |4 L1 r9 j' [}# H v+ Z! t5 y5 `; |
) J# d4 y! J0 S; q4 F# [3 c
static void __exit led_platform_exit(void)
8 ^& z8 S9 e+ Z5 E; m5 Z{4 Y& }2 L- U5 @3 v9 \: p+ e
platform_device_unregister(&da850_evm_tl_leds_device);
: U4 _& S# j' s3 D5 D4 k& U$ Y$ A
6 d3 T' \. p9 o! U! y o5 w printk(KERN_INFO "LED unregister!\n");5 L$ K; O8 j! j! u+ k- d8 o
}
9 f* q: X3 ?: C1 O& g& B9 @5 g
$ X0 P* Y/ x, h! Y' qmodule_init(led_platform_init);3 X9 `' Z9 S2 X: z+ c
module_exit(led_platform_exit);4 F& F) j3 o! \
& d6 Y9 i7 P; D( b9 ~! K" D7 I
MODULE_DESCRIPTION("Led platform driver");
1 S' c' _+ q! `$ _' H6 eMODULE_AUTHOR("Tronlong");- D7 C% P8 O0 `4 r
MODULE_LICENSE("GPL");6 ^1 w" a9 h9 O- h$ P. t; X
1 _- V+ [6 k: l |
|