|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: r; w( _7 ^) K) O) k5 l
#include <linux/init.h>& W9 \' }& f+ q8 d9 K
#include <linux/module.h>2 X) C$ o! S0 J& X( }- l
#include <linux/kernel.h>
2 I c9 u2 j: x- P& _& o#include <linux/types.h>
+ y( o( z) k/ c% t3 @# T#include <linux/gpio.h>* L o' r7 ^" ?4 C- [5 a
#include <linux/leds.h>
& s) a4 [0 U& S0 P) f#include <linux/platform_device.h>9 V9 ?, f' U4 g% v
& a7 K. Z1 N: O/ _: I! p
#include <asm/mach-types.h>: H* s7 A C9 R- d
#include <asm/mach/arch.h>
4 ^6 o$ j3 _7 F/ p( G* b; a9 ^#include <mach/da8xx.h>; R$ \, @6 \( a; F6 ~& e2 I. c
#include <mach/mux.h>
, X+ N/ ^$ |) X3 f, b/ V8 W
$ T: I: D7 ~0 P2 C- A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ X8 v/ x" q- { b/ Z# ~$ ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* }: ^9 A4 c+ z% W
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& W- r4 e: V+ U- W; a$ v' Z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): [( d5 W9 s( I: i
4 P2 n) v: j7 `) f s" m1 f
/* assign the tl som board LED-GPIOs*/
% V) }1 E8 d1 mstatic const short da850_evm_tl_user_led_pins[] = {. ^9 B% E+ a9 m8 \/ [
/* These pins are definition at <mach/mux.h> file */
' ^4 u/ d7 E$ r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ f; b+ b" R- a! {& J' |+ Y& r -1
# u- V3 u" q }1 q) D( }};( m! R2 k+ @ k
6 T z& i* B: L" m/ h2 L' k9 Kstatic struct gpio_led da850_evm_tl_leds[] = {& a( J0 c1 n: }7 R. U. t: N
{
0 {$ O* |. b' g2 W+ m .active_low = 0,
: B8 A$ F0 i0 @: ~! u* e- h .gpio = DA850_USER_LED0,
* z- f2 j# h: t a6 ?6 ` .name = "user_led0",
) A; q' p$ K& g" W3 C( c .default_trigger = "default-on",
8 C! z8 Q3 {# U9 V3 q },; u1 W0 Q( X2 `
{* ^ F5 _ Y: ?6 j$ o# }; X
.active_low = 0,
) D1 V" B t5 X: A- s& ^ .gpio = DA850_USER_LED1,* S0 B: y. n# i5 |3 e o
.name = "user_led1",) u- R1 d) H5 V# D
.default_trigger = "default-on",
* {9 `! T! J0 w6 l) h },
& K/ w3 G$ Q$ t/ O7 d5 o, L | {. W5 _; X/ i. X3 G* @. k: j
.active_low = 0,% s, ?, G3 @( A8 Y0 k
.gpio = DA850_USER_LED2,
0 n/ w2 g0 N# p% s$ _& Z) b .name = "user_led2",
& z" I; |6 R& K .default_trigger = "default-on",8 U9 [& |1 [9 U
},# h: K) O, _2 i* _# @( h' Q4 U
{
- {4 K: Z$ m% Z7 D: m* G .active_low = 0,2 X# o; C; p* g( D
.gpio = DA850_USER_LED3,
2 w* n! A) M! g6 |4 K. g .name = "user_led3",, ^/ }. h0 V# S# e3 \: c
.default_trigger = "default-on",' c! M M4 R! g4 E& x
},& G8 N3 G1 ]+ i4 e
};# S! L- \) R( N* s9 R+ x
. K0 o; E% Y! t" i1 kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, `$ s0 s! J. Y3 r% p" T( H" E .leds = da850_evm_tl_leds,
+ D9 T- W' @# [8 b. L3 T7 f .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 l0 d- s3 e4 C+ ^0 e. Z& V
};
3 e: ]& W0 v- J5 }7 V9 V5 N2 h4 [: V8 h7 p$ ^
static void led_dev_release(struct device *dev)
# `- d: ^. \* u5 P' M$ f X( l{ K6 r. M8 Z8 j1 q# i+ Z+ G
};3 ^8 U1 ?( p8 I+ ~( i2 p/ o
/ A/ r" z; c. S' wstatic struct platform_device da850_evm_tl_leds_device = {, p( s" ~7 m. w3 K( F p
.name = "leds-gpio",
& I( t6 \2 k$ G% s% l .id = 1,+ h0 }+ }# I, n5 }
.dev = {6 z' \8 e1 `8 d, k' ?- n
.platform_data = &da850_evm_tl_leds_pdata,
% Q! i1 r& {, Z' O/ k9 c .release = led_dev_release,
6 e+ @: f: q7 ~* ?4 n5 A' q }4 s* d) `. f" g
};
9 L$ c8 N) j' l. i1 g8 n% g! \# ^
, T" a' v+ z+ M7 Estatic int __init led_platform_init(void)2 i. ]: @" W& a( G" H& O
{
/ T0 |4 g' q. ]) {& q3 Q int ret;
2 O( n$ c J9 ~. S#if 0$ g- C, `5 u" P% `6 U+ b" \
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 R$ T& M! u# ^5 c% F$ O6 Y
if (ret) S* M. d8 J' W& M+ s+ ~; u
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( w G: w+ R X. j1 I "%d\n", ret);
3 |0 D' |7 @0 @5 ~) q/ C' z- B#endif% B4 v; p6 @8 _, n' k n( u
ret = platform_device_register(&da850_evm_tl_leds_device);
% b9 O* ^/ t) v0 K- i if (ret)& h/ S( c! p4 [ C! @
pr_warning("Could not register som GPIO expander LEDS");
0 y1 | t2 u+ w6 k$ Z7 W) N& ? else/ N+ N2 C- S; G
printk(KERN_INFO "LED register sucessful!\n");% y! f/ M) _3 v* G: Q; E3 w1 r
! K4 V) \; j: F- \* i return ret;% i+ \$ c: `) X" R2 e
}- V! y% o& W6 t% l. t
' K$ N1 }$ `$ d' Nstatic void __exit led_platform_exit(void)
& C8 ~8 c1 O8 z6 I$ d9 L{
$ m( j$ j- M+ \4 O+ I+ d platform_device_unregister(&da850_evm_tl_leds_device);% ^7 U" Q) T- e& C% v7 R2 u& T: h2 A
4 v+ o. j$ ?" f printk(KERN_INFO "LED unregister!\n");+ E/ V* b/ X9 M" j# f. s
}
3 m3 d8 }( }4 j. c/ j! \
% f2 ^" V; j' w. ~- Nmodule_init(led_platform_init);
2 R4 @7 d( E4 w Z$ vmodule_exit(led_platform_exit);
1 J' Z5 I1 H2 ]0 x `
( E& o t3 z; j- O6 \, iMODULE_DESCRIPTION("Led platform driver");' [) y: X2 s. X3 T$ v
MODULE_AUTHOR("Tronlong");# f4 {/ l5 @/ Q5 r1 x
MODULE_LICENSE("GPL");& f! L6 c/ ?0 L
+ L0 d* o" p0 W: H6 w$ g
|
|