|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; G* H5 z8 l% v5 t8 F2 X% R' n+ |7 g- p#include <linux/init.h>
9 Z! v6 d# G1 `7 x/ t' e#include <linux/module.h>7 S- Q' |7 e, E z1 d
#include <linux/kernel.h>
& V! V# W3 p5 g8 w% z+ N3 R; u#include <linux/types.h>
& m/ b2 q/ ?! y3 F3 H" O#include <linux/gpio.h>4 Y, L1 n* m3 t. S# e# n- R
#include <linux/leds.h>5 d+ \+ U+ t, J& `
#include <linux/platform_device.h>1 z) P3 O% w, U5 x/ F1 k
) a. e- f+ x, f' ?* X: |, ] _
#include <asm/mach-types.h>
' L0 V; T; H* t3 I# e* T#include <asm/mach/arch.h>
) o' B: W. r' C$ X* Y$ Q#include <mach/da8xx.h>
" J% x8 a) D" d#include <mach/mux.h>
+ D- r; J3 ], {; }: m4 I# {# |8 P9 o
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: m: n' B3 ~* J8 U* Y1 T# I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 C \. v8 E! Z/ u& D, X6 W4 U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* c6 q. @& P4 N2 C- C/ y3 G" F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ @) v2 @+ K! M& a- P( Q
) t3 C# n$ F: S# I- w2 \
/* assign the tl som board LED-GPIOs*/: Y4 i% y- h: _% b9 a: [3 K9 X
static const short da850_evm_tl_user_led_pins[] = {
+ D3 Q% C" K, z3 K) @. S' E /* These pins are definition at <mach/mux.h> file */! m5 N* k: H7 o) p: g! k) l% u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' ?7 a$ o2 v/ Q3 v3 v! l/ v! j
-1/ k6 K) w' S8 s) X/ ?
};& ~% s2 M: B9 g, s o, @
: F9 Q' T( E% p
static struct gpio_led da850_evm_tl_leds[] = { G8 P5 ]) z! B1 h
{
0 }* E: Y3 ?$ s" X( \. I! } .active_low = 0,# S, {( F( a7 k+ ~, v5 ^6 J
.gpio = DA850_USER_LED0,
* H7 m& P( ^) \' Z+ A/ ^$ ~ .name = "user_led0",' T. H% O. }! _
.default_trigger = "default-on",
. X3 N2 D0 ^2 ]( M: C' |4 b5 U! Y },
( b, N5 d1 r! |* u3 [: j {
^2 E$ j4 x" x g/ K, I4 H {1 l .active_low = 0,
/ k$ v9 q* }! V! M1 { .gpio = DA850_USER_LED1,
0 G7 v. k# e) r% H# K) g* e5 o .name = "user_led1"," S' p4 O$ K2 ^2 k# m& P! Q4 C
.default_trigger = "default-on",
p+ X$ _3 \0 l( d2 p0 Z$ W0 g },6 C Q1 g6 D* b3 P7 T) l
{
6 O2 q6 E8 v, K .active_low = 0,7 ?1 m9 F* G/ l# _; p
.gpio = DA850_USER_LED2,
% _6 y. l( I. E7 G% Z .name = "user_led2",
0 i6 i& t9 o) ], O3 k4 s9 b8 n .default_trigger = "default-on",; Z: T* G1 m2 z* _% J* T: a. D/ t* s
},. i z6 e) X! y5 S, K" T
{
1 g5 }. \ S3 L9 ^" ` .active_low = 0,8 ]0 G& w+ q" e4 j3 Z% u2 T. A
.gpio = DA850_USER_LED3,
/ a7 C+ _9 @% _* o .name = "user_led3",* |: V, F1 I/ I! D! y
.default_trigger = "default-on",4 g. l4 Y; y6 J- M; u1 w) f
},4 U, a- x/ A% _
};; L) j3 g$ F7 [
7 i3 ?1 H6 S! o3 z, N$ @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ r$ _1 @' v, h! E- V2 P
.leds = da850_evm_tl_leds," I; k4 b" h7 G, X6 P, b
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& A: ?% _# t6 q) Q6 e7 A
};
% S. P% C' g& a( |8 q+ U+ t6 s( V4 k- N# c0 }( F! E- l& O
static void led_dev_release(struct device *dev)
3 `& G' L' v/ J v J9 e{
; z* z Q: Y2 g7 H1 n1 V+ w; @};
) `, ]9 Z' N6 ]2 D) D
# I# u2 `8 o( g6 H: w4 D: _, b( Dstatic struct platform_device da850_evm_tl_leds_device = {. @+ D5 z) N; P0 b6 u6 V: o; X# w
.name = "leds-gpio",
g- O, q1 J( H" e+ U .id = 1,. J$ L5 |7 K, ?7 f, }, G8 `( D
.dev = {* J* _/ `6 w$ ^: n1 M ]+ R
.platform_data = &da850_evm_tl_leds_pdata,
6 ^. x: x! w+ J7 ~* r% ^% h4 | .release = led_dev_release,$ ]8 `3 U, }9 K( P o% @: c, [
}
2 {- P8 M8 T; Z) c' \% w};
' N/ `6 L$ J8 E( o9 o0 z& ~: t( l. I1 S! n/ M0 m
static int __init led_platform_init(void)* ]3 i$ h* s1 g. \! @& D5 z3 _7 g% a0 q4 Y4 z
{5 o- A# G4 b( x* `! P. }2 E
int ret;2 A: U9 O' ?- V! A3 S2 v% ]) M
#if 0
( A6 u7 ?9 N7 [; z Q/ ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; j8 d e: N; A; T' R
if (ret)! d/ S6 e9 z: x. Q: V1 l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 W) O# O+ I5 e+ ]/ o( t
"%d\n", ret);
6 i( K% A+ i1 b8 }, l4 H! m0 W#endif# E6 {) \% K) ]8 Z" u; s
ret = platform_device_register(&da850_evm_tl_leds_device);
* E; X0 B! @! l, C6 h, s' u if (ret)
( X; ^) c5 e9 F# u6 P% ` pr_warning("Could not register som GPIO expander LEDS");: P d2 V" ?7 _
else
' j$ e) }2 c' S4 {: Z printk(KERN_INFO "LED register sucessful!\n");7 d8 h+ Y7 R6 Y, Y. p
: T8 ` ~( F4 v/ U' G) j/ S
return ret;& B f5 s9 j) ?/ z1 x
}
; M0 C7 u D0 W% U& }
8 @8 `4 V5 |) u& d! Z- j6 kstatic void __exit led_platform_exit(void)0 R x, L3 W4 X
{
) x7 c7 R( K: Y- h5 s8 P5 I platform_device_unregister(&da850_evm_tl_leds_device);
4 z: o/ @7 h. q1 W% d5 T) A, J7 V& k1 b
printk(KERN_INFO "LED unregister!\n");
) Q% S" z" ]5 l0 w4 E}, Z6 F% k* {) C; j* e5 B6 T8 c2 w
: ^8 D3 d3 z, a5 ~! t
module_init(led_platform_init);
- V& p+ D- l! j: i1 X' pmodule_exit(led_platform_exit);+ J9 ?& E& [8 J0 @$ }
' p# S- N; ?$ X% F& kMODULE_DESCRIPTION("Led platform driver");
* P+ e: D' }8 ?3 X! x9 a* ]2 x2 bMODULE_AUTHOR("Tronlong");
- _ K: m4 G" L; N# ^MODULE_LICENSE("GPL");( t) V( Z; \- i: Z5 }- `, D/ U" Q& g
0 ?# V# q/ B' [& P |
|