|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; e T: B2 q1 S+ q" z#include <linux/init.h>
1 s# C, {6 g0 n#include <linux/module.h>* |% D4 H! }2 r+ l
#include <linux/kernel.h>, t8 j [! d) Z
#include <linux/types.h>
9 L) M: Q3 B% }: U0 m r#include <linux/gpio.h>* C# b. B' N1 f9 z g
#include <linux/leds.h>
$ z/ j7 _! C5 a" E#include <linux/platform_device.h>
3 G: X7 k5 z8 M
. O6 K+ r f( w: q* \5 L#include <asm/mach-types.h>' v) z, G& d" n: v6 }
#include <asm/mach/arch.h>4 N' h2 D; m% w" G, p* G6 n
#include <mach/da8xx.h>% q6 p1 H& U* K
#include <mach/mux.h>
: t U/ E& E$ V! V6 \& f# L- T
& j3 ^) F+ g& |+ j2 g( g) c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% I! N e8 |3 Y% S* R- T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! n2 Y+ i: Q* H! u) R2 K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# c( u3 x* O& I; @#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 g- a/ H, X0 L0 S6 U% }% W; ?! Y3 ]2 y) ^$ ^8 v3 F5 d
/* assign the tl som board LED-GPIOs*/
% m+ {! S! |7 ~8 c5 Sstatic const short da850_evm_tl_user_led_pins[] = {( N, S* Y( A9 @7 M1 z: L u5 _# _
/* These pins are definition at <mach/mux.h> file */
$ Z% X; Q3 ^: M, o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 V# I \, c! a4 `. ^* H -1
/ t$ c, P6 Q1 Z1 _/ }. h0 E0 H/ R};/ U" Z) t2 e2 T2 m1 j
, H5 ~: }' \5 Gstatic struct gpio_led da850_evm_tl_leds[] = {
% v I- r$ ~# e0 P, q( y5 V {' t5 d6 N8 V: |1 `/ v4 \" e
.active_low = 0,
) n: j/ s' J# H* u x, L. [ .gpio = DA850_USER_LED0,+ Y; ^# c2 j. h) h; c ^3 O1 Q2 T
.name = "user_led0",) p/ S+ l; G3 ?+ N+ H
.default_trigger = "default-on",
1 z/ g# ^# `! h9 ?: f7 n2 W },4 [+ @% a9 v1 b1 w+ M4 C- H* M
{; c2 B& U, V: M. y' H
.active_low = 0,( c: Q; X8 C: c9 @7 }/ n6 U- W- g
.gpio = DA850_USER_LED1,! Y ]# N/ Y2 \8 O. u& _' m6 q
.name = "user_led1",
& K2 {3 m$ n( Q0 `0 @( N2 v, P .default_trigger = "default-on",
% \7 Y& c$ x! @7 {' L },
- L5 W" A- s5 P6 @( x, J {
) k6 E- M1 A+ q .active_low = 0,8 ?1 u9 Q/ Z y) @
.gpio = DA850_USER_LED2,* j7 q5 p8 R; g' i1 W
.name = "user_led2",; F. i, _% p ^+ v
.default_trigger = "default-on"," v \6 ]2 E9 B9 N" c* z
},' ^ |* a0 }1 n
{
7 L. j3 a) [& ]7 z6 d3 Y .active_low = 0,, z1 Y$ W! W2 V- f& D/ |5 \& P* r
.gpio = DA850_USER_LED3,1 o; @! B: A& b! f6 b
.name = "user_led3",& e5 Y! {: q# l( }$ a/ x
.default_trigger = "default-on",; }* m% z' o( p! Z$ P6 c2 v& T, e
},% \: T ?) R9 ]% `/ \0 e; |
};) Q6 ~4 e& p5 y# I) t( {. d7 @
/ V( s7 e' ]) o+ S# g
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, `( s& T5 g2 s0 g& E1 z .leds = da850_evm_tl_leds,
D! T1 C& X f6 K- M, ~3 o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; \, X$ c$ z' N0 |% O: t: x- m
};
0 A. E) J4 Z) [) p' W( t; O* S3 s, x4 I! ~4 Z0 k' e* n* r# F
static void led_dev_release(struct device *dev)
' g! o/ t; C- [{: ]& o4 }; l5 n0 |5 r/ U
};
9 ~. Z, ]" u2 m% {; t8 y& K5 ]) F3 ^: P6 l+ c
static struct platform_device da850_evm_tl_leds_device = {- A% m7 G, \7 G4 O( E' j( G) d0 o
.name = "leds-gpio",
/ A0 ?( }6 S: K .id = 1,
& n6 K. s: |+ Q9 j1 @ .dev = {
/ J! Q$ c8 }) U8 {7 t; P# W .platform_data = &da850_evm_tl_leds_pdata,
% y2 P$ [5 c9 b+ e$ K1 ~" s8 O6 W .release = led_dev_release,' P' v+ Q h' H$ }" X
}
' D+ T- l' T4 f4 P9 A! P};
- S7 b" l- w L! x0 Z. m( {. k: I( q) u5 [' P2 j3 e1 X
static int __init led_platform_init(void)! S6 Q/ P" T" P$ O% k- N9 e
{
! m' P* l$ g- c' c6 W* ]2 h& f int ret;
+ \+ X0 S; G* H: f#if 0
# ~, e6 d1 I `- ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ Z4 t# e0 m) u
if (ret)
. `4 t3 V9 f" t/ R pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' b! E6 H, m( ~+ B5 U: o
"%d\n", ret);" W6 M4 ]5 S+ v7 w$ L$ x5 l
#endif% T3 ~% y" t9 @6 ^" ~
ret = platform_device_register(&da850_evm_tl_leds_device);7 G3 F: j) O: I U2 r% ]: f
if (ret)$ ^. ^( J5 O5 A5 |" f k& b
pr_warning("Could not register som GPIO expander LEDS");4 P" F% u+ \4 d* z; y
else1 g6 l& B& b/ T! z: J9 y% K |/ Q
printk(KERN_INFO "LED register sucessful!\n");' K- d& t5 F+ B
& Y4 w$ f8 G1 v
return ret;. Z! I, X5 D5 [0 |
}
8 p2 d; n1 H+ h
: Q, w' P8 S+ D/ }static void __exit led_platform_exit(void)
# q$ I6 a& N( l{% p" R$ m$ `9 j1 k! A6 b
platform_device_unregister(&da850_evm_tl_leds_device);
8 ^' T" H5 P0 d& k% U: d+ h) p( p$ t7 I$ j0 W
printk(KERN_INFO "LED unregister!\n");. M( L) G8 |: z: k
}
5 }) {5 N6 u2 @/ [9 G2 h# Y% e* G/ k- v9 s% q. p! y
module_init(led_platform_init);
; }: |0 S, w0 P6 a2 Hmodule_exit(led_platform_exit);
/ ]. K" `0 ]0 Q9 N3 A$ I9 C* p2 Q+ u: q6 j& A: A5 T
MODULE_DESCRIPTION("Led platform driver");
) o& W- }6 O, `. |+ E( y+ wMODULE_AUTHOR("Tronlong");
: D* r. z ~: ^7 ?# ~' E3 ^6 T& {1 wMODULE_LICENSE("GPL");
' X; L1 r2 J" J6 Z' Z- {+ V5 U9 o# h/ F0 t3 l# [
|
|