|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! c) y, W6 F- g/ M9 D
#include <linux/init.h>
1 z! O9 v* I4 N, _6 o9 B#include <linux/module.h>
6 t4 G% x. d, Z) f4 k, H#include <linux/kernel.h>
+ U k5 ?' L+ T7 I: q3 ^9 q1 \& z#include <linux/types.h>$ F o+ t6 V' A& G/ M+ r
#include <linux/gpio.h>$ V- F& ]0 {' T# I6 r
#include <linux/leds.h>4 E; L7 Y4 X8 |; y% ]
#include <linux/platform_device.h>
( l# B, V8 Y5 w$ U7 k4 h5 }3 V- w# l0 E1 U3 b& A! t+ l
#include <asm/mach-types.h>9 W' ^2 h# N2 ]8 x8 G6 e2 n2 z0 b
#include <asm/mach/arch.h>
# S; N# b4 q6 i! i# t#include <mach/da8xx.h>$ c1 y/ M; q+ F/ X
#include <mach/mux.h>5 }- L, Y9 F4 F9 v
- M- j2 p, w9 H1 I! B#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- ?# v& n5 S- L# ` B8 O#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 j& ?/ g% s( \7 t, t; {. n. a
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 M, Q5 h# }- k. u# R0 ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. F% ~7 L. p: F( @- q5 p3 L# x# i" B5 x
/* assign the tl som board LED-GPIOs*/
# U( \& Z# x6 i- _! M9 Hstatic const short da850_evm_tl_user_led_pins[] = {1 S2 Q6 V2 U8 v& Q/ ~
/* These pins are definition at <mach/mux.h> file */
' L6 U% Y1 d* D I9 D$ U, p" {6 S' ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% f8 n! S' R2 ] -1+ N0 o8 S8 @: O; K, K& R" o8 [
};9 u( V" j% M$ p4 X% J
+ v/ e2 p: ?( U9 p5 y3 Mstatic struct gpio_led da850_evm_tl_leds[] = {
p x9 b, G/ O {
/ ?, b5 Y4 h d1 i. M$ U9 U! q .active_low = 0,- d I# z4 l- [- t$ m5 \
.gpio = DA850_USER_LED0,
, f9 M( _) H. c, ~' `& w. s! Z .name = "user_led0",
0 D* J) ], Q' w1 i# \' }- O( B& b0 T .default_trigger = "default-on",
0 r* b+ _- G; |1 c8 H& m. @ },; E7 l& Z# i& x+ i' t1 E+ |
{
' F: k) ~4 {" A! X" [2 P .active_low = 0,. P% F$ K9 }/ v3 F; N! B5 W5 u
.gpio = DA850_USER_LED1,4 q9 ^/ b2 S' Q4 }6 ]
.name = "user_led1",
# e0 t$ A8 q" X; X5 t* G- G .default_trigger = "default-on",
5 d4 F G- {, d },
/ r n3 b- D: N: d6 K) J {) U, }( L5 e& L- }" M: t$ H
.active_low = 0,
9 ^4 U' @4 L, W' J3 P$ J( y .gpio = DA850_USER_LED2,
# D8 P, a# A9 Q2 e6 D .name = "user_led2",
- R) C& V8 x/ d, j: K6 y .default_trigger = "default-on",: N2 W3 b( Z; |+ c2 G) i( C" n
},
& q4 g5 c4 r+ L* v" r {
- K! Y/ J! R: _ Q9 f& } .active_low = 0,
& n( Y# e P; `! \3 E* n9 n- q. C .gpio = DA850_USER_LED3,
( j) }4 H* q0 T: ?7 i .name = "user_led3",5 \( M9 _7 p" s! I; s" W. S/ F( i7 t
.default_trigger = "default-on",& f h+ n$ S5 f4 r7 q0 G
},8 P$ S! |# V1 _( d+ O2 J
};
* z% h9 H" i" w( y0 S+ w. c; K, ^. v$ ?- a& t5 \0 |. r
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& @1 M: B0 y$ R- m b .leds = da850_evm_tl_leds,
; C4 \0 ^6 u5 Y: F .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 b0 s; A0 Z" e4 [. @5 K
};
) m: \' G1 \9 b
1 q+ B8 P( `8 Z! N9 }4 Ustatic void led_dev_release(struct device *dev)+ @0 A) c5 [; B$ Q; C
{+ b! P. e& v) Y2 I9 ^
};1 p5 p2 W4 n8 p& l6 l8 U" v0 b
* B+ Y1 h2 N5 b) \* D d/ V- j. pstatic struct platform_device da850_evm_tl_leds_device = {; I* A% r, p( |" [, X
.name = "leds-gpio",
! ]3 Q' k5 Q- l .id = 1,
- S, J8 I( F( ^! a5 I. A .dev = {
3 }7 W" D+ C5 {8 ]9 g& p .platform_data = &da850_evm_tl_leds_pdata,: ~1 Y3 I3 i( N* z# ]8 S5 R' E8 d
.release = led_dev_release,
% u7 _* s* Z( H3 u/ E2 ~ }
2 k8 V3 p* m' m2 w};
, K1 c, z+ h/ M3 I, r* ^3 r' v, ?- Y% j
static int __init led_platform_init(void)
; A. L$ a" t% e1 `{
8 V4 Z# t; x$ h% s5 z9 h( j int ret;6 I* \9 P9 o8 {; J* w F- N: J
#if 0" d1 w: ^. p5 j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 s" _/ s- X" Z if (ret)
* d5 }: N7 Z' K1 c1 V% I pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 T, T7 Z0 O& E! t0 y8 H4 h "%d\n", ret);0 |: g; I. W2 H9 e( Q* e
#endif; P: P# J% A" J. Z$ t+ e
ret = platform_device_register(&da850_evm_tl_leds_device);
* w) h& S- P* U. `; p: p; l; _& y) b4 E0 Z if (ret)- p- \ f* A* F) h' a" y
pr_warning("Could not register som GPIO expander LEDS");/ Y$ O' B. O6 |* B1 |5 ~2 m
else2 K1 b3 ` N6 q, `# i% T
printk(KERN_INFO "LED register sucessful!\n");( R; m- w9 G: O [/ R( j4 G
1 y5 Z$ O2 O, [
return ret;! l( \- W% {; L+ h4 ~$ ^+ o- X& t
}
0 l( S k. }6 \2 n* {9 I( ?+ f, G& X
static void __exit led_platform_exit(void)
+ s4 N& e" `4 ] X% y0 h{8 a2 Y9 P+ m8 q7 V; N
platform_device_unregister(&da850_evm_tl_leds_device);: k) l `3 U7 L. G8 {: s8 _1 F, ~' e0 Y
1 a4 W+ S; z+ x7 C printk(KERN_INFO "LED unregister!\n");! u3 ^2 G3 }* P4 T9 A
}
' b( a5 _! H K" U# ]1 B v& `
% s# q' h% V! T' V* N6 E1 ymodule_init(led_platform_init);1 k$ w1 k5 N/ m+ S
module_exit(led_platform_exit); g' C* W* F# ^' x# N
8 {7 I5 s3 p# X' ?5 Y, h( J
MODULE_DESCRIPTION("Led platform driver");) D& v9 h/ N' S; x
MODULE_AUTHOR("Tronlong");
9 O& K Q. |9 m2 n4 ~0 XMODULE_LICENSE("GPL");
" |7 \ q. S# s; o" N
, o, }: _, @6 R |
|