|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 c! H; S* W' ^3 R, N. ^3 n7 u#include <linux/init.h>
9 x/ V9 p9 e5 m+ G% s4 ?#include <linux/module.h>5 n. R3 @+ w9 J' ]- f
#include <linux/kernel.h>
$ G$ |( J4 H, Q! I, V% V#include <linux/types.h>6 H, Y/ n+ o( A t, e @
#include <linux/gpio.h># @2 |8 ?8 K" Z& a
#include <linux/leds.h>6 T$ w# B1 g" @$ \# h" Y# `7 }! G
#include <linux/platform_device.h>% N _. Y- q' w6 Z
0 C% H! [7 G+ {
#include <asm/mach-types.h>; u# P5 G# T2 r# ]
#include <asm/mach/arch.h>. E3 R+ U! n2 Z
#include <mach/da8xx.h>
/ x3 X- Z# }, ^6 S; Z#include <mach/mux.h>; D$ a1 E1 a0 [' M
( s9 c& g( o$ `" V7 c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! c( ~, q: m; y8 w- L#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* D: N% m. T" k; U: s2 y* N
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# z3 g. B Z9 k6 d1 r# O7 v s
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 J1 U: s8 ` t
4 `1 t- a' v9 x8 Q; x& Q. f
/* assign the tl som board LED-GPIOs*/
/ C2 y; o C! Z* I& Rstatic const short da850_evm_tl_user_led_pins[] = {
) z5 \& z( D* h9 U2 a, d! @% h" i /* These pins are definition at <mach/mux.h> file */
" S7 {: X& M1 q$ e* f: n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* N2 ?% t6 _4 F; R7 g; L
-1
1 O( a/ b; @, ~- q+ I) O9 @};: u2 L' Y, j5 v2 Z5 q" W" x& O
s0 p* W! Y9 Bstatic struct gpio_led da850_evm_tl_leds[] = {2 R1 t$ F( n# Y3 Y, z! r
{9 ~8 F2 }) P5 ]
.active_low = 0,' G; g8 [: N' I! `( v6 O! M
.gpio = DA850_USER_LED0,
9 [9 [$ f! x* A3 ^2 E; ]- e* j .name = "user_led0",7 H2 K3 b6 a, u o8 y: z: a: J
.default_trigger = "default-on",
: R% I" p( ?8 b1 f" E },6 W1 n$ N# H/ s1 N- D0 y
{0 j$ N2 ~1 x6 D
.active_low = 0,
0 q9 y7 u+ k1 C .gpio = DA850_USER_LED1,
, I+ U# m$ T' s! c8 \: d5 F .name = "user_led1",
, [/ P8 d+ g1 {& \& Q .default_trigger = "default-on",
& @, Y; P8 E, M' I$ f0 u8 q( a },
& _5 b) z0 d& G$ a {
9 c" D ?# l% [4 X .active_low = 0,
1 y4 l. ]5 Z( y- Q9 H) O/ G& ~ .gpio = DA850_USER_LED2,
# P3 K8 U5 J" ?8 X; \ .name = "user_led2",
4 Y S5 Q6 O$ r* Y1 s { .default_trigger = "default-on",2 @1 \$ L+ `- m: H, W
},8 l; T# M3 T6 @- g% A$ v
{/ K7 q" b7 _ |5 u: o& d
.active_low = 0,
+ O3 r2 R& u* a( M d+ h .gpio = DA850_USER_LED3,
g" v+ P Z4 }6 X .name = "user_led3", B- k6 n4 v* w7 m5 \! T
.default_trigger = "default-on",
$ {4 B5 Z7 y" \4 K, ] ?# b },- T4 l+ h5 ~0 t) R
};
% i; F% o, D6 B5 C) G0 `
2 |/ a# o- P6 Q) l I7 l, Sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" z }0 W: i4 o$ L3 D6 M
.leds = da850_evm_tl_leds," {" V* \5 p, W5 `$ q; g" h% o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) K3 c. V3 ~7 N' V6 u};
1 ~; e: z' U6 D4 i! H4 i! y6 }
: V0 Q* }. e8 m% z2 f/ nstatic void led_dev_release(struct device *dev)
2 z; k6 {* v1 W# l# X5 }8 |{
! O0 a% U8 A$ T) N0 Y& a};" j; ] ^: D0 p( C6 k, r( o
, @, n) ~* y: M% v
static struct platform_device da850_evm_tl_leds_device = {/ L& q- }; E, d" w
.name = "leds-gpio",
# ^- R; U& L' ~ .id = 1,' S7 c) c) k) {
.dev = {! n1 o) K2 k* I$ O& b- Q( {3 ]
.platform_data = &da850_evm_tl_leds_pdata,, i1 s3 i7 w0 y; a5 _( a7 t& |" n
.release = led_dev_release,
! i! o; x$ T7 L- t7 `/ ^ } C- w9 R' T" |4 k7 L: A
};9 O1 w: f3 L( r' f, f
5 l1 J0 L! @; ?static int __init led_platform_init(void)
0 j. o6 o' p% _- R1 Z$ Q2 c7 f{/ h( E. n! S9 x& `7 `* g# }
int ret;8 o( y" V0 }$ R+ S5 j
#if 0: F% O& J4 z! Q3 T' Q1 f) E& t
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& [* T3 n- q9 z1 C \& K if (ret)+ |8 c( l. }+ `
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- B7 B( K6 o5 N9 g "%d\n", ret);; p0 h# x) i Q/ L; d4 _9 E" g6 d
#endif
- V( {4 C. M$ g: U& a" Y ret = platform_device_register(&da850_evm_tl_leds_device);. r% }' W) z! W& v6 K% l" n
if (ret)
; _# C" @+ x" R% U$ L% K pr_warning("Could not register som GPIO expander LEDS");
2 ~7 s- P& }$ Z& s else" K, s$ ?9 B1 }# T; f
printk(KERN_INFO "LED register sucessful!\n");
( @! u6 l/ v4 G9 W5 [1 A* P8 ?1 J) q
return ret;
+ i' t- V0 K' h- k# n3 O}
; O- F# F+ v( Z6 n m' |' `% |" }- @+ K( Y
static void __exit led_platform_exit(void)
7 [0 f% [( _6 ]6 H: K3 k9 K{
# V- F3 Y9 `) ~- M& \ platform_device_unregister(&da850_evm_tl_leds_device);
' g* m, z: m* e& c
* w. V4 t8 d9 x printk(KERN_INFO "LED unregister!\n");
; V3 k8 U5 [: b9 ~# r}
- ^* ?8 ~/ {( l1 k$ g! Y
: W# k; q8 ~+ U5 |$ ^/ E# Emodule_init(led_platform_init);& \5 y6 e; r7 M- `# t
module_exit(led_platform_exit);
; o2 c9 z1 Y. U1 \8 P: J- ~% W1 T: q+ X: j( l& b9 b! x* b
MODULE_DESCRIPTION("Led platform driver");
+ b# I; y* g) rMODULE_AUTHOR("Tronlong");1 q' Y% l/ D9 j' ^
MODULE_LICENSE("GPL");
8 X7 p0 q% N, s$ Z. m6 l2 X2 }0 c* z! p8 j% R1 L& r
|
|