|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 a4 r9 B. n( y' A/ K! M#include <linux/init.h>
) G+ s% v% i& `#include <linux/module.h>8 y8 u, N! O& E* }5 N* u, `
#include <linux/kernel.h>
1 d6 Y5 \& ^1 X/ |: |8 i3 T2 @#include <linux/types.h>
4 V# }' K6 ]- V" I0 K- `#include <linux/gpio.h>5 t& H. W- F" M8 Z
#include <linux/leds.h>5 l3 @7 J2 M9 U
#include <linux/platform_device.h>( G) q' y0 }- s b
) Z6 h4 U G' q4 z H4 E#include <asm/mach-types.h>
) w5 b6 o' D: j#include <asm/mach/arch.h>- v! q* P2 I8 C) k
#include <mach/da8xx.h>- X5 H' t d# C/ O+ @5 X
#include <mach/mux.h>
) W2 R2 u; T( |, ?: | A( Z6 D; C1 ^2 V$ x, Y( `% _( q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' S7 o+ u4 J' f$ J% I3 B* N, F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* I$ o* L Q6 P- h3 ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 D& f; \, B) e+ P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" f7 O$ F' |2 X1 V: W: E
. C. W$ C* p) {& |9 C7 \2 I# e3 }
/* assign the tl som board LED-GPIOs*/9 y/ v4 y1 E5 a% t. w0 x/ _8 n$ O" |
static const short da850_evm_tl_user_led_pins[] = {8 S; |; Z" O( L5 g
/* These pins are definition at <mach/mux.h> file */
7 q1 M. D) `' x& i# a. V, i DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% c9 ]0 X* q# Z f+ |2 | -1
& J9 q) W- Z$ B* O: g/ y};; `4 Q, @, z( s! v. g
: d7 L6 _+ b4 D
static struct gpio_led da850_evm_tl_leds[] = {3 P# s+ T+ E, X- ~
{
$ l+ }, c- | W. D' h; a .active_low = 0,( _- a. [0 r; |& h
.gpio = DA850_USER_LED0,
* y9 J4 }; g& w" ]6 z5 \8 b$ E, b .name = "user_led0",
3 I) B" s, s. ?/ t0 D) i# K .default_trigger = "default-on",' `* v8 f1 [$ p3 n
},
+ a4 O' j |) h! h2 N {: x7 m z% R; i$ b0 [9 T
.active_low = 0,
; R+ ~ `, u8 Q5 d .gpio = DA850_USER_LED1,
8 K6 x3 {% N* d# n1 z .name = "user_led1",
. ]3 q! p* e8 p9 [! [; b .default_trigger = "default-on",
3 Z! K$ W- W/ d; d },8 G7 }. }, ~ \) n, ^
{
( e7 \* U4 W7 F' A .active_low = 0,
5 X; i% Z( |% u) n# J5 K .gpio = DA850_USER_LED2,
; D0 ^/ F% ?' N& O8 ~) x! j9 |* E .name = "user_led2",
W8 U! V9 {: A; z .default_trigger = "default-on",
* Y$ R& y- z' k5 u }, _2 N8 e' u7 I. b
{% F* k; [3 q$ E2 f
.active_low = 0,
; G* _0 z8 @5 U2 v .gpio = DA850_USER_LED3,; o0 }) E2 Q ?& o. Q1 r5 u
.name = "user_led3",
' p: Z7 s; g& P5 @9 V .default_trigger = "default-on",* A% X; X+ J& f
},
4 q$ B/ U4 w5 k1 Z- G) u! B};% m* _; i) |6 f. G5 @: j- W
( a1 M2 f" E7 Y! k4 l6 P
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) x6 K J& {6 L ^, K/ c
.leds = da850_evm_tl_leds,: @, V& i! Y$ g9 Z/ ]- B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 V& A) M( S; ]- b};
8 F: K X3 ]: r) Y0 ^1 V/ }" [7 Z4 p1 r- U/ u) M- j& }% l' q4 f
static void led_dev_release(struct device *dev)
# ?4 }+ u0 _( P) L$ ]8 @{
" y4 Q& k1 Q/ Y3 ]! l0 c};7 Q* H9 N& M* m6 X! I
4 m5 w# z- g l, v2 S* [1 cstatic struct platform_device da850_evm_tl_leds_device = {
1 _% v7 k1 J* p* J) g+ r( @ .name = "leds-gpio",$ ~! |/ ]' g' h5 b# w
.id = 1,
6 P" ?" d, X; D: ~/ s- z% Q .dev = {
1 Q& O" f6 U; e: C6 `: | .platform_data = &da850_evm_tl_leds_pdata,! D5 \/ i( [# \1 l6 I3 f
.release = led_dev_release,; X5 g* z, d0 W3 \9 ?8 |
}
R- }/ C1 x% P};2 i) j7 \1 O3 F& Q" o/ D r7 s1 d
7 x& p& h, w; f- p& [/ E; tstatic int __init led_platform_init(void): h* m1 U5 L5 ?' n& W) E. R
{
. d- ]6 b4 R& \ int ret;
+ G' S/ Q; U& ^. B9 }2 S#if 0
' i7 ?$ b0 L9 m7 ?& P9 p ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 p2 M/ k# w* D& R4 @
if (ret)
/ |7 ^$ q4 G4 u' R1 S% k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 o0 J1 }9 a! g7 `
"%d\n", ret);+ s5 C7 W4 ~ Z0 N" i3 e. N" s
#endif
: z4 C% J1 _5 N% u( t, g) C7 V t; x ret = platform_device_register(&da850_evm_tl_leds_device);4 A# O, p' }% k4 N6 L& ^: r9 x
if (ret)
0 Y8 C4 ]9 A; x9 O; X* O pr_warning("Could not register som GPIO expander LEDS");
6 W/ W/ C3 S4 T1 [- l/ k+ {3 C else2 Z9 D5 `( j% O
printk(KERN_INFO "LED register sucessful!\n");
+ T) Y* @4 v; `5 G& |: [8 K4 R: d3 F \+ b) }& \: p+ S1 v5 F) k6 X
return ret;
) Z) e8 m+ P! V9 R}# Z n* R9 g) @. j- q. D
+ g. E$ {/ o3 }1 }( H
static void __exit led_platform_exit(void)" j. P8 P) ] l. n- i5 s4 |
{
5 W5 y6 Y" u/ o& f) _ platform_device_unregister(&da850_evm_tl_leds_device);+ ~; a. S9 c. J. T/ L6 h& C
# L4 f7 k- ?" L6 H7 ^# Y
printk(KERN_INFO "LED unregister!\n");5 ]" Y, i, a' S4 }7 Y9 W
}
& x7 g2 x7 y/ k& }, L
2 O7 Y% E( Z8 Y( }module_init(led_platform_init);! S! y# F) @# U4 f& X
module_exit(led_platform_exit);
0 b# @8 |& ?9 W( d1 x9 {8 t, c9 A8 k3 H
MODULE_DESCRIPTION("Led platform driver");
* F( H( ]" U9 N6 x! {MODULE_AUTHOR("Tronlong");0 d8 V7 Y1 i9 y5 G" n% ~+ l
MODULE_LICENSE("GPL");5 ? U: V+ o- }5 ?) N
N8 C$ m8 c5 B2 [9 [
|
|