|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 d) a! @% g* ], |7 O5 E& H" Q#include <linux/init.h>3 B3 d+ z' q) l0 R0 L
#include <linux/module.h>
U) P$ g& j) S8 S, g#include <linux/kernel.h>
2 M9 t: ]. P. @ X#include <linux/types.h># s$ F3 {& W7 l) K4 A
#include <linux/gpio.h>+ h' v, E* t$ \& }$ l# |# G
#include <linux/leds.h>. @9 w; H2 f! p( g3 C% n& } F
#include <linux/platform_device.h>
& X2 I4 d6 \) |8 D8 m; g$ m/ g* P
2 D5 y9 G2 A2 }$ I6 r+ U( k8 X6 H1 ]#include <asm/mach-types.h>% w8 W. Q" l/ ^2 i9 C
#include <asm/mach/arch.h>! T+ ~2 z0 m0 M+ I3 j9 E/ g
#include <mach/da8xx.h>4 k) S8 x' f$ I( \
#include <mach/mux.h>
/ V3 i G* m$ `" x$ i2 m6 P0 q
) _9 A% z1 m8 a( o3 w#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( a4 x: T3 Y* w: j( {: E, ~
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ {5 `1 S, O) d# r#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! t R; s6 P! d+ ?+ F0 v8 d$ m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) i9 \5 F# D( u1 A) M% r) i- U
; h. p1 [, y6 y
/* assign the tl som board LED-GPIOs*/
/ Q4 T, I1 t& V3 q) n& }static const short da850_evm_tl_user_led_pins[] = {7 f$ N5 e' ]& k6 k
/* These pins are definition at <mach/mux.h> file */
- a. N; K1 r& w1 E DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* J: Q f' O" r) @; | c
-1; P7 P4 g9 N7 V% X7 b+ x
};
' D, C# X1 P6 H3 y" ^: a S. C+ U& S* P6 c. U, i" h
static struct gpio_led da850_evm_tl_leds[] = {6 {0 q8 g( J$ a: J2 _1 z5 }
{
0 z* H+ y) a4 _, h .active_low = 0,: @% |; T' ~( l) q; K
.gpio = DA850_USER_LED0,
% S9 @) ]' j2 K1 T& F .name = "user_led0",
7 M" Y* {& y6 y( x1 e .default_trigger = "default-on",
6 d. D, e. d0 [, Z+ t7 z) Z* w8 ] },
# H A/ X7 {2 o; D9 h; q {
9 c p2 D: H8 U; u; w- \9 \/ N1 c .active_low = 0,
8 G. d$ k8 v& R( d2 ~& F! v .gpio = DA850_USER_LED1,8 J& |9 ^1 D" d4 T8 Y5 N# l5 t% e. ]0 A
.name = "user_led1"," H# H) g( w/ x% e4 H! Y, U
.default_trigger = "default-on",
1 F5 `7 F1 B A7 K& ?) R },/ K1 g2 a7 z5 I' F' Q2 d! {& h
{
0 A3 e5 H9 z. a. U .active_low = 0,
/ Z( [) z1 e9 q6 o9 ~( }4 ? .gpio = DA850_USER_LED2,
. r' y9 F+ G4 V! A' U. ` .name = "user_led2",3 B: H( Y1 K9 m3 y2 ]$ Y
.default_trigger = "default-on",
9 p0 i8 @% Z6 G g1 \4 h* B },7 ?/ l2 J& S; p! h4 B
{
( m/ {& o" {) A* s( J3 Q% G3 k .active_low = 0,& J; h) x! e; h$ @6 _6 E2 \3 p
.gpio = DA850_USER_LED3,
7 B$ K7 }4 z3 {+ Z .name = "user_led3",
1 r- s K- D# r _' A .default_trigger = "default-on",! ]- n8 r ^4 w: ^
},$ O) q# A' C4 G/ y5 `. z6 |. A
};% c0 W8 Y4 b5 v j8 y8 S5 n
1 p" d! \9 ^3 Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 u/ e2 N: d6 _: K8 i) { .leds = da850_evm_tl_leds,
( N) B5 c/ |. U1 K4 d6 Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 P* Z+ v, m7 ^. ^# x+ i7 N
};5 g$ Z9 j8 V+ z. M
1 n: j/ u. Z1 m- M9 _
static void led_dev_release(struct device *dev)
2 O& M* R% ]: O{
4 p |5 o8 K7 `};
3 z. v& }* P1 d/ U0 y% |' A4 c0 J$ S4 ]7 R/ L
static struct platform_device da850_evm_tl_leds_device = {9 V8 Y: z" Y3 @" t; y' m
.name = "leds-gpio",
5 y6 j, y0 a# f2 H6 h1 T .id = 1,
9 q- v" F. Z. s( q: U( r .dev = {
# Y8 {( L8 ~. ?, Z1 C- W$ q .platform_data = &da850_evm_tl_leds_pdata,
8 ~2 d' V0 d% d% u2 k1 t .release = led_dev_release,
. x4 H3 b5 {4 ]( r: p! o0 M* h1 Z } Y: \& ]1 @6 R
};
7 k, K( U: p0 a7 ^4 ?; q# `5 U0 A2 N. J+ y' Q* _1 \! E
static int __init led_platform_init(void)
$ T2 m/ L. U3 d6 I q$ i0 Y, ?{
* V: F, ~) \7 S0 A+ e; z5 R3 }* v int ret;+ s2 R: s( a: g8 \
#if 02 ]! c2 I& G7 y! g2 y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) k6 T# Q4 Y3 q1 z6 r A, f
if (ret)1 Z @" Q+ i+ T& I1 X X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 h# Y. D- v( x: Q% y3 G
"%d\n", ret);
: Z. H6 R" F: j) x( N3 w#endif
. J7 u+ n3 P( d6 V: @ ret = platform_device_register(&da850_evm_tl_leds_device);
Q- s# i8 n* G: H0 \ if (ret)+ O3 H: [/ z$ g" F! R
pr_warning("Could not register som GPIO expander LEDS");
) S' Y' h- W2 g* N( s2 E else7 Y: N2 X" U. ~9 ], }
printk(KERN_INFO "LED register sucessful!\n"); }. l' y& [ w5 C
2 W1 c' T1 a8 {, J: r" k9 K5 A6 E
return ret;
: F4 ]" C, `' @" `5 E}
3 @1 ~" w! L$ \8 h. V( u. ? T4 n: I z1 P- z) q
static void __exit led_platform_exit(void): N% K( E2 X: Q6 Z2 P
{% B: h; i [8 {0 T
platform_device_unregister(&da850_evm_tl_leds_device);
0 x' f% q r+ G' c, }: G- S# O$ N) o% o( }: n* T/ o, _
printk(KERN_INFO "LED unregister!\n");0 _6 a/ ^5 z8 X; V: L
}* [+ t4 [% Y* K- I0 |
: `/ b9 y4 q! \/ C
module_init(led_platform_init);
- m& W( s1 k" Q5 n! `) Cmodule_exit(led_platform_exit);
. S/ G1 n9 w& T1 R. v# u$ R: p
9 c1 O7 Y4 Y& L3 uMODULE_DESCRIPTION("Led platform driver");- c9 V0 c2 e. m* j# L
MODULE_AUTHOR("Tronlong");! I; _# {* X8 m
MODULE_LICENSE("GPL");( t. M. S0 N! b- E
& F2 w4 a2 D: N$ P
|
|