|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 j9 }/ H7 W' E9 F#include <linux/init.h>, v( U; e5 p1 n6 W6 C U) N
#include <linux/module.h>
1 \9 u/ s# V* q2 p8 E9 V' Y, C0 I#include <linux/kernel.h>
; v1 J, \, h/ ?+ e6 S' T#include <linux/types.h>
( Y7 z7 j+ w3 Q6 @" ~3 T#include <linux/gpio.h>
9 ^* \3 m! c _; g* n4 d#include <linux/leds.h>; @ B M( b/ D7 r1 J6 s0 t
#include <linux/platform_device.h>
4 a9 k+ K0 d+ e
) j/ r' ^' _: i* d9 e#include <asm/mach-types.h>/ o: s! Q( a! @) e8 ^
#include <asm/mach/arch.h>7 ^; o5 e, M8 n4 p2 e
#include <mach/da8xx.h>
, P3 t* o( y8 `! p- {/ c5 U/ P#include <mach/mux.h>+ O) M* E4 B8 I; S; W7 j" N
% N. t; g" Q4 c1 `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 T" R' R# p8 I2 l; _- l
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 J* ~7 ?# T8 ^9 K4 `
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 p Y6 }# T- l |1 B2 V
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ Y& J* Y6 d z0 k
) }- t( m$ ~% u; I7 w/* assign the tl som board LED-GPIOs*/4 v4 U" v, ~; Z/ T
static const short da850_evm_tl_user_led_pins[] = {! [/ P& `; p9 y) x4 ^# i+ Z
/* These pins are definition at <mach/mux.h> file */. i; p& L. W6 V* o0 a7 M
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. h. D1 t0 u1 y$ M1 } -1
- J6 m, g( @4 T* q0 w) N+ E};
) z, @( X4 g) {% Q! o8 G; P- q# q3 ?3 x7 V1 u/ U Z
static struct gpio_led da850_evm_tl_leds[] = {
~2 ~, ~4 {5 {+ H0 X {% @2 c$ ^8 o: d) D: K B. I6 Q
.active_low = 0,
- X8 |: g& P/ Q% c* h' M .gpio = DA850_USER_LED0,$ v/ X& X" r; b& n0 j
.name = "user_led0",
3 }6 W4 Q. }! U9 a .default_trigger = "default-on",
4 e: P( I! {: r1 F3 S" Q: r },
' Q4 T- g( h3 y( e2 H1 k; c \ {
2 u; h$ c/ o& N1 Z" x .active_low = 0,
5 h, a$ g+ }: B6 d .gpio = DA850_USER_LED1,4 L+ M! | Z, `" i
.name = "user_led1"," q0 b. ?( c/ Y$ q0 _' s; c& h' s7 N( n
.default_trigger = "default-on",
) s+ y% [& M* s. `# y. | },! W2 h% H6 A5 F5 n* y% D
{% a8 c! v7 A* h `4 I
.active_low = 0,
K& C$ u, g5 q. b( I# c .gpio = DA850_USER_LED2,5 G4 I0 D1 ?& Y" ?5 P' g
.name = "user_led2",4 s; T4 g! ^1 J7 g# n T. L
.default_trigger = "default-on",7 B8 V; L- D: Z- S) B7 z
},
D$ [; ?8 o! w8 @ {3 b5 p- R( g6 }6 i
.active_low = 0,
# x A6 t2 ^0 w& o .gpio = DA850_USER_LED3,5 z- X0 K$ r$ \/ \" {9 S
.name = "user_led3",) o1 f* f% [% U; l3 g
.default_trigger = "default-on",
/ D8 e5 |9 Z0 B },0 b E" y5 V9 |
};/ M; T( ]- p4 J9 v5 {3 x1 `9 y1 a+ {
1 e4 V+ ]3 d: d2 E% [' Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 ~' s) M3 t8 f4 O2 Y .leds = da850_evm_tl_leds," K- s' j# E6 j; b2 J! l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& s* W! x6 ?+ B5 l; s1 B
};
' F: O/ _9 ?4 s4 G: a- i$ Z5 N8 U. ~! a2 @/ Y
static void led_dev_release(struct device *dev)
, y2 ^$ W9 B, Y/ C{
7 @* U2 k: a7 U* |/ r e- c' k};
{& z( |# ]% U7 X/ y- i/ |" l% U5 V
static struct platform_device da850_evm_tl_leds_device = {( N1 i6 Y( B' D& J
.name = "leds-gpio",9 K% v3 q" x# C7 k1 k* ]0 a
.id = 1,! @! ^5 O6 \/ ?. B* @3 F
.dev = {- v: D1 R' l! B4 A, ?1 ~% @
.platform_data = &da850_evm_tl_leds_pdata, l2 `7 x6 t* ?- F
.release = led_dev_release,
l) E, F& M+ r# X0 c1 K }
& }0 q% p6 e6 ?. M6 Y};
! B8 I4 W; W, k4 e4 v; U. D J9 P# V0 g' q s" P
static int __init led_platform_init(void)
! p% e! M8 `9 H$ y3 g{ J5 v7 _7 S' P, v$ ?/ T( R0 |
int ret;9 ~5 l0 I" s3 k7 K+ Z& X
#if 0, p0 A! E9 i; C3 U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ P7 u; `* `4 K4 b& v) b
if (ret)
# ~1 A/ c. a0 C* u pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; T9 W: Q) ~% m, H2 s2 t "%d\n", ret);
" W+ I2 }; f; _, \$ ]5 t#endif) F, `( ~: b( V0 d: |/ R6 z! e
ret = platform_device_register(&da850_evm_tl_leds_device);3 b& X- w( d. M/ E/ b/ l- |- d7 i
if (ret)6 R7 i) e0 @6 Z% [( u
pr_warning("Could not register som GPIO expander LEDS");
) Z }1 C# I0 \" s! l) ^& A else
) N, p0 D! {' ?) v printk(KERN_INFO "LED register sucessful!\n");/ R( u9 h9 g+ T) T$ R* B
+ o' Z' l7 G7 j2 T
return ret;8 w6 \$ a9 t/ C- X0 q) l- {2 M3 J
}
' s# p+ B- p" ~% ~$ x+ F# W
) E8 J; h7 l) Y2 n! |* P$ c9 Ustatic void __exit led_platform_exit(void)4 d% `: j: f. |2 K$ t. J. ?
{8 w% ~ ?. \1 \8 |
platform_device_unregister(&da850_evm_tl_leds_device);( ^% d* \+ ?: Q' F
6 n/ s; d$ w9 X: o. T: i
printk(KERN_INFO "LED unregister!\n"); U' \4 B1 C& _, e. f* Q# w+ K6 ]7 m' q
}! U' ^, Z" E! e3 ~
% W8 r! y, b* v- F6 t" fmodule_init(led_platform_init);0 R1 i4 Y7 R( O- _9 M9 u
module_exit(led_platform_exit);7 t% J- l, P* ]* v& h
! d. R* c% Y+ A, E
MODULE_DESCRIPTION("Led platform driver");
$ m* f6 ^6 g7 n8 pMODULE_AUTHOR("Tronlong");' Y& Q3 L6 z% n! [5 @
MODULE_LICENSE("GPL");
# n7 o% X6 C, W; |
( b/ R8 L y$ v0 b, n. T% ~ |
|