|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 c0 }: G5 n! ?# F
#include <linux/init.h>" g/ h! _) q+ V0 O
#include <linux/module.h>
+ U, s! h% ]. \/ D' y* Z7 P#include <linux/kernel.h>* Y' ~8 q$ V) C2 S
#include <linux/types.h>/ j- [+ L; I; R8 }+ d4 k
#include <linux/gpio.h>; v5 y: ?* c9 z3 R1 n* u
#include <linux/leds.h>
' U! e; ^3 C# a6 x6 W' i( u2 X#include <linux/platform_device.h>' J, y' z# n: E" q- Z
& f/ K8 T* S+ r% |#include <asm/mach-types.h>
4 J5 ]1 n! [/ O% U3 ~8 V7 C8 ?#include <asm/mach/arch.h>
1 b9 X+ x; w0 P x#include <mach/da8xx.h> c3 s" k& C" A5 D$ Y
#include <mach/mux.h>0 p1 N0 t# B+ V* X
3 g" d' r* M# K( O
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" |0 q' K; G7 Y3 f5 H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 S4 V4 N: R' K" @
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 K# d$ O3 l4 v% M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) ~6 G- \! F5 P4 P7 N: g. ]0 u, `/ D0 e3 \
/* assign the tl som board LED-GPIOs*/: h" E1 S; p9 R) p
static const short da850_evm_tl_user_led_pins[] = {
Q; u H& ^2 @* } /* These pins are definition at <mach/mux.h> file *// ^7 |3 P# u* m2 Z' f% k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ s. q6 z6 ~/ z/ a0 c$ @
-1
' |2 i C J l( Q9 C3 ~8 K: w- F};8 t9 `+ H4 D0 X1 ^
0 B* `6 u( h" \8 S) p3 S& Kstatic struct gpio_led da850_evm_tl_leds[] = {
0 A; o0 R( U& ^! t+ v/ R0 V {
& A7 k) O: _/ A# N; F .active_low = 0,
' _, d l& u2 E. w: d) k' I .gpio = DA850_USER_LED0,2 A/ w5 q# S/ N) d* r. {3 i4 O
.name = "user_led0",
2 k1 B, U, ^7 ^ i) D .default_trigger = "default-on",
6 l& s E) D5 k; o7 n },
- Q# @; D! S6 {" b! A {
( x3 h! J6 G* O2 H, _ .active_low = 0,8 s* x" ?, Y, ^) k1 w/ G0 P( w
.gpio = DA850_USER_LED1,
9 }& Y3 b' k* w+ G5 [ .name = "user_led1",
/ ?+ P9 t/ E2 e4 c1 ]; I .default_trigger = "default-on",
6 P* V5 c1 C# i6 d, A },
) v9 Q" M0 {6 K: f! C1 @ {( w; G- {) I* i; K* t( n/ o
.active_low = 0,9 Y* r9 Q( E& E! o4 Q
.gpio = DA850_USER_LED2,1 v' r8 G C0 M! v1 C
.name = "user_led2",
1 d: C4 T: ~3 l; S/ J3 z ^2 W .default_trigger = "default-on",
8 U7 [5 i* a: y/ p4 M8 X/ p! x },
4 b9 m& {) Q7 w" C+ \ {
8 }' C7 s5 o* F) k .active_low = 0,! B) ]1 ^& F1 y( {5 M
.gpio = DA850_USER_LED3,% f! L- ]0 |" Y& G4 v$ f
.name = "user_led3",
. s2 d0 e5 \% n2 F .default_trigger = "default-on",1 [, } I" b Y) N
},; `; S, p0 q! ?9 e) i
};
4 V' D* [. w0 J8 o) l' l4 t: X8 f# p$ ?6 q. R; M4 |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 i+ G' t( |0 v8 i2 F6 D" L .leds = da850_evm_tl_leds,- p' R! O% i) ^2 U! \5 ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 o( _$ m* n0 Y$ W) K
};
; w) `) @" F1 K% S0 k8 i; W( w& u7 ?) | N: f2 L& X- G4 H1 c
static void led_dev_release(struct device *dev)
3 S2 i6 c7 Z8 `, n1 X% [4 \{3 H/ X0 d8 g; o; |1 J* ~2 G
};: k; a. Z+ J, F4 O( @ H/ ]/ C
' ^ G. ?. [$ g- E$ Xstatic struct platform_device da850_evm_tl_leds_device = {, G6 _/ k' [, G' T
.name = "leds-gpio",
8 V! y" ^% j& R& a .id = 1,
% x0 x0 A/ H W- Z: V .dev = {+ Q& h* K* R0 a. T: a* M" b/ d
.platform_data = &da850_evm_tl_leds_pdata,* U% n9 R; a) l7 N2 t
.release = led_dev_release,
6 {5 d4 C( ~8 G) y7 j; o" ^& r, }% @ }
8 _) e* _% [1 B6 D4 o y2 }/ T8 t, G};
4 M% |% \9 t- R1 y/ \6 ]- H: ]. t5 Z% f) O
static int __init led_platform_init(void)6 @ v# J: R+ `( F6 @ k: I" B4 z
{7 v8 ~' e, }; B/ u, i
int ret;
, }7 G+ k9 g2 t#if 0
- o' M$ }7 W" g( K2 u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ ]6 N- k' P4 |9 o9 g3 N
if (ret)
4 G; e# C% `$ ]% S pr_warning("da850_evm_tl_leds_init : User LED mux failed :". v0 {5 _0 ?8 M1 a8 [. L0 U/ A- z
"%d\n", ret);6 V/ e3 x' Y |& r/ y0 B& J* ~
#endif" ^( S1 X9 D4 v+ {9 \. ^
ret = platform_device_register(&da850_evm_tl_leds_device);
- R- }4 B5 X. Z4 _ if (ret)6 K- S: N& t# c; N. {9 m7 z# T5 ?
pr_warning("Could not register som GPIO expander LEDS"); k& b: w/ e6 a. Z" }6 U
else# _: g# [! y* _& z5 T) n
printk(KERN_INFO "LED register sucessful!\n");. w- U8 ]) m0 P* G
\% k p. d' o( N
return ret;
; I$ e" W! L. ~! B5 {& F: u) N}
2 N C9 w3 {7 v7 m! o6 w7 I3 K# q! L# j
static void __exit led_platform_exit(void)
! T3 `. `& q% X: {, B, R{
' G+ n4 s9 [* z$ d2 z platform_device_unregister(&da850_evm_tl_leds_device);. H5 W1 ?0 m' W+ a0 q
9 u9 E: D5 s0 ` H1 M
printk(KERN_INFO "LED unregister!\n");
4 F5 r9 ^& a3 T/ o; d}
3 Q/ \& H u3 u5 F% X
8 D8 ]6 }; v. `module_init(led_platform_init);/ P9 {) J5 A4 O4 O* S/ c
module_exit(led_platform_exit);: ?# Z2 ?9 B H2 v, j) r9 f
I1 y6 Q7 T- `0 h- X! o3 aMODULE_DESCRIPTION("Led platform driver");- X& A5 `# z( g! L" v: T+ M
MODULE_AUTHOR("Tronlong");
1 ]- s d; m9 u5 v5 _* xMODULE_LICENSE("GPL");9 R7 G: C- z) |5 s1 k, c ?6 Q
' E/ j y I* O! I/ f8 @ |
|