|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& Y5 b' ?' v, Q7 W#include <linux/init.h>
( U7 Z& T6 s. v( z, Z0 n#include <linux/module.h>
% p) R0 R/ M6 N6 J#include <linux/kernel.h>- f, u0 A* [) i7 g1 T& u
#include <linux/types.h>
. d* H7 m8 B, S @: U#include <linux/gpio.h>. f6 k% E* Q7 p' M1 [4 _8 f
#include <linux/leds.h>. u* d3 X x" |6 n% P
#include <linux/platform_device.h> W: a6 l0 z% {& v% R
, }. ?1 Q: a9 d: |$ g
#include <asm/mach-types.h>6 v6 t# z9 c: a" ]# n
#include <asm/mach/arch.h>
- Z$ l5 M- f% M$ H" d6 m& \#include <mach/da8xx.h> F7 }2 w i' ~ R: h' }: i
#include <mach/mux.h>
8 E/ b3 R/ D0 d3 j$ T2 n" A+ f# J- L2 i2 t3 ~. Y; N7 P( ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ o3 k2 U* ~" @' B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 `% Z5 A, q& Q- m4 F* @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 } C0 w$ H! j) u3 _# r1 ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' [1 O. j, v% A/ C
5 R1 ?$ _" P. v+ D. x# ]5 P) H/* assign the tl som board LED-GPIOs*/
. [3 z+ l$ V1 p0 cstatic const short da850_evm_tl_user_led_pins[] = {
6 x7 c" i6 h2 ]4 E/ N, d- c /* These pins are definition at <mach/mux.h> file */) z& [# D& j* z$ }6 D. [
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 ?; x; ^& S8 Z( @. F; g/ S1 v -1" F5 |3 R$ c. S0 H. |8 Y5 b. F
};
A. m) o& I" d1 U. A3 |
% _' [% w8 _0 k0 u. M; vstatic struct gpio_led da850_evm_tl_leds[] = {
5 O" X+ C6 |- A& s( [ {9 X* x" @9 c) J4 F5 i
.active_low = 0,4 L( W" b7 b4 O2 D
.gpio = DA850_USER_LED0,9 d/ V# Z8 k& m; a, b
.name = "user_led0",
4 A( u. n: q" G2 p .default_trigger = "default-on",/ c( N/ h! d+ v, h8 U
},( D0 b$ t4 [8 a- I
{5 q# I; O% {( ^' m& }! ^1 j0 _) A" y2 ~
.active_low = 0,$ m; d$ K' L+ ~6 F
.gpio = DA850_USER_LED1,
2 y9 O' N3 ]( ^& }0 o0 j .name = "user_led1",1 i$ I6 T% c" N& I. `( O7 K
.default_trigger = "default-on",' f+ W7 \% c. W% Q: K
},7 Q/ z, A+ t" v7 H# B4 V
{
& r* n5 t4 D# ~0 Z8 e$ w8 ^% Z .active_low = 0,
8 o1 }7 p3 R2 V5 @6 I; _4 u .gpio = DA850_USER_LED2,+ r! d/ \1 L; w" I& W
.name = "user_led2",
6 h* w* o, B! a7 C0 ]; b .default_trigger = "default-on",
8 n* ]1 a& O0 T+ o2 w },
& W0 q& F- }8 V9 P% |' C {
. g8 D0 @1 ~0 F5 Y .active_low = 0,
$ k8 E% `! U) S, d$ }+ m% x .gpio = DA850_USER_LED3,
" ~; G& p4 ~' x2 K( d h6 h* C% Q p .name = "user_led3",
4 F* K0 m1 S+ C0 f7 r; D .default_trigger = "default-on",4 I( J* p+ P6 m2 x( ?4 \# h5 f
},9 i: U( X- E5 l# R8 o- B! L4 }
};
* q V \1 _$ z- r& g5 h# D" [" O" ]# g. p/ |; S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' f1 {6 W) o# V/ r* l' N+ W
.leds = da850_evm_tl_leds,
+ L5 g' \& C$ y4 R+ Q1 z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 o$ r3 B- K B' z0 u- O! K7 I};
3 p ~ _5 n9 E/ Y: b3 t; I+ v. a' |& _5 ?& M
static void led_dev_release(struct device *dev)" Q, H- p( O, W" @
{" N) B* C% D4 `# a9 x0 Q1 }5 H5 l
};
5 e- Z" H6 t* T* p/ u8 r. [! v9 l' T
static struct platform_device da850_evm_tl_leds_device = {1 C8 n5 m7 L( q6 T! U# p1 ~ f
.name = "leds-gpio",
6 T+ q, k! {7 f5 U .id = 1,
. y$ x6 ]2 o" p2 T& c" u3 [0 m .dev = {
$ l9 g2 J" D& Z) Z4 h! \ .platform_data = &da850_evm_tl_leds_pdata,
9 y) _ a- V; }. @( m .release = led_dev_release,
! F X8 \" a5 m }
; ?8 p; E. A5 ~; i+ m$ H% n};
( i' C, N8 Q0 D, |- q- n8 r7 n' c6 H f; ~, h7 k+ D1 `
static int __init led_platform_init(void)% c/ ~1 o5 z. u' L) K7 l. k/ \2 I
{
: q0 T+ a9 W- E1 H int ret;( E, ?. [* r& Z( ~. x/ \' W' V- l
#if 0
/ w% a. o/ K4 |2 N5 n# u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; g! G* F" Q, k- _/ O/ m0 h' s if (ret)4 m( {7 { ^/ x. w4 ]6 f4 @/ N2 P+ n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 c3 h5 a# g# A+ W F; @ "%d\n", ret);. ]- S2 o5 @( D+ g4 e. f0 h! {
#endif
# \/ ^. l. m- x8 U. L C3 Y& E ret = platform_device_register(&da850_evm_tl_leds_device);
& S3 z: R6 H. p" d4 f6 J; X if (ret)- `1 y. ~+ ^8 K% Q( m
pr_warning("Could not register som GPIO expander LEDS");
7 y3 q5 V/ j% J! P: ]1 K else* p( i0 A1 p# w
printk(KERN_INFO "LED register sucessful!\n");
+ U: O& C B, ]/ F8 \; {. P7 e' {! W r) u& Z
return ret;1 R/ t+ L. d+ m: p
}
- F7 B+ U, Z% E8 d. T1 e$ z. T% y% ?0 g
static void __exit led_platform_exit(void)( A4 G; o7 N% S6 b/ i# S7 Q: Q
{
5 x6 m+ E. P+ C5 v platform_device_unregister(&da850_evm_tl_leds_device);6 G; t4 a' v8 K0 F0 e
* ^' O+ p1 O" S! Q1 _
printk(KERN_INFO "LED unregister!\n");9 \5 O7 O+ q$ d& F/ R$ s& D% X! ?
}
& U% r! a5 q0 J( ~6 l, d2 p
: t: S: B9 f* D8 cmodule_init(led_platform_init);
- {6 a6 n7 W' |7 W( r4 gmodule_exit(led_platform_exit);
, X3 d, s+ y: n, f! ?; r) X$ E7 D" M5 q* D- q3 F0 t
MODULE_DESCRIPTION("Led platform driver");
* r' d% K' S7 Z% ]: Q2 fMODULE_AUTHOR("Tronlong");' G" @: T- ~6 f. T; g
MODULE_LICENSE("GPL");3 `6 z* M3 W. e- ~0 z& r
5 ]( v5 Q3 V1 c4 U5 l# } |
|