|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* `2 e3 L" m% d4 H
#include <linux/init.h>5 d/ d; @+ h* n8 [% I
#include <linux/module.h>0 j" r: h3 W1 n% a: q4 v
#include <linux/kernel.h>" m+ M& ^5 \& J' | Z; a
#include <linux/types.h>
8 ^! D+ K1 s8 |; j L#include <linux/gpio.h># `4 B, e4 ^& n: Y# o* `) y
#include <linux/leds.h>- i2 n) w" m- m/ }
#include <linux/platform_device.h>3 W5 v, W* U0 `2 q& p
0 K2 Q s$ q1 K( R
#include <asm/mach-types.h>; G) ~5 B' B; d5 d' @
#include <asm/mach/arch.h>$ d, y7 l6 \% G9 j; i8 J
#include <mach/da8xx.h>
- h/ Z% K& o. K# J3 } E" c5 Y: R3 w8 I#include <mach/mux.h>; P0 Z2 R* M' k, r$ ]3 k& X
( O* _, m0 x8 [2 @
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 R3 S; Z; h2 m* \, w% j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) j( g2 m2 |5 L Y6 o" V+ ?
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 i" ]: k8 V. r; h
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 I7 T% b# G h' y, x/ |
* j9 e4 X* m; c: K$ s/* assign the tl som board LED-GPIOs*/
3 ^9 H/ F, o* s; Estatic const short da850_evm_tl_user_led_pins[] = {; q2 z" Z" f. R R/ U) k; |
/* These pins are definition at <mach/mux.h> file */* `+ d3 |! P7 E7 n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! i, d6 q) S; F8 ?* _1 \* ], Q
-1: Y" u& q, x" j x2 l
};& c( |% Z( R+ {9 R
9 T& ^5 q4 V, }9 X" R6 s4 lstatic struct gpio_led da850_evm_tl_leds[] = {' i; v+ ]5 r7 b) E a1 m/ O8 y* U& }
{
; E& b$ N, g+ B/ _3 R- m3 | .active_low = 0,
) p3 Z: o# e8 v .gpio = DA850_USER_LED0,
+ b& ] h, `! F( W6 f/ k2 v0 V* i \; Z .name = "user_led0",
: R4 {2 u- G+ {. e, A# q& ]- t0 @ .default_trigger = "default-on",( ^8 L' d) |7 w T# V
},
; C( d4 e: ]- x( N: ?6 Y! Q* P+ [9 A. F {: C7 U' e% \" U( L+ ^
.active_low = 0,4 q% M- S/ Y5 z! W
.gpio = DA850_USER_LED1,
$ I. D) `4 e* k9 U6 ]$ o .name = "user_led1",
' k, e" B+ i' a* c6 F .default_trigger = "default-on",
^, r3 y* h5 h" ^* u },
/ ~7 C u5 ?0 z: I9 ^ {2 I- u5 r, E& t$ F" H2 i
.active_low = 0,3 z( @9 U( [) l$ z, Q: A$ `
.gpio = DA850_USER_LED2," v6 [$ }& t5 w6 G4 ?' Y- {
.name = "user_led2",
) @ z9 l2 [+ f+ K* [( x' f! K .default_trigger = "default-on",
6 K7 f7 N7 T9 W },+ m9 ~2 s% s* y1 F8 W
{5 r& [* Y0 y3 a, J) ^' o7 H* _; ]
.active_low = 0,1 J3 R" }9 f/ T+ B2 F; K/ g0 P! Z
.gpio = DA850_USER_LED3,
9 m% f g- g; o; `% b' H. c .name = "user_led3",0 l* M9 P5 z; b" e% r8 [8 ]. F
.default_trigger = "default-on",) l! m# [8 k5 o
}," Y0 c: s% F* g9 `
};3 W) G. Z# E# e9 P3 b$ K
& ~7 w: i/ a# ~, ^; O
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( }7 N- r) L' R) g3 `; n d
.leds = da850_evm_tl_leds,- }6 v l# q# W
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 f |& D, O: C6 U6 c};
5 S9 Q# W; t3 L+ ?5 V+ q) n
2 r/ j: G) W N/ ~$ w! nstatic void led_dev_release(struct device *dev)5 O5 ?6 t! ?# S& o9 n! R$ k- n
{
6 t/ z0 g2 j' z# f9 w6 W};; L- p/ ~( h, w) h1 P2 G
2 J! m1 R1 o, y" m* V
static struct platform_device da850_evm_tl_leds_device = {
* m% a0 q `9 | .name = "leds-gpio",9 o. c+ H* F8 m8 w
.id = 1,
; a( N6 X- H s! ]( a" f .dev = {
! o6 w g4 P1 r- f `+ {+ x .platform_data = &da850_evm_tl_leds_pdata,3 r/ ~6 i s9 Y7 z: G [( I' C
.release = led_dev_release,
+ Z/ o$ }, D2 i( G) {; X% i4 b }7 L" m* [; o9 x3 m4 u+ R
};0 @9 @* T I' }2 G7 s/ |
! r+ C8 U+ Z+ B. @8 R: hstatic int __init led_platform_init(void)
$ W" w3 B$ W u p9 w{
1 k0 R, a# \! h int ret;- X. L' ?* C) R
#if 0' k4 r) M/ Q; g9 v4 D1 n
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* Y6 h+ D- p: A( @ b& Q, T2 b; e if (ret)
1 o# C7 E& N/ o* g0 ?2 V pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' k' {! D- @7 H4 E0 q "%d\n", ret);
M: O3 C+ `& K4 H/ l; S4 N1 T#endif r" Q4 {5 q0 C$ `/ N
ret = platform_device_register(&da850_evm_tl_leds_device);
q8 o. v& W/ U: c/ R1 y if (ret)7 J4 K# R3 \* ^5 U1 e
pr_warning("Could not register som GPIO expander LEDS");
) U) y4 T1 M, z. M; e: P% F9 L else
$ W U8 K m$ K9 v5 J( h& B printk(KERN_INFO "LED register sucessful!\n");
( I" n, e2 `& z( U! \$ B. z3 r" I- ?4 l" Y$ ^# i
return ret;
( j$ r& `; w0 r}9 a0 [) |4 L+ W7 N/ b% K g% x& x
% O2 [; a- t: H- r( n( C5 f2 Pstatic void __exit led_platform_exit(void)- U! p( O" u# c7 O5 r& ~
{3 A! C8 b3 {; P5 h* C
platform_device_unregister(&da850_evm_tl_leds_device);
* F2 y8 ?) l$ K5 o& D8 M2 A
6 `5 v: x+ g- ]$ K6 C printk(KERN_INFO "LED unregister!\n");. D9 E4 Q+ p' n: e% p; ^* B* A5 w
}
1 [0 U! I$ \* y
8 B" }- x8 V* L- }+ l, imodule_init(led_platform_init);: i, X& j7 [. L% ]
module_exit(led_platform_exit);$ N" ^3 ~5 W9 R
) o; Y0 {; `# n! y- EMODULE_DESCRIPTION("Led platform driver");
, _! c$ L1 x) }* i! v" _MODULE_AUTHOR("Tronlong");
& ~# t1 D8 U8 O( c# lMODULE_LICENSE("GPL");# n! m# L+ D- n0 [, J3 d
9 C% `% G2 Q5 S$ U; |
|
|