|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 d. {+ X! [% P# A$ U" K, \- A#include <linux/init.h>
: s, ]3 ?& Z9 B1 V8 u r% K( b#include <linux/module.h>
7 w, u% Z m, b! J+ s#include <linux/kernel.h>9 I; v& F3 j' S6 G) E
#include <linux/types.h>6 C" n# k5 C( T( p k
#include <linux/gpio.h>
, v1 w/ J5 H5 A#include <linux/leds.h>
) z" s7 @7 I) i6 R9 L7 q$ q#include <linux/platform_device.h>
% i$ d; U6 I/ {. L3 I
, G J9 i! D# X5 m; n+ Q" L#include <asm/mach-types.h>
" b, M) b* Y9 e# x#include <asm/mach/arch.h>; q3 }( v! v% \/ B* f
#include <mach/da8xx.h>
9 u* N0 ]- [/ K. G1 B#include <mach/mux.h>' w6 v+ v! f+ w* V. g
* A, o2 z4 ^8 r/ _6 t6 w; h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 |# j8 P# e0 T, a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" C4 l9 l4 [: d4 V+ G#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# Y/ Z( t9 W% R' T) y! d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) t! K# d' G- r- h+ P! }" E
: t2 u" { C7 K% s$ v X/* assign the tl som board LED-GPIOs*/
9 s3 N- O9 A9 h$ x7 [' xstatic const short da850_evm_tl_user_led_pins[] = {
+ }- P1 ^: {3 H# C( U5 T! E% N( n /* These pins are definition at <mach/mux.h> file */" q, `2 [8 H4 t5 p, @, Y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, Z6 E/ F# c3 Y2 s' A4 D9 ]8 ~/ j -1" p2 M1 ?4 K2 S. w2 K- y4 t* N
};9 X6 B# I7 d$ j# P0 b
# p& X; o5 w* S
static struct gpio_led da850_evm_tl_leds[] = {$ h& l7 M1 Z' t% _, A. I
{& l' _' l2 E8 @9 b6 v9 |: M
.active_low = 0,2 F2 B+ p& Y. }. o
.gpio = DA850_USER_LED0,1 [) a, u& h& G7 Z
.name = "user_led0",
- E; y' e2 C% h; e) b .default_trigger = "default-on",$ ~4 H5 N3 M, D' Y+ i$ m
},
) R+ B7 y. w# {$ u# {( K {
. u! {+ a: {- P q: `$ w .active_low = 0, M5 i0 S6 c1 p7 z5 P
.gpio = DA850_USER_LED1,0 w" `! w2 Y) Q. M
.name = "user_led1",, }/ L' s9 l% t* ^
.default_trigger = "default-on",
1 d9 I# D& a R# H% A },( E: a' B' G6 U. ^
{
# ~* {3 @/ y" _6 f, T .active_low = 0,
) M- E9 a2 G: z' ]: [ .gpio = DA850_USER_LED2,! B, D5 n- h9 Y( G
.name = "user_led2",0 u9 T' r+ F% m! Z* p9 V& X! o
.default_trigger = "default-on",' j: f* d* d5 Z: u6 b* r; b3 g, {
},: K" k6 `7 \- d* n/ `) P
{
J+ {. M6 W% u# Q+ Z; N3 | .active_low = 0,- s3 S' ^+ G; ] |) o, X
.gpio = DA850_USER_LED3,
4 ^) m: u' `6 {/ D" X5 n R0 Y, W .name = "user_led3",
* X& e& X2 H! b' v1 ~ .default_trigger = "default-on"," @/ q4 {2 r$ w3 G
},
4 y( u' ?9 d8 Z! D2 c$ {& {% Q};
# c( _5 A. x. z7 u, b. m7 ?* j
5 F# B( w! n" o/ y gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: T4 { ~# ?; C/ ? e .leds = da850_evm_tl_leds,5 e: O B. h2 z# T M
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 |# l8 e5 R7 g};1 n4 x5 k H5 x, W! g
/ e8 l7 D7 X. s! M0 E
static void led_dev_release(struct device *dev)4 ] ]% X3 i( z$ g; Y- g
{
, j. c- E9 Y6 d4 T' x: }};+ v) f7 V1 E- B3 F
& o5 a1 G9 C( }9 o' X
static struct platform_device da850_evm_tl_leds_device = {
6 `3 P/ Y& c- N7 A8 L& a .name = "leds-gpio",. t+ c: }, L* e* b r6 b
.id = 1,
# t @6 }! {. p5 G7 w9 } .dev = {8 U- I' x2 O8 d
.platform_data = &da850_evm_tl_leds_pdata,; q) ~ `0 B" k( Z4 S
.release = led_dev_release,, F* ]! ?# T: j9 E3 r, b
}
! {) L4 e" C" |; M. `/ o* X8 F6 Q};5 P! s% o5 e+ @
+ W2 I- T# u4 s# ?5 j/ Gstatic int __init led_platform_init(void)
( Q- }% ^- Z; w7 u8 }& e4 U# f# I{/ l; o$ ]; h8 e! S: h! Y" T& w8 Q3 B
int ret;
0 ]* i' }( n& f% A$ C) v#if 0
9 b' S) X) S2 {0 b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% T+ y' Q5 t& m4 X
if (ret)9 m/ r" t. `8 u8 H9 p- \ v6 S
pr_warning("da850_evm_tl_leds_init : User LED mux failed :". u) t2 R4 B( n# x
"%d\n", ret);4 O6 z& q% W1 O: k, b |
#endif
; g) ]4 W" ^% G/ F5 W ret = platform_device_register(&da850_evm_tl_leds_device);
0 y$ L% A% E# Z if (ret)) X* H A/ u! {6 v9 z$ Y3 a. I
pr_warning("Could not register som GPIO expander LEDS");- h5 `' c9 S/ T* Z3 C2 {( r' F1 N& l
else
7 h! H' [8 q& G printk(KERN_INFO "LED register sucessful!\n");
& |' o" i4 K% h+ {% {5 A# S- |1 x! z3 F8 w4 K0 k
return ret;
" G$ j: v& `) ^9 z0 }( z Q# F}
+ g! {/ m$ C: m b2 l
/ u: o% }' {7 B7 pstatic void __exit led_platform_exit(void)0 Z' q( \% v, ]; ]/ A
{5 p1 R) i* Z2 O( H1 j
platform_device_unregister(&da850_evm_tl_leds_device);
! V3 }& l" }2 S( d- W" r" C" L, ]' Z) I$ H$ s$ {
printk(KERN_INFO "LED unregister!\n");$ M4 L" K! t9 T+ H
}
: M4 i% o' |' v$ a" j
( T/ |: G0 m) y) {- Bmodule_init(led_platform_init);
/ L) p" Z! D" l! |4 i# ~3 k8 Wmodule_exit(led_platform_exit);
9 F; K" [; ^1 Q7 M" |8 h8 c9 S: D0 n( P: ^
MODULE_DESCRIPTION("Led platform driver");% y' M* [1 l& E3 t% O3 B2 r
MODULE_AUTHOR("Tronlong");# c, B3 i: n5 M7 R$ I
MODULE_LICENSE("GPL");! d- e) E; W) ~6 q& a
7 [! c% W# l% m; k, | |
|