|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 n* P' D3 B5 f' t; a
#include <linux/init.h>- A f6 A* t$ W: e' G
#include <linux/module.h>7 w. ]: r# h- o5 X8 z# x2 F2 x' L v
#include <linux/kernel.h>* A0 ]$ r L% J% t' u' s' ]
#include <linux/types.h>5 `) O" t: x7 l5 L0 R; _
#include <linux/gpio.h>% v' L a6 i. d7 ~/ U- w
#include <linux/leds.h>; w2 \6 W7 Z* ^* b: V7 }9 t
#include <linux/platform_device.h>
! e; S# z9 t5 c( t- K K/ q! v/ n% C5 N4 ^
#include <asm/mach-types.h>0 i9 |# _$ i" x* `# F# g- ~' j) H+ R3 V
#include <asm/mach/arch.h>
8 @6 C" d" w* |1 A/ o/ Z#include <mach/da8xx.h>0 f, G% ~% q6 |
#include <mach/mux.h>2 b! Q" c9 A9 L- n( T0 V3 h
" n3 v" m* ?1 K7 b# @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ k6 [ i' m8 c+ }: H7 E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), C6 Y) H J% T# S
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; q. Y P% D8 Q! c/ K. d#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: Y& d0 Y! T D/ H) ?" S9 W3 M- x. f4 q5 p6 ~
/* assign the tl som board LED-GPIOs*/ c; h C% W" w3 F) y8 V
static const short da850_evm_tl_user_led_pins[] = {
C; I0 i8 T0 o+ G) I /* These pins are definition at <mach/mux.h> file */
2 H5 V; l- E* P! i+ b5 r7 d1 Q! a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* ]9 ]6 @. Y9 o
-1
* s: X D7 }5 H7 ^/ v- Z};9 {- X2 @1 `) h0 t4 J: N
2 _8 x" j5 u, k' e5 `static struct gpio_led da850_evm_tl_leds[] = {
' d5 E3 X) O( n& R {6 A2 P1 X' D t6 U9 t, o Y4 v' S+ j
.active_low = 0,5 W; f3 u/ x6 \" r/ @
.gpio = DA850_USER_LED0,/ b d* t& O; y! k U, y
.name = "user_led0",2 A1 r) B) O9 P- a( e
.default_trigger = "default-on", J2 j2 b' {8 B: b: R
},
1 e( V3 d2 m( t$ l {
+ D8 H4 n6 F" O8 w% G .active_low = 0,- A- Q+ d+ r* c) q* [
.gpio = DA850_USER_LED1,$ i. ~& A. k: H
.name = "user_led1",
9 r8 v9 B- F( G; w9 [) @ .default_trigger = "default-on",9 D! K. r) f0 L$ F k/ f) U$ \
},$ A) Y/ M1 | b. x
{
- f7 |8 W! R: Z" r .active_low = 0,1 x; ^$ X. G2 N+ A8 ^
.gpio = DA850_USER_LED2,
+ k- ?& v0 X9 ~/ z/ e+ n .name = "user_led2",5 i4 Y m8 {7 |* {
.default_trigger = "default-on",
. e, a) A0 q: w9 G0 m5 D },% Q$ c$ A6 |- V$ L5 ?0 S
{
/ g" s( q: |& L .active_low = 0,
1 C1 {6 ^& g- j4 ~ E6 N I0 } .gpio = DA850_USER_LED3,
( a0 N; O( |! [% m .name = "user_led3",) \7 i( z3 E& c/ i# g3 ~
.default_trigger = "default-on",
4 q1 a* r& e$ d2 J& [; |, r },* Q- u' q# x% `8 P2 q, V
};, I% z0 Z8 h. J# K5 B Y% |, j/ a d, {
$ d5 J1 }& t2 `* |6 c8 i# |8 r! gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& @. p4 V& u1 L0 o
.leds = da850_evm_tl_leds,% L4 s9 |1 i1 E1 U" C0 ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),% C; J6 B7 G% ?( Y2 N& h( w
};
7 K7 [4 R. b* Q( f* y
/ O8 m9 g$ {& s v! I1 h* A: g7 xstatic void led_dev_release(struct device *dev)
/ B- I! ]8 z& t( z$ h{) r9 Y2 @# o1 q
};
! Y9 u# A, K- {% p% _7 _# @* s% Z+ @. [( Q9 q# E% f; O
static struct platform_device da850_evm_tl_leds_device = {9 i) k" ^: {5 M
.name = "leds-gpio"," [/ D k6 _6 P* k2 |0 S# A" F! E
.id = 1,: j4 h% e+ C3 g5 f
.dev = {4 @5 o1 M5 y9 {- I& N
.platform_data = &da850_evm_tl_leds_pdata,
( B0 l6 n+ b3 ~& [" l .release = led_dev_release,6 e0 V5 a: R) D5 f5 t
}0 a8 g O% V) ?5 ~. h. }/ C
};, D# Y' X# o! S. D7 M$ ?
! Q) [' R4 w/ y9 u! h0 r: h
static int __init led_platform_init(void)
2 |. r8 w9 F7 g9 T{
- v6 b# x* z/ `' O7 i3 S int ret;
0 R0 `' V& [, e' }. Q7 i#if 0
, z" h0 f. N, B: N" q" V \ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& y& S: ~7 j. V. y& o6 ] if (ret)0 s: U8 x: X; m7 D! k1 A- `
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% e. ]* R, h( x `1 I "%d\n", ret);* x2 Y& `6 `1 F' e& B% @
#endif
3 ?: K: u/ |/ d' X! Z9 Q+ x ret = platform_device_register(&da850_evm_tl_leds_device);
$ A3 ]! ^' E4 R: u0 p if (ret)
8 t3 ]3 j" I- q8 H0 X ?' B pr_warning("Could not register som GPIO expander LEDS");
3 `+ V- P. i- z& D1 T% L else
3 x+ G+ I4 h; b S- x; p; y8 D printk(KERN_INFO "LED register sucessful!\n");
* w& K/ I/ V9 {3 c9 {* j' q# g
8 r. P$ \3 D; `# [3 Y! w return ret;
2 ]0 n& S% |. Q4 \' w6 } a}4 A1 I' l4 o# U3 ~& l0 u, ?- P: X
: D' K; I' V7 K+ u% T' vstatic void __exit led_platform_exit(void)
m6 e3 J" [$ M{5 C' L D" M5 f$ p4 u
platform_device_unregister(&da850_evm_tl_leds_device);
5 e4 G: z5 I' A p" o# j
& J$ W U |6 ]1 d printk(KERN_INFO "LED unregister!\n");
0 k( A* [+ q& g' o$ J; O6 N4 F6 }}
* U/ Q0 @% Y& B) F7 B2 N ]( d- j& ?/ n
module_init(led_platform_init);# a' }" ]3 k$ q2 R2 g( t* w/ P
module_exit(led_platform_exit);
+ j' f+ W+ ?3 O4 `, A% Y, K
) k7 D' v0 D, ]MODULE_DESCRIPTION("Led platform driver");
. Z+ g: Q) Q# M: G& v2 d) O: L. pMODULE_AUTHOR("Tronlong");: V; T& ~1 a: S l" ?
MODULE_LICENSE("GPL");
# y! m$ R# X! u# v' M* {; s' {( q; \6 e4 N
|
|