|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 S; ^6 x; [( \$ E* S5 N3 x G0 {5 ^
#include <linux/init.h>* E( G! y$ i3 u" J
#include <linux/module.h>0 W9 Y5 F. Q* w$ I: J# X) b# G8 k
#include <linux/kernel.h>
$ C8 B* K9 K% G4 Q9 Y( F#include <linux/types.h>
4 U# P( V U9 p! c! a#include <linux/gpio.h>1 m6 y/ U- L; w! v8 @( N4 Z
#include <linux/leds.h>
4 C) k7 J5 z5 X* o3 s- C#include <linux/platform_device.h>. w5 n0 d! Z4 j! n. Y; o
1 Y; H, O6 p, P. R#include <asm/mach-types.h>
$ \$ z+ f( J3 G; u+ f#include <asm/mach/arch.h>4 r9 k$ ~4 G9 @
#include <mach/da8xx.h>
7 z- e8 g _* I2 {$ H#include <mach/mux.h>
U) I) {8 g( ~8 {% \% I
. b7 z) D H' u/ S#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); ?+ M. z f* u" D' o. L0 A( Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 b; v% L4 r: D% d2 y; Y5 a" f9 Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 o4 S* H0 k( O+ b/ L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) r! N9 J4 R$ L$ \9 Z2 F+ {; V1 g
/* assign the tl som board LED-GPIOs*/
- Z# _3 F3 o! G: Qstatic const short da850_evm_tl_user_led_pins[] = {0 ]# v- k$ |3 P" Q% n5 S+ Z( K) V
/* These pins are definition at <mach/mux.h> file */4 q& S/ ?3 R! A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; K o/ |2 a0 h -11 j4 B4 A6 \; X( ~: b0 x) m N, l
};
: O3 A; z2 ?9 \% C! U n7 }+ A* R1 f/ [$ y/ z, ]6 f \
static struct gpio_led da850_evm_tl_leds[] = {
N) ~( X8 L o' F6 z2 I& S. p {
( v) ~9 q. h7 K0 Q% f .active_low = 0,/ G0 s, {' T* o8 W. T0 O9 I3 w
.gpio = DA850_USER_LED0,* B9 U5 Z* V5 S0 X: L( n4 v
.name = "user_led0",( N( D8 d$ d" O* y! Z
.default_trigger = "default-on",
' ]4 V& j4 U n4 ^; F9 p },
; ?- a7 a2 c: U- D) v* y* V6 X {
6 y0 R5 t# y) T; u4 W .active_low = 0,
; M2 d. e6 R" T! Q i .gpio = DA850_USER_LED1,
. |0 h6 q5 o6 i4 } .name = "user_led1",& n* y2 `, `; @& x& `- I
.default_trigger = "default-on",
8 g' _; F+ K j p5 v% x! e# j },
! y) s6 r, _3 E {
, x' i' r4 q4 y. ^8 B .active_low = 0,
0 ?+ z) U x% U6 [! X; c* y- _7 c .gpio = DA850_USER_LED2,& a: K8 j$ W- y+ b% w0 p! o1 i
.name = "user_led2",
% v7 j2 ~' Q: c7 H# S. m) C! ~ .default_trigger = "default-on",7 t# K) p% c- I( X
},0 g2 _, R; j8 m( F; v/ p
{3 F0 q: m, V- T6 M3 v4 a& n u8 B
.active_low = 0, o4 A: b& R" x/ K9 r' C
.gpio = DA850_USER_LED3,: N1 Z% ?6 x2 ^5 }7 O+ Z
.name = "user_led3",
% I; t3 N, H& z. l/ u9 E! b .default_trigger = "default-on",
7 b. G3 P! p. X) L q },/ S8 K- U! g* C& s `, K/ q4 }$ @
};
& x, @6 z% {$ V) `9 F; ^7 d; h0 I( k' Z: n
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 a& |/ M: P2 K8 k! L- U$ I2 l5 n( N5 N! E
.leds = da850_evm_tl_leds,% v7 |- p0 n/ U4 m+ H& l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ b% M( b: ]& Q4 S9 d; q% Z( M7 E
};
: Y s z1 x N+ ?: {" v4 f2 H8 l6 J
static void led_dev_release(struct device *dev)9 w$ s! }% y% R+ y7 L0 U0 }' d# C3 b
{. r+ \3 T- \: d L
};
; M: a& ?2 f9 m% w O" x5 ?
) G" E1 b) a2 \/ I" Ostatic struct platform_device da850_evm_tl_leds_device = {# U0 t( b# K M: y
.name = "leds-gpio",
; x- Z4 ^8 R: ?' W6 ?9 S# H .id = 1," J4 S; i. s- o( e# b, v
.dev = {
7 h9 S. m& D) L, a/ V- J% A: T- K .platform_data = &da850_evm_tl_leds_pdata, ?+ }# y/ d9 l! r- J) E& n
.release = led_dev_release,; M& L2 a9 m3 i$ U
}# B6 u+ w, j4 [! G+ U O/ P9 ^) X/ R6 }
};9 e, J) O7 c; `# b& ^& `" P N
4 Q' F) B9 I9 P$ y' ? h2 C. estatic int __init led_platform_init(void)
8 u+ T- @( q. r& k6 v) a{
3 C- s" h: P Q w: ? int ret;! G& y0 H `. C
#if 0
j7 {% y0 j% l ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 \0 Y5 I$ F2 @! A3 r8 w. y
if (ret)0 s; r& N. m, q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 z! r# y0 } N& d/ y# F
"%d\n", ret);1 \( `8 Q5 v$ ?1 h
#endif6 {+ u1 O9 Q3 ~) ^! y' C# \ D; \. o
ret = platform_device_register(&da850_evm_tl_leds_device);4 Q% H0 h' E% P0 w# R% ?: q1 _
if (ret)
, F5 y; k. s1 l8 R2 l a# p pr_warning("Could not register som GPIO expander LEDS");
3 H/ y, r* ~. e3 ]& b else
4 U4 R) j8 I$ q! p printk(KERN_INFO "LED register sucessful!\n");9 C. T' W' b7 h# U6 Z, _# @
( U6 R6 \$ S# x5 C5 c return ret;
1 {4 P* n0 X: C' ?, D9 T9 v% H1 [}
* V; a9 q/ S+ Q8 A6 T0 v
2 g: }" v! \9 d2 e5 S) F3 Rstatic void __exit led_platform_exit(void)
6 \' P+ b2 m B# l' d{8 \& E7 H6 e6 Q% a
platform_device_unregister(&da850_evm_tl_leds_device);! q# b- n* Z6 t* T2 v5 j$ m# D+ e
) a8 a1 P% e: w* O printk(KERN_INFO "LED unregister!\n");
: V/ v. c" T+ X5 N* D; ^7 F L}; k2 s! d6 C6 s8 u
* {' X5 C& `5 O @* T) amodule_init(led_platform_init);
7 o0 L! {: u' L9 L- b0 o2 nmodule_exit(led_platform_exit);2 o( e& K' ^) Y; w; ~+ m# X
) s3 D6 }8 e0 a5 r! S
MODULE_DESCRIPTION("Led platform driver");! h. t5 d( z9 {' j: A- F
MODULE_AUTHOR("Tronlong");
, \, F9 H; a; L* J4 Q* ]9 XMODULE_LICENSE("GPL");
- V: {8 u3 s6 l9 K0 ~
( y7 I9 i$ | K* _: {. j; ?( D |
|