|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- x( h* c" m3 I+ o+ B' j8 B#include <linux/init.h>! O8 |8 B! Y$ Z0 m; v5 p9 q0 h
#include <linux/module.h>
* R4 v+ g8 T, Y K$ A#include <linux/kernel.h>2 x3 \! @; f# v) i
#include <linux/types.h>2 E& F0 X O* ^8 e" X T
#include <linux/gpio.h>5 H a- s; P/ W
#include <linux/leds.h>$ |6 o2 P! e' ~6 Z) V9 R
#include <linux/platform_device.h>
" c+ n: O: X! t9 s$ s+ X4 S* M! H9 a; i l5 v
#include <asm/mach-types.h>8 T; j s4 Q7 M, r
#include <asm/mach/arch.h>
8 h% p; [5 a9 }1 ?* K#include <mach/da8xx.h># v6 p8 m3 p( n. ] Q" \1 ~( _
#include <mach/mux.h>
/ Z# n7 p9 k3 F2 A1 | \$ j/ y4 z" T3 s4 O; P
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- D' L: j9 s- X1 W1 ^) q9 l5 ^# n. y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ r+ H5 z! Z& s; L3 x& X#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* ~2 ~) n3 d. X8 S
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) W8 Q! c4 Q. C; M
# k B& O& P' a2 W" @% d+ `
/* assign the tl som board LED-GPIOs*/+ ?& o& i& z9 o5 P. k6 T
static const short da850_evm_tl_user_led_pins[] = {
( ^5 u- b! t/ ~, ]/ G* v+ g0 f /* These pins are definition at <mach/mux.h> file */ A+ v: L% ]* u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 e! m! s/ p. W7 ^! N
-1# x9 V9 Y: t! t0 e0 y U
};3 J" r1 S4 g& |3 T
7 s$ u2 M. _" g7 Cstatic struct gpio_led da850_evm_tl_leds[] = {
; K; X: \0 U: l6 k H/ V- C7 I {7 b' G* Z' Y0 B
.active_low = 0,* K, _) p3 ]% a/ `' _
.gpio = DA850_USER_LED0,
1 \% `: ^8 x+ m" Z3 Q( `2 F .name = "user_led0",0 k4 o0 a! B( d7 y
.default_trigger = "default-on",/ R P# n7 M* n! }+ x
},# X; @; [- a ~+ L E% B
{7 s8 ]( \2 L$ p, J- ^
.active_low = 0,5 i: H5 u& @8 {5 D+ ]
.gpio = DA850_USER_LED1,
/ |0 d. a. T# K- x; ]9 m .name = "user_led1",- T8 }7 D/ A7 _% M3 B
.default_trigger = "default-on",# l' q. `/ f3 B+ d5 H
},
5 e2 d. t3 Q4 l; h! c7 I {( B' q& ^$ J) M4 D. N
.active_low = 0,8 t2 u4 J+ E8 S9 S. p- [+ v- j
.gpio = DA850_USER_LED2,
) n0 M2 Z+ K" U! _# t .name = "user_led2",
/ l. y( g5 e8 ^# J .default_trigger = "default-on",
5 h5 W+ | X7 `9 ~) N( L( {" n },
/ J* a; A6 @4 ?* [* C: p {
. z$ Z+ q0 A9 I% x/ ]* o; | .active_low = 0," g8 {( f ?$ @' w0 r8 ?! _
.gpio = DA850_USER_LED3,
, g0 y3 E5 r8 F2 E% t5 H7 h, r .name = "user_led3",. q' r( @. r0 r& n1 c0 Z( Y
.default_trigger = "default-on",
/ U: c3 a: M _3 L5 z },2 e: C4 {) C7 ]. }5 Y1 r! p9 l4 _
};1 u6 o8 w$ p2 B' g2 U
( Y: u* t4 r" ~: Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' t) {% T+ ~, o' e/ V2 y, j! Y' K: U .leds = da850_evm_tl_leds,8 z; b8 o. Y9 I5 @3 K5 j
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),% k5 e9 a! L5 c2 T5 L0 d( L9 K
};$ [4 ^! j7 J3 K! K4 M+ c- ^, ^
8 s7 l. k# N; m+ X: m* V P7 hstatic void led_dev_release(struct device *dev)
; b9 u& l7 K& a{' B0 J0 r" y* @, A' ?
};
; s$ F; e- l3 _8 r. G& T( z9 Z" L' V' K; [! m# K
static struct platform_device da850_evm_tl_leds_device = {( o! Z2 ^; V) B6 Q6 `$ r# g
.name = "leds-gpio",
+ ] p6 [9 o' g8 ~8 ?. y .id = 1,
]# g1 ]! {6 m3 a& Y0 T2 W! Y .dev = {1 Z4 N3 B3 K9 W( F9 C
.platform_data = &da850_evm_tl_leds_pdata,
/ P% t9 @( N% Z+ N1 q; j .release = led_dev_release,
8 W( X% i; E2 {- D# }( o }
8 Z7 }! |# R2 o};" O9 l( B2 {) X4 t+ u
1 l. ~6 w" ~0 d/ Ostatic int __init led_platform_init(void)
* e- j8 Y9 i' G N) C{) [& L; ` q8 M* y. |
int ret;
; @- i) h8 ^; V- {) M#if 0
' N3 G k. }' j. ~( ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* ]4 c& @8 [% L. _- h) \ if (ret). }- t2 ?, M3 s8 v! b( N; c
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 I$ W+ G2 d" X) m7 _% k "%d\n", ret);
u/ f/ {6 `: A2 L6 R1 }+ W6 l' x#endif/ @* W" y% @) u/ |% Y3 p
ret = platform_device_register(&da850_evm_tl_leds_device);, @9 @+ P: R" d9 y) L2 y2 R
if (ret)
+ W& `3 h W/ |8 v3 l1 _, d pr_warning("Could not register som GPIO expander LEDS");
2 g% X( H& j3 N; {8 @6 W7 L else @* r5 y0 O* o* v- D% S
printk(KERN_INFO "LED register sucessful!\n");
2 _7 ]* P/ c: `- K g1 V& O: t6 I; s4 \7 M P: p% N
return ret;
3 Z2 n( g6 Z, l6 v- {2 R1 a}
& q4 U$ v H# }# T$ B8 V" u1 j, ^3 Z& Q$ q* H, R. w
static void __exit led_platform_exit(void)2 |/ i0 U: }) t, s6 }. I
{8 K+ R$ E! E6 i' X
platform_device_unregister(&da850_evm_tl_leds_device);
) \. s: J0 p& O. V9 x6 d4 W9 O9 A; r$ P
printk(KERN_INFO "LED unregister!\n");! b, G! T% B, ?% o7 _
}3 m" E5 `" T+ y5 J9 w
0 E. K! j( r* s0 p
module_init(led_platform_init);) l' m# C- z# C1 ^8 y* I6 W% ?
module_exit(led_platform_exit);. v8 W y8 y/ m8 O- D
, A# R& k: a! z9 T) A Q5 F+ n# nMODULE_DESCRIPTION("Led platform driver");
9 a7 W4 a6 ? j+ V9 C0 `MODULE_AUTHOR("Tronlong");5 t7 O- K6 \9 v, I' U
MODULE_LICENSE("GPL");
$ w0 E n. |5 W( f) x$ [7 }4 m p6 t# O" {5 ]
|
|