|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( J! v$ F, y7 R
#include <linux/init.h>; o+ R& [8 i5 |6 H: v
#include <linux/module.h>
9 n. L L- {) N9 v#include <linux/kernel.h>' y% F) _" R" ]
#include <linux/types.h>
5 \+ z* Y/ Q, y C/ w#include <linux/gpio.h>
3 u* x3 L5 {0 H# V4 V1 s1 `& N#include <linux/leds.h>. E K, g3 C5 z9 J
#include <linux/platform_device.h>2 P! X) b3 O% V1 q6 m
/ H- w& S# |; K+ [6 z3 K8 p#include <asm/mach-types.h>
2 F2 {7 c8 _2 H! k3 }' [4 O#include <asm/mach/arch.h>! L0 b) E! s; K/ G* O
#include <mach/da8xx.h>
7 d1 U: a9 Z: }/ Z#include <mach/mux.h>
; }/ o5 G) F, H7 }8 P- ]* o/ O
; k! }; l: _' m$ U/ K8 B3 c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' \' x6 i( N: ^2 f1 v6 a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, f, ~- L+ K) [! O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& W- k" N: f" B. A9 ]( H+ I#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ a% a: o' i8 Z" P# h& f7 ^1 c& ]$ k# |# _) t+ P7 T
/* assign the tl som board LED-GPIOs*/! a) c8 D! H6 t$ p$ T' T9 U
static const short da850_evm_tl_user_led_pins[] = {+ I. W4 j I" r& L$ x
/* These pins are definition at <mach/mux.h> file */
1 \" y! Y8 ~6 {9 W- S. V DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 A: [3 n& O- `$ p
-1
1 M) B: Z( |+ w! Z};
$ H- j% ^' A; g1 u8 Y# k$ y9 o; M2 J1 ]. ~) w( a
static struct gpio_led da850_evm_tl_leds[] = {8 P x3 _3 X$ z8 A; c* J7 t
{
; A3 r; S. A$ l .active_low = 0,: }0 {4 e: j8 a' p. E0 ~) H
.gpio = DA850_USER_LED0,- J T% [2 }; D) t1 Y" l
.name = "user_led0",
6 o0 l5 b3 j! m% s# g' I, Z; q .default_trigger = "default-on",
4 h9 q, i4 b; z' K6 f$ ^ },- ~, v; z" q2 R4 O
{4 V0 C1 Z( U; p0 N0 _; z
.active_low = 0,
" Z) n ^9 F; V4 k/ q8 q. m, U$ J6 I6 F8 d .gpio = DA850_USER_LED1,
% W" U. A# d$ R .name = "user_led1",) [" U! Q: p4 n1 c$ L5 P4 C
.default_trigger = "default-on",7 y/ Y6 g8 S0 r9 W: v4 `2 h
},* h* ]% r, l* X* G
{0 w+ S( s! T* Q
.active_low = 0,2 P1 z. f$ }: T6 m
.gpio = DA850_USER_LED2,
, O: [6 \$ E$ C4 |; L$ p P .name = "user_led2",4 k' L. ]& J5 j, D$ K2 g
.default_trigger = "default-on",& P H9 A" u1 Z# s) s
},
, G3 F1 ^: _+ w {
3 y* `! Y& H3 N1 d8 B g) a .active_low = 0,
$ b: z! @; m; c* W! K .gpio = DA850_USER_LED3,
, J4 R* O% u( E8 W- }/ r3 G5 W .name = "user_led3",9 o; G& v- y% q
.default_trigger = "default-on",
" `$ v" |0 o" K, m% G+ M0 \ },
: |( W0 @9 V2 m2 S- M};
; e6 D# Y) w8 M2 J. t7 i# v6 R/ c" m9 C& J' q" L& a, I5 E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" r* Y2 ?# f! H
.leds = da850_evm_tl_leds,; N$ l3 p3 u3 Y' _! q2 z# l: I# b
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),: q& Y" b* j H" ]+ Q
};
0 \. ^; t( G1 k0 \0 U9 u/ Z+ @5 j( P$ o. W6 l
static void led_dev_release(struct device *dev)
7 @7 F- |$ `' w! b5 T% I4 I{* V( r! w; t/ t0 E
};
9 ]5 q+ O; E: x) W
8 O( E1 [) q P7 Z1 `static struct platform_device da850_evm_tl_leds_device = {4 `1 z; }( z, m9 m' o v4 n5 @( z
.name = "leds-gpio",
: u% M/ V& y: d, K1 u: o .id = 1,
& N5 C/ z% U5 b- r .dev = {: h/ f3 c7 v- g) M) k+ g
.platform_data = &da850_evm_tl_leds_pdata,
1 C# i0 t4 f6 B, L: l .release = led_dev_release,, ]9 h" d7 ~7 y0 G; D9 u! l3 p
}* n N. ^: |. A) A) `/ H
};, X! v' T, t* c& [1 G& I$ _. y
$ r" v& |& g# h, J
static int __init led_platform_init(void)0 ^6 n3 O5 D+ e* z& j2 A. t$ M$ `
{
* d+ C% o+ Q+ I( E9 Q8 U int ret;
( s3 D( f% p; w1 `" s/ Y#if 0
+ X# k# |) V& A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
W7 }3 ]3 V( C$ L0 s9 H* S- j if (ret)3 I5 M0 M/ `( m1 `, @) K
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 m* c1 W: m! A0 L "%d\n", ret);: L/ ]. W/ k3 i9 U ~1 ?
#endif+ ?- ^6 W: B. N( R* }
ret = platform_device_register(&da850_evm_tl_leds_device);
8 t P# w* J4 L if (ret)) Y! a# L5 y7 w+ r/ H
pr_warning("Could not register som GPIO expander LEDS");
+ }/ m; m- N2 L1 Y! w2 i r( W else' E" o: m& V7 L6 D/ \ b, Q
printk(KERN_INFO "LED register sucessful!\n");) S. A5 V) l, d8 F6 E
( q0 |2 Y: W/ P" r1 |
return ret;
$ p) b( L% k7 a: J3 y# o}* m( W k7 ~* K" {+ f; f& R4 W
' T1 [' {/ l1 ?$ e" q3 V! Sstatic void __exit led_platform_exit(void)
: [! w3 I/ |* v" {{* _) Y6 n+ S/ L3 c
platform_device_unregister(&da850_evm_tl_leds_device);; e3 l$ q! G1 L1 o& T8 p) A( S
6 \7 k5 Y6 C; U! b printk(KERN_INFO "LED unregister!\n");
s4 @6 _# I( J8 n1 ?' X8 I4 }1 T1 X}
' N& W" R% l: [; r9 q
1 b" q" U t. J8 S4 U% D( vmodule_init(led_platform_init);
7 W& ^* |0 u( \4 v5 V0 Omodule_exit(led_platform_exit);% m: L- c; f1 Z
4 Z7 w1 l4 k. N% r. K( q
MODULE_DESCRIPTION("Led platform driver");! Y1 d" L6 Q' v
MODULE_AUTHOR("Tronlong");4 y [( U) }/ n4 l
MODULE_LICENSE("GPL");
& ~' @1 w+ l/ V; O
9 [: A) l# N4 r R) f |
|