|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 X0 o/ p( r4 A" `6 O
#include <linux/init.h>9 S& ]4 D \, n! T" O
#include <linux/module.h>- o; n" R+ ~9 f- b
#include <linux/kernel.h>
6 X; ?/ r1 p" v; G8 x#include <linux/types.h>
: V+ N3 d# Z. m" _2 v7 f#include <linux/gpio.h>1 j* S K( ^6 C# ^
#include <linux/leds.h>
4 Y2 B8 r! d- _: y#include <linux/platform_device.h>/ t; h3 _- ^6 B: ]
8 e0 x, n- k2 \1 r( S9 v, ~
#include <asm/mach-types.h>: N, Z1 C0 C/ Q6 R
#include <asm/mach/arch.h>) _, S5 K& F* {9 N. H& q" Y2 D
#include <mach/da8xx.h>' [4 Y: N. Y' C8 G# |8 h( O
#include <mach/mux.h>- x& v( V+ N) l9 `5 I6 z
6 ^/ t. e' a3 O) s% D0 i/ M5 A" y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 W3 f* s/ c/ z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ E/ d' G4 Z+ V; _2 Y- d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 ]/ Y& d/ k: y2 u6 E
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( G$ g% e8 g/ O9 ?) \# Y+ j" C& A6 q6 V
/* assign the tl som board LED-GPIOs*/: _( K1 o. Q$ a( }
static const short da850_evm_tl_user_led_pins[] = {& v8 l$ d1 v+ R5 p; b) f
/* These pins are definition at <mach/mux.h> file */
0 D% I& J9 g* I% l4 |$ ^8 |9 c6 U DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 y: T. |: L- w) L0 Y -1
3 J) D; w0 |4 {$ K& r};/ Q; W( h: `" s8 g+ F
# }2 c. d$ e1 F( A7 ?( ]static struct gpio_led da850_evm_tl_leds[] = {+ P$ _" T/ k* G! `
{8 c0 N+ a7 F- c0 x
.active_low = 0,
. r5 Z, V3 P' z1 C9 j, k .gpio = DA850_USER_LED0,
3 L |, d2 n& m .name = "user_led0",5 D/ b* E9 [8 K9 _: b5 B! T
.default_trigger = "default-on",
! X: e3 o) p# C },
% D% y8 H6 V+ M/ b& N# \4 ? {
n6 N) q3 Q% A& i* S i: z, [( t( B .active_low = 0,3 i; t& b# u5 U
.gpio = DA850_USER_LED1,
6 G) }# b9 F6 \ .name = "user_led1",* w( a- s( g* ]' m+ H
.default_trigger = "default-on",
* D% a/ D Y7 p. e& C6 f },+ l4 q# Y/ }) ?2 o7 ?7 l3 j( I/ ?
{) H- g; ?/ H5 I6 V! d4 p
.active_low = 0,5 ?- {6 C- X4 V) ]' O
.gpio = DA850_USER_LED2," B; j! C3 m, F+ ]9 C7 i
.name = "user_led2",0 x' v' x/ f+ E7 {
.default_trigger = "default-on",% C g8 L0 }7 g8 t/ s/ [' T
},
5 z6 P# Y7 V' D {
' L% ^- D3 z5 c% G8 @' p; u$ A .active_low = 0,
% r; C- T7 O/ w7 u9 t" i .gpio = DA850_USER_LED3, [, u4 `# [3 o3 C6 j! V. F
.name = "user_led3",' T* Y/ q! S0 y% [8 H/ Y
.default_trigger = "default-on",
- V. _& B7 o0 O3 l% b, @& M },/ D S3 G/ }* x( Z ~3 I/ _
};/ @# g, F* i7 p# K; W3 K# Y3 W# v( y
9 A% L: D5 t* g; Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' b( \2 W2 A8 |8 D3 ~
.leds = da850_evm_tl_leds,0 W7 L, g& I: u4 h- e5 V* ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& g5 k2 g2 Y+ I5 ~1 u};9 y9 D5 |6 n3 l+ q/ O! V
$ Y( ?) U; Q3 kstatic void led_dev_release(struct device *dev)8 _# |. a1 V O/ m
{
! y9 J# [& U$ n: ?8 I7 W/ }1 b};* }$ O! [. O% T' L; a
1 P; M9 K( ^$ A! h' q2 x3 T) G$ estatic struct platform_device da850_evm_tl_leds_device = {
/ C6 k( `3 D* h) j5 N .name = "leds-gpio",6 `; w7 }8 _, ]2 b
.id = 1,
; Q" _1 [, G- u, p+ d, n0 D0 ?% ^ .dev = {
4 ^) h) U. l+ |% }+ T- Z% C .platform_data = &da850_evm_tl_leds_pdata,
2 }: | v: @7 y% g .release = led_dev_release,& z( F" T% c' t
}
1 l* K- d" {, i! v- o+ Y" ~};
' d D1 |1 b: C9 M, |& }0 k- C2 Z
3 D: J* }8 d; M2 J' [) Cstatic int __init led_platform_init(void)
/ b% k, O0 V! Q/ {2 e t{) e- @: c6 _+ j |" |2 c, W- X; ]+ Z
int ret;7 R# }1 T2 K1 X8 f) H
#if 0
5 W' r5 d* P7 Q2 P u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- j0 G# D/ q& {1 P) z7 E% X if (ret)
$ X) t- H0 h! U/ l. o0 y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, G/ X! @7 N7 c9 ^ "%d\n", ret);
1 y9 s6 J5 @1 |#endif' |# R Q+ c ^; \+ ^- k6 q
ret = platform_device_register(&da850_evm_tl_leds_device);
3 R, W! n/ z1 V5 j if (ret)
8 ~- S/ l- D7 K) z pr_warning("Could not register som GPIO expander LEDS");4 y) |" ~5 S1 e5 b* }9 g0 _9 ?
else8 t- \8 x: q1 U7 q. g& v5 n1 O
printk(KERN_INFO "LED register sucessful!\n");
) I9 e% B& z; F( i6 R/ \ f: J3 }" D: ^+ m/ u: [/ S
return ret;# o5 e: h, z- x% C
}
8 p5 g' z9 |( A1 ^% b5 e* t3 D1 q2 `# m) @0 f
static void __exit led_platform_exit(void)
! S1 X; R4 \- u{
$ w- y0 n) v+ e/ p$ j- L J platform_device_unregister(&da850_evm_tl_leds_device);+ T6 u% P' w( v( K* L
( p7 R( L' i; E5 [4 h% k, e2 C8 G1 a
printk(KERN_INFO "LED unregister!\n");( l' F( d3 S# N: a+ |
}! f* G9 B* g4 v, Q$ d8 G$ G* Q7 ]
: }9 i& y" _' y4 O
module_init(led_platform_init);
/ Z/ K0 K. b9 J* h# imodule_exit(led_platform_exit);, W1 P6 W% s6 S) c G( i) y
& }9 w9 {5 ?0 [: I; m1 y
MODULE_DESCRIPTION("Led platform driver");& d# Q7 S, ~, w* L
MODULE_AUTHOR("Tronlong");
, R6 A8 m* I# ]7 R# H) l$ h' `MODULE_LICENSE("GPL");
8 G8 g1 S* p' H' x8 {% t/ n6 M3 i! c6 x9 @) S
|
|