|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& P7 a3 c# N& |
#include <linux/init.h>7 u u- P0 o- f. }' O9 w! `
#include <linux/module.h>! ~5 }2 A: V% W: {8 e* q
#include <linux/kernel.h>7 s, O1 R& G9 y+ T: O
#include <linux/types.h>
3 r- O/ M' k% g9 @: T#include <linux/gpio.h>3 @" p: K) q* J; b& Q8 @: O
#include <linux/leds.h>
' Z: U3 X7 U- Y3 q% V" \- K7 D1 g#include <linux/platform_device.h>
- g+ ]) {- i, q! e6 g* A8 V9 d* X- ~
#include <asm/mach-types.h>
( d* v% }7 E6 C( s#include <asm/mach/arch.h>; ?1 |# f# R: y* d: H6 m7 O
#include <mach/da8xx.h>
; w/ R4 M s( H. Z; `8 p4 i5 w#include <mach/mux.h>) p1 b. ~( a: O% u v$ f
6 p+ o; J4 h! _$ p* y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 g" w5 k+ W- [/ f0 Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" _) v& }/ n8 c# I3 |
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% ]0 y7 X l; X! F8 [. L& v( [- L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ L9 s) g: l2 Y8 ]2 W; R
0 h6 W9 t9 X2 U, N* e! b/* assign the tl som board LED-GPIOs*// k9 S0 C; t9 n, B! s8 G
static const short da850_evm_tl_user_led_pins[] = {
4 K+ C) u' c# J" D0 y3 P /* These pins are definition at <mach/mux.h> file */
+ Z5 z1 F4 C3 M1 X DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( c" T5 C3 m/ K7 e4 C! x, l -10 b- l3 B) }- J& k
};
; f& y- L1 ^& F9 p
* G4 O. W* Z$ @7 A# Cstatic struct gpio_led da850_evm_tl_leds[] = {
8 W2 W( M" u+ C {8 L. ]9 Y1 T5 B6 J" F9 F
.active_low = 0,0 J* v3 f! ^. ~9 w. ~6 T o; o
.gpio = DA850_USER_LED0,+ W0 j" F* r3 U5 Z7 o
.name = "user_led0",
% v: Y9 J2 V6 t6 p( t( }9 Q .default_trigger = "default-on"," w7 ]# c9 L& l
},
+ C8 e# j% _0 R; p1 T9 ?, D {: x. b. e6 U( [# z. I8 f) O
.active_low = 0,, R3 z2 X1 ]8 G, F6 f
.gpio = DA850_USER_LED1, J& F# ^" V( f6 o2 j* I& } R' D! F; {
.name = "user_led1",
- Q( s" x' x6 C& o .default_trigger = "default-on",
: r* `& {& N7 f2 r. E8 n' e8 c0 S2 C },
. ^. }$ |# F$ r& b- X0 p {. g% u Y" p6 |! f" ~) q
.active_low = 0,! E' K7 Y* Z! g+ }& c- [$ b( V8 S
.gpio = DA850_USER_LED2,
9 j% J' g" X# [; L9 y; B .name = "user_led2",
3 l' A2 _( j* X. E5 U2 x .default_trigger = "default-on"," R3 j2 v3 B4 }( M
},! c0 L" h* I% Q& l
{
" s4 |+ @! c! X* f* t: c& G .active_low = 0,
( F/ @+ s7 V; K# B1 q .gpio = DA850_USER_LED3,
/ \4 _3 r2 C1 G5 m. R0 y1 O .name = "user_led3",) q8 D8 C. n" }+ Z" M% K6 K
.default_trigger = "default-on",
4 r, |; h' j, t$ q$ Z1 K% Y },
! W! B. o k5 p( C! h! v};
1 i* |' b) a: z1 j- }0 P2 z6 Y0 h" F" L3 u& W. N" R/ L0 I6 |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ ^7 C: X# R4 Y5 C2 t .leds = da850_evm_tl_leds," u6 i( ~6 e: y7 N$ p1 d' h' b& O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, {' v2 _+ j3 U; N};
: W3 q& A9 ?1 P# L. T" y5 a* S- h
static void led_dev_release(struct device *dev)
$ k% E4 V; D/ ^{1 Z2 w0 d; z, T7 u k0 e. U& F
};4 M, h, v; Z% Q$ V
) ~7 `4 O6 \. ?/ Rstatic struct platform_device da850_evm_tl_leds_device = {
$ r* s# ^' Z9 w .name = "leds-gpio",$ Q S' y9 O; G/ f+ O
.id = 1,
% {% p* Z- q" [: t .dev = {% y) m1 x% t. C( e% U" `# |
.platform_data = &da850_evm_tl_leds_pdata,2 Q: _ t0 ~8 w1 n$ ]/ i0 V: s C
.release = led_dev_release,8 x7 H" C& ^ E1 A5 `, M6 c% u9 l
}
% E8 I# a) q. t6 B};- o9 u1 N! y: U$ U- d L
% N' e; H, D5 ]9 M2 a5 Nstatic int __init led_platform_init(void)9 s* w" R3 j3 q: H0 r/ K5 ?
{+ t2 L5 a& l% v% v
int ret;% d! ~: k# E4 X+ e; N7 _# J
#if 0
/ X# j6 r/ w' M" \2 k1 Z9 T ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& ?4 K" q, H) t+ `: H$ ?) v
if (ret): x. W. @) J/ ?3 S- F" E
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 A# M- O7 U& d8 _" r9 o "%d\n", ret);: X4 k' t/ y( y- w% e1 X
#endif! W: P' ]0 `, C( T5 K% M/ l
ret = platform_device_register(&da850_evm_tl_leds_device);
% B' X2 ?2 `* ]( }# w6 ] if (ret)
* o& m4 i/ u) e pr_warning("Could not register som GPIO expander LEDS");
. p; m" K+ E4 I0 @6 P% f2 `" r% { else
+ M5 ?$ |! H7 L: o printk(KERN_INFO "LED register sucessful!\n");. O; `. h+ Z: _! O4 \' h; {) m
' u% n( t9 ], N! f( P3 q
return ret;
7 N4 M, M) D2 j9 Y4 s. T p# b% j}
( J# P' W# g+ _% P9 y0 u0 f* }: _& Y# O* H+ R/ l
static void __exit led_platform_exit(void)
- v+ _: R+ g/ U( t) w3 s4 N{
2 P9 f% C) V0 X. m2 F6 F platform_device_unregister(&da850_evm_tl_leds_device);8 H {5 L! J B1 O) }
9 @7 u$ J1 v* w$ l1 i9 b' Q
printk(KERN_INFO "LED unregister!\n"); e" x7 x; x* M7 g1 f& b
}
: b1 B6 s+ E/ p1 n0 W# h; c9 }9 ^/ a" i% q& D/ ^' R
module_init(led_platform_init);1 ?, n3 ^5 X# W' {
module_exit(led_platform_exit);6 A" s; K3 {4 v; R# B d
' i0 w) c+ r% r, W7 ~
MODULE_DESCRIPTION("Led platform driver");+ W; U! D [" x
MODULE_AUTHOR("Tronlong");4 u* P+ V3 k( R$ N& n% `& [
MODULE_LICENSE("GPL");
h4 |9 k2 {0 `& N& k
3 r5 n- l7 f T8 w1 t( C% d |
|