|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& E2 W' w6 W1 _; X8 I; l#include <linux/init.h>
& K4 a H! a; C/ M9 G4 v! Z#include <linux/module.h>$ W$ C5 @- H0 F# D( a5 d
#include <linux/kernel.h>
9 L% M8 x! V H. _! {- O7 B& e/ y#include <linux/types.h>4 P' M. x6 L( r' m6 _# f k0 @
#include <linux/gpio.h>9 `9 a/ U5 [/ w3 ?2 O& n( _: v
#include <linux/leds.h>
5 c+ `/ g C3 |2 |9 M. K4 @#include <linux/platform_device.h>
T# r! \: A+ N5 o+ i L6 J3 m( _' r: O, M; w2 B4 K' p+ V' o0 D
#include <asm/mach-types.h>: [# h5 ^7 [! k) }. |
#include <asm/mach/arch.h>
% `" n* u0 V% j7 c4 C% w#include <mach/da8xx.h>
) c- \# \) n. K: r$ F5 w5 D#include <mach/mux.h>$ H4 j2 o; m( i! }( N4 p( O& I5 T
5 y {! r0 B9 m2 ~6 m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& L, b% C1 m6 Y9 b% a#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 F* h, Q2 Z/ g2 w+ U" \
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( Z9 P* x- U6 U* D#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 m% T( H9 Y- `9 N) L3 o
% X @5 r# t5 q1 d, H3 l# O F/* assign the tl som board LED-GPIOs*/; d& M6 h) I1 z8 Y' v
static const short da850_evm_tl_user_led_pins[] = {
P4 G8 I- T" r8 g/ ^. H' o /* These pins are definition at <mach/mux.h> file */
1 P- p! r+ s' S2 J DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 q' P1 p6 F- s/ i1 J5 Y" r G: D) o4 { -18 U5 l9 \ v- | U" w$ f
};& V" z2 O, K2 Q% E0 P$ ?& |
; P( J, O& E: r2 l: c ^3 Xstatic struct gpio_led da850_evm_tl_leds[] = {
1 U& [1 }/ o: g% Z# U {0 _. `+ L0 `& ~5 N2 D
.active_low = 0,
9 Z/ S3 N7 [, d0 q) j .gpio = DA850_USER_LED0,
2 b5 Q4 V# n" `+ _. R2 z .name = "user_led0",% ?7 G9 y! z! o0 u7 A& I! T
.default_trigger = "default-on",
$ k* \3 M! `: _% v) C# n },
/ O- c% Z, t5 D {
0 W* w$ y8 ?9 Y9 x4 F .active_low = 0,
5 s6 H5 A1 s4 n2 B7 i/ x& R0 \ .gpio = DA850_USER_LED1,. V2 O- r" I W! ^; y/ U. Y
.name = "user_led1",
7 a) w' t/ I# E4 `* [ .default_trigger = "default-on",
4 O6 Z( @* p; q9 t },
& i$ z; ~1 r } {! D* ]3 j: ~ I1 t3 ~- r
.active_low = 0,
& x, ?2 M; u E0 x: F3 d3 O .gpio = DA850_USER_LED2,
* n2 m* A( a, h7 H$ ~ .name = "user_led2",
6 i/ T, Y- N4 W. _% \ .default_trigger = "default-on",
' D: P: ^$ d: Y8 \ },
4 I" u4 A, e* [1 {* b; a0 W {' j# F5 I0 f7 A. r/ x. h
.active_low = 0,+ j( k( X1 B! t* x9 r
.gpio = DA850_USER_LED3,% n4 r; c: B1 a5 s
.name = "user_led3",
! O* B5 s7 \# l' e, j# J& N .default_trigger = "default-on",/ V+ w1 A2 c( E7 \' N( k% o
},
; C, T7 ?& k9 V};6 c4 V3 `- M. s! Q$ v/ g6 M
, T7 d8 A' N& I+ kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 }/ ^4 T" l- b/ H, p% W3 J .leds = da850_evm_tl_leds,* o% M6 g# S0 ^5 a
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* [- M( }, F$ |% P};5 y2 t. Z* o& }0 v
4 Y" b5 Q _3 }4 {# H1 }* J
static void led_dev_release(struct device *dev)
9 r% O$ j5 m u$ u2 x2 {+ _{, G* T& k8 C w/ i$ z
};( [8 y: Z W* ?8 G0 a3 B' h* |
( a# ?5 a, W1 p( a. Pstatic struct platform_device da850_evm_tl_leds_device = {
& r% I' j4 h; V) ` .name = "leds-gpio",) C; N6 v6 D9 M) Y
.id = 1,+ {, l, ?8 E) `( i c
.dev = {
- U& u+ O: Y) ]' ^2 ?' { .platform_data = &da850_evm_tl_leds_pdata, o: T+ S" N1 V
.release = led_dev_release,; s. s* V: B0 \2 Q8 \. E/ r6 {
}$ m T9 W+ ?6 @6 ^
};
, m1 B1 Y5 c5 q8 i9 B a y v
7 `3 z1 e) B/ G; y9 l: qstatic int __init led_platform_init(void)+ x; t3 p; j# d
{/ O) j6 i" ~* Q
int ret;2 o' w7 p0 s; M
#if 0
2 z6 N' t V) ?$ V ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) E" \7 g3 q/ y7 o$ Q if (ret)
R6 n6 z4 [% E/ E8 |/ I' R5 Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ ~; ~: ^9 ~5 k$ a$ V m4 P1 N8 x
"%d\n", ret);+ Z2 ?$ o8 E( e- S+ f6 d6 k) ?
#endif
, f' w7 c2 j: r$ R ret = platform_device_register(&da850_evm_tl_leds_device);- p! y" d8 Y/ r+ [+ x
if (ret)
" B W# {8 {3 b! Q pr_warning("Could not register som GPIO expander LEDS");
! a2 ` ?$ j2 d% A( p. `* { else
+ D; k) c, L; f' ~* s8 M# {5 ^( J printk(KERN_INFO "LED register sucessful!\n");
) k, @3 w4 Y- J0 z' A7 ^- W; m
- A. @$ k$ F+ r& s8 Z) @" A return ret;
% O" E3 R' C8 ~% [- Y/ P) Y}
( r# k- m1 w7 v" ]) s. w, M/ t) D
static void __exit led_platform_exit(void)! S6 U+ c B) _. O' P8 q2 A6 E
{# ?" A' e# A( p3 R' f
platform_device_unregister(&da850_evm_tl_leds_device);
9 l9 [$ O' {. a6 l# |) v% Q( R+ x% x% C" p, Y8 @; p
printk(KERN_INFO "LED unregister!\n");
8 V+ x& a5 I# p# R% ]) U}. o2 Y1 p, z0 k4 W/ h2 V
4 v1 B+ K4 O/ r# ^! p& P& vmodule_init(led_platform_init);/ q. Y+ F ? U' c5 f5 k" I
module_exit(led_platform_exit);# Q: r5 _5 v3 o. w9 B8 Y
. i7 n9 ^% s5 ]! E$ [: H. f
MODULE_DESCRIPTION("Led platform driver");
5 ?- j- k6 A+ {8 a8 G8 u, iMODULE_AUTHOR("Tronlong");" I8 ^4 z7 Q8 {4 Z$ g1 t
MODULE_LICENSE("GPL");$ C$ d0 W8 o, l& a7 X
& y5 V& ?) U3 `9 z% v& ]. O. ^ |
|