|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 {- P) _2 G: |# c! g, S! c0 z
#include <linux/init.h>
8 |+ W# m# A* J$ J9 ~#include <linux/module.h>
+ M: u8 k7 ~- ~+ f6 }. z#include <linux/kernel.h>! ^. @1 k/ l, c" z1 d+ J
#include <linux/types.h> D- I. F1 ?; ^
#include <linux/gpio.h>
7 K: h$ Q' M8 N8 Z- u+ u* K: n#include <linux/leds.h>; u1 e4 V9 `$ J- @& R
#include <linux/platform_device.h>4 {: O. [+ X6 }& ]6 w
# k/ A, C( p1 q# B* W! X; S#include <asm/mach-types.h>
( q' ~: C* M, _ x/ k2 \#include <asm/mach/arch.h>3 @" u! A* e( V j
#include <mach/da8xx.h>
0 X. I) W4 p1 q/ j- X#include <mach/mux.h>% f7 M: S8 _; ~; `2 @7 G
- I9 j+ u1 c' t#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 l/ V" Q$ N. m% J2 q+ o) r- M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( L, Z- b1 P6 y; D
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' `3 _/ _. F" o+ \
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* H6 p- ~* P0 O$ v
& x1 L# I$ Z. i/* assign the tl som board LED-GPIOs*/" |8 Q4 u; u: K+ m( ~) V
static const short da850_evm_tl_user_led_pins[] = {
6 K9 v* H j7 Y& J1 K. k /* These pins are definition at <mach/mux.h> file */
' J1 K7 w3 T5 u& b1 x) N DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ I2 ^# ^( |" E! [) j -1: S. N; l* P* I- D2 a# z" A `
};
* i3 B0 U+ W `( T( L# e7 u/ N/ y; @
static struct gpio_led da850_evm_tl_leds[] = {& o' u1 N; u8 A4 w" x! u+ |3 w6 H2 B
{, Q8 t1 s( W- D: X% u/ m+ F* N1 p
.active_low = 0,
5 e; U% J$ j8 X .gpio = DA850_USER_LED0,5 I2 Q$ F. S: @7 E. c# ]
.name = "user_led0",
" a& i2 c% S9 Q .default_trigger = "default-on",, O/ z5 S# x6 N
},
1 U' t% S- q' S8 P {, f& s8 I* U( ~5 l
.active_low = 0,. S' ?2 _% O* e5 F' H3 U) y: u* f0 T8 Q0 m
.gpio = DA850_USER_LED1,. y6 d) p) h' P0 S
.name = "user_led1",) U6 |2 u4 |) ~) O
.default_trigger = "default-on",7 @- p% p' f0 q& j; `0 _- j) H
},
* Y: y) q3 v1 y0 l' h4 @* [ {
: w; p8 ~) |! z2 D5 R7 T7 ]: f .active_low = 0,
, @( a1 q8 X+ y" D' c( P .gpio = DA850_USER_LED2,- w6 j/ |+ N0 L- Y
.name = "user_led2",$ S2 b6 j. d, V7 a8 }% |+ }) E
.default_trigger = "default-on",/ j! E: g8 `4 z |$ W
},
( i. X. s$ ^- s5 b+ a- v {) m4 v$ J, O+ m; V! L9 S, j+ M
.active_low = 0,
/ N/ X- _. M- L5 Q/ q .gpio = DA850_USER_LED3, ~8 r H. ^# j+ i. Y, U
.name = "user_led3",
* H' `! u' k9 ^+ t3 G .default_trigger = "default-on"," F$ e, R7 K- l1 Q i- a
},
' O1 `, @) z! M) E9 u7 ?( c};! j, v7 F7 g: E6 x/ g; H& ~* H
. e R+ b. j/ V' X/ |) Y) r: @, ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& k; Q9 ]- r0 P" H
.leds = da850_evm_tl_leds,
0 Y$ F: D: v: M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& Y+ s2 F# z! p0 Y6 y. ]};
# E: ], [! B! b1 e" w F7 T( X/ b. f8 H+ a
static void led_dev_release(struct device *dev)
0 m3 i& n* N: o' F- J0 u0 B4 ]8 h, c{
3 A: o: r5 O1 w- {5 \ u3 m( v};
( [: h1 ?# @2 m n% Q: q. v3 H- t9 d# J, }% Z$ A! f& B2 _1 j2 ^
static struct platform_device da850_evm_tl_leds_device = {" o9 L( i7 f, y2 Z, j y
.name = "leds-gpio",% g5 r6 `: O/ R) b: A5 u
.id = 1,$ r, \3 M- s$ `0 l- M. l
.dev = {
* S2 c1 {6 _7 o8 y+ Y .platform_data = &da850_evm_tl_leds_pdata,+ Z( i8 L/ d) ]" ^0 F
.release = led_dev_release,
5 O& b( f% U0 k- G4 f# ` }7 i# y7 t5 l4 s: G# a1 M- Y# m
};. l0 r$ |% h/ j Z+ s6 U
/ ` b# O( {2 l& d3 P r* zstatic int __init led_platform_init(void); X+ v+ H1 Z$ ~- A5 b. A
{6 p& S- Y1 H1 [! h J4 v5 _) V
int ret;* ?3 s4 g6 S9 V/ i( o
#if 04 q" g) k; b, R
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& B( E5 u0 c/ b3 b! C
if (ret)' M" p# T* v* z9 I* p) k& e3 s# u
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 O/ @; W- V- b5 y7 q9 v" y. e( I
"%d\n", ret);) y) W4 X" {+ \. X( X2 R$ ~
#endif
( U: f& O1 R# j; [ ret = platform_device_register(&da850_evm_tl_leds_device);
) l7 G" `2 V( Y" M if (ret)* d N6 c( s, l7 p
pr_warning("Could not register som GPIO expander LEDS");4 D9 S, k9 ?) m* H- T
else
$ o! @+ ?% I, o2 E# o, h+ X! u printk(KERN_INFO "LED register sucessful!\n");
8 ]" t; Q( m+ Y" s2 W. u
9 {$ u; m7 X/ [# S _$ t return ret;
2 a" |7 e1 |2 x0 q5 L}
2 `4 n4 j: |0 T& ]1 _# S' R4 P0 G9 }4 |, q+ F0 K
static void __exit led_platform_exit(void)2 L9 z! g7 o) R; `
{0 `2 ]- L( T0 y+ R
platform_device_unregister(&da850_evm_tl_leds_device);, _2 _; }7 Z8 n% T
* S R3 N6 v8 f6 S; B% F# b: [
printk(KERN_INFO "LED unregister!\n");: v1 V7 Z; f3 x, ?: ^! G6 ]
}
5 H7 O2 G- Q3 B: k- a* }6 i$ x0 [3 z- z3 h6 X
module_init(led_platform_init);
3 D0 p$ {7 Z' Qmodule_exit(led_platform_exit);1 N. c- A7 ^9 N" F
* m1 }3 `7 r5 p+ T" \
MODULE_DESCRIPTION("Led platform driver");
4 R% \1 W) u" \ ]8 d6 hMODULE_AUTHOR("Tronlong");
d" ^ D' _) {$ n6 @MODULE_LICENSE("GPL"); ?8 D& d0 i7 a
' K/ Q' o8 t, U, l2 ?; a" q |
|