|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 g3 Y! v5 C. {- j1 M
#include <linux/init.h>- U6 o4 |, r5 M7 B0 Q
#include <linux/module.h>' \' _- ?2 a: U- j
#include <linux/kernel.h>
$ W5 i8 B) A6 C% n#include <linux/types.h>
$ {" s! J) g7 m" b7 {% ?2 h& O#include <linux/gpio.h>
* y2 c; l1 H& ?5 |#include <linux/leds.h>9 Q8 m* h( z% p
#include <linux/platform_device.h>
e& \, s+ \# N
) v2 Y* K Z7 }) x" c3 S, o% ]' [#include <asm/mach-types.h>
3 Y# f, s' J4 s* b( ^#include <asm/mach/arch.h>& L+ U, M/ {2 B% X
#include <mach/da8xx.h>
+ j& G; q7 H1 B& w4 {! Q. T#include <mach/mux.h>4 T8 D# B8 a4 @' R
, G3 Z. u4 j" j4 _
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 C* p6 n) b/ e z( K; L- l
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 W7 e4 G/ g! b4 H+ a3 W#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! O. G, r5 w, o4 O4 u#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 c( j f. v8 B$ s( K2 m4 [
; [+ z N! ^- h$ H
/* assign the tl som board LED-GPIOs*/" h3 _- @2 c/ b" Z: x
static const short da850_evm_tl_user_led_pins[] = {$ s( a4 c f# p( |) h) O
/* These pins are definition at <mach/mux.h> file */: K d6 U5 Q: ]8 Z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ }3 F9 o- g7 g% R. V9 H
-1# r1 A( `% Z4 a9 z
};9 X- c# t: O, O2 |9 G- t
/ v% R$ S) W% X& U7 A$ L# u
static struct gpio_led da850_evm_tl_leds[] = {
5 ]: T" G; H6 q {
" C8 T4 F h. f. `: ^ .active_low = 0,4 q9 I# D, J7 k' A
.gpio = DA850_USER_LED0,
7 F7 S2 u# Q2 I& p1 J0 v .name = "user_led0",
9 E- \6 j0 O. p6 P9 P' b! c+ H .default_trigger = "default-on",( z5 C/ D5 Z* s) G) f4 @5 _
},
1 W: ^; s# K ]! b {
& `- q, k% j/ ` [ .active_low = 0,
: o. F4 B( F b$ q H! l L% g$ P .gpio = DA850_USER_LED1,
3 N9 r# }8 Z: z( c( B8 f- r5 a. ~ .name = "user_led1",0 W2 \2 N3 A. t, p$ ?
.default_trigger = "default-on",
) _$ ] i% m9 Y& c! ^$ m8 V4 ?" P }," w2 e! h$ i4 M7 Y* D
{" @/ M G, i( H1 h
.active_low = 0,$ Y! w( q& b8 L# R' x# R7 K
.gpio = DA850_USER_LED2,) I* g/ j8 Q9 h3 f% |! h/ t- Q
.name = "user_led2",
7 N7 J, r- d! |/ w+ [ .default_trigger = "default-on",# h+ C, C, D4 g2 Z" W3 q& y1 I
},
$ A1 W0 U- \; B. ?& X3 o/ c {1 e4 A& Q& |% q3 E: F1 D; u8 o: \
.active_low = 0,5 N* p5 e0 Y8 H# [3 v7 t* A
.gpio = DA850_USER_LED3,
! |1 l. [5 K5 t8 n9 A% m; y .name = "user_led3",
; T; e( Z! j2 c3 w .default_trigger = "default-on",( W# F" T) I3 T) a
},9 s2 ^& z7 G# f- q0 f7 w
};8 u4 `9 z( v" Z1 _1 o
9 I% P8 r: i, Q1 B6 ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 y+ L1 k# R% T9 s2 [. f; r r .leds = da850_evm_tl_leds,
3 \5 b$ A& i0 ?% T9 e" o8 Q _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; \1 q( E* B8 r* ~8 s) }8 i};
, E; a6 p5 B' F& M" h' C
' a+ [& }5 H9 U8 ?; `! r# f+ G6 K$ Lstatic void led_dev_release(struct device *dev)
& S* I' ^" \( B{
2 D' C2 X$ }# Z( }$ v};
- d7 k! i) o W/ t/ }. ]$ x9 X
1 i6 c8 U0 i6 w) J$ X4 A2 `! nstatic struct platform_device da850_evm_tl_leds_device = {
& y" R& `6 r% |- A3 W! `' p .name = "leds-gpio",
/ Q2 z- ?0 C: g5 |2 ]+ _/ G. C .id = 1,
( ^2 S+ q5 Y# f* |! r9 C8 I .dev = {$ @0 t! e' K. R% X2 s
.platform_data = &da850_evm_tl_leds_pdata,* {/ ^/ J3 O+ }8 n6 |" ^
.release = led_dev_release,
5 G7 ]3 L6 R9 _: v2 ?7 o7 V0 k }
s0 m% O. {+ R. c& }4 r( W};/ p' u, O" I K8 `1 p& _4 l
$ v. j: W. V9 v7 Gstatic int __init led_platform_init(void), @0 z1 n% A- Y+ O0 t4 ]3 n. l6 G' L, c
{ a6 X. S0 H6 m. h; N; ?8 x
int ret;2 X- b( b. T6 f: Q
#if 0
; H- F. o( z M# [* _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- R7 o6 k1 F6 ` if (ret)/ B: r" W! ~3 n7 K5 M+ Z: h
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' z# E: l1 o- I5 t* u, G "%d\n", ret);
, a' z7 ^! t5 y8 x#endif
& X$ E& G' x" h$ ?5 ^# s ret = platform_device_register(&da850_evm_tl_leds_device);- p3 N& N, x7 h, F
if (ret)
/ {/ }8 ?) A {, A5 w+ L pr_warning("Could not register som GPIO expander LEDS");
: f3 y2 c: g1 y else6 }( s4 }+ I! ~/ K( j6 t
printk(KERN_INFO "LED register sucessful!\n");
% [- z h! A3 H6 A( j4 O. y$ g2 R: h% C, C/ s8 e0 x
return ret;( r u" j6 j& w
}$ u" x1 s' o4 A0 R0 P8 |
% e; s0 m3 D0 @
static void __exit led_platform_exit(void)
, s' F* q' J+ _' k: a8 y{
/ i, i/ m. a" J& _4 i platform_device_unregister(&da850_evm_tl_leds_device);
& l+ d$ q" [" h- {" J
) K- c" w; x$ i& O1 n) r- m printk(KERN_INFO "LED unregister!\n");4 }$ g( v7 z* D& w+ g
}4 n0 P: I- Y! v1 V4 ~7 M
4 u7 |( D: y- ?) X8 m7 g- X
module_init(led_platform_init);5 S$ L7 _, r9 P0 s4 d
module_exit(led_platform_exit);! l7 o/ w# E" ]/ y3 y
e, I8 Y& \; V, { PMODULE_DESCRIPTION("Led platform driver");
1 `4 a' @3 w; t; Y4 IMODULE_AUTHOR("Tronlong");
9 t s/ @7 T% z, ]4 [MODULE_LICENSE("GPL");
* E5 C8 B1 f. X# x% m) P
9 J7 a/ E. | F* B3 y, q |
|