|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 e( m) P9 q9 T8 z% N1 P1 F/ Z
#include <linux/init.h>& B# Y9 P9 |3 I- _6 f
#include <linux/module.h>
6 U$ [+ `& ?. ?4 K" s( w: ]#include <linux/kernel.h>
2 T* t. e M7 Z- C# W#include <linux/types.h>" W0 U, o- b+ {( G3 }5 |+ @
#include <linux/gpio.h>2 G) [: B% d$ ]% ]/ ]
#include <linux/leds.h>' `4 w. u' N2 M
#include <linux/platform_device.h>
1 ^! y3 A* O% |3 V5 o9 h$ \2 `6 D! t! w7 X9 x2 A9 o
#include <asm/mach-types.h>( n, b: M7 a0 x+ r+ k' @5 o
#include <asm/mach/arch.h>, M) r* ]) \- n, c. A
#include <mach/da8xx.h>
. d' W6 d" Y7 \#include <mach/mux.h>
1 {5 D+ O) \* x# ?/ O1 k& E: G( Y
$ ^* R8 `0 @' r2 F' G# y( @9 L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) V+ a4 b2 U2 K" d$ B( i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 \% L8 S" `; |; [6 r1 e2 r; t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' I) O" b K( K G* B+ d#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: n6 a' c2 R3 u' L6 d' G! e2 x6 j0 l; h% M' C% [# L+ ]- |; [
/* assign the tl som board LED-GPIOs*/" {5 O7 L3 R8 A# e. m" F8 [5 |
static const short da850_evm_tl_user_led_pins[] = {
6 Q( F7 W3 C5 [) ? /* These pins are definition at <mach/mux.h> file */# t. }* d i$ G9 j
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& Q. [" w# V% z+ ~ -1
& ]. ]9 f- {% B# a};, X/ ^5 }; k7 t, ^1 c* @* z( l4 {0 v5 ?
6 o |% k$ \8 Y- | N! r' ^
static struct gpio_led da850_evm_tl_leds[] = { b/ [: b" O9 r& D
{% ~+ z; `' }# ]: J9 C
.active_low = 0,
, V/ P" i" V; x% \/ E6 ^) z& T( l .gpio = DA850_USER_LED0,
' U$ k$ ]! u- g5 F+ \, V .name = "user_led0",3 `. X x+ W3 R
.default_trigger = "default-on",- M4 s; q- z3 A) b
},) \- e* @! T+ p' u6 O' {
{
, p" H5 o! q) `# y .active_low = 0," F- b: C, [6 v: b( `% \ u# S
.gpio = DA850_USER_LED1,
& T/ V8 c# C; _9 ~2 Y .name = "user_led1",( D' C3 H2 Z4 W" \. @
.default_trigger = "default-on",
8 R: K; N e% g" p6 n },2 B t( ^; [( i) |$ K
{9 K) R5 K' L3 H1 d' E5 _
.active_low = 0,4 J' W/ |5 N1 l
.gpio = DA850_USER_LED2,
, q- |* X* x b; S; G- C5 x" K .name = "user_led2",
) A5 ]! S+ `2 |- B: o .default_trigger = "default-on",
5 X1 x% X, F: i' i5 `! O9 T/ ?% ~$ [ },
* a: v# ~2 X( R {. a: O* U8 U8 g; a
.active_low = 0,
4 s- W* K* A( O& c% U: r4 Z6 z; X .gpio = DA850_USER_LED3,+ d$ S! }6 _4 [% f. N2 I J5 h
.name = "user_led3",
- c. J$ V1 D3 l5 K0 y8 u .default_trigger = "default-on"," g! k/ U b+ {- O
},& \$ r- T5 @& q/ O' Z5 I1 a
};2 s0 c. r! C J9 p: q
) e7 P, g4 w# |: e A2 rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 J0 E+ l& o' v .leds = da850_evm_tl_leds,
/ p$ j2 {/ F, J! w+ `: O. a# N .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 d4 n' G9 C: M) t* s* x
};
, A4 v) Y% A/ h0 s
& c5 Q3 J6 ]; ~5 }& y" e( C" `static void led_dev_release(struct device *dev)% v! j/ V4 t; `8 \8 H+ r( A! R
{
( U+ x: e, d0 \5 n/ V};
3 L" b, w f) g8 N8 t
8 p" Y" |3 i8 R) b) W! Dstatic struct platform_device da850_evm_tl_leds_device = {
3 Y4 |/ u" V: O |; x9 m .name = "leds-gpio",
^- a; J# D+ a) G3 @, p- _ .id = 1,
3 J/ J) ]6 Y& ]2 z8 n$ ~ .dev = {9 P, n/ I! \( M# z2 {0 R
.platform_data = &da850_evm_tl_leds_pdata,: R$ c g9 Q; M6 X4 i4 \
.release = led_dev_release,
- i0 |9 W3 A- j9 S4 t! N! X+ L }
8 h2 G# M, g7 x/ n% y! l};+ L7 t) _& z" _* W
! M) j/ R. Q: g$ p- ]' R4 C
static int __init led_platform_init(void)
# o& j/ l- y" V- w{
' j* c; ?, d' o3 x int ret;. w0 @! h0 \$ o& F4 O! ]
#if 0. X- o J+ Z# H( N5 `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ o4 x9 @1 W- m
if (ret)
6 }7 a* t, D7 e4 ^4 B0 X) A% k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 x( }9 ?7 P8 _% r: A4 `' Z- n2 P
"%d\n", ret);0 A' p0 C. \! n8 m
#endif
: c2 C9 Z2 r w. C& A ret = platform_device_register(&da850_evm_tl_leds_device);/ L' W% a8 N, J d* ~
if (ret)
9 z- u) i7 A. w6 N, G' A9 w7 \' L1 Z pr_warning("Could not register som GPIO expander LEDS");
4 J& Q$ E9 V/ F8 V! g$ }$ Y4 K else4 r8 v' O- G4 R
printk(KERN_INFO "LED register sucessful!\n");9 w( T+ n7 K" X y) A
% g$ X3 q; {4 x; T* g. b
return ret;
' I3 E1 E9 J3 E}- Z" W0 o2 {- r
5 m8 S! a0 G$ ^. g
static void __exit led_platform_exit(void)
- E; ]! O/ `( J+ X$ d% g{
" |$ R% h" e, _& A, k( H platform_device_unregister(&da850_evm_tl_leds_device);8 g( u7 P8 j% s, n x9 X9 Q' |
! O- B0 q0 y* \3 w. c, @4 r
printk(KERN_INFO "LED unregister!\n");/ h ^" b- Z4 G
}# @$ C, K/ g- e6 `4 q
0 z/ D5 {* M# {$ ?
module_init(led_platform_init);
+ d$ L0 ] J$ }4 M! q9 imodule_exit(led_platform_exit);
, C m/ j8 l5 z7 G) h' h7 x# E& }9 D
MODULE_DESCRIPTION("Led platform driver");5 v3 s$ B2 C0 ~. D7 q. Y0 [
MODULE_AUTHOR("Tronlong");; H8 ]& A1 H' D R( F" ^9 Q
MODULE_LICENSE("GPL");
# U+ c5 K' I) j4 R: l. k# H
7 P+ M. r7 C2 p% e7 Z( B9 } |
|