|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 d \7 P! V- z- j* \% ?
#include <linux/init.h>
8 [, a o0 x+ m, J#include <linux/module.h>
% |& R5 R% j) d#include <linux/kernel.h>
[' a5 g9 v& H( p! O' I1 B#include <linux/types.h>
* F1 C" m6 I5 v' x#include <linux/gpio.h>* ]# o' \8 h( O9 R; r9 M8 Z9 {: h
#include <linux/leds.h>
" S1 A8 f. L W3 Y e#include <linux/platform_device.h>" O* Z& ]' x( p5 e5 l4 y- s2 M$ u# x* Z
% m2 J7 D J' I7 S2 F7 L#include <asm/mach-types.h>1 Q* G" j ?5 e0 e* M5 o
#include <asm/mach/arch.h>9 x2 ^7 E, @8 p. c e4 t& _; J
#include <mach/da8xx.h>
/ j/ m1 M3 e% D. B#include <mach/mux.h>0 Q4 [1 F5 O( P _+ K W$ K
, c4 X) K9 q7 T5 ~& s2 J2 t L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 R9 |- g, V* X$ ?3 H
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). M# s+ d' r$ x. C0 _- v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) F2 ]6 w% `4 T- q! U
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! S( c: ?1 o, S9 d
9 N% W! a; b8 z y4 r$ H1 V
/* assign the tl som board LED-GPIOs*/) H; v; Z: D5 a
static const short da850_evm_tl_user_led_pins[] = {
. t* G) U8 K, R7 F+ g7 @. C /* These pins are definition at <mach/mux.h> file */
2 p" ?) U( Y& d7 x" m DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' J+ _' m% B5 O3 X7 O" c) P' b, C
-1
% o$ V3 ^2 K0 I; o7 m) _+ u8 q! O};
2 A! b p! L0 T% }& c+ z7 e. h7 D+ Z1 r) D
static struct gpio_led da850_evm_tl_leds[] = {
( @8 ^$ l1 w' A. M+ l* Z {& @4 |" e# J0 a% I, x
.active_low = 0,' F. Q( E6 ?7 Y0 S
.gpio = DA850_USER_LED0,
/ {. U0 a1 U' o2 }+ K3 y .name = "user_led0",0 |) _$ r; l2 b* C! T n: Y
.default_trigger = "default-on",
7 ^/ f+ x3 C. y9 d0 L },& R) c) s) s7 Y, \
{
7 K* Z- B3 B% }& ]; _2 [' X .active_low = 0,+ o; O7 p* \, h9 f
.gpio = DA850_USER_LED1,. C+ m d# r5 t- o5 `8 B7 ~8 y
.name = "user_led1",+ N/ R/ R# m& X1 C3 B
.default_trigger = "default-on",. ]# J1 r. i! \5 H/ e* p2 O5 W1 q
},4 |* U8 _, i. c6 N) V* A
{
2 [# D1 X$ u# g .active_low = 0,
" k8 S# V- x4 n3 n' F. | .gpio = DA850_USER_LED2,) p6 W. ?7 r! M
.name = "user_led2",5 `+ T. b5 D+ ^3 z, {$ M! m2 M h6 t6 H
.default_trigger = "default-on",
0 w. Y: `' i9 Q8 ~8 h },: ]& {% m* K' |8 t3 O
{& `3 N3 Z. c* ?9 B! J4 h
.active_low = 0,% r( i7 _7 O& Q
.gpio = DA850_USER_LED3,* M( E/ P i+ f6 B2 T
.name = "user_led3",- m$ B1 v6 A* f2 L. C- V
.default_trigger = "default-on",
* k% M. j# x1 i$ k3 n. }6 M },
4 k5 K5 B5 g/ U( a8 z};& H& ], p$ Z8 k# |) A9 N6 B
6 G: Q; y/ t2 j# o& c2 T3 [% a% qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" R# b+ t. E& v& m c+ M
.leds = da850_evm_tl_leds,
: ?* V$ V& }# y$ F .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 s2 z. D9 q6 P9 i+ t5 Y1 W+ {
};& N- ?8 C- Q9 Y; u N; {$ f
" n* f: x( p7 @$ k
static void led_dev_release(struct device *dev); v+ y3 F; k1 V) T
{
3 ?& @& L' V5 L1 P5 b; s};
) D. R5 M$ N! G% u7 F1 A5 a, s
4 t+ D2 J. q: q+ ^static struct platform_device da850_evm_tl_leds_device = {
2 U. T, n$ Z% E+ g3 R7 [# m, K .name = "leds-gpio",7 b6 Y6 t9 x: {0 ~1 d
.id = 1,
8 n8 B1 o0 z, v) w. U .dev = {6 `# w4 K4 p! G. p" F2 v) v
.platform_data = &da850_evm_tl_leds_pdata,
/ m5 U7 h3 B2 e" s2 {8 X .release = led_dev_release,: y* {) q- b9 ]2 \2 F7 |2 l
}- u4 j) e2 c' l: H$ O
};
- ^. A. V. q4 d, o
7 C0 T7 o) o$ {% R$ H, qstatic int __init led_platform_init(void)
* t$ q( S2 i& A, z; z# P{- N% Y& B6 U% t/ X
int ret;5 n8 \2 Y- e! P8 q/ ^9 }* e8 T! e' @
#if 0) I0 x) X1 A4 k/ u9 J
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" [( f3 {+ N9 w1 H8 `% P if (ret)
6 h* v8 M+ G7 ~$ p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- P, j% W% I* H0 ]4 y7 E3 h "%d\n", ret);
( H" `" y+ R) Q( i' } ?#endif
3 L) V! z) G) K J4 G. P4 C2 K7 J ret = platform_device_register(&da850_evm_tl_leds_device);
" Y% U {9 L& _ if (ret)% C5 X5 ?$ u- D% T4 Z! \
pr_warning("Could not register som GPIO expander LEDS");
2 T' _# q/ q$ x else6 S# \8 @: @7 @7 w5 C& Q* {. v
printk(KERN_INFO "LED register sucessful!\n");6 h# }, l5 R& t3 x$ v
) O- {: r; \6 L t; T return ret;
) ^& `3 W. p. `; Z/ q5 s& O$ l; ~. F}
7 S. @* ^- @3 s$ `0 h: D0 k+ m/ g. g# y1 B
static void __exit led_platform_exit(void); D* N2 i i) [" U9 z
{5 y8 k. ~7 T3 l& D% ~
platform_device_unregister(&da850_evm_tl_leds_device);$ h2 H0 C( o& B4 H% u) Q r4 B# J
# d, S/ M) n1 u( b0 e printk(KERN_INFO "LED unregister!\n");6 `8 x8 p+ l* i# ~+ r e5 a
}
- o G# ^7 c% y2 \# ?
. W$ u3 }7 A. U3 S& C. d( H @module_init(led_platform_init);
) U) \) }3 `$ q. Cmodule_exit(led_platform_exit);4 f# Z$ l8 ?, {
+ f+ p$ f# O' @- m% S+ R
MODULE_DESCRIPTION("Led platform driver");
# x' g0 p& T; h B' F/ AMODULE_AUTHOR("Tronlong");
$ v0 k2 ^6 h! H+ |MODULE_LICENSE("GPL");
6 K* M/ |3 y% x% R% J4 s4 _ W- D/ b! O
|
|