|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 H0 R) O; _0 P) S, f: q' ~#include <linux/init.h>
0 u7 U4 p4 m S9 f#include <linux/module.h>
! j/ O( b7 e+ I4 r# c#include <linux/kernel.h>
; g" h4 E. J0 f" H( a#include <linux/types.h>( ^, t4 `0 v/ Q) g" n
#include <linux/gpio.h>. A) |5 P6 |; R5 x/ @4 g' Z! ?3 e
#include <linux/leds.h>: C( R$ Z4 L9 _; U: p
#include <linux/platform_device.h>! Z0 \1 N# ?: e% B6 ?
$ V; O4 g( W8 l/ w! |% a& T: ?
#include <asm/mach-types.h>
! d$ o/ J) B% y4 P) i, k#include <asm/mach/arch.h>
- e- m) G* P& @/ f0 l2 a#include <mach/da8xx.h>. b$ @0 X2 u. M9 L# V
#include <mach/mux.h>
0 P' u8 T8 S3 P" e& S! X' w! m) @' i' H8 E8 m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) Y; g! ^. U5 r! C& M/ [! {1 ]
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 `/ B: }- ~! Q/ r9 \) X#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 y$ M8 A2 _& a# x% R# ?
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 X2 M, l+ x. |% M
6 G) H' ?8 z; q! z. {7 B9 b9 J/* assign the tl som board LED-GPIOs*/3 l" @3 ?, V! i
static const short da850_evm_tl_user_led_pins[] = {0 B7 ?2 e r# w. d3 S; K6 H$ i
/* These pins are definition at <mach/mux.h> file */
2 L# |; ^9 V% n* }1 t/ @; x9 y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: |: `' o h" k
-1$ i: f9 t& J& b1 u: B
};) n8 P' s& V+ ]" R3 u ~
2 @. ?3 B# d/ t/ \( s, Q
static struct gpio_led da850_evm_tl_leds[] = {
5 h; ~- H! o- X8 ]: N' } {1 j' g4 h* _! A6 z# m0 a
.active_low = 0,7 s7 X' P% m* B, {. T0 L
.gpio = DA850_USER_LED0,
) I1 i/ k- V# { .name = "user_led0",
( |* m( C" v1 I3 D3 t .default_trigger = "default-on",
$ a& s" @; X8 `' n6 _& p9 {2 i0 m },
& z( J* K& N$ L* v/ X u {* p% F3 T, u& i/ x! [) q+ k
.active_low = 0,2 e. Q0 U" Q, q& f( h
.gpio = DA850_USER_LED1,- m$ z, |$ j: w3 i- p+ z2 V+ M
.name = "user_led1",
' t3 R! q4 N9 X .default_trigger = "default-on",& e) b3 m2 H W
},
1 B" ]& X( N5 ]+ q6 [- b: o; f* ~ {
5 m. j1 T2 Y8 z7 k# |/ M' q .active_low = 0,: v2 `$ v5 W) j3 F
.gpio = DA850_USER_LED2,& _- Y$ s# H) O3 ?
.name = "user_led2",
% k* L# `. `2 q, ?3 M2 R$ [7 i .default_trigger = "default-on", j6 q/ [7 @9 p. n* f; N; G2 r
},
$ s3 _2 T- M/ j8 ~+ H {, P( u) d- p4 e9 Q. [6 n
.active_low = 0," ~3 `4 W6 O) h0 H" H1 }
.gpio = DA850_USER_LED3,
# s) z4 c* z. C, u* A .name = "user_led3",
9 A0 E( f/ y, g8 N: w, R9 L .default_trigger = "default-on",
1 f1 `: q1 N4 x$ h/ r },. @; L( ~- ?: N# y
};
; M+ A! Z4 r2 h
& g _ P% z& W" H6 wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( G9 g* e5 {# J, e( z6 b' n .leds = da850_evm_tl_leds,
+ p6 @. g* M: y5 V .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 D7 W' ~, G: v};
/ m% h8 p: G8 @3 m
( S* t5 T3 G0 w7 y6 m/ I8 \% p6 Istatic void led_dev_release(struct device *dev)
7 B! Z( P0 K- ?% B( w9 s. |{; x5 v, t; L. @/ h& r" C! Y
};4 I. `( p: r4 | O1 y$ z$ L( Q+ e" K
, U7 l$ l, Z% g, ^6 K& R: @ J
static struct platform_device da850_evm_tl_leds_device = {
3 e2 \7 K5 ^0 I3 q* L .name = "leds-gpio",
( V3 ^# ^4 R! U; N! Y/ n .id = 1,
* r2 O+ l5 f1 @& y( q9 G! v .dev = {
. U1 t7 n3 t; u4 {- F .platform_data = &da850_evm_tl_leds_pdata,6 m! o; D9 ~" O; d h
.release = led_dev_release,
' {- w; D' G) L4 r }/ v5 s z( z3 J/ I4 O8 ?
};2 [( X4 \* H5 D+ { h9 H7 v
3 v- U: @' a5 I) sstatic int __init led_platform_init(void)
. E f5 @4 @7 J* S{
% t. G! @ N) k int ret;
3 M3 k; u8 Q/ J, A$ p#if 0
3 Q" k) e2 ~% y% J5 n# r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" A2 c. |+ O; P: ~2 `2 K% s
if (ret)' f+ M' m) Z: O, p$ f: ]& X, k+ L
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 S7 v1 n$ \* O
"%d\n", ret);
6 i! T! r, S6 H# {9 X4 S, a#endif% b6 e' t+ N( u! ^9 ?5 Q f7 ]" J
ret = platform_device_register(&da850_evm_tl_leds_device);
4 j; S; G; ]5 O% E0 ~+ @3 }: E if (ret)
& {! x/ U; p! q! B! l pr_warning("Could not register som GPIO expander LEDS");
# G* e: g" Q7 ? `# W: H else
/ a( {& q6 a: Y. m9 K printk(KERN_INFO "LED register sucessful!\n");
: V l$ I" u+ j# N7 Q( r( [3 _" b
return ret;+ I% I4 b! @# U4 _/ u
}6 g6 \$ I' i" A' ], Q# e* g5 L/ z
# r6 |& a8 _6 D7 v9 b! A2 Y8 |3 @
static void __exit led_platform_exit(void)
1 i0 N0 g6 k: G9 S" G$ `{
- \# D- B( ]4 N platform_device_unregister(&da850_evm_tl_leds_device);
! B* K/ v' |) A5 q; F/ s) x! E/ ^
/ V! [9 ?$ m& M/ t! y. D printk(KERN_INFO "LED unregister!\n");7 T9 a+ r: E$ G
}$ N. J" v- X) {. ~* g0 ^# j: i
3 h5 E- H* P( W! W/ h7 \module_init(led_platform_init);
0 T. S. a; b( u. _. tmodule_exit(led_platform_exit);- b5 c! ]. u4 f
1 a& [; q- h0 a/ dMODULE_DESCRIPTION("Led platform driver");
+ Y. C2 s2 F* f4 QMODULE_AUTHOR("Tronlong");
& ?, M; w+ }% p/ F2 }' u6 [4 jMODULE_LICENSE("GPL");0 ]6 {* n4 P$ x, \6 V% g- l- |
: T; S+ H& \ _/ m |
|