|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# `. o8 e+ x7 X ~
#include <linux/init.h>
. P" ~# A" k9 D7 R#include <linux/module.h>) G- J3 W" ^$ N! S B% O
#include <linux/kernel.h>* F. k7 e- L; n; f+ |2 F/ m
#include <linux/types.h>
5 ^4 R3 @( G" S0 T: T! n; r4 F#include <linux/gpio.h>, o: c4 u; v3 O0 O2 \+ [$ Y6 q& D
#include <linux/leds.h>3 s; r2 \& f2 S) t. v
#include <linux/platform_device.h>
% _7 y9 s% {' g& _
7 `5 U- O6 j) P& C#include <asm/mach-types.h>
; J. m2 S( g( D, l) O8 J#include <asm/mach/arch.h>
" i! ]& ] W- t) f1 Q" q#include <mach/da8xx.h>+ y/ m% f8 {7 H* @
#include <mach/mux.h>( C$ j3 R) I: `$ {( f; W5 u2 d
* H8 c1 a0 B8 Y q+ Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* w' L! e5 ]7 n8 J$ C#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 S$ D. K. [0 T, B7 w5 r" t6 |#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- F0 E+ }- e1 p P( L5 n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) H8 E- @: u5 a6 c2 P) m3 b% W4 g- t6 h+ _
/* assign the tl som board LED-GPIOs*/
" R8 B4 x0 f& c f% F% mstatic const short da850_evm_tl_user_led_pins[] = {% B: G5 \5 C& G. U& v# Y( a
/* These pins are definition at <mach/mux.h> file */1 \# ?8 s: I: A9 m! P" |
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ n$ N# h! q% O" Z# A
-1
, A y, C7 F, n8 m3 e+ v};# |3 G! Q( R7 j2 V
' \5 a' t. w- X5 e
static struct gpio_led da850_evm_tl_leds[] = {& a/ B; g& E' H: h2 g; `& f
{
9 a/ B& j- I7 d$ G+ N S .active_low = 0,
) l1 p- o" o) F .gpio = DA850_USER_LED0,6 v8 i+ T+ U% |1 Z/ B0 W% o7 {# t
.name = "user_led0",* a$ e5 P8 N5 u0 f! |* R
.default_trigger = "default-on",* v2 X+ Q2 H. }6 ~' i- b1 \) b
},
& j, c# F# O( n+ P4 Y: J s {
7 Q8 b+ `* H) P! t9 f8 k .active_low = 0,* D K: {# f' N. |; q& f
.gpio = DA850_USER_LED1,
% x: q" t- _7 A( ?3 z, V0 ^) ~; O .name = "user_led1",- O/ s' C5 U! |( H5 \6 S
.default_trigger = "default-on",
4 z: P8 f. _8 r },& R' ?" O e; w3 `: P1 i
{3 J& x4 h7 F. v: u# @
.active_low = 0,/ V* @8 _6 ^: l
.gpio = DA850_USER_LED2,
* ?; M" H: ^# D: [1 x' H .name = "user_led2",
8 Q3 y9 X$ u; J .default_trigger = "default-on",9 i9 o- o) K$ @
},
- T7 X& O. m3 q {
/ d2 @7 l' O( g! e .active_low = 0,
; J$ m# D! R, _ U, V .gpio = DA850_USER_LED3,
* T4 S7 ?, {" n: _8 Y* S/ ^# a L4 r .name = "user_led3",
- {( Y2 b% _, R) q" \7 Q .default_trigger = "default-on",
+ i% u) N4 L) H: m) v* c) _/ n },# f/ n5 @" }: v$ F+ O$ V
};
* L5 p2 a, g5 N; f. R$ `5 q7 I/ e( `3 E- x' h( I& v& y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ S) z/ M3 D1 M7 S' s- H6 B
.leds = da850_evm_tl_leds,. n4 g. V7 Y# h+ Q" u
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),) J2 t; z7 z3 P* E
};. E+ H8 g0 t/ `2 s! f
& }6 H z; [: f# Y/ jstatic void led_dev_release(struct device *dev). d2 c) p3 C6 K' b1 d
{ f+ n* v/ b& F! q7 M& V& }. Q& b
};6 \) V& K% E7 i4 S* J
! Y: f( f2 q( ~1 F Z" h& Bstatic struct platform_device da850_evm_tl_leds_device = {
( x q& Q! ?" U! f4 y6 |4 S# p0 C .name = "leds-gpio",
" f" b+ h# z/ C8 }- a ]6 [ .id = 1,
/ ^! C" a$ [5 x* l; x: s .dev = {9 s* w# N r+ G. ]1 M* v6 M' n* m
.platform_data = &da850_evm_tl_leds_pdata,) j U9 t* }4 p: T/ N9 _, @% d, g
.release = led_dev_release,
6 I: t7 ^0 m/ U+ ? }
^" r# x! R7 B/ P& g: L0 p};5 M+ G4 x2 i! B7 M
- `8 I7 E9 [/ h/ Rstatic int __init led_platform_init(void)6 U! @ U7 u% ?" l! i
{
& E2 u; n6 X/ M% f! I5 [ int ret;9 M, \4 ~, g9 w( O$ f, I
#if 0
4 p7 A) m3 A- g& c. p ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 ^' e1 \" ^. O0 f. Y/ J/ ?
if (ret): j( ^9 A! @% k2 g M
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ v6 [- W2 M9 V! o% T "%d\n", ret);0 J; Z7 @! h/ m/ X. `4 Y/ a' r
#endif: K7 M+ G; ?6 }9 o
ret = platform_device_register(&da850_evm_tl_leds_device);
6 F1 I1 I# ^! w8 S+ V if (ret)
f; ]. N) r! c8 U8 j+ _+ b pr_warning("Could not register som GPIO expander LEDS");0 K5 R9 k& D0 n" B2 S4 V
else
: l' g( G) ?+ ~$ S printk(KERN_INFO "LED register sucessful!\n");
5 u! x6 N6 ^0 H+ A' I2 H J9 q' [
return ret;# J# w& p9 ]1 C
}8 @& c: d: K, v3 f
4 ]1 }8 r0 w% [- B
static void __exit led_platform_exit(void)
8 m/ f; R$ @% z0 P6 V1 m{1 t$ p. H' N' L
platform_device_unregister(&da850_evm_tl_leds_device);
& I# f3 R- Z; d, U! d8 N4 _& o c+ U3 Z5 q/ q
printk(KERN_INFO "LED unregister!\n");
) N, R) ^- U( X}
$ e. n2 X: r; o( k4 \& N
# _6 ^# F+ {" p7 N# R# w- w$ C. ] J" Xmodule_init(led_platform_init);
& x- F J1 o w1 F; }, }module_exit(led_platform_exit);3 E0 I4 \$ E. k- d: m
! ]: S. j u% u1 F! }3 w1 _( ZMODULE_DESCRIPTION("Led platform driver");
6 d. ~, ~& L$ _. \; WMODULE_AUTHOR("Tronlong");, G7 @* @3 e" |- H
MODULE_LICENSE("GPL");
7 P, C5 o. g5 g! W9 q S& D2 L9 n' z% T4 O3 m4 H
|
|