|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ d! C5 @ @: Z: s @3 I4 q- C) M; {
#include <linux/init.h>; a; q o* V! ^ o
#include <linux/module.h>' M, u) N1 r9 x% m9 s0 Q
#include <linux/kernel.h>- V! e, q7 ~) t0 D: C% U
#include <linux/types.h>
/ |8 X, X2 m+ k# Q, q4 g( v7 t#include <linux/gpio.h>
, c3 H$ t& g. Y* y- V& \#include <linux/leds.h>
( V2 s/ T/ s. k* \* B9 d5 T3 d#include <linux/platform_device.h>
/ ?( E; R# h4 y$ C$ H+ b' F. w
" y% c7 e5 m& w3 F+ T#include <asm/mach-types.h>! O1 n- v0 R3 A8 V3 R9 p& u
#include <asm/mach/arch.h>
. C) K2 F4 g5 C2 ]) L#include <mach/da8xx.h>+ L% t, g, [7 `! V% I% V+ d
#include <mach/mux.h>+ m9 W6 @% Q, n6 R9 l! |
$ N5 y! f7 O' C7 t( G#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) F+ ~( J5 q* i
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) n1 f1 S- q9 ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 `! ^. m3 Y( }$ Z8 ?: P( I* P1 B$ F
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 m4 `$ Q0 O5 V7 c2 S: d" H2 l# n5 c% ~( k. ~/ @
/* assign the tl som board LED-GPIOs*/
. g# |0 w& h, z; W& f' vstatic const short da850_evm_tl_user_led_pins[] = {
8 K# W7 v/ B# j% H* X8 [% j9 Z" V /* These pins are definition at <mach/mux.h> file */; m3 g! d+ P, ^; N
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; A, ~6 Q6 b3 C, f; S3 ` -1
* j3 O n" N7 G2 L+ {8 U7 F};
v7 p& w; V; K6 U2 r$ q1 S6 s5 P' v" k _. x5 q$ H/ C0 x
static struct gpio_led da850_evm_tl_leds[] = {
! Y2 U# h6 b0 J1 ^/ L; U4 _ {
2 M; m, W1 V0 w; k+ j .active_low = 0," d" N) x9 Z. G: J$ o' H8 W
.gpio = DA850_USER_LED0,
5 T$ f/ _9 J+ v' J3 @4 ~; N$ @- I .name = "user_led0",2 B, U' j8 c5 l
.default_trigger = "default-on",# M' m2 g* ?( Q
},; d2 m" f/ g3 R& B" Q ?# b
{
; p* c: C8 ^+ h6 x- |3 K .active_low = 0,
7 w; b7 L# ~- y) [5 S .gpio = DA850_USER_LED1,
4 R: ^. W; T1 i4 [. K! h .name = "user_led1",4 Q+ O9 @9 ]- q: J f
.default_trigger = "default-on",6 @4 I7 o) @/ V- n0 z
},
h4 U. q# \+ D* n, n: \ {
: a9 [0 }+ D+ W) E+ @ .active_low = 0,
; c2 U) e% m' ]( c, a \' _ m .gpio = DA850_USER_LED2,
& O* U6 Z: M7 C! t" {- Z ^ .name = "user_led2",5 y7 Z; ^' c. H+ _) \# s. h
.default_trigger = "default-on",
6 Q# M( u1 M* C; ^3 C3 g6 _ },
) o- ]& i8 I# u! E; M( ^# I {
, B+ S: f6 s' r U .active_low = 0,
1 h- I5 K1 y2 V- o- X .gpio = DA850_USER_LED3,
- t' S4 s/ g, a5 `; }/ } .name = "user_led3",) }4 W% z. J7 W- g5 y `
.default_trigger = "default-on",& E4 I+ u" M9 u2 Z" l3 J
},
) \+ `# q8 ?5 E5 ~& d};
- G' A9 e2 k. M& M% A; q' E3 x2 V: A& ` D- B d: R9 i: m% O3 c) R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; Y, b5 u" W& L
.leds = da850_evm_tl_leds,
1 e9 I" a3 ~! q! ~4 u% ^! V6 p .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' v3 v' ~3 u! {. }8 l};
5 [6 ?, @3 T$ y/ I3 A w
0 R/ _5 g: a& H( p) v) N9 A8 fstatic void led_dev_release(struct device *dev)
& k- |" |* t0 O8 P{
0 @, C! ^$ C0 ~, F8 @7 `};
7 j4 ?2 C; D$ @: [" _3 [; ^8 {, @1 U K5 T, A% ?0 S. | v
static struct platform_device da850_evm_tl_leds_device = {0 f7 c/ p8 j' m
.name = "leds-gpio",. e+ b" H2 v3 p+ r% l
.id = 1,
4 H7 N5 D1 x5 c0 q .dev = {
2 m2 H& z: L0 x) p .platform_data = &da850_evm_tl_leds_pdata,( z9 ?: X% p$ H. X' _
.release = led_dev_release,& ]3 K8 g z& f8 m, O5 H
}
& F: m. E! d0 e; z1 N A1 Q# ~};- E2 u7 d* g* ?
$ O. T# W/ |! [3 z: m* C! Lstatic int __init led_platform_init(void): o: c( {; V6 I0 L" {" p! k
{% |( n# y' u, @, {, t$ Z( x; P
int ret;7 |, [3 K( U! S/ \( Q
#if 0# r6 D8 p2 j1 D& p9 y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, V; G9 ?) s) B! T4 y
if (ret)
9 P% ?( H$ r7 P4 ?2 w1 U pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) y7 w3 h9 h7 W "%d\n", ret);
" ^5 f! I5 ?4 R, W# j#endif
9 i( R) B- l" U1 t: g; w9 f: { ret = platform_device_register(&da850_evm_tl_leds_device);
% c$ t7 e; p" D if (ret)3 u: o' A. J5 B f! {3 ]1 P
pr_warning("Could not register som GPIO expander LEDS");. Z$ w6 T7 [1 k
else8 Y6 [5 Z5 h |
printk(KERN_INFO "LED register sucessful!\n");. m9 E: _: @1 H) i0 A1 i- e2 C! o
7 r9 ?8 h; u$ V) s return ret;9 h r) I: V3 P
}
* [& Q6 x' `& l9 B
* ]" k( o U' m8 B! n. r6 \static void __exit led_platform_exit(void)
* e/ h# m- l% W$ C; f{
t# c8 i y$ o3 f7 k+ P5 ^) k' t platform_device_unregister(&da850_evm_tl_leds_device);
* s& T* T$ i7 R5 x, [+ T7 v2 w( i3 v6 q
printk(KERN_INFO "LED unregister!\n");+ R6 A: M. Y: G& s- k. i, o
}
/ n' f* l1 }) B' S' o, Q: P9 u& v9 V( h3 V, W" K
module_init(led_platform_init);8 m, y* A# k( J# e' u
module_exit(led_platform_exit);3 f1 E' F7 d- l2 f# t
9 `8 d+ O& }( G
MODULE_DESCRIPTION("Led platform driver");
$ e* ]* w' c7 Y, D! R. a. wMODULE_AUTHOR("Tronlong");
" t9 P% h8 e) Q" x+ k0 \& rMODULE_LICENSE("GPL");
A7 w0 `# t7 |3 N) i6 U* D6 i0 A5 `( `; ?2 Q) b4 p r
|
|