|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ f0 B& ]/ y- i* _- l2 M#include <linux/init.h>
; Z5 q' V# j4 k' W#include <linux/module.h>
' n; |+ c* B" `2 y#include <linux/kernel.h>+ v( w% F0 w3 H% F5 n% H& J
#include <linux/types.h>
* y1 x' Y/ O2 w) |' A$ ?6 C#include <linux/gpio.h>, E9 n3 e* }1 L4 w6 a3 o6 }) {* S
#include <linux/leds.h>
% w% x- b) B# L2 P#include <linux/platform_device.h>
7 ?$ _- R' p3 {8 [
8 l7 W4 ^1 k z) Q: m#include <asm/mach-types.h>
4 l7 U' K' _* p* k* Y' E#include <asm/mach/arch.h>
0 x3 ^& Q3 E$ q#include <mach/da8xx.h>/ ~' e9 S0 b, `' K: `* i2 M
#include <mach/mux.h>
' |' s1 d/ {, k }' ]
" D& _2 D6 J; L8 i% L/ X#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 w/ ^2 S: M3 l/ }& W#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% z+ N, _5 U6 f: Y! Q; u. F#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 }0 K5 K9 Q: ^2 r0 K( [8 g# E8 b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' e% G$ [& ^5 }- q- d0 w5 J% `
) x' O3 t4 v* R3 _0 e
/* assign the tl som board LED-GPIOs*/" W9 [' Z- s D. ], d
static const short da850_evm_tl_user_led_pins[] = {
3 h. F# K9 E, D- X$ } /* These pins are definition at <mach/mux.h> file */; [* |8 F3 H5 c5 j. f! U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- c R3 s5 q6 l- r -14 V* \5 W- m$ T4 L# L$ p, d
};
( c* B+ n I0 C a, m
1 p3 M, }( N N* E4 ~static struct gpio_led da850_evm_tl_leds[] = {
: |% f; S) S3 g8 O" D& U' x {
- W, F0 j- F$ T- p; y- p .active_low = 0, A' z' W+ \$ d% P/ F
.gpio = DA850_USER_LED0,) u1 z4 y' v7 l0 w- ^
.name = "user_led0",/ i# Q2 O4 l7 \. k
.default_trigger = "default-on",
& B I, P3 g: j/ I8 i! L: v },
1 Y& C; o' u" H0 o6 n& Y) ` {
4 U" K) Q5 F2 T9 g+ _6 p .active_low = 0,
3 X. r) _+ `. x) G .gpio = DA850_USER_LED1,
+ P, [& N- N: x" ? .name = "user_led1",
2 w, {; N) g5 a- a5 |9 B& t .default_trigger = "default-on",
% p0 f. z t- A },
5 {. K; K+ `& H$ ^ {4 n9 F- M4 l2 a- m5 f8 H
.active_low = 0,, |; ~2 [$ W6 U# ~1 I% S" Z8 X3 Y9 ~; Z
.gpio = DA850_USER_LED2,! C; r, ?2 x. D7 j7 e6 G
.name = "user_led2",$ _9 x2 z3 b+ m
.default_trigger = "default-on",
4 J6 b, T9 I9 Z0 {+ \ },
7 D9 j) R& j/ c4 ?' {, P { p/ K' f) |- n! m" [
.active_low = 0,8 F5 v# J D$ W# L0 e2 I
.gpio = DA850_USER_LED3,
3 Y6 l5 b( R1 J) o8 a* E. H .name = "user_led3",
{- V5 b- Q) ?8 p/ Q$ h5 s .default_trigger = "default-on",! D6 |& t. u) W( j. ~
},
7 W2 o0 O# P G}; @2 u% t7 y9 l) e( K
( e$ `) V' V) L( h4 o6 d7 @
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ ]2 l) H6 f, K! T5 y! c' X& v
.leds = da850_evm_tl_leds,- L) y+ A: @( g: I z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 ~. M( i1 s1 Z* d% l3 h/ p
};
! k9 x* |" W" n, L4 o3 g/ R2 d* s, d; P" _& J
static void led_dev_release(struct device *dev)0 v6 |4 i" Q( [7 V3 Z2 _
{; `6 \$ n4 `. o
};
+ v& U$ _6 g9 N& @; {6 m2 w
# H% n* W- `% X- E7 Q% S9 [/ Q# cstatic struct platform_device da850_evm_tl_leds_device = {" X1 L9 R F. Z, _
.name = "leds-gpio",
+ a! \* u. b; }5 W0 M9 i2 q- O .id = 1,. i# b% K+ d+ F# ~3 O/ a5 ?: H
.dev = {- L' e4 _6 O* ]0 I4 I6 F
.platform_data = &da850_evm_tl_leds_pdata,
% Z: T8 C: V/ E4 O .release = led_dev_release,
% F8 P. M% i5 n1 c3 r }) C, O4 t, e; e2 u
};
0 q5 R6 ]! E+ d
" U8 I+ {+ b* |6 V- fstatic int __init led_platform_init(void)
G/ T/ ]+ g8 n5 T{) f% b- e( y P% ^& l4 E! y
int ret;
& a" M5 r1 Q- F5 e. I& D, X8 _ \#if 0
/ w5 t+ u) o& q$ P2 \7 n( z6 \ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- e, ]( N% @% J& \
if (ret)+ ^) @- V3 h/ h
pr_warning("da850_evm_tl_leds_init : User LED mux failed :" |; A' {* Z3 ]9 W0 W1 k
"%d\n", ret);9 t4 R2 B! }, r' s: d- R" G: s1 x
#endif6 {1 b9 c2 `6 }9 j
ret = platform_device_register(&da850_evm_tl_leds_device);+ {. ~8 b7 t* N" ^0 A
if (ret)
4 b7 |8 J! _' p2 q9 l% E pr_warning("Could not register som GPIO expander LEDS");
1 l6 M' n, D4 X; s/ @9 y else' E9 S+ S5 l6 q6 T
printk(KERN_INFO "LED register sucessful!\n");
6 q& N. H; Q6 C! y1 z3 v8 g- J% k
3 E" z% @% k* R1 z3 u$ _2 ~& t return ret;
/ }% e7 e" h3 z- Q' ?}# P* U2 F4 X# B2 k% h
& R* }$ S" P: W! L4 D* R
static void __exit led_platform_exit(void)
9 A* x+ k# O$ b! g/ V) [{, X+ y4 j" f/ q& D7 g
platform_device_unregister(&da850_evm_tl_leds_device);9 g2 X( h3 g- V( q+ u6 }
8 L/ _; p; Y- V* ~6 Y8 l7 J printk(KERN_INFO "LED unregister!\n");
0 l+ Q d* {$ H3 E7 B, _9 y/ q6 y}
3 g. j* v& F3 Q6 w9 C6 v' w1 I9 Y5 W" ]8 b! Y% u( s
module_init(led_platform_init);9 m& t5 |" R O2 i5 b
module_exit(led_platform_exit);9 y( `5 y$ q5 J' C
. x3 C* ?1 `6 J3 ], F8 F2 W
MODULE_DESCRIPTION("Led platform driver");
6 j m" r0 v2 KMODULE_AUTHOR("Tronlong");
- e# P, P/ Z% _, d# p @MODULE_LICENSE("GPL");5 h P/ c9 x& |6 t( A, ~$ C3 x
% z& t8 Z3 k- C$ \9 M" U2 t
|
|