|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' k) d) `. U5 s- B) Z) J#include <linux/init.h>
( t. {! \9 C4 g: J8 I#include <linux/module.h>
5 b+ K0 L6 W4 e1 M# F, P* Z#include <linux/kernel.h>2 P5 F. b$ l1 m. F
#include <linux/types.h>* ~# O7 n: e8 a6 u1 ?+ N1 ` \8 G5 ~
#include <linux/gpio.h>8 i" B! B3 s( y$ Q& t
#include <linux/leds.h>
/ p" {0 y, Y a6 C- D! W# l1 @#include <linux/platform_device.h>
, X8 z, O4 i7 F
1 O4 J* \1 s( L" D! U#include <asm/mach-types.h>
: Z8 C" w$ R& l#include <asm/mach/arch.h>
: m& ]1 V5 ]0 X- u. j2 L* F#include <mach/da8xx.h>8 ]0 K+ L( [4 \" n \2 v, Y6 V
#include <mach/mux.h>9 o/ r$ {) w% z' R# e0 P+ `- D
; e' {1 v4 d1 J+ O$ k! J* K s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 J- G+ m/ X1 ?' _# e$ F* x, Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 C' P/ |: R: d3 a- M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% w% b9 `% `* {+ z+ P' z) @. B+ B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) \8 }) Q. c! S1 z! O1 u
6 v L8 T# \ M. y0 ]/* assign the tl som board LED-GPIOs*/! A1 f( T3 n. O# i6 S- c
static const short da850_evm_tl_user_led_pins[] = {
1 Q. ^) |/ l6 y /* These pins are definition at <mach/mux.h> file */4 V# ?. m+ O& ]. X2 ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! P$ C2 x3 e# _9 R4 W I0 }" ?
-1
6 v0 p' |, l) T};. L. ~5 n- @$ R
& R2 S2 e1 v$ A Ostatic struct gpio_led da850_evm_tl_leds[] = {
0 c" {, x/ ]3 S# F. W9 N {, h% R& q6 \: t% e5 Y }" \ W, M
.active_low = 0,
& t Q: Y+ T+ K, `* C .gpio = DA850_USER_LED0,3 G9 a- U/ q6 s1 y C9 [
.name = "user_led0",) Y6 c, j- ?4 S. [
.default_trigger = "default-on",
1 j. t4 t6 N4 F- g/ O) I },9 D. F, S2 {! v; d& I: N! R5 j. a j- ]
{8 L7 L" f ~8 K# [- u% X
.active_low = 0,# P* o+ M" }( q
.gpio = DA850_USER_LED1,( G% H6 |+ Y! L' Z4 n r9 R
.name = "user_led1",
% w# j w0 Z0 [( d v& v .default_trigger = "default-on",, U3 n8 [+ y3 g8 f* C
},9 O# [1 J6 T6 F+ n3 m
{
, b" I1 ~$ e H% L( ^: j0 r0 v .active_low = 0,
- ~$ [6 Z1 u7 `; H+ M n .gpio = DA850_USER_LED2,$ z( p5 D; ~ T
.name = "user_led2",: \5 W+ p3 b/ @7 \9 V0 r& q) Y
.default_trigger = "default-on",
0 z; U1 o: L: O. \ },
* p3 z' o1 D! ^/ b/ T! I8 g" g; I {
% s1 r- ^6 A8 N2 U5 u, Q8 ^3 v2 q .active_low = 0,
) p6 H0 N+ X4 }0 s .gpio = DA850_USER_LED3,
6 r, Y$ C" [+ J6 ]- S" w6 p) H& ~/ c .name = "user_led3",
0 N& p, G% f1 n4 ~! K .default_trigger = "default-on",9 L/ D4 f% h0 w9 w7 ?) C
},7 M9 B3 l& W+ P, {7 [
};
5 g5 U+ u" O3 S+ A' }- ^
1 d5 |" F4 ^" D: m6 u4 @* @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 B+ B- W" h( z, V! X
.leds = da850_evm_tl_leds,
1 M8 n0 [6 X1 i( [% X4 f# ~! I .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* x5 F7 \& P, O6 T, ~3 c& |
};# ^/ C0 w" A/ m4 g
5 d5 |* `) X5 l9 t6 a+ x: estatic void led_dev_release(struct device *dev)
' _5 G. \# g3 m4 [: b3 r! a{4 n" }6 p8 c, M% z. m# B
};
' T4 M) ]9 c+ o/ ?7 }2 ^
. t0 @, }2 m" k: d: x* \static struct platform_device da850_evm_tl_leds_device = {# N0 m2 D! z1 F& S
.name = "leds-gpio",; W8 h% z* u5 U( e8 ?$ N
.id = 1,8 b# @% d5 c( B$ P* J, I9 I" C( k
.dev = { I6 |7 I, p+ m2 X. x
.platform_data = &da850_evm_tl_leds_pdata,
4 O, g- @# z9 J6 [ .release = led_dev_release,
4 T9 O! e" J" C. c; Q+ E% l }0 J3 T' C4 @: n
};) L u, w6 d& Y& p$ [4 p% i
: K/ u* |. w( v& r! W( u) J" [static int __init led_platform_init(void)
# G! L5 a' U2 L% T W' B{
6 C" Q9 E1 y" V4 ]3 \" | int ret;, |0 R3 Q( s; d" y4 u4 @# Z" j. b
#if 0
3 Z5 c/ u% M7 \& ^! c ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# S/ w& y, {; T6 }0 M1 K
if (ret)
6 n) ~2 \' C2 ~) c! i# ] pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 a& g8 x3 ^" T: O' k "%d\n", ret);" h, n8 U/ {: C% r: U& c
#endif
1 C1 Q& d1 V4 U2 `9 @9 _5 ^! O ret = platform_device_register(&da850_evm_tl_leds_device);
9 W9 X7 \+ h4 Y9 u1 S# J* ?/ D% l if (ret)1 M o% G7 i( Q- j# g& A4 p0 A4 c( K
pr_warning("Could not register som GPIO expander LEDS");
6 [1 I) ]2 R& _: }7 j+ W0 E) O else
& V. I. \* k- E* t1 `1 M printk(KERN_INFO "LED register sucessful!\n");
7 Z7 \1 w! S* |1 H+ h% \+ u& o7 H& o' C) w! ^ B. h. h' I
return ret;
1 x( F9 m6 a/ u8 ^2 b% X}
4 H9 B: G+ x7 d4 L R) f* t
# o5 [% d9 l6 r- X+ g. Jstatic void __exit led_platform_exit(void)- [5 I) P. @3 i5 Y5 u5 O
{5 Y# J6 O" y- l
platform_device_unregister(&da850_evm_tl_leds_device);; q; I E; j( L/ \9 ^
3 q0 p4 G- r. w/ f0 l5 J
printk(KERN_INFO "LED unregister!\n");
) e' ]5 f: E% r( E}- A* }4 v- W' `" W9 R0 ^1 I
' P1 B7 B# L. W; V, F$ Q8 R: nmodule_init(led_platform_init);! W/ j G, N- A' V
module_exit(led_platform_exit);
7 Q$ \5 e0 C/ A, W) _' U1 h
; g/ I+ p1 t# g9 q. [6 @7 sMODULE_DESCRIPTION("Led platform driver");4 [% F( z% z, ~( r/ R8 f
MODULE_AUTHOR("Tronlong");
) x) t" T2 h+ m# R9 N- }MODULE_LICENSE("GPL");* D9 V: W8 g$ x) U5 M
9 v+ F5 A- Q( v' S0 l* D |
|