|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( O$ ?" A3 d. _+ r) k#include <linux/init.h>
& u6 [' v( M3 r: }' U$ o+ j#include <linux/module.h>
( k6 e8 i3 r# q, B1 Q; V( `( F' h#include <linux/kernel.h>9 j6 {* m3 _, Q6 d7 k
#include <linux/types.h>0 _% o. K9 n! g1 T$ t
#include <linux/gpio.h>
% U( k' s" I# c5 Z/ I% l1 I#include <linux/leds.h>
8 N# X; q" q+ s: q6 ?+ t4 c#include <linux/platform_device.h>
. s; D) D" C p) ~4 _( u# f% d" u5 N! m2 }! D* _3 m: w3 m3 L0 i
#include <asm/mach-types.h>3 G% [$ E3 s3 B! F8 \% f
#include <asm/mach/arch.h>
! f$ Z0 F( u/ l4 I#include <mach/da8xx.h>$ u7 F5 A' ~$ x
#include <mach/mux.h>
$ ~ h* K& r( J' G0 d( z- ^4 E* }0 o+ x- s7 m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) J; B! P; i0 ?, r#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 U' L4 @7 I7 ^3 h# L) _#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) z9 j6 f6 {& |
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( c/ _' N3 s A, s+ Y! i4 ^$ w7 x! k3 @2 t
/* assign the tl som board LED-GPIOs*/
; ~# [' Q. D! X: Vstatic const short da850_evm_tl_user_led_pins[] = {1 h4 h) [0 J6 m [
/* These pins are definition at <mach/mux.h> file */
4 T& @. c# r2 e; O4 P" ` DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. g, ]0 V3 g7 J9 \# |5 { i -1
! {3 p$ L/ C1 |: R" t; B};
. l/ g9 j. y, v' i. P. ^9 G& `2 \, A6 T
static struct gpio_led da850_evm_tl_leds[] = {
0 m& D) q3 d$ o& D: M! i- B3 N {
& n# ^8 C/ }( _9 I .active_low = 0,; Z6 z) n2 `$ v8 ^" Z
.gpio = DA850_USER_LED0,& H5 C0 x& W3 p7 W4 X! U
.name = "user_led0",$ ?( i) Q B ^ v% |/ g; p* @- Q
.default_trigger = "default-on",
: |& @6 l+ s: d* e v( ~2 O },
; M9 V" }$ m3 m {
0 q* T8 ?, Y" }' x, |- h& U: V .active_low = 0,
* x6 ^) d) O' j# `/ Q6 r .gpio = DA850_USER_LED1,# B5 d3 W8 y+ I4 C
.name = "user_led1",: ?7 C: |, U) D4 e
.default_trigger = "default-on",
9 \& w0 w7 o( V& v+ t6 d },) h; Y! \# v8 L$ }
{& b2 ~9 c" G5 R. |2 q: K- _- d. `
.active_low = 0,& c% |! I6 I+ ~7 |7 w& w
.gpio = DA850_USER_LED2,+ E# W. i; \2 {9 r( e: T
.name = "user_led2",
( N6 J v2 R4 H) x. V" { .default_trigger = "default-on",2 C/ @+ u. U. `# f
},% C9 m' l: C; `* T; z+ \
{6 |; e; U+ E8 U9 r7 E
.active_low = 0, G. q3 U# h7 J! {: w8 H1 M7 b6 ~
.gpio = DA850_USER_LED3,2 r9 P4 B# C) Y7 C8 x+ H/ `
.name = "user_led3",* ]. |5 S. ^) k! \
.default_trigger = "default-on",
) w3 y. Y' X) ?) n },2 q* [! j8 s) X
};
/ o. L f$ ]" p
: K) R# F! N8 Q- I9 @7 @: v7 i; S7 `static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, u f& W- [1 y0 I% A
.leds = da850_evm_tl_leds,) h! i9 K3 m* z& Q+ {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 y( `6 S% d% |& O) s0 z; P) j! l};# O) z, V) U& X/ t
% y3 N2 i" R" ]: b6 Dstatic void led_dev_release(struct device *dev)
5 \* Q7 _) x1 T% w; V{9 ^6 h4 {# C3 V, C- C
};- ?0 t7 C0 F) q; [; k
: _' ]6 r% l% K
static struct platform_device da850_evm_tl_leds_device = { z. o8 C ~. ?0 O1 w/ R
.name = "leds-gpio",! o6 W2 o! E. m4 A, C
.id = 1,/ Q4 c+ a# M# z
.dev = {8 }( C8 U1 E: a- T5 x" h+ W
.platform_data = &da850_evm_tl_leds_pdata,* s2 n* X0 w# A
.release = led_dev_release,! m' |+ q3 V9 v- s# t* B+ L
}
$ Z9 k" ?- c+ J1 y/ e) Z};
?4 o/ }9 ]* ]# b- ^+ u: h8 y
6 }7 d% q0 k: U4 ]static int __init led_platform_init(void)
1 b; G- s' Q, r1 [7 `{1 y1 ~8 A& G1 O
int ret;+ j x4 M- b+ O3 K) S4 e! y
#if 0& ]3 X; l T) E ]* H4 S% v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- [6 F: J4 G1 R. _' ]
if (ret)
* }, i2 D% {0 r$ Q: [5 a9 { z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' V- p* n2 B) n+ T/ ~" n "%d\n", ret);
1 E; b. @, n5 E( u#endif
5 Q L8 S. M6 \" S ret = platform_device_register(&da850_evm_tl_leds_device);9 d; z* M8 g! w4 R7 n& G
if (ret)
' W9 Q& t( i& K" p% X: i pr_warning("Could not register som GPIO expander LEDS");
$ k* x! g Q8 T" t; J2 X' N else
( [! h0 e, `+ ~6 y& Q2 w$ Y F printk(KERN_INFO "LED register sucessful!\n");
3 F* B- a. P5 N7 |- f8 Q1 ?5 @1 [2 G
return ret;
: E* i/ w! P0 v' i2 U1 s}3 a' }6 M+ }) Z$ F' l5 Q& b
" N1 ~/ l: N) h- d1 `- G
static void __exit led_platform_exit(void); I7 ^0 h Y& ]6 {( Q5 ]
{
( G; g3 L% V% r7 b6 ~" F platform_device_unregister(&da850_evm_tl_leds_device);: \' R s0 u6 p1 @' v4 h. h$ Z _. S
2 q+ J- z/ H2 d' y( ~ printk(KERN_INFO "LED unregister!\n");, t& v4 D/ n! \$ P
}
( ] p+ ?" M, ~$ v: @) l o! `# c7 ]+ I' x
module_init(led_platform_init);; }/ _$ ?( f7 R: b! g8 L1 K6 W
module_exit(led_platform_exit);
- `1 I4 P. {; H; _ N* Z0 p/ w P& h5 w1 C% e
MODULE_DESCRIPTION("Led platform driver");
/ r$ A1 C0 D% B) X8 d1 |' ?3 iMODULE_AUTHOR("Tronlong");; K: W, ?0 ~0 j9 m5 e6 g
MODULE_LICENSE("GPL");
. ^9 j( O8 Q% ?+ w% p4 U& U4 ~& Y( O# F! \% n5 T
|
|