|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( `" z6 ^/ L0 D( u
#include <linux/init.h>
2 |! ]# Z; E' H#include <linux/module.h>1 Q2 Z1 Y/ u4 p5 x' E* d, r, f8 x
#include <linux/kernel.h>
* j V" a# l6 Z; l0 T0 b#include <linux/types.h>0 b9 }2 M0 r. j0 I! E- r
#include <linux/gpio.h>
) j8 C0 P2 c9 Z0 c/ D) u#include <linux/leds.h>- M0 w9 O6 f+ Q/ h( @4 A+ o: l1 w
#include <linux/platform_device.h>- u- }, S) m6 v2 i9 n% G M
; |+ e( R7 K2 ~#include <asm/mach-types.h>, l, E8 t! S5 d% P! l
#include <asm/mach/arch.h>
3 {1 I- E) }* F. J7 L#include <mach/da8xx.h>- b5 L+ x7 I9 s7 E( Q: b6 m* j
#include <mach/mux.h>
, M4 F F C5 F! K: h! s, ~7 J
# A( T/ e9 A+ \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 ^6 V, G9 N" z, n, A1 k
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% f2 A0 \; r& K: C; e# T) w6 I
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; T/ s R: |, V2 F: _0 O0 {#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* H, r: ^6 Y' {; I: a$ R' r* e" u7 ~) ^+ l# a
/* assign the tl som board LED-GPIOs*/3 [& {6 P/ Y6 d7 ]( O
static const short da850_evm_tl_user_led_pins[] = {! O) d+ y2 H7 P6 }9 w B8 a K
/* These pins are definition at <mach/mux.h> file */+ J; z3 e: T8 b9 F; R+ A- ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 ], b e' R! C" D' p
-1: ?) A+ H6 i2 J" D
};
' a |# D" a% n, O' B' C
. }4 W( T6 t- B9 t7 r- Istatic struct gpio_led da850_evm_tl_leds[] = {
+ u6 ]$ @2 ~; q" E {' m/ z& r5 z- ~" z' M/ v% z4 J$ w
.active_low = 0,
8 `4 x3 O+ H* T4 i& j* e! e1 i .gpio = DA850_USER_LED0,& R) P! ] O0 N9 e. F! a
.name = "user_led0",4 x* e8 A+ m2 w
.default_trigger = "default-on",; \: m& _% d& [( b: o) q
},5 o e' s; {- |' b+ N5 l) \# g
{
5 M: {3 G' O8 B6 q1 e6 y .active_low = 0,
" O5 X2 S2 K( l$ C) ], D, r .gpio = DA850_USER_LED1,; c& ]$ {' Z) _* }
.name = "user_led1",
0 v& }" E% F3 i .default_trigger = "default-on", M/ Y) L; }9 R( Z7 l, i
},
) X4 u* Z# O7 a {: m0 m" I* H. R3 e% ]: w/ y
.active_low = 0, e* M# O" B2 {7 P/ g
.gpio = DA850_USER_LED2,( z: } P H: g
.name = "user_led2",
# A8 y9 y* R2 W7 _ .default_trigger = "default-on",+ e5 e. |( { A. _! W+ f/ m
},
5 T: P% q& H z* K# |; y4 O9 z$ O {
' W% Q9 m- V% D9 d$ A( z6 v .active_low = 0,
% ~2 E) b1 }3 l- y5 H& m* E l .gpio = DA850_USER_LED3,
( V1 \- |. S+ V .name = "user_led3",2 n7 `: T( i. n" C
.default_trigger = "default-on",
, s+ J8 G$ f) d& C* H },
" ^5 | G; {; S N- _% [; m9 V0 N F};
" q) A7 R1 H% w- r+ v4 [' O& o9 P' [4 q7 T W; L& V% S1 j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) _) ^+ c) p |) F9 b* ? .leds = da850_evm_tl_leds,$ T' C" G( \" s1 k
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# q" t$ a! h. ~
};$ A* [0 e6 y) {8 Z
9 d j4 v$ _2 C1 X7 y5 c
static void led_dev_release(struct device *dev)
+ P! }* y9 W5 L0 u, ^{) L; ]+ B( X3 O1 ~, ~6 s9 W
};
$ o$ v3 n% u" G1 l2 O" @6 U
7 P7 v5 ^6 s3 h: c4 |& [static struct platform_device da850_evm_tl_leds_device = {. ]8 a9 P! ^9 v% c% v4 M1 H
.name = "leds-gpio", V) E3 O) E7 J6 X! i2 @1 k Z
.id = 1,
" k8 u, y1 j0 h .dev = {% e) N( G$ X) T1 A
.platform_data = &da850_evm_tl_leds_pdata,
1 U' a& c G" A0 V0 @ .release = led_dev_release,
3 }1 L Q5 j. d' Z0 Y+ M }: z9 Y9 N* D9 W
};- }( f V: }7 B6 j( [9 ?& J4 r
4 b6 m n$ v4 h: N% `( q0 W! B0 q
static int __init led_platform_init(void)
& s! N: j& G' w, _{* `) C- l( F+ ^
int ret;
: V2 b; w1 c Y#if 0
, a9 N' l7 p0 d' F ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. b6 J8 p& t! n c% g6 L' S) ], O- [& m+ l
if (ret)
7 g' B# m: X9 N$ ^' Z9 m pr_warning("da850_evm_tl_leds_init : User LED mux failed :". g4 { l( x% X; b; Q2 C9 x/ W
"%d\n", ret);
, Q7 I# O% t6 v' `#endif
1 j" v. |$ M4 ?0 I ret = platform_device_register(&da850_evm_tl_leds_device);
6 X" _, r' Z$ y! l' v; ~ if (ret)' N+ G9 w) m% Y; E- }/ Z5 t
pr_warning("Could not register som GPIO expander LEDS");4 L6 O% _0 n2 @/ d0 s- B" @
else
3 k) d7 K6 D+ } q printk(KERN_INFO "LED register sucessful!\n");
* S; u7 ?# P* p2 w z* P
$ \; i: ]/ ]1 \3 O0 Q8 S return ret;
1 k( t( ?0 r$ B8 B3 `}
0 R3 q! M- b& _ c4 `+ ]6 @& G% A) D2 n* f" H/ `. Q
static void __exit led_platform_exit(void)
" t+ g3 a, w% S# y& ~, ]{
( n/ J1 b3 y. x2 q( X platform_device_unregister(&da850_evm_tl_leds_device);
% [7 Q, b) f [, D
P) u# n' W+ { printk(KERN_INFO "LED unregister!\n");+ t. T6 l7 |" `6 D5 D
}
1 Q; X! W* |: Y0 p& Y, s( [% S, y* j. t7 e
module_init(led_platform_init);3 e. [8 a8 o' I+ g4 P6 B) r
module_exit(led_platform_exit);9 E2 D1 K' q% r8 t) h! I4 q+ n6 p
% p7 S9 ]& @; _2 W9 ~2 d' [MODULE_DESCRIPTION("Led platform driver");$ E- \$ F, p$ U0 t$ A% y& j
MODULE_AUTHOR("Tronlong");5 n0 C' f3 t- V* U4 g
MODULE_LICENSE("GPL");
( Z! |1 \! [. ~* f5 @& D. s" k9 ]; Z7 k: |5 O
|
|