|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 m* K, o, U0 H/ }: ?
#include <linux/init.h>7 I6 r p+ N- q6 F% ?
#include <linux/module.h># K K9 v6 H7 i6 Q6 e- ]' D+ k
#include <linux/kernel.h>
) }8 C# ^$ S) `#include <linux/types.h>
. z0 p2 p* q% E#include <linux/gpio.h>7 t' d6 y% P7 f) x6 I: q
#include <linux/leds.h>
) `+ D! G5 |% u# D8 q#include <linux/platform_device.h>
0 j2 f' r5 E( m3 H5 l# p9 w
6 \$ M4 I9 y- k: s% P; d#include <asm/mach-types.h>0 n0 F1 c7 m. h- h: `9 ]
#include <asm/mach/arch.h>
: h4 v9 l5 O2 n: [# r% s#include <mach/da8xx.h>
% q9 i5 _, [ N#include <mach/mux.h>& j8 s7 ^6 B4 y% Z" X( S1 ^
" l; j; @* L* V* b$ [
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 R! [" _" s& Z4 D. \
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! m' f& X* E. K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* ?. e ^1 _( h$ u#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 d9 g# n3 [* c* L1 M# @9 E* Z
, n6 M& ^3 @1 W% {% s( b/* assign the tl som board LED-GPIOs*/ m$ U9 }" }5 f6 \& P. U! @
static const short da850_evm_tl_user_led_pins[] = {& J& E$ G5 A; K- `( {, E( H
/* These pins are definition at <mach/mux.h> file */
+ M* g" a7 H9 A0 T$ S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# t2 t& z7 M8 n& s: E -1
6 E* T9 ]% h3 W1 f3 z; z, X};
4 y+ I- y0 J* `) |) W' D! h. ?0 G; C) k/ s* C3 h; s
static struct gpio_led da850_evm_tl_leds[] = {: R6 Z+ l. m7 }7 c5 L
{
" L6 B7 D2 l8 g2 K( X- I% L7 M .active_low = 0,
( \+ ?2 c5 _8 }0 m' Z" _2 X) O .gpio = DA850_USER_LED0,, k* k6 R. {. e1 G
.name = "user_led0",1 N+ S5 p3 l- u5 n0 }
.default_trigger = "default-on",, R" \: i Z$ L% {
},
D- v9 ?! ]; o" m {
- A% r0 ]! Q h* r, j6 h6 P .active_low = 0,
8 U2 `! Q& L, U9 l .gpio = DA850_USER_LED1,
! L, B4 J& K# L .name = "user_led1",
% \7 Q2 G2 {6 X! s# f0 G4 B .default_trigger = "default-on",, e% s! y; R5 g" R5 n
},
8 S. G8 m/ c$ |) ^# `2 P {: W3 S+ N6 i' Q. N3 ]+ o0 m1 G
.active_low = 0,& ]( Y$ C( M+ `6 r! M$ d: z% e
.gpio = DA850_USER_LED2,
$ I$ t8 v' g# } .name = "user_led2",
) V7 g( ?0 y9 Z- @8 Q4 J- L0 W .default_trigger = "default-on",
+ n" l% I6 }; y+ S3 k7 X) N0 N },
( S5 S7 W' E" U' ]9 `) h {4 v% P- c) I$ U" ^& C
.active_low = 0,
$ \5 J; J. Q9 q' a2 R .gpio = DA850_USER_LED3,
# t8 Z( X& \7 c+ ^ .name = "user_led3",8 L& G/ s, O5 j
.default_trigger = "default-on",, j4 y0 h, d1 X$ J' ]3 o ~, H8 @
},4 H g. Z+ N* k, L4 j" `
};
* X4 v [" I3 q4 u! H+ ~0 Q
. W, W5 L0 ]/ E$ tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( ]5 d- e0 D. W/ l .leds = da850_evm_tl_leds,
* H# ~/ n6 p5 w9 i& n .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- x$ y$ F0 W' t2 G
};
. e9 K9 |0 k7 B! k* G
) t' E T6 B4 [static void led_dev_release(struct device *dev)
[! f5 P3 y5 s9 s& x& I{2 v& @% y! _" j: H0 u: [+ y6 f
};
% t0 P- O/ e0 \( D/ K" { E; ^4 g2 U9 |: m/ ]6 A; K0 |! q& [
static struct platform_device da850_evm_tl_leds_device = {, p; Y/ u6 v/ x( D. ]7 Q
.name = "leds-gpio",
* U& u8 F4 ]6 A* I. | .id = 1,: l, t) k, e6 e9 o! o( C6 x! p
.dev = {$ K8 s$ Y6 s0 o3 `' Y
.platform_data = &da850_evm_tl_leds_pdata,
0 m& l4 s) z( q" |- i5 A& j .release = led_dev_release,/ Q3 C r6 \* x+ ?6 B( h% i
}+ G; T1 S4 P6 k; R- M( R
};0 k" L' z3 \4 _6 B3 l1 Y
4 ^ Z( E: a: M: l; S
static int __init led_platform_init(void)
: K7 i% s8 |! G$ Z$ \{' l0 d! `5 `# s, j1 R
int ret; j- s4 V; f! n5 \
#if 0
* Z: C" T2 C2 V) s- g$ l ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: ~; Z* T) P% m | if (ret)
1 V0 D% r: o, } I4 \: _# d; I pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- [9 E9 w) w: i } "%d\n", ret);
& J/ ]1 n# \' Q& X/ [#endif9 j" _ y$ `- R0 N9 O0 u
ret = platform_device_register(&da850_evm_tl_leds_device);# R) z0 R( H9 l# j: H C! X
if (ret)
4 z8 g3 Y6 i4 U% q pr_warning("Could not register som GPIO expander LEDS");
) z% ~ q5 D+ _2 R, S else3 t7 f2 d6 O5 G, f4 G& u
printk(KERN_INFO "LED register sucessful!\n");* L: E) \, J5 Z
w. M+ Z- m9 ~ return ret;
2 Y8 T+ ^& l% w8 t2 m g( |}
3 Y, u( z0 A7 A3 R
# d2 l- u" R( `# Y8 m: fstatic void __exit led_platform_exit(void)/ ?+ i" n( Q" U1 P* ^. q
{
& |/ b0 s5 W# O! o7 e3 A' t. R6 H platform_device_unregister(&da850_evm_tl_leds_device);
6 c7 ^* X3 g) Z8 O4 v4 d
) w" h+ R4 i/ _: H: x0 M printk(KERN_INFO "LED unregister!\n");
R p( k# T3 T- E+ k" o5 {- W2 r}0 M1 R4 P- k% k7 K
" F; K+ Z. G: i s6 T3 lmodule_init(led_platform_init);
6 ]1 ?- x7 a. |9 kmodule_exit(led_platform_exit);1 h/ K2 \6 r3 ~7 `8 C
9 e/ r: O7 S& _8 o+ ]MODULE_DESCRIPTION("Led platform driver");
( N( y5 p: {" E+ L; oMODULE_AUTHOR("Tronlong");
+ \4 o1 j% b2 A% XMODULE_LICENSE("GPL");. ^9 [; {$ X) q. ^
# M1 y" X; ~+ X4 A2 W
|
|