|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; x; [2 Q) X+ T- Q2 e9 B( a#include <linux/init.h>6 o. L5 ^9 P: f* b' f( P% ~
#include <linux/module.h>
" O- k; k3 U( O, q: Z6 c#include <linux/kernel.h>! e' S, m" ~: f, Y8 C. \
#include <linux/types.h>
8 U- U2 a8 z( s) N8 Y# N# y2 B" n, T#include <linux/gpio.h># k$ o# E" k! S8 [. t! g
#include <linux/leds.h>
) K* [7 F7 H! J `2 I' [7 t+ _& r#include <linux/platform_device.h>
$ k* w' W! r5 F& c% q
. Y$ C7 ]. c' V0 f#include <asm/mach-types.h>6 R8 C7 q) q& N8 |
#include <asm/mach/arch.h>$ P5 G6 D# D4 {; t
#include <mach/da8xx.h>8 }/ D' y' s" M2 R0 }1 M. ]
#include <mach/mux.h>+ u- b1 y5 h' ~0 U
0 Y( v: ^2 v1 v/ |5 r8 `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): N4 x4 E2 \1 P9 s4 v# q8 Z1 d% H% c3 U
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! @3 y7 T& ]0 h' H: z7 d- ^#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ t5 c" L {9 v8 W, K. }3 H
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 c* ?$ J; B2 o2 X$ ~& [, X, E; } c! N
/* assign the tl som board LED-GPIOs*/
' `! q" Y! S; P. G( Wstatic const short da850_evm_tl_user_led_pins[] = {8 ?# @8 r5 `. Y/ J5 q5 v) ^2 I
/* These pins are definition at <mach/mux.h> file */% f# L' a2 Y! n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ j3 R4 y' P" h* _
-1- q, c% {3 P! [4 h
};
6 D$ Q$ ]; E, z3 ]3 ~+ |& N' Q4 D6 j8 ~# q7 S; `" C5 T
static struct gpio_led da850_evm_tl_leds[] = {# E. n# y; z; D. M) ?
{' E. b- h. O- Z) F/ c0 i
.active_low = 0,, j( t% L: w' H4 r' M
.gpio = DA850_USER_LED0," ^% E, Q$ Y- t
.name = "user_led0",; k) o# C' e, y9 w
.default_trigger = "default-on",
6 s s8 O0 } G },
5 G+ Q+ B6 i9 o/ d5 m {
* G) f/ M2 f9 A% |. x .active_low = 0,) n# Y+ O7 s$ H. k( |2 o5 A" n
.gpio = DA850_USER_LED1,
/ @* \5 T6 \0 Y# ~3 ^+ N .name = "user_led1",
1 {9 g5 O9 I2 h8 U$ o .default_trigger = "default-on",
( S) t- L+ h( Z/ D& F },
( x% ~) }% `: T3 q# C {
8 i. U) v* M) `# {0 D: h .active_low = 0,
6 y$ g& n* Q9 f+ R- c .gpio = DA850_USER_LED2,
( n2 o- ?# p. p) U/ V( U) w# L5 e .name = "user_led2",
( Q8 t* ~( P" w6 k) ~& B- } .default_trigger = "default-on",. ~; N$ r' { I. ^
},9 @4 C# w9 {4 X6 X" a
{. i3 f" R+ J8 ]& p* \4 \
.active_low = 0,
- G4 j- Q4 x% h) I .gpio = DA850_USER_LED3,
1 @- h' y+ F9 o# a1 U; j6 }) q .name = "user_led3",
' W' e- E s: n .default_trigger = "default-on",
l; G! N) e) a1 x9 M- X },2 X6 A0 X9 a/ d$ P
};
- s8 k& C1 @* w# R
" a: t7 ~4 ]* [; d7 d1 ~1 K# o+ |static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- }! z9 v( t8 o& d: c
.leds = da850_evm_tl_leds,- G& s0 }/ X6 T& {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- o K) D% e: p5 g1 @9 | x8 |1 C; P
};
3 f1 F. S# g0 r2 U9 V% N" C/ I& {6 P8 p* m0 F' h" B
static void led_dev_release(struct device *dev)1 f9 l$ i, B0 L8 N* v. P
{5 V& y8 ]# p5 R9 F* M- j3 l
};8 U5 T' z3 B, A. K1 `
}4 D- z& d& U# w8 D; C
static struct platform_device da850_evm_tl_leds_device = {* F3 v0 d& {1 B0 y! [$ g0 P% \
.name = "leds-gpio",$ i" ?# h# ]6 J; b
.id = 1,
7 ~3 j. V% G! B. h: y* a. ? .dev = {0 F7 u( L& R1 k
.platform_data = &da850_evm_tl_leds_pdata,
; E( S5 j. M8 j3 q .release = led_dev_release,7 u& q' m, N* {9 W. X
}
3 D/ e) ~+ @* U0 q2 F8 a; {* u};$ M/ Q! n5 D/ L
9 I- q, c8 y- G& J g
static int __init led_platform_init(void)+ O% {; D1 c: L2 N
{; K- t4 J3 \8 v% z
int ret;) o/ T0 n' g: c5 H! c$ h
#if 0
$ z6 T9 U! L( d( `. g ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 d7 F& G$ C; D. C p! K1 I T7 u* L if (ret)
/ |& O& q! m6 A- }4 f% Q# j& Y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 g$ A1 o) P% d "%d\n", ret);
: Y( r0 S+ L* N, [( D* K#endif0 M _& t3 Q1 N- d6 H
ret = platform_device_register(&da850_evm_tl_leds_device);( @9 R' ~: a3 Y+ M2 w; ?
if (ret)0 E8 c2 q3 }( A
pr_warning("Could not register som GPIO expander LEDS");& N) j1 u+ u" c+ L l* N
else' m" L1 Q* ?. f$ T/ q; j2 ^$ k
printk(KERN_INFO "LED register sucessful!\n");
* ?* z, Y: I) R$ ?; A( o8 Y L3 i* ]" Q7 I/ Q. x- v' e7 h3 z
return ret;. T! {" |, j, k& X" C9 Z
}
& a0 o9 b2 P* Q$ F" d& X0 x' Y; `, r) h! K0 u
static void __exit led_platform_exit(void)* X2 L+ e, Q+ t& T* n8 Y4 x. v
{
4 N4 W% L9 E b, ?: D, i platform_device_unregister(&da850_evm_tl_leds_device);
+ E) c5 G1 Z& v3 ?3 o) R5 F T0 `( h3 D9 j5 J3 C
printk(KERN_INFO "LED unregister!\n");
+ j2 O! e5 \4 m& |& o: |: u: U}
$ \% f4 e, V' a% S9 c" ?+ D9 u8 A
" x* C# a: e3 j! \' |+ Gmodule_init(led_platform_init);
4 k4 P5 |5 y: s/ A/ y0 Amodule_exit(led_platform_exit);( C0 m k4 b4 q# y- K- ]1 H. ^
9 W2 u. u& E) k4 V5 R- ~' Y
MODULE_DESCRIPTION("Led platform driver");
' I( q9 C. N, `' `MODULE_AUTHOR("Tronlong");
e, l( p; O, r/ oMODULE_LICENSE("GPL");+ Z2 ]4 T' S5 Q. v6 V, y4 d9 ]
/ \* k3 k4 A$ J& z
|
|