|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' C4 @4 m, s" G- D( Q
#include <linux/init.h>
4 E* d% I! J- c; P: V8 j#include <linux/module.h>8 h0 h+ [/ U1 l4 w
#include <linux/kernel.h>% F5 F1 y5 p% c7 r
#include <linux/types.h>/ h/ J' o5 A# G9 \2 j
#include <linux/gpio.h>" \1 ?9 E6 P5 |) u( w' J
#include <linux/leds.h>, Y; C; b2 M7 _% P* A B
#include <linux/platform_device.h>, T. q9 e$ [1 U! u# F- ]
/ h4 x- }6 n. K' O" q#include <asm/mach-types.h>
& H6 E* f8 R* Z. v#include <asm/mach/arch.h>( ^" G' S/ a- Z$ V5 S; s8 O7 x
#include <mach/da8xx.h>
2 }+ p$ c @: d* y5 n#include <mach/mux.h>
: r' ]& T/ K5 M6 [) f
' S6 \# ]" p4 D& D' [9 j#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 V E4 D* Q0 H. g; N- H6 I. J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 r0 Z9 R: n' O6 n% m0 g
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, l' O( _" ~, C! \$ }3 c#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( | v+ K3 h9 {# Q* W. r; k0 V
# i h# @! w1 X; q1 m* U# ]+ o4 z! E8 m/* assign the tl som board LED-GPIOs*/
; G5 d/ T# I. n" ostatic const short da850_evm_tl_user_led_pins[] = {
' B0 r6 ]8 u$ V+ B. A/ J /* These pins are definition at <mach/mux.h> file */
, r* T7 F% j; H0 \* G* K3 U( O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 g0 O6 ^* E$ g2 x
-1
4 Z. `1 y: [& s% B, \; j! T};
3 W! G6 Y* _3 o" V: n! ?; o n
( G" H& e& |1 H) Q& o# H+ C+ f3 W0 qstatic struct gpio_led da850_evm_tl_leds[] = {
9 X& }6 c0 b- Z* n {
9 _3 D. X+ y8 p5 c% l9 I .active_low = 0,
& j. ]5 Y2 s+ e; H- e6 q .gpio = DA850_USER_LED0,
6 E" r: ~1 A8 W8 I .name = "user_led0",
* o4 ]! Y1 I( R$ p. b6 \( V- t .default_trigger = "default-on",
5 L9 E7 i' q0 |# } },
! P0 S. o+ ~( {+ w( d1 l {$ N2 v E8 n5 ^. E0 y1 b) G
.active_low = 0,8 q% z2 p- [" Z+ u T
.gpio = DA850_USER_LED1,. b# j, V6 H$ f( R R$ Z
.name = "user_led1",$ c/ s) N! S, B1 g) S
.default_trigger = "default-on",
: g9 O, P4 l# T! }0 T },
7 Q- C1 a" z A* A( x N5 I {
* V- j$ o9 N/ T5 R3 h6 b .active_low = 0,7 w4 d* @6 I7 m9 c+ Z1 V9 e
.gpio = DA850_USER_LED2,
" G5 I, f' R9 ]. j* q7 y .name = "user_led2",
4 F! @% z) k5 d* J9 n .default_trigger = "default-on",& S- A; ?! h7 \- v' J1 i
},5 W0 G6 n' I9 c3 N1 x
{
+ e" F, Q' i5 H a" e$ o6 c .active_low = 0,1 b1 J: C4 m n! u$ Y9 p: u
.gpio = DA850_USER_LED3,; v9 O8 z% d4 { i# `. H9 |2 ~7 N7 H3 ]
.name = "user_led3",% i o2 }. D& C @5 f' t! x4 a) w5 ^
.default_trigger = "default-on",
% f/ m- Y* C+ y$ y. X },
- _3 X$ o( A$ D! c1 V( Y% p, V- @};
F+ o; R& n# \ e% \8 u ^ f' }6 a* r6 r/ i# i. [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; }9 |* {& i! [8 k3 [- R( y. e
.leds = da850_evm_tl_leds,
. I3 ~2 j$ X3 B4 `0 G7 \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 u2 ~: s1 u- j* ~) u! ~1 _};
4 [. l- H! }* |/ k9 `, O
[% m: ]: R( r; Ostatic void led_dev_release(struct device *dev)8 Q6 J' b- W% S8 E
{$ r& O2 o) _+ t3 B7 N) Z
};
4 z/ Q% c8 d0 I$ W: P6 z, Z, t* g1 ^* X6 q9 `" D
static struct platform_device da850_evm_tl_leds_device = {
7 g) l) a- s# Y7 ~! c1 c8 }7 h; z .name = "leds-gpio",
" k0 R" [- s M# u% b, M$ B) m .id = 1,
7 v5 G9 W9 q' \% L( K! ]; v0 O .dev = {
9 `/ j6 m: p; Z4 J .platform_data = &da850_evm_tl_leds_pdata,
5 m H# Z- N1 t" q3 m .release = led_dev_release,6 b1 D6 [+ b3 Q N
}- _1 m# f4 t7 G- `; `- [0 X% g
};! h6 A% P' F+ t, W) R" O
7 G! u2 p1 M. g! C6 T* a) ~. ^
static int __init led_platform_init(void)
( i" I8 R1 \# g5 `* f# ^" i8 r{6 b9 f4 W! \, u. E& e/ c7 _
int ret;" g% U4 {) y4 K; n3 i
#if 0, Q7 J2 [/ c7 h* @; {6 z; v! B
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; Z6 [6 b0 s, t
if (ret)' I1 t7 m% @2 V3 q' Y! @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! z- X$ S; L# _1 a "%d\n", ret);
# r7 N- v0 a8 U! w" P#endif
# i. [) m3 T3 u p ret = platform_device_register(&da850_evm_tl_leds_device); X- B: C9 ]5 W: O/ s
if (ret)
; F+ D8 P5 P8 P) t8 f- F( f pr_warning("Could not register som GPIO expander LEDS");
. |0 I6 z3 M( D- p9 [; m else
% r3 F; p3 U6 A2 t+ O printk(KERN_INFO "LED register sucessful!\n");
4 z2 O) j4 q$ W; Q4 s+ H5 m5 a$ k6 }# P# { y) C) N/ e/ v
return ret;
- a4 ~5 W" w0 k" t M2 H}: M% [8 o1 w, C ]' @& l3 @+ t
3 r2 Z( ~2 x6 H9 f
static void __exit led_platform_exit(void)! [8 P2 b- R$ `% |1 J3 p. R
{3 U) {$ H: P( P$ M% U5 ]
platform_device_unregister(&da850_evm_tl_leds_device);
; c3 v: p6 b, }- b) ?$ ~4 ^, @5 e9 X! [' q; t
printk(KERN_INFO "LED unregister!\n");
) M6 M4 ~6 R4 x/ q( E: {}+ L4 C; d; K1 G$ |9 G6 H5 ]3 ^# X
4 F: y6 A( T4 Xmodule_init(led_platform_init);
V; S! A# p( M m% {module_exit(led_platform_exit);
( }4 ]: M( R4 f# V* y1 _3 u# K& o1 h
MODULE_DESCRIPTION("Led platform driver");
+ M. z6 `, K U8 m! g, D6 NMODULE_AUTHOR("Tronlong");+ D1 \# D, l% x( y& E0 u- e
MODULE_LICENSE("GPL");6 q T$ s& G R p$ t* y2 E: U8 u5 N
& t; R% d* X: v1 a4 F |
|