|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 V' P7 }9 l* r7 G h
#include <linux/init.h>
- X1 c! f3 T" `2 Y5 A: f9 v9 I$ W#include <linux/module.h>5 ? R7 n# X% g- Q* p
#include <linux/kernel.h>1 L7 M/ p- X, S
#include <linux/types.h> b* F9 @+ l% |. k: N
#include <linux/gpio.h>$ O7 Y1 C& ?2 Z5 X1 I! o# x
#include <linux/leds.h>
8 e/ h/ u ~3 `# i1 t#include <linux/platform_device.h>
! J4 m8 h9 I$ x9 G2 q, J; {0 k8 F) m2 O% |& z- G x# v
#include <asm/mach-types.h>
) K. |* m' v4 K" [9 J1 @7 ~#include <asm/mach/arch.h>& S( Q5 ~/ D$ [; k
#include <mach/da8xx.h>
+ t; `' M2 X1 B, H5 ^2 I$ Q0 B1 j2 ]#include <mach/mux.h>. K+ k) k/ \1 j; { f" s6 x
* s+ C, p" D2 t5 F4 ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! K7 C4 F" M/ x. B#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ ~: z" j$ O' E) \# d2 E2 E) [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 M5 y3 t% k6 V# Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( p$ T8 N4 ?, g/ i- q: h9 h- H+ r G- G( K5 Q
/* assign the tl som board LED-GPIOs*/
$ p: ^! }- m% c' ~% j% l8 r# ?static const short da850_evm_tl_user_led_pins[] = {
3 Y/ ]5 x& }" @2 U# o" C. N. ` /* These pins are definition at <mach/mux.h> file */+ Y/ A6 F9 O! u' M: C! q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% g& R& q+ F$ n/ x1 l/ F
-1
( I0 k# V; k, U: {) @) X};5 N) t7 G; e ^& T; c: i- {
% H3 B! g0 A4 p: l( C
static struct gpio_led da850_evm_tl_leds[] = {* |& T7 G8 W. G, ?
{$ q8 K9 `0 b) g
.active_low = 0,' d* ]+ C2 [1 p! w$ v# [
.gpio = DA850_USER_LED0,8 q) J4 E# i$ x/ W# o
.name = "user_led0",
6 d, v9 A; P, p. B$ L4 D .default_trigger = "default-on",
" R- }# t6 p$ R },- I, @( P! x+ m- v! p% L
{' V* O. ?; f+ q$ {& H& S8 i
.active_low = 0,* O" G' r% E" l
.gpio = DA850_USER_LED1,
! ]& n$ ]* i0 \ .name = "user_led1",
1 g# c, J5 n7 f1 R .default_trigger = "default-on",1 H7 [$ P, A. P$ ^2 V+ p
},
& t9 m* i) K; k1 Y K4 l! Y; w {; F: s# w6 e, k# [+ f$ q
.active_low = 0,# y) W2 G, Z" M2 o- b) F* M
.gpio = DA850_USER_LED2,* ]# E" S2 v( F' {
.name = "user_led2",) s$ t6 W$ V9 \
.default_trigger = "default-on",
- h8 _- a$ d+ T: n) L: S. F2 B },
& x; a) J- `: {( { {! V/ W1 D% _, V9 q- G
.active_low = 0,
4 `6 _/ Q( l/ G) F" x# E& T .gpio = DA850_USER_LED3,
$ v# w6 c8 ]5 W, `7 j7 n .name = "user_led3",0 Q7 l4 {' @% [ H3 d; O3 q4 U+ I
.default_trigger = "default-on",! y% V7 o1 G4 z* _- P2 \
},& h' u# W& f/ m0 ]+ C, y* O
};- U- A4 Y F% z! ~9 J2 s& }& g
( |& O& c' ^ ]0 s0 [( t( Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% r* @, Y; G/ A8 y ^ .leds = da850_evm_tl_leds,
/ s' |! [- s; H5 j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 r- o3 E/ G( W};
" d% r1 d9 A0 {
$ P& w, F4 x2 N: N! W; s. tstatic void led_dev_release(struct device *dev)0 B0 k e- E1 [5 F" N/ z5 h6 B; w
{
+ b. A- a: x' ^3 F, ?9 C};) V) o; P6 B+ N+ s
" c8 ?- ?$ E5 |static struct platform_device da850_evm_tl_leds_device = {
! Q: |9 ?- J* Y .name = "leds-gpio",
: H& K+ j1 G8 E1 g- M% Y B .id = 1,
- V0 q' Q# } I% v, N r& h& D5 j/ ^ .dev = {
: X; J2 m7 l0 c. }) r .platform_data = &da850_evm_tl_leds_pdata,& D: X: t1 o5 O1 k0 m
.release = led_dev_release,! H! A) q, G$ X6 X& f k5 D' j
}
5 G. o/ _# _+ ]3 c};
- e# g8 J5 S( P' _0 b# `, o, K4 p3 e# Y- f" C7 o" I6 y; ~! L1 D
static int __init led_platform_init(void)
- N: Q* b; Q- t. h1 c{' B' j" `# Y( E+ y5 M
int ret;6 m D2 V. U/ e* ?% ]- P9 G
#if 0
" C. Q# ^% w# w7 e: u0 ]% G ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ Y% f# z. Y$ O# a( R0 d2 n0 B if (ret)
/ l- u0 {" {+ G1 i! z# f pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* @" w$ [4 L. e" F
"%d\n", ret);# g0 c- F- N+ z/ y
#endif- {' l1 X$ }+ e0 L* c
ret = platform_device_register(&da850_evm_tl_leds_device);+ C& p7 @# O, W7 L
if (ret)
0 u; u3 o! I: Z9 }/ x7 h7 Q# G+ o. c+ B pr_warning("Could not register som GPIO expander LEDS");
2 \6 O/ S% A4 E5 M, f6 L7 ? else8 O [% e' p" A. F
printk(KERN_INFO "LED register sucessful!\n");, _ G4 K; @6 h; _- t0 E5 K
1 P' C( b/ C, _) L. S4 }! I; R8 e
return ret;
c7 o9 F! v4 T: S B+ `: N}% E/ W6 e8 n2 w/ ?; M
, L" u# E; O6 {' [4 i/ `static void __exit led_platform_exit(void)
' |3 x9 i3 c. v- J{2 x' W8 ]( u' n" E, f$ }! e
platform_device_unregister(&da850_evm_tl_leds_device);: I+ r d) ^9 f, ^8 C
, x I1 d& p, i$ V( J' x printk(KERN_INFO "LED unregister!\n");) H# h6 c; |: P4 E" c; b- y
}
" p9 j& a- O% o9 @) v
3 z1 k4 p5 T+ t% C1 Q/ a: qmodule_init(led_platform_init);
4 ^0 d+ c: G' Cmodule_exit(led_platform_exit);' A1 c8 a; i2 Q. _
+ k9 d+ J6 m. R! PMODULE_DESCRIPTION("Led platform driver");+ i& ?/ w5 R& Q+ Y5 o: ?
MODULE_AUTHOR("Tronlong");
1 k7 [3 Z% F/ }* V3 o5 \8 r. tMODULE_LICENSE("GPL");, L5 {" L. X( w# a6 H
9 A" u# x. c& }. i$ K j7 t |
|