|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 u5 I7 Q+ Q: s, k
#include <linux/init.h>
0 O. L6 S0 `# V k! z#include <linux/module.h>: }* k- A. p, U9 H/ x, E7 |
#include <linux/kernel.h>
, k4 o9 ^# s8 ]1 i4 L#include <linux/types.h>9 M1 T- M9 P8 ^1 M/ C r: x0 f Z
#include <linux/gpio.h>
( [. b$ a$ E, w3 W! m3 f#include <linux/leds.h>
: A* K6 g" T0 z6 R% g#include <linux/platform_device.h>
' c8 r( _8 n. V& X/ {, B0 Z3 K* z' K! E% g# A$ i* @1 r6 D
#include <asm/mach-types.h>% H# F3 {" W/ n
#include <asm/mach/arch.h>, |, L2 P$ s; Z u
#include <mach/da8xx.h>
& Z9 Y( {* I1 @1 X% E" L5 V( V5 ^#include <mach/mux.h># x1 h- v! {5 D% t1 i2 \
3 A! Z+ ^/ B) f) b: r! i
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 X Y) V% S6 D2 L2 x& \& E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 N# a( o# x, ?7 N" U9 D
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), K) t: m2 ^1 O% K# z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 g: n6 g0 B3 e \
/ V! g, r: @, A. L R9 i9 h/* assign the tl som board LED-GPIOs*/
" t Z: S* I: |: o/ jstatic const short da850_evm_tl_user_led_pins[] = {/ H# o+ R) Y- p$ b6 N4 ~2 T0 e
/* These pins are definition at <mach/mux.h> file */
5 O$ b! M! n0 k/ Y m% l9 | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. q0 I9 M, [8 [ k7 W! P$ K2 i9 v
-1+ }* I* N% }+ o6 }
};/ r& i, C% E3 u9 \9 g
1 Z" W; f0 M0 Q1 Ustatic struct gpio_led da850_evm_tl_leds[] = {: a! T3 K) x( l
{1 ^; H! |% j+ k
.active_low = 0,
$ N. Y" F& y$ E2 r+ ` .gpio = DA850_USER_LED0,+ @( \* ]# t4 d, O5 @ o
.name = "user_led0",6 D# Q1 Z: h+ [" z0 |1 U' ]$ M) j
.default_trigger = "default-on",$ K' O2 V. {9 X
},& Q' y |8 D1 d+ h
{
8 I; b, y& l. g r' Q; p .active_low = 0,( o/ a8 j2 W5 ?" k0 {0 B! j
.gpio = DA850_USER_LED1,
7 y, N9 N/ u C+ [: X .name = "user_led1",
% ], g$ x7 [4 b9 u3 N0 l .default_trigger = "default-on",/ g- W0 z3 Z6 {/ q# l7 Y( J
},
: `4 W! B4 q' n {" d2 y( Y* I/ @5 X; ]
.active_low = 0," D8 b: S7 E; u3 T4 w( B: F3 E
.gpio = DA850_USER_LED2,
' ?2 O& T7 [& r7 H .name = "user_led2",* S K2 [1 m% ~0 E" P
.default_trigger = "default-on",
5 q: ^& F5 N! M) [ p },* C2 F( z: ]) ~: o' P) h% Q8 P
{
; b$ o/ [' E* X) c- L* X: S .active_low = 0,
; l) Z8 ?! x& s8 Z .gpio = DA850_USER_LED3,
6 z- y0 V9 ~: `( _2 b .name = "user_led3",
0 H3 x4 J. z& J- p: S .default_trigger = "default-on",
3 L* g7 f O1 n/ \1 I4 w },
8 n: E: G6 ]# i; n4 y( T};
5 k1 e3 B, G, y$ I7 s1 i1 p/ ?9 v% ?5 w! X2 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" h- m, ~* n) z7 ]1 ?/ `" c
.leds = da850_evm_tl_leds,3 t! b+ A4 B" `- P
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," j. ]7 `% T2 z
};
5 }; X% t+ o; ?% i t1 Q$ \9 w' @) t# w% j
static void led_dev_release(struct device *dev)
9 \( B! R8 [9 @ k0 e{
2 |( r, Z4 ?! P( }0 n5 G' ]' v( C2 ?};8 o# n/ h" ?5 F( ?' o0 A
. W3 D8 g& c" W9 B' I' c) U3 F! ~static struct platform_device da850_evm_tl_leds_device = {
. o% H+ G. P: j- d- E, p, I .name = "leds-gpio",# N8 H+ L& u* H' D; x0 E& b
.id = 1,( P ~6 i* n- v5 k p7 u z4 D
.dev = {# t& e, f) ~) z& z8 G% a
.platform_data = &da850_evm_tl_leds_pdata,% @8 X; z2 _1 q9 a) {; }; M& V+ C: o
.release = led_dev_release,
5 K5 b4 L j G4 F r6 W }* G- W$ S T' }/ j
};0 a9 {# j; N) ?4 i
/ @2 ^; Q$ j% f
static int __init led_platform_init(void): f, P: k* E. z- ^
{
4 F+ E; [: h# I1 t" M6 s" D0 z int ret;
/ m# _" f' ]5 Z, _0 g" P& ?#if 0
# x! B. t# v. V7 J k7 C ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 N( P: @+ V; D4 N1 K: _+ ~5 v if (ret)( Z. i) B9 z" j: b o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 J+ G' _' ^7 f- Z, o, \- i9 m& P
"%d\n", ret);, x/ D) |8 `% `. I1 O% h3 ^
#endif# ]0 c8 q8 b* I
ret = platform_device_register(&da850_evm_tl_leds_device);
% [+ B& L4 j7 g; p2 b) o: v if (ret)6 r- n, J0 v% O0 G- m4 w/ X# A- |
pr_warning("Could not register som GPIO expander LEDS");7 ~; ?; x! ^! p/ v a
else- x; e0 A4 v9 R
printk(KERN_INFO "LED register sucessful!\n");
, y* v# _& ?+ X- a8 U4 N2 R+ V% k' b/ }: \6 ?3 u! Z
return ret;
" ^9 y1 t1 A0 O9 K: h; X1 w}
3 I$ M9 P6 s4 F u9 ^- U7 t2 W9 O3 M$ c& n! F* b; q) a) L
static void __exit led_platform_exit(void)9 R1 p3 A1 z& a5 d8 X$ s9 K
{
: ~6 a+ X0 i% _8 O3 U6 }( k platform_device_unregister(&da850_evm_tl_leds_device);
2 ^/ N1 e0 _& ]- ]# ?, `; {# i- {; N
, [! g9 S6 Y6 S" J$ M% C printk(KERN_INFO "LED unregister!\n");/ ]5 t5 y( g8 Z0 S
}
g. a: Y+ s! i8 N8 v: Q
) R3 ]& g% p) k, k! G: Lmodule_init(led_platform_init);7 _+ X5 k+ u1 C0 T- |
module_exit(led_platform_exit);
, V. ]) w- j$ P- D! H7 P& Q7 C1 n3 V% y8 \
MODULE_DESCRIPTION("Led platform driver");
* k: b" C( N: z& H/ a3 rMODULE_AUTHOR("Tronlong");
+ T0 E, o* g4 W/ q! C% \MODULE_LICENSE("GPL");5 V! v& _% V3 y o5 |* ~
# e1 C7 ?6 a' b) _& N |
|