|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 d/ Y) |) S& T0 V. \#include <linux/init.h>
- }* A4 b# _( y#include <linux/module.h>& Z2 f$ b, w0 p9 S6 t
#include <linux/kernel.h>
+ O9 C# r0 s5 Q8 l: S# M1 N% o#include <linux/types.h>! q. a0 J+ H- }" e2 o9 M: r
#include <linux/gpio.h>1 y9 o8 F* ^9 O3 }* c) i
#include <linux/leds.h>$ e0 }" u3 C7 \7 A0 n7 G+ y
#include <linux/platform_device.h>$ c0 X" c$ f) X `
/ \& D* x" e' T1 c, ]4 B; a5 k
#include <asm/mach-types.h>- u2 `7 a" h* |( I* |" [8 k
#include <asm/mach/arch.h>. B% P1 a; B% K! F8 Z) ^
#include <mach/da8xx.h>
( G: H1 o! @9 K: s5 c) h/ `" U#include <mach/mux.h>
$ Q1 G, f3 w1 i9 b K" n1 N( |0 I) ] u8 k9 [# F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) B$ G m" L" h- I, D( N: T! [- Q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: P1 n3 H9 y& ^, N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( B- x7 l/ H, ?9 U, Z1 a) y" J9 I6 S% C
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" A7 c) Z' w0 y2 G. i0 J. [
! S; Q9 @$ l0 K/* assign the tl som board LED-GPIOs*/( t+ c' G0 j+ O5 a" F( q
static const short da850_evm_tl_user_led_pins[] = {
( H5 @" Z b: v( S0 K, M5 W8 X" O /* These pins are definition at <mach/mux.h> file */
' k4 {1 @" ]) A' Q R0 U1 C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 ^. d* V0 B# a3 D, X0 @1 g -1
: ?- r) P) n& g};: B' p5 q+ G/ K1 e4 ^
/ b) C$ H2 C3 I; F( ostatic struct gpio_led da850_evm_tl_leds[] = {
t) g4 }# A% z+ U$ b! S" V% O {
5 ?0 u# i% F+ E0 m# I$ N .active_low = 0,
! G7 @' G) H% I; j! ~: R .gpio = DA850_USER_LED0,. ]" {: S( r4 S) b" t) d3 }1 n
.name = "user_led0",
/ G5 |. n% f& o: f6 J; ?2 { .default_trigger = "default-on",, M5 h4 H7 q1 j
},$ w3 {1 y: I1 ~" s) c0 T* ]! ?8 @7 g2 c9 v
{
( {' d& \0 U* Y" c' T. ^ .active_low = 0,
% e7 l' N) L- x+ @' x: x .gpio = DA850_USER_LED1,
$ `$ z$ i5 L4 Q" G .name = "user_led1",
+ f: Y$ v$ p8 Y C* u2 D' _ .default_trigger = "default-on",
4 Y* p4 u2 m% Z% e" O, {) y! s },4 ?9 `* x* ]' j. p9 Q9 G8 E! ^) p4 ~. B( {
{, J/ H. r- \8 W5 B+ H
.active_low = 0,
6 [. E- |2 T/ z .gpio = DA850_USER_LED2,! W- W. R+ D/ e; J2 `% s" z
.name = "user_led2",! H" W' l/ o3 H8 I8 R8 P
.default_trigger = "default-on",0 X1 `6 n2 p0 C5 M' C" c
},
. z" H) D7 D8 j0 I, f8 S& Z {
0 {# K2 k9 s, G: M0 a" {: Y$ P2 O .active_low = 0,
) Q3 }0 X" A$ o+ K- `: J* H8 w .gpio = DA850_USER_LED3,
, J) v# C. @4 H/ L% U( H4 W .name = "user_led3",0 D4 T1 M4 n8 B5 x4 b
.default_trigger = "default-on",7 D7 }" h. i( x' _6 x6 s0 M8 H
},: ~6 Z6 Q# U6 j" b; s
};
- [5 i% p% C9 x4 u+ y* o
: ]' D! H. S5 {, z' ]. b, kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 w6 v7 i* u+ Z: F" [
.leds = da850_evm_tl_leds,
3 q, D1 |3 @) j2 G ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 e' t0 n3 N$ Y; t};
" D" n) O9 C, x/ t/ W# N* T, |; {% D* m! O* c- V
static void led_dev_release(struct device *dev)9 Z, p) U7 a8 b
{; S- |/ E* @5 G4 `0 j
};1 G$ B: A6 ?6 C2 G" }: d) W
5 Q# k, ~' v8 u4 l
static struct platform_device da850_evm_tl_leds_device = {
# C) Y8 H# T" ? .name = "leds-gpio",. g3 l5 w" x( n. `$ D$ m
.id = 1,
s" J5 h3 `8 V# x .dev = {
0 ]" \7 y6 m* S" j .platform_data = &da850_evm_tl_leds_pdata,
$ P" B6 U, b6 v. Y& V .release = led_dev_release,% K+ {2 t4 a- l* c6 ], T& D3 T% d
}, C5 w2 l% }: y
};5 s' |5 `' j$ {: U
6 ~2 k \$ ~/ S$ J9 O+ G3 N
static int __init led_platform_init(void)
; v/ f9 ?- F# B6 S. n. G& P{
+ J3 P m, C: c# B8 j int ret;
+ w: ?0 G$ R& S t( Z5 X+ x% e8 \#if 0
; l; Z+ i3 a/ w: `, |& f ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( k4 d5 h ~% e if (ret)
9 z$ M7 ^1 y( Q" k+ D, [ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 [( Z$ S( `% ?
"%d\n", ret);
9 I; R1 s' m1 D# L#endif
; |; b' l4 p* D" k5 I ret = platform_device_register(&da850_evm_tl_leds_device);+ {& c, J% n w" H+ Q' J0 P
if (ret)
: H' q* F2 L8 t% M6 A pr_warning("Could not register som GPIO expander LEDS");3 k6 b) H# i/ d
else5 e# d, }/ [( S$ ?9 ?: L/ c
printk(KERN_INFO "LED register sucessful!\n");
+ p" `9 p+ c$ b7 {! `: E) G- ~0 s5 m. I5 t
return ret;
9 d0 M0 C/ R1 ]# M: N/ r}
5 l+ M% b2 L; T9 A0 F$ l
# \5 @1 ~7 j; p; E& \static void __exit led_platform_exit(void)2 a9 J% V6 p# d8 q' D! N1 Z Z& F9 b$ ~
{* v$ U; V- e; J- P
platform_device_unregister(&da850_evm_tl_leds_device);
4 _$ V% q1 O2 g5 D1 X4 ~# m3 b6 O7 z" T6 P
printk(KERN_INFO "LED unregister!\n");/ j; }; u# Y# ^' Y0 E) w1 Y; W
}& a3 }9 x4 L5 ?5 Z6 Z( P; Z4 y
2 C" W0 x( r' I; J( T
module_init(led_platform_init);$ N S2 y9 g: h, {
module_exit(led_platform_exit);2 R' y* M8 [; u# C
& L7 w c G2 V" k/ _: K2 Z3 J9 aMODULE_DESCRIPTION("Led platform driver");
( G+ l3 M: }, o5 c* u1 v. ]MODULE_AUTHOR("Tronlong");
/ G( d6 r7 C& E L; Y3 d5 k# oMODULE_LICENSE("GPL");2 Q; h* j( b) e; o2 B' ?" u/ p
6 _" Y, q: T7 M
|
|