|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 c+ B$ ~' ?4 X! D/ I' _
#include <linux/init.h>
4 K F, |2 c6 [& A/ `#include <linux/module.h># O! {8 k0 z) A% r
#include <linux/kernel.h>
r, a; O4 O% @#include <linux/types.h>
& {" g+ a( J0 N1 L( N, e( |#include <linux/gpio.h>8 V& P8 o' t# L4 P0 h
#include <linux/leds.h>+ Z" n/ [ V) _, h% J8 B
#include <linux/platform_device.h>) l$ {% X, ?( ?& `
, F9 Z& O/ ~: a; R$ A
#include <asm/mach-types.h>
! Y, y- Q% V; n: S" \' s' g4 V( E4 K+ ]#include <asm/mach/arch.h>
1 w1 b2 u+ t9 o% y/ g2 T#include <mach/da8xx.h>
/ W X2 E$ o8 _; L g, ~#include <mach/mux.h>
& Z; E- T0 E( N) x6 u( _. R# B4 r5 r K
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ r }0 X7 l/ Y6 Z0 t
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& \. N1 d9 g. Y' ]- w6 G" e
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); h7 P4 [* s% G. I, N1 k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 B- R- O6 Z0 `3 M8 w9 S/ x2 P
/* assign the tl som board LED-GPIOs*/
5 \& p0 A3 t/ c, V! E* I& t" `, zstatic const short da850_evm_tl_user_led_pins[] = {
9 Z/ |2 q8 I; I /* These pins are definition at <mach/mux.h> file */ X6 G' R, M( T0 j4 I8 h
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 n" r) R3 b# W2 P/ m& H8 q -1 z' F7 n* ^% I- `# }8 H w6 M
};
+ ], _( Z8 \" a* c) U& A; Z8 j c& Q# G* N& O$ l8 [9 G2 O B, v
static struct gpio_led da850_evm_tl_leds[] = {
) S! x9 ?) O9 p) ^: G {
# q5 {1 e5 T: F0 F9 M$ T .active_low = 0,
$ o' P5 M0 E$ M2 p+ ^4 F, P" X .gpio = DA850_USER_LED0,5 y" g5 k( ^5 a9 ]2 Y: A/ T
.name = "user_led0",2 P" @) d2 i0 [" ?' W
.default_trigger = "default-on",/ K9 g/ r5 Z% [# d- C3 [- v X9 a
},
1 X3 A/ D+ F$ q. m, G {
( v2 L1 K" y& }( B- t, d: ] .active_low = 0,
z' E0 z# t9 q2 y4 w% K .gpio = DA850_USER_LED1,
9 Z9 H! W. g( ?8 j" `6 a .name = "user_led1",1 ]3 O$ g% g/ A- V
.default_trigger = "default-on",+ F6 Q6 V8 F" C
},
' ~8 T. h' G3 T* X* a8 l2 \9 V {
; X" e* y/ G5 n& {$ Y .active_low = 0, r3 ~- F- u+ _3 ]$ |" n8 z
.gpio = DA850_USER_LED2,1 L' L7 k4 u5 P+ o% I. m, P
.name = "user_led2",* G/ n) \4 d# Q7 b' t# E
.default_trigger = "default-on",
! C# E9 o: k `# d! u9 N1 b0 W },
! G! f& i( G6 G$ K9 m {
0 h- M. a$ I+ `% }5 S# E# E- y3 i .active_low = 0,' c' \' P7 |5 z; A" N! W9 ` W) C
.gpio = DA850_USER_LED3, V( o" \$ e6 m3 v+ u5 D E7 M
.name = "user_led3",
" S7 Z( ~% s4 q- z) S" P( G( f .default_trigger = "default-on",
: `8 {6 |/ Y+ h/ u },- ?, K% G) l- O3 N S: F9 L
};- T1 R7 _: d# z$ |0 U" E6 c; H
0 I: ?* w% O& J( p! B' V
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 F% U6 e3 }! P: D
.leds = da850_evm_tl_leds,
. x4 n3 I4 g9 o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! _* b$ y$ F) M0 G" ?5 _* k};
+ l$ T5 Y. q, |6 Q. f+ }( v9 D$ s& d$ j! y, u+ a5 n
static void led_dev_release(struct device *dev)1 e j& ]# c; `/ H h+ W
{
5 M4 x8 T; h2 c" @) q @4 p}; ]( h3 ^6 G: h- E+ ]/ Z* ]2 {
2 d5 R& Y( ]) ? W: q g/ E3 d- Qstatic struct platform_device da850_evm_tl_leds_device = {
: e, B q- K, ~( q# g .name = "leds-gpio",
; ^) N& D c4 h: J1 N .id = 1, D) O* ]: K, s" \+ [, f
.dev = {7 X! l+ g4 @7 E7 R* F
.platform_data = &da850_evm_tl_leds_pdata," h" |3 a$ m# M& ^' n
.release = led_dev_release,& I# G% i( u& F# s/ J2 E: h# Y8 K9 A
}
0 y4 D4 k$ i% V$ }3 @};
% l- e( D; g$ q& i1 o9 _/ T# n% u5 g+ f
static int __init led_platform_init(void)" R9 E6 a. ?2 Q. ]- z" X# b; |
{
* F' }: R7 z5 r U5 x, y! s int ret;
3 @, u: W2 O' f) |/ F7 @7 d7 k1 C#if 0
. M4 O! X, x1 n* a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ F8 {5 v3 v* `( u1 `' Y
if (ret)
- [, M% ~) P0 e) n9 @: Y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 p! z2 E: {4 O; M+ T "%d\n", ret);- d0 h+ X2 u3 A2 L+ P @+ l
#endif4 ^" c! F! y4 E3 w# J
ret = platform_device_register(&da850_evm_tl_leds_device);
. P, C! Z1 s8 r \) Y+ j2 S if (ret)5 O- g% d# n0 Z( s% R) n T
pr_warning("Could not register som GPIO expander LEDS");
+ Q5 v/ E8 Y& f: @* L' A! w5 ^& Y else
$ \: N* R" G/ ~3 c, K3 x printk(KERN_INFO "LED register sucessful!\n");
0 D" y e& s& c! e( M1 ~" ]
% |0 ]* `+ N4 N- L+ L return ret;
( z' ~7 c4 O. R}
! i2 i o+ S) ]5 M
! W$ C) {8 U* Q, |* c4 astatic void __exit led_platform_exit(void)+ l0 E# M- c1 c6 b9 a
{
4 [& ]% I" A" J: z* B# J platform_device_unregister(&da850_evm_tl_leds_device);( y6 p; }+ q1 D2 Z8 e
5 z2 M0 f; ?! A8 V& j printk(KERN_INFO "LED unregister!\n");
8 ?9 C( c4 G1 h/ B# g# }}
2 E p" V" w2 Y
! f# n- s0 T4 ^1 F6 @# M Wmodule_init(led_platform_init);
) a# z x ~' x: ]. g$ mmodule_exit(led_platform_exit);
9 @3 L+ [- v/ L" k
9 K% x& Z/ s5 f+ l6 uMODULE_DESCRIPTION("Led platform driver");
+ Z% m' `7 W7 S, QMODULE_AUTHOR("Tronlong");% i- |- o! A2 _/ e" W: o) c9 H
MODULE_LICENSE("GPL");5 z: k6 n( y- Y, _' @. t+ X
( p/ k% c" ^. a, U* \8 G2 q |
|