|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ ?7 `5 j5 M! Z#include <linux/init.h>
0 h, B: n' J9 B! E#include <linux/module.h>
$ D( C# O1 k/ \6 |#include <linux/kernel.h>
0 w/ J3 T3 B8 d7 z0 `#include <linux/types.h>: ]2 B& B D% s+ n9 J( W' s3 _
#include <linux/gpio.h>* X6 [) p, a2 N! n G
#include <linux/leds.h>
9 R7 X" {& |2 T6 Z) a#include <linux/platform_device.h>3 a" F Y9 ]" a6 |, {8 Z
- p! I8 D" D1 K
#include <asm/mach-types.h>* l. J8 [; @' w" \. O
#include <asm/mach/arch.h>
6 s! \7 n5 ^ D& E' U#include <mach/da8xx.h> i* Y k: b) d+ t' {8 R/ b' _0 Q
#include <mach/mux.h>
( z, _$ Y5 q1 H. b3 O: X, D, E% ?( ]4 t1 a, z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 T# G1 [$ c$ A* S F& I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 F1 p* t( ~4 l2 p4 w" U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# A6 {( R! O: q6 Q' x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 f# N2 l# i5 X# e c7 V6 `3 W# g3 n" C3 ^
/* assign the tl som board LED-GPIOs*/5 Z( k, ~/ h! b7 ?! t7 g
static const short da850_evm_tl_user_led_pins[] = {& H& j ?, P' k6 Q4 ^: ]" C9 i
/* These pins are definition at <mach/mux.h> file */4 s# |! I) c8 Z& w7 x# j
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 o2 _& U8 o1 N
-1" P0 P. E. \# ~- W m$ V
};9 _" G Y+ T3 F
# R7 Y& F# F- R# ~5 q1 c/ }static struct gpio_led da850_evm_tl_leds[] = {
$ [% L, P- S8 T c; X8 e {
% c$ s+ f- w( ^6 `5 e .active_low = 0,
& W" @0 u& P) i) N/ D& V .gpio = DA850_USER_LED0,( U5 |! s2 e. ~& W) v0 J
.name = "user_led0",
$ G3 j* j, _0 P0 c+ i .default_trigger = "default-on",7 \# W* [/ Y- \; \2 t9 n
},
2 R) J$ X$ A. @* f. Q {
* O- e2 q6 @2 X .active_low = 0,! a1 w0 `, H) p( c. D
.gpio = DA850_USER_LED1,# { v3 z. e6 }8 C% [
.name = "user_led1",7 D: h7 G: `7 G; J) J( H2 j
.default_trigger = "default-on",
8 |0 r; c! }* G },- N2 v/ ^3 [- |9 k% Z, Q! u7 o
{ c$ h4 t. c& P1 z8 M' w! c
.active_low = 0,
4 g) z ?$ G9 ?+ P& E! ]% H .gpio = DA850_USER_LED2,
1 @- a/ s5 s; \4 ~ _7 `/ x5 e .name = "user_led2",( p- H* k' u0 M3 v
.default_trigger = "default-on",! e- f6 Y1 y/ u9 a$ R2 e
},
& l& h: A! m) }# E7 W8 F {
1 }' x7 C1 v4 }+ d .active_low = 0,4 _3 z' ]: F u! n2 [" D1 G
.gpio = DA850_USER_LED3,
# g6 |( z; W7 K7 c( y( D4 F .name = "user_led3",
: ^* Y3 `6 _% S .default_trigger = "default-on",! @: T. l9 L' {5 {4 s- a
},
3 V( }- K% W' t- C9 o};3 Y3 E/ @4 @/ F% ]6 \! E4 I' V
2 ` \6 H" F3 _# v* {4 Q: j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 T* W3 N+ A s
.leds = da850_evm_tl_leds,
, [ n' X# @& Z5 W V# d .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! g% b2 Q6 [# S# n# Y! z};
* u/ o5 ^" O5 t& J! j4 e0 n5 V" U8 c( ^3 q' T+ X; Q: d% l6 Q
static void led_dev_release(struct device *dev)
- b- S6 G' ~) O2 l' G; B: [{1 \# K3 b# f2 m2 q% ~ M o
};
& _* U( l0 ?2 Q- M$ P. X* U7 |- y) K" j* F- }$ C
static struct platform_device da850_evm_tl_leds_device = {
5 y! `$ I" \0 O; I .name = "leds-gpio",
/ c2 }) ]4 w. Q& t- R+ E, d9 J z .id = 1,& l0 \- g! {8 p0 U
.dev = {2 C- p: m k# b1 Y4 O
.platform_data = &da850_evm_tl_leds_pdata,6 o7 P9 E I* P" U- D! p, |
.release = led_dev_release,
: C, `6 I# w6 y9 O8 R( t8 F' l }
q+ G- _9 D8 O" j! V! @% S7 T5 @) Z};
4 M. b8 Q0 D: G, Y5 s
# _# {+ a4 k% ?) J0 w& {static int __init led_platform_init(void)
, U: I8 ?, l8 y' ^2 f# b( S) m& B# [{7 j2 m, k+ U5 r+ E0 H" a
int ret;5 B8 D5 T- l& ^% }4 x8 m. V
#if 0
( e/ a' ] Z: y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ T# v% C: N8 U7 M4 ^ if (ret)8 r+ S' e2 w7 E+ `1 P; a; p
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 k0 L4 m8 C: o4 \ "%d\n", ret);, j0 R& h b; c# ?5 G& e' I
#endif
8 ]! E6 i% y- e$ Y9 S# {* j* H ret = platform_device_register(&da850_evm_tl_leds_device);
2 _" A- Z! j+ N4 m" ~2 V* Z if (ret)- m$ H) H8 H! s* [
pr_warning("Could not register som GPIO expander LEDS");
/ H: w; t' X0 H6 J' q+ N2 p s else o; F- P8 d& }( ]& K* z- `% C2 s
printk(KERN_INFO "LED register sucessful!\n");
, O( ] u6 W j& v" k: D- I u0 W% G4 `' |: k, Y. v3 I
return ret;- o- d `, n6 ~6 O
}& S. L3 k* c# @- X6 O; \
9 W) O; G0 L. @7 Nstatic void __exit led_platform_exit(void)
# N6 Z$ w- H' D; m0 P: r{1 e4 |8 _1 N; p7 Z2 l
platform_device_unregister(&da850_evm_tl_leds_device);
6 A o5 M# M) u2 ?( U/ c: J4 |: W7 C/ d( d5 {7 r) m/ n3 ]
printk(KERN_INFO "LED unregister!\n");& Y q/ H; S" x' P
}- m Y9 F" e! S1 j" ~. s0 w+ e
( V% J) M0 B; K2 ?6 M, _5 L
module_init(led_platform_init);+ G2 c" D1 m" P( {
module_exit(led_platform_exit);- d4 I! ~' H- c2 z6 s8 M! S. [
. U6 a. `/ K9 F
MODULE_DESCRIPTION("Led platform driver");$ |5 J7 ^: j, q& B. G5 [) n6 ?0 a, c
MODULE_AUTHOR("Tronlong");% q# W8 c6 R* y* b4 P
MODULE_LICENSE("GPL");" ?+ P' U5 M- D" d" c' q
: ?) d' A7 W9 C# q |
|