|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ _ C, f) J+ O- K! G# ?0 y3 o#include <linux/init.h>. q' i% t7 ?+ K7 y ]% p
#include <linux/module.h>0 s5 n# S5 Y& j- n( M( q0 I
#include <linux/kernel.h>
1 ^- p C! P2 w/ M8 x4 _, [#include <linux/types.h>) O4 s% T; {! O* j% |
#include <linux/gpio.h>
2 }; e- f8 |1 m6 G; Z; v8 @* X#include <linux/leds.h>* T( D4 i( N! d2 m) q4 t8 U9 ]
#include <linux/platform_device.h>' r$ e9 B! c$ N& ^* l; L1 C0 h
* s% E# |. z7 z5 E% {' _
#include <asm/mach-types.h># S% Y- A3 j: f
#include <asm/mach/arch.h>
* u2 a8 G, ^( N& u7 [+ U4 A#include <mach/da8xx.h>
( A' C2 \& g* W9 h, Q#include <mach/mux.h>; F- H+ [- P/ x/ a; A
6 r" }8 t: Z$ W1 e- R
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ H9 l6 U, i1 r p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" _: j* Q: W& N, M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): l# D' H* t1 g/ R6 \9 V' ]7 m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' d$ v2 _7 J* {3 C( {: K4 p" b2 r7 c R
/* assign the tl som board LED-GPIOs*/
( H l0 a# W( Ostatic const short da850_evm_tl_user_led_pins[] = {
; L. O3 m Q. w* e, H) U1 p5 k /* These pins are definition at <mach/mux.h> file */
) m* `) x5 J8 e+ N: H: V) v DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 S e$ A; x/ ?; f
-1
" B( N8 l9 q0 L4 \, n' H5 z};
6 q9 _5 r$ ~ @
2 ]' ?' H% w; M; K6 Estatic struct gpio_led da850_evm_tl_leds[] = {
9 M3 l) j* U% Z; v {
2 p3 N( F0 K& w8 X .active_low = 0,( \/ m+ {5 T1 |- r# a: e' T
.gpio = DA850_USER_LED0,! Q0 C( i! h# X4 l) B9 d9 R) {5 |8 W
.name = "user_led0",
. _9 s/ w3 z3 n8 D& X .default_trigger = "default-on",
5 G' E. G8 q" j& R },# _. b d2 `5 N
{: o6 w9 t, i9 B% U% d0 y$ {6 @
.active_low = 0,) g; i% C/ c8 c) R
.gpio = DA850_USER_LED1,
6 V2 z7 y3 H3 c$ Z& K T6 r .name = "user_led1",
0 S4 ~# T. w- m6 v+ u7 ]7 Z! O .default_trigger = "default-on",! x2 G- j+ F6 _* f) z7 x* `
},8 b$ J1 X# H0 d9 u) w3 o; e
{
6 }3 y1 t2 x+ V7 H+ O .active_low = 0,4 x# i0 e! x* z- K+ \9 p2 x
.gpio = DA850_USER_LED2,, {7 k' O: o) {% R
.name = "user_led2",! B$ i9 ?" ~# i7 R
.default_trigger = "default-on",4 m) s" a3 ^+ V1 b* Q" s: W
},
6 d$ ^3 A/ K6 R {* u+ t4 R) o4 j; _4 ^
.active_low = 0,
2 F& b9 e5 M5 H8 u! ` .gpio = DA850_USER_LED3,6 T+ f; |8 z2 G3 j# P
.name = "user_led3",
% x* E% g0 {4 o1 w; h& y/ o .default_trigger = "default-on",
$ ?& o; d$ t' `* F0 h },2 k2 `" A& b, W+ Y$ A+ w( T; l
};/ @ E- H. t% @- a
+ ` r1 z' a- Q/ j1 O
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% f) X8 d% v3 q! e! i
.leds = da850_evm_tl_leds,4 x% e2 W/ V6 T2 K' ?/ B% {) r2 ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' d/ H3 R3 @ L
};
7 }4 v2 w! t, R' W9 x
# h$ U! w5 Q( x5 hstatic void led_dev_release(struct device *dev)
6 l# B" @) _. d; ]1 n{
, a8 |/ ?" H- b8 a9 Y# _4 R};
6 [" }7 b) i. l' t( @0 H
& [; d% V0 |( ~' dstatic struct platform_device da850_evm_tl_leds_device = {
$ l3 K6 n1 ]! P$ ~. {: J- ` .name = "leds-gpio",% d: p- L7 F8 b$ c, u
.id = 1,
' O G# h3 ]. c8 W2 ^4 _ .dev = {& L1 C/ x! c6 i3 @4 ]+ i
.platform_data = &da850_evm_tl_leds_pdata,7 K5 ]: W/ ?" X0 J) w' H M ?- L6 A) d
.release = led_dev_release,, G* w- m7 O, \" b
}
3 n$ {- q* m( u: X' w C5 H' w( o};% t' \. X: z, q5 L, Q- T/ X
" ^$ \$ J, e0 V( q- q) g; u1 G8 Wstatic int __init led_platform_init(void)
' [0 M& {# Q: e7 M{4 [- R9 ~* s; C3 c
int ret;
- F2 t" o! T7 [! x+ J#if 0: h- ~ T) J7 c4 o3 B! E( E
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% P, T* z; d. O: y! N if (ret)- I1 Y- k# ^8 M6 n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: s' b8 ?+ g% u0 y "%d\n", ret);% ^3 S/ L4 L) @8 t! |
#endif
+ p: B2 k; v7 S4 Q V; A: \ ret = platform_device_register(&da850_evm_tl_leds_device);" h+ k8 [" y! o3 {- s4 H
if (ret)/ Q2 R8 F6 L5 o. r7 M% `
pr_warning("Could not register som GPIO expander LEDS");% ~0 l' @5 l' y1 H @5 I" T
else
1 l( P$ ^/ U- m$ b: K printk(KERN_INFO "LED register sucessful!\n");
3 H( I' ]: B d! C, a0 X6 M9 d* Z; ? C& Y- C2 S3 ?
return ret;. E! F5 }& E9 c' X# q
}- b# X; P4 {5 P
1 _% k; |# }4 O3 D3 T
static void __exit led_platform_exit(void)
# x6 z. h9 n" o" D+ W{8 [* b g' \4 Y/ ?8 H" j
platform_device_unregister(&da850_evm_tl_leds_device);
3 _/ M; M2 c6 T8 K- [7 W: p3 e3 a
printk(KERN_INFO "LED unregister!\n");% b3 N/ A, K( J6 s4 }( l
}
' L( l9 o, q- k% c ^" I7 x* B& X* N; O
module_init(led_platform_init);
& ?" H& R. B& o) p. o9 Vmodule_exit(led_platform_exit);
4 ` ?6 @ o6 F, y2 _/ L8 R2 Q* Y7 M
MODULE_DESCRIPTION("Led platform driver");* [$ J& `5 o) s
MODULE_AUTHOR("Tronlong");
4 p6 S+ P( h7 RMODULE_LICENSE("GPL");
3 f: d2 s) V- V, I2 o" W. s
: _# q/ T/ z: a0 ^7 e |
|