|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 t! ^9 t$ a5 q2 o" |#include <linux/init.h>
! U2 C9 ^. i U: l$ A4 D#include <linux/module.h>
! A. r( c( r3 l# H/ X+ P( u: P#include <linux/kernel.h>( G# G0 R# n5 o# c
#include <linux/types.h>
, q, z9 y( t) q. d) K: i#include <linux/gpio.h>
+ ^1 `, E5 j- M f# w#include <linux/leds.h>
/ `8 b& K1 Z5 U! ~5 X( I" R#include <linux/platform_device.h>
! |4 r( Z& V! `8 j# V3 `1 V& M8 T$ Y n* l
#include <asm/mach-types.h>7 I% J3 @0 P* r! }, u
#include <asm/mach/arch.h>
: y4 E6 r0 a1 x: {0 L#include <mach/da8xx.h>
$ ~: ~9 e( ^" L# p. t% _1 T1 h, C% F#include <mach/mux.h>: t& U4 r9 U+ l: P
4 L7 m7 y0 t6 q5 Z; n
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# {$ ?5 X3 f: E. W# e* F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 i0 M4 u9 m7 g- q! O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# j' u7 T; o' m' K% [! u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), f& e- M: a3 I; X
U! a7 D8 @' x- R
/* assign the tl som board LED-GPIOs*/
5 `+ T/ J/ ~( [8 Z5 dstatic const short da850_evm_tl_user_led_pins[] = {
6 P. Q. t6 Z+ O6 \ /* These pins are definition at <mach/mux.h> file */, S' d# C7 v9 j$ A2 U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& J0 c( K* H+ o+ N -1; ~# D* {% D* Q
};* ^! L% X( l9 F
, u/ Z5 _0 n( K9 p8 J, Dstatic struct gpio_led da850_evm_tl_leds[] = {; ^( {5 i7 D5 m2 Z* K3 _
{
; e# Z/ Q/ P2 a2 k! u7 _9 @ .active_low = 0,, R. ~, l9 N7 J# R- t2 \! ?* L
.gpio = DA850_USER_LED0,
" C+ y. Z1 c0 j3 A1 T" }/ t .name = "user_led0",3 G2 c4 K2 z9 d( \3 ~0 A/ e( D
.default_trigger = "default-on",' W* Z# D9 C0 _4 }- Z
},
, l9 n7 l& s1 v: k {
5 Q/ E5 p2 V' T9 c; A: {9 J- J4 V5 v3 l .active_low = 0,
. {6 U9 } i- [2 F1 n; V3 r .gpio = DA850_USER_LED1,
- u, G- Q( d0 L& Z1 W8 } .name = "user_led1",* ^7 ]3 N) ]8 g
.default_trigger = "default-on"," z' S8 x' i8 F' u& D: ]
},
5 x2 s+ y8 K6 E, u0 D5 b1 S {0 _4 q# Q+ t: p7 D( `
.active_low = 0,# n. J4 s5 P' }0 h) Z/ V
.gpio = DA850_USER_LED2,
% {, X! m2 C/ T5 ^ H .name = "user_led2",
/ G6 d$ y- F/ p9 Z2 p- R .default_trigger = "default-on",
# G8 {' K* q2 m, |8 l l },/ \- h6 T: x' s/ R7 i$ B/ M8 y8 j
{
# V9 E( U, d' D) }8 ~( T .active_low = 0,
9 a9 x7 ~" o4 U; i' x; K3 ] .gpio = DA850_USER_LED3,
8 C( @2 u+ `# _1 T3 K) T2 E .name = "user_led3",2 p8 z/ C6 L; H) y: \. S9 h
.default_trigger = "default-on",5 ?4 p( x- x" j1 B3 y9 G9 J3 T4 n
},
, \. o4 y) p2 I' h5 \};
( Z9 l/ Y/ M0 e, A) ]; x: v
7 F: }0 h! T/ N9 L' V# p8 X( Kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, z" ^% A( p0 {+ s* F& G# ]) y; T1 n
.leds = da850_evm_tl_leds,
2 x; ?8 w, N* R: ]7 o2 W( t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* Q6 `& q( P- n- G: c* b
};/ y5 t7 d) n8 A0 o: U: i) Z! O; K
3 S3 V7 ]5 ^3 u" Astatic void led_dev_release(struct device *dev)$ A/ B/ W1 V$ h7 e8 C+ y/ {" G
{& Z8 J8 J$ ?7 q: `" \% \1 K
};" }8 h# V2 `) f+ G
4 b q. Y6 b/ k4 i) }) Q( a
static struct platform_device da850_evm_tl_leds_device = {; r- n, `# r( n: k- G- M0 w
.name = "leds-gpio",
) Y" D; k1 l; M9 h2 E .id = 1,+ P4 H+ a6 L5 {5 H2 V# b0 F' Z
.dev = {
! v$ V2 \, d X* G' ]; v9 ^ .platform_data = &da850_evm_tl_leds_pdata,, M( O2 A$ o, g8 o5 o* Z0 L
.release = led_dev_release,4 A! C ~, O* M6 F
}
- K- \0 D" [0 ?; @0 O9 [7 h};
& t% G- _/ u- X6 ?
: P+ ?" G; Y* `2 F* w/ bstatic int __init led_platform_init(void)
/ A& W; J9 b+ k1 n& ?{
+ [ R$ u5 A- Y8 O int ret;
. Y4 R) r$ y, H, A#if 08 E5 B! j7 {* b/ h0 G' Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# f* l$ x" |" V' ?$ z+ f; d2 T& B
if (ret)1 }2 T) N# O7 [, Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: u% T' J+ t1 ~ "%d\n", ret);
7 v! n. m5 H7 r1 H#endif1 u5 a( Z# A9 I4 I4 |+ ]: `$ ]& `
ret = platform_device_register(&da850_evm_tl_leds_device);! j) M C0 C+ b
if (ret)& j4 M8 _+ K( I4 y' j& l
pr_warning("Could not register som GPIO expander LEDS");" I6 u4 K6 [. E+ P( ?" F
else. J* ^3 _, B- Z/ K( m& G4 |
printk(KERN_INFO "LED register sucessful!\n");3 h/ v% q. Q! o9 m1 {0 H7 J; ]
0 `1 y: ?. u( J* p' Z/ R$ L6 I
return ret;" x2 l% h: |2 N9 ~/ h
}
# ?5 m: h. l2 y1 E' U
' S6 a% z4 G6 gstatic void __exit led_platform_exit(void) ~9 b9 b& J6 y h/ g7 n6 o
{
5 {: I! C- \" A6 @3 s' A0 O" P platform_device_unregister(&da850_evm_tl_leds_device);" n% |) O3 _3 h$ Y
6 S! C+ a! B& w! h# L printk(KERN_INFO "LED unregister!\n");
) b, ?& q0 k6 w9 k}) Z5 q c7 P& Y" w9 w" Z
! G$ D' h4 G1 d& O3 }module_init(led_platform_init);4 u! N; M$ G7 v; v5 v
module_exit(led_platform_exit);7 i; _7 S# E4 L
$ w5 F3 H X) a; u5 b
MODULE_DESCRIPTION("Led platform driver");
8 p$ k, o! C/ K( b6 d+ W4 q) K2 sMODULE_AUTHOR("Tronlong");
# o I( a2 Y, C$ }3 lMODULE_LICENSE("GPL");
8 @7 R& s0 a& M0 _8 s6 n& D0 J! m# z# u. B: y
|
|