|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 O6 }) `" ?! }) g Q5 W#include <linux/init.h>
, s* Q4 R; ?0 a#include <linux/module.h>
4 T9 O) b4 `6 f8 \#include <linux/kernel.h>3 Z. \$ w6 i' U( N
#include <linux/types.h>
# T9 p" D7 `& o/ P1 s2 s#include <linux/gpio.h>) s* E4 p/ [* a8 S
#include <linux/leds.h>
1 s, x% a3 ?8 N#include <linux/platform_device.h>( B4 {% V3 g( v& K% j1 f) r
7 R& R2 } H; k) d#include <asm/mach-types.h>* `; Q3 O- ?9 L9 M
#include <asm/mach/arch.h>
9 U9 P/ F, J; p% L#include <mach/da8xx.h>- b8 R) K, a6 a V
#include <mach/mux.h>
5 ~& p- Q8 U. ]0 \
+ a q+ A4 Z. R; l+ H( `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ I3 u& z# H# h# `, c, o#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) Y& D" O7 ^' w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 R4 L' n, ?5 G7 v X: x! ~#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) |1 q- K! ~) T
?$ @* ^$ e/ ~' h/* assign the tl som board LED-GPIOs*/
/ c8 _3 a& u: {; L/ O6 `/ g2 lstatic const short da850_evm_tl_user_led_pins[] = {2 \' a5 i7 d3 ^9 O8 A @
/* These pins are definition at <mach/mux.h> file *// I- e3 w- t! C; r5 \% e
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: Q, z( w+ v1 B
-1$ |8 A/ }$ I' Q& M* d
};4 o5 P# g" x4 g: s# T- }2 t
4 C6 ?6 y! E( X7 t# T
static struct gpio_led da850_evm_tl_leds[] = {# ]+ E4 m2 z4 b$ L" I
{
8 D( B( }' t+ z* g" i .active_low = 0,0 N1 ~. m6 Q0 ?& h( |" r8 Y% w- P
.gpio = DA850_USER_LED0,
7 H9 B' ? P7 F. U$ N6 c .name = "user_led0",
0 { u; I B4 v, }1 m .default_trigger = "default-on",
8 m" {1 j# w2 k$ @ },
: O {3 R' T, _8 ~8 @, ^+ Y {
) s, P6 s* Q& q1 c .active_low = 0,# ?% I/ e" {/ Z3 x9 U+ v) ]
.gpio = DA850_USER_LED1,
) s: f& Y9 j9 \- N3 J .name = "user_led1",# h3 e. y5 x! O7 [6 [, b
.default_trigger = "default-on",! ]) W! ]4 C' D* E6 K
},
+ b2 \% B, Z/ |9 i) l {
2 O: ~' c& ]- V3 [8 S6 \; i% y( o .active_low = 0,4 ?$ A3 H- y, h% W3 }# T, u/ g
.gpio = DA850_USER_LED2,
3 w0 Q' \$ H9 t1 M( a n .name = "user_led2",/ L# G8 o) s5 _
.default_trigger = "default-on",1 c: T* Q8 P# O: W0 ?) f
},: r8 V+ i8 s3 w
{
Q; w( Q2 p, A4 e1 }3 ^8 N2 E .active_low = 0,7 D% ^- c" I1 K) e
.gpio = DA850_USER_LED3,
- O8 M) T* ^$ ]3 m/ O. j1 e .name = "user_led3",
/ }1 l: n" r' H; p/ k9 ? .default_trigger = "default-on",. w! A2 M$ s8 V$ Q4 T, o+ d
},
; p! A. ]" p* ?1 p) H/ P; C};5 F6 D5 O8 K/ V4 B% C! P
1 Q( o- c* D9 U" v" q2 Y' ?; t
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 d% C1 [ A% F) f
.leds = da850_evm_tl_leds,
) g# l) D: N% {7 q/ N .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* ~# Y# }" Q1 g1 {3 \# S};
3 i7 \' W, l* B7 p: J2 z4 R0 O) ~/ R5 y8 V
static void led_dev_release(struct device *dev) m5 \2 g. C/ G
{
+ }: k/ Y9 h; i4 B" u* S$ S5 z};/ y: n* d6 u! r/ w$ R
7 R% P6 }: O* b. O& v
static struct platform_device da850_evm_tl_leds_device = {
! A* K9 Q! O+ E9 M .name = "leds-gpio",8 T( W$ M. [, k4 B2 g, I/ h
.id = 1,
7 X7 e! e3 w# q .dev = {7 B: U0 P4 L: A0 R& M3 R& g
.platform_data = &da850_evm_tl_leds_pdata,
' l7 x$ C3 V! P' w, y .release = led_dev_release,9 ?, W, v7 g( m5 ~+ [ h
}6 q7 y. T3 |, s* J/ [1 g4 u% i
};8 E5 E, W* w# h' P/ w
) u5 G) K6 h5 s6 Fstatic int __init led_platform_init(void)( x/ n( L* A' i
{
0 a8 B* B+ f+ r! [1 }" m5 y int ret;
4 ~- j$ z" ~2 D0 g#if 0
( D* y& A4 O* R4 u& d$ U4 F ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 ]( \3 a2 Q. |# h+ g
if (ret)7 s* v+ z( l; ]& B& V% k. e, W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& Y( P5 @( \* r# j "%d\n", ret);
f* y) c. k, d' D#endif
! [' J% v% s4 b, u2 B" z' w ret = platform_device_register(&da850_evm_tl_leds_device);
! t# u+ p7 \, S; V$ l if (ret)
^/ `, q1 j- n( t7 R pr_warning("Could not register som GPIO expander LEDS");. D# x8 b( H+ ^. L. I6 H
else
$ h( T2 O7 q0 V" ` printk(KERN_INFO "LED register sucessful!\n");4 H# K" l5 {9 I% l1 x% D
) d/ H( P$ ?$ [( g) N( ] return ret;, ?9 z0 N# D. _" ~8 c g: ]8 a- e' e' @, C
}/ ]# j8 Q, g+ b
9 `) ~. |- _4 ?) h
static void __exit led_platform_exit(void)
: r' `7 ~. s& K; C{
( k% b/ e. l% B platform_device_unregister(&da850_evm_tl_leds_device);
6 z& W5 o0 q6 G1 S2 W
2 t& L5 K8 w$ j; J6 O) g printk(KERN_INFO "LED unregister!\n");: c( H; e) U9 M& e) q( p
}
, A9 i0 m" R F8 P) q8 {8 C+ B+ V4 Q( w6 M1 a/ Q2 l
module_init(led_platform_init);
$ Y" Z& J$ u5 y; z2 {module_exit(led_platform_exit);
3 G; L4 [* p& w/ C* D, w- K$ g3 w
* W: i( n1 Z( g$ t! [* ]3 dMODULE_DESCRIPTION("Led platform driver");+ m! X. w$ |! ` p) |, T ]$ `0 ?1 d
MODULE_AUTHOR("Tronlong");
b( ~# E1 d7 Y3 p2 d- R4 b0 XMODULE_LICENSE("GPL");
# X! Q# q- ?; A7 e% v
# E6 c+ H' Y0 g" Q: w# I |
|