|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# T/ n! \( S! L#include <linux/init.h>
( ?% A- _) l3 H; l#include <linux/module.h>
J2 {4 q2 c. C! I+ N) @. ~#include <linux/kernel.h>2 r# \. f* y5 R5 U: ]
#include <linux/types.h>3 n0 V* x1 z- ~/ \+ l
#include <linux/gpio.h>$ \* r! K. p# K5 `& b
#include <linux/leds.h>! K7 _) G! ?- [+ o& Y' C7 Y6 k
#include <linux/platform_device.h>
/ ?1 d1 h; t9 x6 }$ b. ?* R9 D4 }2 G. l1 q5 V
#include <asm/mach-types.h>. K9 ]( Y* |8 C" n
#include <asm/mach/arch.h>
7 m6 i& r0 a8 B q" b#include <mach/da8xx.h>
1 u: j* C2 {0 N0 l( k' Z+ B#include <mach/mux.h>6 i/ q0 e j0 G& T& G( Y+ `8 Q
; y5 M) R9 T: g+ b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# Q5 f3 \0 u/ Q- u: [$ R
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; _* _' I5 v/ g; C: a3 g#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' h8 D; U' \& A4 b8 r, R; \# M2 e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* G H- R" T0 ]$ `5 N) }
' s& ^7 h( g* P. H1 P9 d3 S& m/* assign the tl som board LED-GPIOs*/( ?0 o" N; O2 g" m) \4 ], b! l
static const short da850_evm_tl_user_led_pins[] = {
# _- H1 i" f8 ~7 L9 _) D /* These pins are definition at <mach/mux.h> file */
1 s! q' g. j& S! C+ i- j DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- I7 E- z% r7 c B- `
-18 J2 u8 ?+ a6 e5 s3 S1 k) c+ d- I
};) r: ?$ `/ D7 U2 e/ G
9 [* m8 Y0 G/ Z- h: I$ Gstatic struct gpio_led da850_evm_tl_leds[] = {
8 U1 {5 _+ x& ~3 w4 K {, U! C5 S7 p% Y7 L5 R3 r
.active_low = 0,4 O4 F9 d) P& A9 M2 E) z% m
.gpio = DA850_USER_LED0,' Y7 T/ r h% v- y0 |9 e
.name = "user_led0",0 z# q( g" o6 ^( W. a
.default_trigger = "default-on",
. P4 u, Z4 a9 @& B* q1 ]- Z },
" |# [' f- g. y4 g* m- T* j m {
6 l; N: ]$ T3 f# M d .active_low = 0,
1 M4 Q- t# X# O8 G .gpio = DA850_USER_LED1,
v+ L8 H: B( `1 Q .name = "user_led1",; E" e9 R! z& ?* m1 X
.default_trigger = "default-on",
. \/ C& c3 i5 t, z F3 n },6 d& Z' A+ F- x+ u
{
5 @: B( H( ^& b, S9 L& l3 a .active_low = 0,) ^6 e; R' O/ L' ~
.gpio = DA850_USER_LED2," H- U" ]: {; S
.name = "user_led2",! S- |1 Q2 T; w; G% r
.default_trigger = "default-on",# |% w. E6 U1 o& Y6 p* K
},7 n2 ^* N" Y8 I2 \- U# v4 G+ v# U5 X5 T
{% @& K- V3 C5 ~
.active_low = 0,; t* r* V+ k$ Z6 l
.gpio = DA850_USER_LED3,7 c T. Q. z7 F5 ^% Z
.name = "user_led3",1 W* e6 y, P* Q" x
.default_trigger = "default-on"," ^+ L8 k$ y' K w. A1 }
},
$ x1 t3 B& g7 ^ k8 v! w* d2 ?5 @};6 E2 ~5 p9 k: R# F. T
5 o! P' W! o% w" B) v! w$ E8 |6 `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% J3 j: z0 d6 @ _
.leds = da850_evm_tl_leds,
4 A# [, {0 ?/ s4 L* u .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," O% n- f4 j- j) {8 R3 i
};
% d+ ?/ E% L: K( y
- U, `3 o5 j8 j! w# ]static void led_dev_release(struct device *dev)! v- F" _6 @" t* X
{: G% p- t2 s" F# T% C& ?+ b
};1 C b8 w+ T5 i* G- P
o/ t0 }0 c" I5 Kstatic struct platform_device da850_evm_tl_leds_device = {
k7 | `5 U& j5 H' P; H" o$ p& z .name = "leds-gpio",
: Z6 {6 z+ C0 w9 Q .id = 1,
% i: ^; M& `1 D" i5 y. O% |! u: f .dev = {1 i9 F( ^5 Y8 C# z: u
.platform_data = &da850_evm_tl_leds_pdata,
; C( L9 ]0 D* q0 O9 W .release = led_dev_release,
: L6 L/ F7 w/ p( A6 y0 G6 V }# t. q. T% p, `
};" |: l: H) L1 O1 I0 o5 q
* H$ x. o" E" u! Z9 a; |static int __init led_platform_init(void)0 t& J% h) Q8 v
{
" }/ ^4 C# F% \! T, h9 i int ret;
+ H" g, W! h; b# |, b/ h#if 0
2 j8 g' @ e0 |6 P ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) y- Z, K. N) r+ y$ R if (ret)
/ C e: m2 z# }. \ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 U, I7 p! v; a! z+ X8 v4 W J8 N
"%d\n", ret);( D8 y D" ?7 ^' P1 {/ i
#endif
" A1 R, }; }" N2 k* w4 }) v ret = platform_device_register(&da850_evm_tl_leds_device);' K; a$ g, ~% Z' O8 k2 }, `3 S
if (ret)& ~6 ?: k8 I( `, `: f3 `
pr_warning("Could not register som GPIO expander LEDS");
' e8 v. m) v" _2 B2 Q+ Q else X+ `- x3 P7 v/ L' H/ G2 J
printk(KERN_INFO "LED register sucessful!\n");
! i6 y R D4 Z o7 E' @
8 k) C' S E7 {0 V9 y4 @2 J8 d return ret;
5 x3 c ?! R; n" X}6 r- F F1 U* w! Q! }! h! h
8 [. x `. v+ N5 }5 @* _static void __exit led_platform_exit(void)
0 S( _# a* _( `, h$ O6 [) Q0 Q! }' B{9 H# ]4 B$ f4 i: t2 v! I) t: N
platform_device_unregister(&da850_evm_tl_leds_device);; s/ k; i% j5 y( L6 Y. n; T
. C# S# {6 [2 v* p4 j9 ? printk(KERN_INFO "LED unregister!\n");6 B* D* |, G' X( P; N
}0 E( ]* z9 C2 e, | S& c
9 n6 r" v/ U$ L) H3 pmodule_init(led_platform_init);) K7 K( z8 M& Y; ?
module_exit(led_platform_exit);
) W) i x" O; k8 }' N" E' q+ d9 c- Q2 R) s# i1 M, p, b
MODULE_DESCRIPTION("Led platform driver");4 K I; x* O, ?! k' i9 u
MODULE_AUTHOR("Tronlong");
7 v$ I8 e ^# l( q& `" \, V" t: {MODULE_LICENSE("GPL");. R" `. X4 p0 S$ S* ]# o: t
. |" Z, Y. D7 v2 O) o+ w
|
|