|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 d( D1 ?3 u, Q! L" q#include <linux/init.h>
# j( T H: n/ I#include <linux/module.h>
8 _" B4 }+ W& d: w1 u#include <linux/kernel.h>$ E3 X% d7 K) J
#include <linux/types.h>
, s- f0 C$ d0 v#include <linux/gpio.h>" H: A9 D( O( z) A
#include <linux/leds.h>
4 d) R3 ]! d# M2 B#include <linux/platform_device.h>+ A( W% C/ J6 I: o$ }" [6 ^9 z- {
( c+ F1 R% W4 ~
#include <asm/mach-types.h>) r8 H% e# G8 ?$ x' Z
#include <asm/mach/arch.h>$ @( W% |3 Q; ]9 R3 L
#include <mach/da8xx.h>
8 M$ r+ z/ g: X4 h#include <mach/mux.h>1 g% M: y6 r6 y9 k
3 ^% J' `& L& Q$ Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 B g7 L; j3 z- c z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 a- c9 X7 o* {. t# Y) N/ E+ f
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( U, p$ k% F5 m5 D& [) y/ o+ D
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& I2 u( ?' h4 e0 X6 L6 _8 h$ E
6 @5 o7 _+ v: ~0 j9 t
/* assign the tl som board LED-GPIOs*/
$ E* T. K' b, ^6 r# Ustatic const short da850_evm_tl_user_led_pins[] = {+ {% I% d' d7 Z6 L$ K" ]1 y
/* These pins are definition at <mach/mux.h> file */
" Q+ s1 R1 ~- Q! q; a: | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* {" }5 f t6 ^! |2 v8 Q: y -1
7 o( ?# w- k; v1 a1 @; ~. q* v};
# l% `$ b o' a k' A, o8 g7 b0 {, T% x; I. n" [2 R
static struct gpio_led da850_evm_tl_leds[] = {- ^ g4 ]1 @6 O0 i
{
( M6 R2 c5 L# Y .active_low = 0,4 t6 ]; ]2 X' K) D* e: f2 Y8 j
.gpio = DA850_USER_LED0,
" J3 t/ c' [0 R; ^( \! p .name = "user_led0",
0 P# o7 k' Z1 d( P) } .default_trigger = "default-on",8 J3 U$ s# \/ R. Y" H
},
1 x! t' N+ _& N3 a$ v U- Y {( z- c8 t7 V1 }& d d/ \) A! a
.active_low = 0,( e. m! z- ~! t0 n
.gpio = DA850_USER_LED1, R7 c2 ]* p# E, T
.name = "user_led1",+ t; F5 V6 U1 I- y: _8 q1 J7 D
.default_trigger = "default-on",
7 s( G$ O3 }$ s },; `+ y# @/ M$ u/ x1 S- ?% p! w
{( r0 l2 E+ N7 w+ z a
.active_low = 0,0 p, h- K) x2 @3 H/ @4 d& q i
.gpio = DA850_USER_LED2,
8 e, m. N, K' H( y! T .name = "user_led2",
( t5 K* m% o1 X( G .default_trigger = "default-on",. y# x- z8 ~* |1 v( R3 v
},4 ~. Z1 |) k) ~/ v, Y4 `
{
2 d$ H1 ~! ?9 @4 e .active_low = 0,
" `8 k5 u: L* E/ P0 q9 @+ w .gpio = DA850_USER_LED3,
% l0 y$ s! G q$ G. A g .name = "user_led3",
7 X3 n8 q% s3 Q# s- Y .default_trigger = "default-on",: B Y. b- `2 {" n
},
" W3 ^* m1 ~. a% S};$ p. w5 J" y! c+ z% |" e) x
/ {2 }2 b- b* ]
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 D6 R8 g- r; O2 s: ^- E .leds = da850_evm_tl_leds,& B- E5 t* p. [; I& P8 v# @
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; m6 k! N0 x. \, m4 D
};
1 R6 r2 W( A8 h* M* a! q8 ]4 c# N$ [: C }, n1 q1 H; R
static void led_dev_release(struct device *dev)2 k/ ]) c( n1 [2 B) |1 Q" [
{
q+ P3 W3 [* l2 C/ m2 N};% x, v1 O! U) R' t4 [, B' t+ l/ ?
$ ^5 v# W7 I6 Mstatic struct platform_device da850_evm_tl_leds_device = {
# D$ I) S3 f- { L# o$ ] .name = "leds-gpio",
- }! M7 L/ O( _; V .id = 1,7 |& r* P7 G( G$ O& p
.dev = {8 b7 R9 T% c m: X
.platform_data = &da850_evm_tl_leds_pdata,
6 y3 m. ?! Z9 D- d6 N$ ~6 o+ V .release = led_dev_release,
$ U T% @2 ^" q3 ~( r$ I }
% c$ E* F, n& J};& B. i z2 N+ `3 T. ]" G, w6 d* C
1 n6 j" B% R3 h$ v3 b: |static int __init led_platform_init(void)
" E0 `# U7 L) [' n; v{
( v Q' |' Y z. v# Z int ret;1 V1 Y7 V: l+ D; \5 Q# K; S+ x
#if 06 V! S' W: v2 Y0 V7 r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; v+ u- o ]5 X) Q" {+ E0 U if (ret)
/ A$ c7 O- c8 p: v O" H; { pr_warning("da850_evm_tl_leds_init : User LED mux failed :", x0 H7 T: f1 ]% ~
"%d\n", ret);/ V6 u4 {% C Q) c7 D$ S9 d
#endif8 n# _1 _9 Q- @: g! j$ D5 O% _
ret = platform_device_register(&da850_evm_tl_leds_device);' E. ?# |0 j2 I9 Q7 o" Y1 G6 g
if (ret)
0 A7 m* G1 e& q$ T3 e! u4 c2 V pr_warning("Could not register som GPIO expander LEDS");
( k, L; U6 r$ d9 Z$ {& [2 A else& W9 Z8 i. v5 B- X; ?# ?4 p
printk(KERN_INFO "LED register sucessful!\n");
! G3 |# H! W0 V0 v- a- c) b) h; n( ~" A- F, ?" ?, }
return ret;3 k7 D1 a7 I# V: i
}
! Z! W1 l( ~. T- D: J6 E" S; J) @+ j6 F0 \- Y
static void __exit led_platform_exit(void)
. p/ j! |2 O" R8 y( i{
$ ?+ d3 F( |5 o+ l platform_device_unregister(&da850_evm_tl_leds_device);
/ i/ U8 @! V: Y- b4 v' ^) P3 ^" o# b5 c }* }, g- Q% o7 v
printk(KERN_INFO "LED unregister!\n");5 u$ T2 A2 z/ S; d) s% K
}
- ~) u3 V, W! L. g# w2 z$ }3 f
1 f- J. W+ H6 r, U* `module_init(led_platform_init);. T8 B! z' g3 t- t7 R: x
module_exit(led_platform_exit);
% A1 r; E' B6 X# l
/ z% U6 [" A9 q$ D6 Z) Q( T! ?MODULE_DESCRIPTION("Led platform driver");
" Y8 q( ~' g: P& v4 d2 NMODULE_AUTHOR("Tronlong");* t+ p/ Q5 e0 |& Q
MODULE_LICENSE("GPL");; {+ R- ^/ q3 i8 H2 J
B' A& }( _" f) \+ Z
|
|