|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 ^$ ~9 b- v/ y
#include <linux/init.h>
1 F' l& ]9 D2 g" N) v, t#include <linux/module.h>
# [' C: }6 l, g: q( R- a+ e/ l1 P! ?+ ]#include <linux/kernel.h>9 x6 i' Y/ d4 V5 R. L" O
#include <linux/types.h>; s9 P5 C) x( M M0 \ Z; u
#include <linux/gpio.h>
9 j) @/ C( o8 d& I2 M+ d2 M#include <linux/leds.h>6 @ W$ W3 y" o( u. K
#include <linux/platform_device.h>
+ G* _2 G+ Z( r, o' P) ^$ [* v( w! H; P. F! ~$ N& d; K
#include <asm/mach-types.h>
) H- d+ `. C G#include <asm/mach/arch.h>5 e9 n/ x, I4 c/ ^& ~
#include <mach/da8xx.h>
! v0 s( M9 e. z3 G' H#include <mach/mux.h>
% j8 J! H) C7 d8 w1 o! ~) c" E/ E9 c& i5 C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). g: I+ k; L) y0 L) L) ^
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 F# x1 N/ {- l* B#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 ~ q4 C8 f8 f- C y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 M$ f4 E; c. g+ e9 s1 W! K
9 O9 c, I) I8 ?- C
/* assign the tl som board LED-GPIOs*/& _8 H3 _- j8 |4 [# s
static const short da850_evm_tl_user_led_pins[] = {
- k }6 k) L! { /* These pins are definition at <mach/mux.h> file */
+ v" N' k9 n6 h; c4 M% c) J DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 |# U+ C2 i, X3 u; a7 w
-1
% J6 L8 S0 r7 I6 l};" \& F$ p( M5 \7 \: {
: ?& Y' |; ~% h8 k/ e
static struct gpio_led da850_evm_tl_leds[] = {: U" I. ]+ @0 Z( U
{
0 p A, n. B3 X0 S .active_low = 0,7 U9 N. M; b. x9 x* N8 Q% g
.gpio = DA850_USER_LED0,
4 [( W. P1 g( z7 k9 u8 f5 F$ S& [8 L .name = "user_led0",
1 ^. R) y% T: D" }% V .default_trigger = "default-on",
. D! D! H2 N6 o) q0 V },. D6 r5 b1 j% L' d9 \
{$ w" X8 L4 H* ]( V- ]
.active_low = 0,
( ^( z+ J- W! x3 @ B .gpio = DA850_USER_LED1,) D* m& G, Q9 b8 v* S$ k, i
.name = "user_led1",* f$ o7 L3 v* P5 \6 O/ P
.default_trigger = "default-on",
- @4 ~; {- Z: ]$ K0 k }," ?: T0 O* N) T/ [: [
{
" C6 C1 \% q, X" z! @% Y .active_low = 0,' c3 o8 D$ X% g d
.gpio = DA850_USER_LED2,7 U2 h4 @$ Q, |* V& m# d7 g
.name = "user_led2",
6 i5 _# d( }1 D! c+ ` .default_trigger = "default-on",: L0 Q- N3 c: Y+ Q
},3 V& F) P& D5 f- M: c; v" `5 U
{
1 U+ h/ m8 c9 {, W$ f7 Q, U .active_low = 0,
' I, ?# o7 a. w( Z .gpio = DA850_USER_LED3," U& i2 W8 M- ^- o4 Y
.name = "user_led3",. x5 z* v& a; ?* j7 p' G# _
.default_trigger = "default-on",+ Y3 K3 u) c9 B1 o) t! _
},
* b6 R5 g0 X3 o" b/ Y};
! _" n5 h8 E$ f" C* u5 |1 A* `/ i# c6 N6 F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 R0 V! z) D' A' R; B& P) i% z$ F .leds = da850_evm_tl_leds,/ k v0 c! e9 _7 J) I% ]% p6 Q: v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 [# n8 j0 `. v9 G+ q3 K};, _" L1 J* n! q/ s+ |4 B' a) J
[9 W" P% `2 c, N6 V. S
static void led_dev_release(struct device *dev)& G' j6 Z g4 \
{
" n2 @$ G7 I( I$ |# m9 }- ~4 z/ `};
4 U3 E/ J/ s- v* I1 p
/ T; B. |- [$ ~9 V: `- \2 S5 m' G, Jstatic struct platform_device da850_evm_tl_leds_device = {
/ T8 ^7 y! |/ F2 X4 J$ t, e m/ n .name = "leds-gpio"," u( f7 m ^5 ?; P- H b
.id = 1,
: I1 w" A1 H' F* T% \ .dev = {
# B8 o0 v8 Q0 I1 ~- T .platform_data = &da850_evm_tl_leds_pdata,
# s( S) p: z$ j: `& C .release = led_dev_release,1 B+ @) ]+ X# S1 P( F
}
9 U0 C1 k5 m% f};
! n* a. d3 n9 F+ ~* H/ g @; v+ t# P& z, Y
static int __init led_platform_init(void)% n/ Q% B! y% y) K- t" y) X+ X
{; ]+ r+ p% I2 z/ |* C+ P3 ^
int ret;
$ O: Y+ [8 ^- a$ o+ L#if 0
$ m3 W: K0 w0 n9 T7 T0 ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: z$ P1 m+ B! D# d2 O3 O4 ?
if (ret)
' V! F8 ]/ K* X; ?' n pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ G! O: s% @- ?. m# \6 f& f, M6 t* t
"%d\n", ret);: q7 X& F2 \" ~6 f& f; N
#endif
# |1 q/ K0 |) F) N, ?& p6 m3 |% S ret = platform_device_register(&da850_evm_tl_leds_device);
) s! r+ z- P+ [1 m2 U3 ` if (ret)
) e) b( Z M; l, {/ @: K5 g pr_warning("Could not register som GPIO expander LEDS");4 X9 m( L3 c0 g
else
1 H8 k! e5 \7 @+ b. I% o9 } printk(KERN_INFO "LED register sucessful!\n");: k1 w. y$ n, m6 p4 N# Z% R
7 R6 U4 _/ c& W V9 f
return ret;- O3 a+ h) G j% g- u8 ^' L
}
$ k; o1 r" F1 w; L" O7 V( m! Z1 Z6 g
static void __exit led_platform_exit(void)
+ M! h5 T6 h) [. ]{
8 W" Q9 ^1 g* w, v- d- T- h platform_device_unregister(&da850_evm_tl_leds_device);7 S' v% z. ]4 q
, d1 H* _% w3 @4 g* Q
printk(KERN_INFO "LED unregister!\n");
! J" f. \0 U" [( p+ B& r}
: _1 ?! e/ w$ i( \+ R; s6 L% f4 {' j. E3 M3 B
module_init(led_platform_init);4 A4 B' `+ h! [# A7 J: {' n3 L
module_exit(led_platform_exit);
) n* p6 H& ?3 `* ?0 p( Z+ u* r9 Q% q! q, [8 G% D1 G
MODULE_DESCRIPTION("Led platform driver");
$ P5 G; Q- k- s* GMODULE_AUTHOR("Tronlong");
4 X) J; l, i" TMODULE_LICENSE("GPL");
, b% f- Z2 ^* G+ |0 @: e1 v* H2 N/ Z, }, P6 Z; F \1 z& g* {) h
|
|