|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( R3 |9 ` P% b#include <linux/init.h>
) n: Y8 i% j0 A#include <linux/module.h>. ~& M4 n6 z0 T
#include <linux/kernel.h>" C: |. w: p7 M0 S
#include <linux/types.h>3 T, O+ z' [; i' h; W- h; ?. }
#include <linux/gpio.h>
1 {1 j7 t6 F3 k' B0 M#include <linux/leds.h>
+ R! d1 B) J: h. Z6 h! e0 ?6 ~7 ]5 O; X#include <linux/platform_device.h>7 ` a% B, A7 [! e( Q% _
+ _2 {% [: V6 X# U* K#include <asm/mach-types.h>( \! i- }7 G: k8 ` [
#include <asm/mach/arch.h>
& t. @: H6 w0 U4 N#include <mach/da8xx.h>- K8 f' `' H+ z% |
#include <mach/mux.h>
6 y _9 Q6 j: |" y5 h. R
5 B5 t' G' k4 W) U g, `' j#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 O* _2 @& K/ D- l7 c" a#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 G* F- I0 I1 m6 m1 Q- Q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); {# \3 A, i" r
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). z+ S) i, _' H* D& a
$ a+ i- j# b9 ?/* assign the tl som board LED-GPIOs*/
1 I8 [5 S, N- V' ^static const short da850_evm_tl_user_led_pins[] = {
( U' M0 f( r, g" i2 M% \ /* These pins are definition at <mach/mux.h> file */
! U# o; m% c3 Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 i! z5 ?0 R' T, @# z# D+ s
-1
6 g" A- |* B- @! |};
# ?2 v6 t5 j0 z: B, J) R* w+ @# A M3 Q6 z+ o9 y) Y) P6 n7 }
static struct gpio_led da850_evm_tl_leds[] = {
9 ?) s6 W- p8 K {3 H$ ^% w' V4 \" e) C3 o% \& M% j
.active_low = 0,
4 I& s& I9 ?. x& g1 ^; \" i .gpio = DA850_USER_LED0,2 ]7 F- T6 V. Y
.name = "user_led0",
( G! f# {' v% p8 q( n .default_trigger = "default-on",
! B: a& A1 s8 H$ L4 p },4 E9 Z: y/ r3 L6 T% T) v2 j1 X" d9 h
{9 Q0 u3 ~2 B% z+ j: O/ H
.active_low = 0,; q2 I9 J0 e% i5 E" A
.gpio = DA850_USER_LED1,
, P# o, f4 z7 _' q+ y: H .name = "user_led1",$ E( Y( Q, |% R0 K
.default_trigger = "default-on",2 y( {/ M7 P- f; P
},
) E: H' D6 q% e v( k$ d7 } {
" `5 ^8 ~1 B$ H; L2 x! } .active_low = 0,
, H- U% M9 M7 U; j. u+ t1 G! S .gpio = DA850_USER_LED2,2 H. z/ o# b2 S' M
.name = "user_led2",. H# @ T, i1 k9 O( g6 X5 A
.default_trigger = "default-on",
3 @' x5 z( V2 Q7 z( x: R5 E! c },* ?. O/ w B- l! D
{" Q, t' n% g4 `/ ]& V
.active_low = 0,
: o' K9 F1 m- a' _- P .gpio = DA850_USER_LED3,4 t! B$ Q0 c; W" ~3 L7 }# r* m
.name = "user_led3",
# N( m# R* @) s6 P5 q* T a* ? .default_trigger = "default-on",0 S9 O' ?' Q; b- U. J! n
},6 e# g0 [/ p# F& J% h' g
};
; \4 ?3 a( r+ Y3 c
# d1 k- k9 F6 Y4 g/ G/ _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! o2 j ?% P* z& n# Z& X .leds = da850_evm_tl_leds,
5 r3 C6 ~3 j% r; U: r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 Y) j/ g7 u6 y0 r0 M$ v
};- z7 h5 \7 Y+ _" V+ {/ T
* w: b. i0 |: `7 b; _static void led_dev_release(struct device *dev)
' r" B, g3 b4 k; i{" ^4 J/ @2 J7 q2 |- d
};$ ^' x( o3 k; X `0 ]
' p" w8 S: o. \) Q* ^8 t5 |8 `static struct platform_device da850_evm_tl_leds_device = {
) C6 ~! ]2 _- R .name = "leds-gpio",% @" ^' A; i3 \
.id = 1,6 S: O) S3 {$ Z7 p8 c% k
.dev = {1 ~; p1 x% R; F) [( z
.platform_data = &da850_evm_tl_leds_pdata,
0 b# Q! E( T3 v# E7 N .release = led_dev_release,9 r5 S" ?' [; i6 j' u3 @
}' h* H* L/ ~; N! f; ]
};
: z! O4 a8 [3 H0 K' l5 U7 ?3 \6 w- F6 R2 W
static int __init led_platform_init(void)
3 f+ p+ h- @" z& u; t( N{
7 r& P6 N2 [' o/ H int ret;
, T _" E( O5 g/ C2 N" a9 [#if 0+ I7 p$ c3 R3 K- [( g q* b
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 O/ a) P% M4 V5 U! A if (ret)
9 C. E: A. A3 l' `+ h2 @$ w. n pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 {$ _0 E% I5 L+ ?/ G) R
"%d\n", ret);& i/ y9 u$ M+ Y( D$ g% i
#endif
. ^4 Z( ]$ W( W( C ret = platform_device_register(&da850_evm_tl_leds_device);: S1 r' K' F$ b( f3 T
if (ret)
: u. g o, w) C& ]+ ~0 O" x pr_warning("Could not register som GPIO expander LEDS");, ?5 g! b) x+ Y; N
else
8 b0 }+ {4 e# R" c" x8 E printk(KERN_INFO "LED register sucessful!\n");% A: c8 z! V4 O, T
( p* _( G. c- I7 s; e9 v; W2 |
return ret;+ d0 M4 {2 N0 j7 S' { L
}
1 b8 w: J g' g2 N1 Z& \; H
8 j/ B7 t8 |; Jstatic void __exit led_platform_exit(void)( ~9 r- ], O# A5 m8 f5 U
{+ K: S8 w+ i8 ~, P4 j8 L
platform_device_unregister(&da850_evm_tl_leds_device);4 k! H% y3 O. k
( U5 I6 d* U( f" B' } printk(KERN_INFO "LED unregister!\n");
, l1 E, x& R+ e3 e$ n}" P3 o5 H: Z4 q- o. a" ?7 }
8 d0 E& {& H: q1 `module_init(led_platform_init);
8 S2 J, [' H( g" Nmodule_exit(led_platform_exit);6 V. k( y9 B8 l) E; j
$ J8 m& ]$ p5 T( Y( jMODULE_DESCRIPTION("Led platform driver");
2 B5 R* c$ c- z6 L* d3 {7 dMODULE_AUTHOR("Tronlong");
% c6 B: \% p8 _; G% x, BMODULE_LICENSE("GPL");1 M5 q: P6 i T
6 r( q& _3 q: B- p6 u
|
|