|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. L) l. n# Y$ l$ E; g" c; q! p
#include <linux/init.h>4 N; ^4 L3 \ A# o9 s L
#include <linux/module.h>
- t Z2 Z. q7 V#include <linux/kernel.h>* h) r/ X, x1 O. x; a1 }- b& l; R C7 l
#include <linux/types.h>$ W/ ]/ P6 |. y1 ]
#include <linux/gpio.h>
2 O7 E! j9 h. ~% H$ |#include <linux/leds.h>1 o5 e9 T7 v9 g$ Z/ _4 G+ d* F# j/ W
#include <linux/platform_device.h>& t% R6 J; }) m/ b S% J
$ U5 g) H2 ?/ ~
#include <asm/mach-types.h>
/ m5 n4 v" r: g: p3 N) H9 k0 h. ~#include <asm/mach/arch.h>
( d) @/ h' H9 q8 ~3 D( I$ D3 I' n#include <mach/da8xx.h>
) R V! N# Z$ U: f2 R2 Y8 N#include <mach/mux.h># q; _2 A* U/ o0 ]7 J; r
, i5 }7 k. A0 C) F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* I' G0 O, {' a#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 M8 T- t4 ^% S9 I
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# p3 A# \6 r9 l( \
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- \. k( @- g- ] ^% r& X S# z
3 y0 y; i& [" [/* assign the tl som board LED-GPIOs*/
8 @$ [+ d+ s- h4 ~static const short da850_evm_tl_user_led_pins[] = {; C7 R M$ J: x7 C0 I( T
/* These pins are definition at <mach/mux.h> file */' p& ^& G- z( S" ~$ j" v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 x0 m* t9 ^+ p) J
-1
0 X/ y* g4 t& ]& C6 [7 N. b; B};
: N! T# d7 W. }' @9 m* i# A' U& i7 Q' h. V+ r1 O* _6 O. G
static struct gpio_led da850_evm_tl_leds[] = {4 z; O7 q. a/ z6 ]3 p+ W, `
{
" k4 f* V, j9 W6 z .active_low = 0,2 S9 d3 F$ ^* }& H6 z& G* [
.gpio = DA850_USER_LED0,
/ v9 G: [ L4 |$ c E .name = "user_led0",, h9 R9 {( ^+ }5 }/ h
.default_trigger = "default-on",
3 q8 B! p" Y$ }- n) ^) F: h& Y },9 E, l" r- K4 E6 q( f2 o3 ~
{
. j2 W5 f6 ]" G7 g; k .active_low = 0,
3 A3 R8 y- a' [/ z! O" P .gpio = DA850_USER_LED1,
& R5 ]$ Z9 L# j4 y .name = "user_led1",& v$ n4 _0 ^) _8 P& ^, F) Z' @
.default_trigger = "default-on",1 w3 t0 J, e2 w8 l( V2 Y% ~' M% K8 X
},2 ~8 X$ p" K$ J
{7 W) p3 M9 O& N
.active_low = 0,
0 C9 @% b! p! a: y, } .gpio = DA850_USER_LED2,
) u3 [6 @% a6 h% c' E2 }; x .name = "user_led2", k# M9 J7 i$ v% T
.default_trigger = "default-on",
( }% o( x6 F5 X. m0 T- T },
' d$ V9 o- k7 U I3 E {
5 h K3 M6 i s* R! b( B$ M .active_low = 0,, n3 l9 t0 M4 E& ~7 Y7 [
.gpio = DA850_USER_LED3,
( x( Q, b* }' A. G2 _* S .name = "user_led3",# J5 ~7 k9 f1 x5 N& D1 U$ c
.default_trigger = "default-on",, v5 e+ l+ W' V& Y( j
},
6 ?9 q* n5 }/ b0 a( m: f};7 g; p. v* @' a- H9 r8 \: l4 s" k
( f. }* ? }/ e. e6 |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 {1 l+ C# s: C .leds = da850_evm_tl_leds,
; J) @, c% ~* o$ F7 A/ } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 {, q& N5 W& z. H9 ?% y
};
/ p6 @8 E5 `! y: {9 d! c* t V, w& i' G0 ~( T2 |
static void led_dev_release(struct device *dev)
5 R, I8 J& E5 E" W' B! w$ c1 k{7 ?, v, ?% q# X" L+ }
};
4 @4 t7 }2 m; G, ?. F( m" C! z X
static struct platform_device da850_evm_tl_leds_device = {% Y' |/ @ |; R( K9 C5 [6 U( S4 S
.name = "leds-gpio",, _' ?! z+ O+ U/ X2 |8 N) a
.id = 1,4 u1 H) p4 @+ N% u7 b8 Y/ _- ?
.dev = {
3 u. m3 R7 |) R' f. e* K .platform_data = &da850_evm_tl_leds_pdata,1 V/ c3 r! V$ S, d
.release = led_dev_release,8 ?+ `3 b4 ]9 o* G7 h
}
6 \, v7 m' j7 O2 z* Z};
9 w W# \0 k+ G+ z- C/ e
+ E- D/ F f# c9 Dstatic int __init led_platform_init(void)
; ]% y9 A8 K+ ^- c{, e9 ^3 N0 W+ ]5 v" K5 t
int ret;
) p9 p0 E) I6 X7 E' r( A \. z" \#if 0
6 T# Y& f: `8 r: S ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* v) L4 k5 o- R1 p if (ret)
3 _$ }/ X) S. Z* U. L7 f pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 X- P8 M. s1 r/ ?0 y% R
"%d\n", ret);( X' U& ?2 b% r
#endif& E2 h9 i( B6 ^$ H' C0 p
ret = platform_device_register(&da850_evm_tl_leds_device);
9 u( Q, d$ W( Q4 m) {& D" f if (ret)+ u3 ^" ?9 [6 o# X! B7 k: U; D
pr_warning("Could not register som GPIO expander LEDS");
; j) F; `4 H* E6 q$ W1 J1 k else
( B% z3 Q+ @0 S8 M2 F printk(KERN_INFO "LED register sucessful!\n");1 J3 E8 |2 q' U8 R6 z: [1 P; A" l7 Y
- Z, c0 w+ I* X+ q4 ?6 j# T( A
return ret;. z; t4 ?$ |0 L2 Z' [. M/ o4 |
}( Q. ]1 A. s3 h& u. |0 Z
# O4 X* N# ^ k( ]; W5 l) a0 Q# hstatic void __exit led_platform_exit(void)5 r7 ` o' z3 R* Q) Z3 J6 F9 H
{
7 v8 u) n2 A, n# o0 ~( i platform_device_unregister(&da850_evm_tl_leds_device);: s7 w9 l' I- x( Z) s& h) x
9 v) E u8 M+ J- M9 a& e
printk(KERN_INFO "LED unregister!\n");
( i: {1 c8 O. `& X5 ^/ \}
1 ^% B' @7 b5 k ?8 e. ]+ i5 ^9 F- [2 u Z# u! f# C0 q% F6 J
module_init(led_platform_init);, g X: E J& r9 q* E
module_exit(led_platform_exit);
2 e; s& F) _# K3 b9 G. v
4 M. S9 W1 B( @. c+ D# S" O" q \: GMODULE_DESCRIPTION("Led platform driver");
5 J0 \ |; C& w2 X" s) w) `MODULE_AUTHOR("Tronlong");
8 m' u( G- y5 |" {2 \1 pMODULE_LICENSE("GPL");
- e2 a, F8 {: Q1 u9 l: ^9 H \; G9 E' y6 P% w; c/ T H
|
|