|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) f$ ? o6 Z7 e5 Y
#include <linux/init.h>7 j: t1 B+ F- ?, E& ^8 W( M
#include <linux/module.h>: O$ v: {" D" w6 i
#include <linux/kernel.h>$ ~5 @$ i( Z/ Z; j2 ?
#include <linux/types.h>
% A% Z( Y0 l9 C' ^8 h8 T! n' N8 Y#include <linux/gpio.h>( T9 J6 k+ `8 z+ u) _4 u& u7 p. K/ J
#include <linux/leds.h>
/ i+ w/ E) T6 ^, Z, F4 a#include <linux/platform_device.h>5 N" R& w. c9 h9 z8 |6 A
9 c" _% [% Y$ T# a2 t/ H
#include <asm/mach-types.h>
, m# {" h) j7 @, N1 w" I0 e#include <asm/mach/arch.h>
( Q; r+ ~8 a; G" U6 k) k#include <mach/da8xx.h>
& o7 t. ]6 R! F( y& j1 o. c#include <mach/mux.h>" U) C; w0 Z1 T% Y
( @1 m( r, {- N$ o! v7 f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 H8 w9 _, s5 c#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) v8 L! @$ L4 c0 s$ C+ A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ U! Q" Z2 S* l! E% ]& `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 N& U# D. t$ Y3 j7 W' q
% e8 R, N |; x/* assign the tl som board LED-GPIOs*/
/ e3 w# P2 @* f. ]static const short da850_evm_tl_user_led_pins[] = {
: p/ I9 \. h+ X \* f2 [' q /* These pins are definition at <mach/mux.h> file */
4 U [" T. h& @3 }: o, C' O; P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ S8 a1 t# @8 ?6 U z9 ~& S
-1% C7 I& b! l! N9 i$ H
};+ N+ D. ^. o3 n
1 y1 Z/ Z2 Y- ?4 v3 m
static struct gpio_led da850_evm_tl_leds[] = {$ P* O$ p* B1 Z
{
8 ?5 O7 p" d% h7 K) V .active_low = 0,; r& j4 T* T2 U# ~
.gpio = DA850_USER_LED0,$ Z- `$ ~- O- a
.name = "user_led0",% i9 o6 h' `+ d
.default_trigger = "default-on",% e* N; M1 l) J7 N$ B4 S
},
' L+ {: v2 P X {6 J! @4 V2 C Z* L' G. R6 O
.active_low = 0,
) L& A2 T8 Z3 Y. ?% l: z" r .gpio = DA850_USER_LED1,2 O" W$ ~8 o8 S2 u0 k; ^/ Y/ o5 N/ r f& n' X
.name = "user_led1",: w+ C# D3 D1 C. @7 R5 p7 g
.default_trigger = "default-on",. n3 c4 T% ?5 s1 c
},
# H4 z, a9 v+ `4 d: Y7 Z2 {1 V {
0 Q+ B# ^ c# w1 S5 p1 S .active_low = 0,
6 {$ M; J* O* p( Z7 d D2 F9 F .gpio = DA850_USER_LED2,
v) F$ x$ k) W9 z& ? .name = "user_led2",
' Z# p+ p" U0 c7 H0 d3 F; `# S6 p( K .default_trigger = "default-on",2 ?1 q9 n$ h" ?
},
5 J9 i9 X3 G2 K+ p; N {9 r; ^9 M7 t4 j# r4 }. n0 C- u1 \" B2 G
.active_low = 0,
* |/ B* c2 U3 v. b& a .gpio = DA850_USER_LED3,
6 j- e, }5 @, W. Y5 H .name = "user_led3",
: e- R4 A' A( |, i/ a0 c. k# O .default_trigger = "default-on",6 t7 L, N; {$ k- [0 ?" Q
},/ [! P) M( Z) i( d! X& d7 Y9 Y. Y
};
- j# l' k4 j. ~
4 s2 ~( v" P! {% m, ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. {0 _8 v- n( f# k+ K .leds = da850_evm_tl_leds,. i: H7 P) b9 ^+ \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; H5 P, Z6 D; b- A* }
};; a$ k3 l! T1 E# V$ _; n0 X! |* S7 P
. |+ Y9 ?, Z3 T" |' k9 ^' m, ystatic void led_dev_release(struct device *dev)1 z" O3 j* r2 Z& q6 q' `! Q
{! y; e& ~4 Z, @# n6 f" V" T& u
};/ S0 ]) m& M0 M
- W) K! D0 P6 D$ q$ X7 B2 z, v" `
static struct platform_device da850_evm_tl_leds_device = {$ r- o, B9 ~% [* N4 d1 T }, i
.name = "leds-gpio",
* M: v8 K9 [3 a6 ~, m .id = 1,
+ k" C2 }/ S& r% o' e8 e D1 P6 l .dev = {( C0 r8 _( S* z; V
.platform_data = &da850_evm_tl_leds_pdata,3 G) D, A/ h. f( z2 k( [8 Q: C1 s
.release = led_dev_release,
9 ~ ^3 l/ [; _+ m" L9 W( K }
8 K1 F9 {& o& p' r: _% G1 p8 X: E- t! s};
. d8 G2 J6 w9 b0 d' c3 F- A3 f2 c( c2 N- B4 `; {
static int __init led_platform_init(void)8 [: E( |& B* W2 t- G8 B0 }1 m
{' d3 G \. Z4 J; i$ @& p4 Q
int ret;
6 L. P9 O9 ?7 T( M" _) V#if 0
, ^/ [# I+ b3 o% L8 l1 k ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 O) O5 y- c: F if (ret)( c; x, S! Q1 N5 r0 h4 L5 e) ~: a
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! c# v# Q7 `& X
"%d\n", ret);& u B) G0 e U
#endif- K8 n. t( b i2 `) i- P
ret = platform_device_register(&da850_evm_tl_leds_device);
2 G) B2 E0 O! w, \1 `; R: W if (ret): G4 ?, z+ E( Y: L0 N9 Q
pr_warning("Could not register som GPIO expander LEDS");
4 G& C2 @; s; `/ r- f( q else* n7 x6 M$ [3 [
printk(KERN_INFO "LED register sucessful!\n");
$ G Y2 m* m }9 S! v: {' k: m% t6 s+ e4 A$ w: ^
return ret;* V; a" r5 M1 c7 ?+ ~6 T
}
$ r* R) L p1 m: `: p% l' ]
; X. h6 U4 A4 O) @6 X& ^/ n" mstatic void __exit led_platform_exit(void)
0 |9 [0 d( G v7 m5 {. H{
$ g- O' V/ ^1 D' Y$ I/ E7 ] platform_device_unregister(&da850_evm_tl_leds_device);
@; `. g5 S+ Y& q0 e( ]3 W
6 F0 i, K& ]& n9 p printk(KERN_INFO "LED unregister!\n");
o S( p3 T& [}
$ x6 f5 `$ g6 O& H' p1 D, u% Y7 S, D" K* z. c/ N- P
module_init(led_platform_init);3 Y+ K2 L5 ^, z+ T& L& L1 y
module_exit(led_platform_exit);( a6 f& @5 x& I* H6 Z
% i) u8 ^- f! ]
MODULE_DESCRIPTION("Led platform driver");7 K4 ^% {3 S G! Q/ D8 V3 {
MODULE_AUTHOR("Tronlong");
/ H/ L4 ~! y# Q, M/ ?' jMODULE_LICENSE("GPL");7 B* V/ ` ?9 m+ f6 z& ]
, U% B5 ~( Z. }4 x- S
|
|