|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" N* X0 w# U6 Q5 a#include <linux/init.h>
/ i- Z7 i C- M- F9 H#include <linux/module.h>* L, [4 q8 L9 O. w0 X2 f
#include <linux/kernel.h>
# A7 T) m6 M+ v0 I3 e1 h h#include <linux/types.h>
0 G& t- A: I& i$ _#include <linux/gpio.h>
/ Z4 } d% H8 J) \, N7 G' |6 x9 d#include <linux/leds.h>
1 P: `% S9 z( H0 f#include <linux/platform_device.h>
0 V3 V/ W9 g+ X. s( x/ U6 b& h; c7 o/ R
4 Q% T6 a8 T* Z# s- k' G#include <asm/mach-types.h>
, b; n7 [; q4 B+ k- y5 c# [#include <asm/mach/arch.h>( J% [: M! R- U. u8 i' N
#include <mach/da8xx.h>5 ^8 U2 J( p" e7 {+ f
#include <mach/mux.h>- e0 n" R! D5 g/ ?5 e
3 Y8 g+ d# D+ s# @* \
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- z8 }1 U3 d8 e! z; o, l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# I& r) R- O1 v% ^+ L6 \4 U0 |#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ G% p2 A" f0 f4 J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; G9 a6 d( x& R! w8 K$ N( o5 j) K! ?5 }
/* assign the tl som board LED-GPIOs*/4 p5 a" a- \- A" ?( M: j ^
static const short da850_evm_tl_user_led_pins[] = {
6 S8 R- N8 L5 ?: G /* These pins are definition at <mach/mux.h> file */
1 e- z; ~" o" x- _3 p7 N: ^8 k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 H7 z5 N/ w3 s- X5 s4 e
-1" o/ R# E, D! s V# i( j9 @
};3 y+ X: V2 J% q3 l! x
* ?3 m! [: k! C: c& C' p, dstatic struct gpio_led da850_evm_tl_leds[] = {
. Q, Y4 D% }( p. O. X {7 `. e$ f7 T+ T- Z2 V8 k
.active_low = 0,' g/ x8 H; z6 ? w" o
.gpio = DA850_USER_LED0,' q8 w! K4 N1 O6 e
.name = "user_led0",8 C3 ]( w0 s/ z; t6 D/ R4 Z f8 s5 k' i
.default_trigger = "default-on",
4 v- ~( D- M6 C2 y" u( O. X },
/ X' l8 G7 o. d5 X* h P$ p {
6 K' ^& t* t+ o5 @' {% R .active_low = 0,
( ~. e( t4 F0 N- t# \+ Q6 F) x- b .gpio = DA850_USER_LED1,
6 ]- \& g! W& F; e .name = "user_led1",
) a3 M& c7 G4 Q+ Z .default_trigger = "default-on",! S( ?7 k# I3 `9 Q- U, B2 Q- h1 B" f
},
& G; c) m, T7 g2 R9 L) [$ o {
4 [) L: h7 z2 K: e7 r/ V .active_low = 0,+ w! H. ~' A. f) ?& L+ E! \
.gpio = DA850_USER_LED2,6 o- `- X+ s: B" l
.name = "user_led2",
# s3 I: n! ?( a, t. N .default_trigger = "default-on",
+ g9 p/ X7 ]# f1 x9 y m },7 ]- u1 ~7 I8 t6 k$ E
{
; J5 T4 n7 P8 M .active_low = 0,6 }9 j. f, S- }7 R
.gpio = DA850_USER_LED3,6 z; X8 @: u' ]" c
.name = "user_led3",( s- `% r1 ]" c6 K" j) O' |9 X
.default_trigger = "default-on",
# \% ~ |7 l8 e' t6 n },
3 u# a* A" j( `/ x5 e, L1 Q};
) ?: k L3 ]) ^7 ?9 m$ r2 C4 X: M6 \% {) J# D6 B1 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, K. [, X2 G$ x5 ^% \- t: m% N
.leds = da850_evm_tl_leds,
: q4 |. U3 v& C" t/ a# K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ \# E' o$ I- A# d+ \# w( y' j
};
9 t" g: u" Z( b' V" Z/ k% D# k# i) x( F, g
, P0 _ A9 ~' K, r6 k$ n- [( G) P0 a/ hstatic void led_dev_release(struct device *dev) `1 _' i* R* A& `" ^& I. L/ F: s
{0 [& C$ E% O H7 v8 x6 g* l$ R
};& s6 f5 i+ [- F, [: M$ I
* g6 [; W% E! e% f- Z1 G
static struct platform_device da850_evm_tl_leds_device = {7 X# Z% Z0 M4 d' m; e( a1 m
.name = "leds-gpio",
$ t6 \6 C6 v) M" k3 ? .id = 1,
4 P6 J4 R d7 ^7 d0 m+ S( J0 M. z2 p .dev = {! q+ c/ g7 A1 h& s2 K
.platform_data = &da850_evm_tl_leds_pdata,
q8 O) X3 t& Q0 { .release = led_dev_release,! u8 J! d& z' `7 T
}
- G2 Y! V& r8 ^& T};; y* t; N9 B/ K1 v: b
8 e2 g4 @8 J4 L2 q! k
static int __init led_platform_init(void)
# t/ y1 ^& b! A3 l8 Z{/ k$ P+ Z7 x( _) Y% `, Z* X
int ret;
5 Q2 W/ o" B3 h( ?' o2 J#if 0
* t9 O3 j& p5 z2 Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) ?: h4 k0 g! }; X0 J' h* i if (ret)
9 Q, d: W8 z0 ?, z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 S) h" d! z0 a- i o
"%d\n", ret);& o O2 |# {" X+ Q$ D
#endif
: f7 g% E2 x; L ret = platform_device_register(&da850_evm_tl_leds_device);/ }# c" H) n( m/ L S1 ]+ y. x
if (ret)# P& l; d8 A! B. U8 `0 |2 k {
pr_warning("Could not register som GPIO expander LEDS");
# G" u1 G# O$ G' j* c else) B. t+ n; N9 g, d K y7 c4 A
printk(KERN_INFO "LED register sucessful!\n");1 P0 `8 R9 M0 a& V
7 y! b$ T' `4 P6 d. j" Y3 V return ret;, j/ j* x/ Z% O H/ _; X
}
% {' T7 P( w: p& y9 g4 f' ~2 {, Y( @6 Y
static void __exit led_platform_exit(void)
$ q( s2 W6 [: Y' {8 g{
# d0 u: k: d! [/ x3 L platform_device_unregister(&da850_evm_tl_leds_device);2 K- }/ ~9 ~ g Q+ S
, P' m' G/ Q+ L' ?
printk(KERN_INFO "LED unregister!\n");0 S) u/ \; n0 }7 s2 i' I% p
}4 q. J! R* i, U4 w9 D* X
9 @/ _' \& E- O, Emodule_init(led_platform_init);$ M1 e; v0 D8 @6 i
module_exit(led_platform_exit);( v A. A5 v5 o7 p
8 H: b! |/ b5 F5 L2 j* ~5 t
MODULE_DESCRIPTION("Led platform driver");; Y0 a3 b$ h. B( @9 \, i$ u$ U/ s
MODULE_AUTHOR("Tronlong");
% q" g2 e b& Z: u' e7 M9 P+ L- k+ PMODULE_LICENSE("GPL");
% o p2 H( F: X5 }) G' F0 z" d$ Y9 \7 E, I0 B
|
|