|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 n" O- C$ b7 E4 t7 w5 u#include <linux/init.h>
+ [: D2 S! M% S0 I }#include <linux/module.h>% a9 r$ w- [) m6 v8 y6 l: G
#include <linux/kernel.h>) P4 ]0 N v; Z$ p! m
#include <linux/types.h># w6 J$ a( i% D9 `
#include <linux/gpio.h>
' w7 L0 x1 H' B3 \$ \% @5 v#include <linux/leds.h>
3 N# A; [, d9 v2 R) {#include <linux/platform_device.h>
' `& \. l0 [- s8 k$ W8 t1 C" L
3 d1 @9 f5 f" t& l6 O#include <asm/mach-types.h>% O$ h( m- I0 ^" \
#include <asm/mach/arch.h>8 f$ \# N3 v1 P: s' C+ Y
#include <mach/da8xx.h>
. \2 ~& Y5 c. J% X1 y1 U' m#include <mach/mux.h>
- i$ n& W/ h p1 m+ o# a& ?4 u- A* `
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 ?2 ]( X# z1 F, v! P#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) V# ]# l$ @# \1 Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& Y- P8 l) G* ]/ }5 u7 j, M* Z2 {/ y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# \+ Y1 w7 l3 X
9 W; {$ R& B& ~. n( ?
/* assign the tl som board LED-GPIOs*/* K/ t' Z3 `4 D# X$ O
static const short da850_evm_tl_user_led_pins[] = {
; x% q, u. v+ k4 e9 f; ]& z/ X: X% r /* These pins are definition at <mach/mux.h> file */2 {" k8 x) h# n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% w3 ~; g' K, y# P* W
-1
# P+ E0 u* m* b};2 f6 w; Y& I) s1 t
5 l n9 X$ H) B7 a' Rstatic struct gpio_led da850_evm_tl_leds[] = {
9 g, [* L E# s' k: ?$ f/ K' A5 N {
4 U3 w& Q d3 y* n& I% Q1 D .active_low = 0,
8 |" d/ `- ~3 O; X4 W .gpio = DA850_USER_LED0,
1 m7 R: s: e' j; ~6 @% e .name = "user_led0",
% Y. P" a/ W& \$ j* L# p. ? .default_trigger = "default-on",
& H& M- R9 x1 x },: F* ?0 c, ~* {$ |0 z
{ k+ N( d2 R- ^) W1 f1 \! J
.active_low = 0,
1 o+ { W3 U- x3 g .gpio = DA850_USER_LED1,' f9 ^# @5 F$ p0 L b6 S
.name = "user_led1",$ ~6 h, g6 D+ w3 h0 q, x
.default_trigger = "default-on",5 D O, K3 ~1 R1 j+ G9 s6 z
},6 D9 r5 V3 K' B) I* L
{$ c9 K4 [& f2 I2 z; e8 D
.active_low = 0,
# X; o' \# O0 X$ K .gpio = DA850_USER_LED2,$ v6 O+ B9 @ f( g; I2 j! n2 g9 H
.name = "user_led2",/ v9 a2 ~6 B8 |
.default_trigger = "default-on",
9 l9 o, l0 m# l* r },- n) e9 x9 r7 v, X; C% z/ d
{5 y" @: Y* j+ r% o( z
.active_low = 0,0 V7 ]" p% G9 Y6 H# k6 e. l2 c
.gpio = DA850_USER_LED3,$ F) @$ }0 F9 F- `5 B
.name = "user_led3",) c, e. _& U! {7 c! y
.default_trigger = "default-on",! d4 X1 D+ k! u4 }6 A' t3 x
},
# b) _) {% e1 q9 o, f};' m& P: _1 z1 q# V6 z
; S2 F* m+ [- B: @
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) R. |( S( t% s) z% C
.leds = da850_evm_tl_leds,
# u) C( @' t' T6 Q5 E1 Y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
V$ p6 o7 N: F" t) p$ }};3 Y" Y5 i3 ]! P
4 M0 G1 Q, W) O. H+ lstatic void led_dev_release(struct device *dev), J: U' g1 D5 g# P4 S. \
{
6 Z; d6 c/ R2 C};
% v* ]& p% \4 _+ X9 I8 F! p
2 F/ X8 u0 g7 t% H! j0 B2 b3 ystatic struct platform_device da850_evm_tl_leds_device = {
: j, y7 q& G* t* o .name = "leds-gpio",- r; r: G% X" g3 G5 p0 L
.id = 1,, v e3 W5 K1 f1 t% _5 P* j* A4 W
.dev = {
- v6 D5 V8 ~7 Y+ Q .platform_data = &da850_evm_tl_leds_pdata,
- l7 u6 L$ F( y# c5 R .release = led_dev_release,
4 @, [- F6 C( D; Y, ]. \ }
' p! u% B* W. b3 |2 h0 ]1 U+ @& u}; \5 v6 w7 b8 B' D: v
+ a/ G3 V) j) d$ v+ Lstatic int __init led_platform_init(void)
$ k9 Q4 }1 v) z6 f, O{
/ G0 \$ y" n) h8 e# V+ P int ret;
: ~5 E4 U* d6 Z5 q% `0 [/ S- p#if 0
3 @. |# Y% ^) d* N* M0 a1 S ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" r! `# W6 Q/ e if (ret)
: ^6 U! H" a( J9 n5 D4 F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 g* R; s& i# q3 V8 `1 M
"%d\n", ret);
: N+ i' x- T) ?+ q; r5 Y#endif
1 {0 M; e$ |0 V& O ret = platform_device_register(&da850_evm_tl_leds_device);
7 k" h: D, p2 [% q- y5 O if (ret)
9 ]/ B% @7 t9 S2 {! Q- e# `) A1 @ pr_warning("Could not register som GPIO expander LEDS");' \/ A T0 T7 V& ^
else
! j5 P0 c' e) i* o/ k0 D printk(KERN_INFO "LED register sucessful!\n");1 e: b$ |+ O3 \& y+ b6 {' m5 K H0 A
1 @& M* u6 K- ^' p5 y% M return ret;
% V, |: S4 ~" \) z}
+ h, Q% o( |) `# e* }6 a
6 D" x: a( y9 R% Astatic void __exit led_platform_exit(void)0 a% M. ]7 Z5 [* x* p. o. g+ p( z
{
4 Y/ q- \, ^3 j1 m platform_device_unregister(&da850_evm_tl_leds_device);
, m+ a# G* f( i- R" Q1 Q- `6 Q/ {8 {' ~ {3 e' b6 S
printk(KERN_INFO "LED unregister!\n");
4 Z) `: g. |$ s& r p# u% l}2 `5 n9 H8 I* u7 p+ p% U
4 Z9 O9 L8 X2 s. Q
module_init(led_platform_init);
$ @. o% ?* D0 L8 Mmodule_exit(led_platform_exit);% P' B+ P7 A; k l1 i
) ~% c) U8 Z1 ~6 o# zMODULE_DESCRIPTION("Led platform driver");
4 s2 A: s* }, a. [3 ]$ LMODULE_AUTHOR("Tronlong");; D1 B2 J7 I. S# Q# B7 S
MODULE_LICENSE("GPL");
; E: A( n; a- p Y/ e6 |& }5 H" _' V/ X4 Y! w
|
|