|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 _- w- } r) n- I8 k6 Z#include <linux/init.h>
% i# O, _4 A+ Z#include <linux/module.h>( L h3 u' o% s& s4 w
#include <linux/kernel.h>* ^5 W7 p# D( ?1 W4 e% E/ \
#include <linux/types.h>7 n% b# x+ ^( g9 S6 W0 \5 A
#include <linux/gpio.h>
4 p+ \% _" l, @- R3 ?#include <linux/leds.h>
& I. u0 j+ A8 J9 @2 b#include <linux/platform_device.h>
/ p1 X7 m2 N" a1 L2 }" }+ g9 o
! F, N, I( E- _( x#include <asm/mach-types.h>0 a/ Z6 h7 ~1 K
#include <asm/mach/arch.h>
- y; j2 t E: B2 ?3 ]#include <mach/da8xx.h>
7 F& X, q. L% S d+ j' s#include <mach/mux.h>; W- v( k9 r9 g% i9 W
6 `4 {+ v" C/ e7 L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& M( ^+ ^) _7 d4 M$ m4 c; S
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( a" C6 j9 ?( t# ~& |2 Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- K7 v8 ~7 e& b+ O4 J, S#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' ^7 v& Q! E. l: p( c% a
/ K/ y& k$ \7 T7 h) q/* assign the tl som board LED-GPIOs*/
4 u9 [! G1 X& r1 a) Astatic const short da850_evm_tl_user_led_pins[] = {' y2 Z; A7 s4 Z, |3 t, B$ ], x
/* These pins are definition at <mach/mux.h> file */
* }! M( C4 l3 G8 j: c5 L4 B7 S9 v DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( S+ k; V# m' z9 D, s
-1
3 m7 H) S: y, ~+ A# C& E};
M, m8 J; P' U# T( g* G4 t7 h# o/ ~9 x" q- I, n, X0 @4 d; I# h+ I! w
static struct gpio_led da850_evm_tl_leds[] = {
# f1 D1 N6 t. K! Y" x {
1 A p. b7 O0 L( P: B; V+ C .active_low = 0,' P# a7 _0 A3 G9 M
.gpio = DA850_USER_LED0,
5 M. M+ S% J2 d3 m. Y .name = "user_led0",
3 _& ~, W5 k, e# y; { .default_trigger = "default-on",5 m4 {- r8 ^( A2 R
},
K8 c+ T7 `: K" @8 q+ ] {
# T# E8 m- F3 Q$ {8 { .active_low = 0,
- C2 Z. ?$ Y; b% w* L4 a3 k _ .gpio = DA850_USER_LED1,
, I9 p, i2 e, b+ k2 @" n .name = "user_led1",
C& M1 o( t9 Z1 h" E .default_trigger = "default-on",8 x$ D. a' M' [0 |4 z) G. x
},
2 D( A l- p) n& ~ {
; u" V6 v* f8 q8 O U4 j( B8 v: f .active_low = 0,
2 D/ G1 a; N1 Q1 Q .gpio = DA850_USER_LED2,
# x; B6 ]8 F5 M* ] .name = "user_led2",
0 @/ G" E1 c* o' Y .default_trigger = "default-on",5 C0 r: l% W \# @4 N4 X; A7 a; _
},
# E+ B3 z9 ]$ ` {
9 |; X1 W& X4 m/ C# Q% a$ C .active_low = 0,
4 D# z1 G" O. ^2 Y .gpio = DA850_USER_LED3,- x, d3 a2 p6 }. ~9 D+ B6 ?
.name = "user_led3",; I" c& D2 d g# ?, D* ]
.default_trigger = "default-on",
0 \7 o ]( \- w/ ?3 N) V( Y3 J2 Q },
- Q) D7 _, W1 o$ t$ _! u7 P( f};/ t. D @* \8 z( d* y
5 G# l. Y# k: X( Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 h4 w' S [) z" x" w6 N( |
.leds = da850_evm_tl_leds,
. {5 U5 \9 e) v5 `$ y4 M8 y7 s0 \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- x- n/ a' I, J; e! S/ \};) X; W+ @3 V. S
9 a2 v1 T7 u" I) R" D
static void led_dev_release(struct device *dev); K" X' U$ P8 Z6 r& ?2 G( m
{6 P/ q5 }1 Z n3 h+ p
};
6 u: @ |- ]3 M" `' I) W* C$ Z2 n. R) F/ |# o1 H
static struct platform_device da850_evm_tl_leds_device = {
' M5 Y8 v2 a$ b- e* b A .name = "leds-gpio",
# g2 \) ~" v2 k: S( c. \ .id = 1,
; Y6 x9 L+ _1 L* B6 ^/ b .dev = {
0 ^' C, ]7 g6 b2 }# ] .platform_data = &da850_evm_tl_leds_pdata,/ `3 _& e% H1 X, Q$ N
.release = led_dev_release,% m1 N# {3 d2 Z9 h$ [3 F
}0 F$ _1 d; {" f- k1 q& m
};# q& d }) P, |6 `. v9 p$ i- O0 D) `$ d
0 R. R0 ^3 {3 v+ Y3 S& e2 i& Rstatic int __init led_platform_init(void)) ?5 V* N$ z- R. {9 ?+ g4 _. y2 T' |
{
, P+ f2 H3 U3 l }: v" I int ret;
4 P5 n0 U- [3 O+ _, p1 I* Z#if 06 p+ j# A; C: q; j) R7 D c
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" [! y' S( O7 @7 {2 O
if (ret)5 j9 l" w( ^5 L# ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% d7 ]3 l8 H0 h* Z "%d\n", ret);
, P+ Z4 c% \4 @, W1 _5 L% Z7 D. j8 P#endif
) h$ c' r3 \, J# w ret = platform_device_register(&da850_evm_tl_leds_device);. E! \; z3 |2 M7 A& x( L1 k- M1 y1 A& t$ q
if (ret)
, B8 E3 x9 I5 E$ Z pr_warning("Could not register som GPIO expander LEDS");, [& _1 u% R- @
else
6 ~7 ?- w3 y$ w) Z9 \: T8 y printk(KERN_INFO "LED register sucessful!\n");7 J" Y1 L3 p" z6 U; `. A- p
8 y0 T) [* R) Z6 g5 V8 M return ret;9 }7 e% ]: D3 [ J! _. ^- Y
}
: q% W. Q$ u+ {% }/ F) ]0 }6 ^ }9 V5 j
static void __exit led_platform_exit(void)4 R( B% d- n$ j3 q; L
{9 h/ e1 P8 ?, [
platform_device_unregister(&da850_evm_tl_leds_device);
2 b9 H8 }9 N6 F' W4 Q: h
8 k: F* d" R" @ printk(KERN_INFO "LED unregister!\n");
* u. f5 A5 p" m5 H' K}
+ n% x0 }4 x1 k2 A' }0 f: F: f/ c
2 X2 J. s7 z9 {: x( \6 I9 n0 rmodule_init(led_platform_init);( `; ?& K! t9 x* i/ s
module_exit(led_platform_exit);
9 ?: s' j% M* w
7 _. V. Z X6 IMODULE_DESCRIPTION("Led platform driver");$ m8 K# `/ w3 }7 W2 E- u! X% |
MODULE_AUTHOR("Tronlong");
V- g2 }: a+ T$ u3 wMODULE_LICENSE("GPL");1 ^9 k1 b* e+ @" O& ^ Z" T
" g2 U' h5 i2 b
|
|