|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" y- \4 m/ j3 z( _5 c( d
#include <linux/init.h>
: @- Q9 M4 N5 W4 Q6 C! v9 v& e9 |6 D- M#include <linux/module.h>6 Q. i4 [ G% I8 s- t+ N% m' g
#include <linux/kernel.h>; ]9 u: ~9 \2 b/ C$ D3 U$ q
#include <linux/types.h>
* O7 U. X% S1 {5 g/ H#include <linux/gpio.h>/ C0 u7 D7 O. A; {& k5 [& n, O
#include <linux/leds.h>1 ~7 b# I! d, ]4 D1 ^6 x. ^6 A: ]9 t
#include <linux/platform_device.h>' ^5 n d$ o0 w2 G) p4 J- s
7 Z* x \! n) o% o% _#include <asm/mach-types.h>
3 T% h8 m* C n7 x1 [#include <asm/mach/arch.h>8 D9 K' i( Z' H& `
#include <mach/da8xx.h>
G K' d/ t2 a6 d- q( p#include <mach/mux.h>9 S5 [$ {& l& W' z5 z% l
& e. T6 c. L. |+ f2 G/ f8 O1 A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! \; q; ^/ _+ Y2 U9 N$ v2 p, W- k
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
o( b _$ u* Z6 f) y& w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; J6 M8 Q4 w( F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). Y$ X. B& ~' K
. @# x2 T" e9 ]3 M, W0 ^/* assign the tl som board LED-GPIOs*/
& [, W/ ]' ~' p8 w9 W; C* Tstatic const short da850_evm_tl_user_led_pins[] = {' `/ M D/ q/ g: k- n2 v
/* These pins are definition at <mach/mux.h> file */1 F" [' A6 C0 Y7 S& N
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 X$ }8 H! F& F) ?" B' a/ Z$ l, _+ z
-18 y& D6 C2 @; P5 g$ X- T
};, X1 `. W( r _' V1 a
/ o1 J& O' l3 ]: _$ \, Wstatic struct gpio_led da850_evm_tl_leds[] = {+ @& z4 I0 L$ X# E z1 H
{( A' y0 i+ i& f* l9 {/ j2 c; p
.active_low = 0,
. H7 h+ l$ q) k# u6 }; b .gpio = DA850_USER_LED0,8 R5 k0 B8 x' t( s5 T4 M e
.name = "user_led0",( K% X2 ?2 G% W2 y( k- c5 ~0 P
.default_trigger = "default-on",0 w5 S# c4 v. ] O
},
% v2 r) w7 g# Y! q {" ~ B7 T) W7 y( U8 ]1 z# m8 J
.active_low = 0,( e, {0 w$ o1 t9 c! K& D
.gpio = DA850_USER_LED1,5 g/ Q+ Z5 D5 O' s2 ~# N( V9 G
.name = "user_led1",
) ], {; q3 P) T1 w, _; c .default_trigger = "default-on",
8 E& e- N+ d8 P S& j+ I0 h },* c/ ?6 e" a0 m) m# {
{' k& w5 g0 e+ \3 G
.active_low = 0,
; E; p( [' t4 B# K9 O4 d% K& c/ |7 G .gpio = DA850_USER_LED2,
0 w' m$ ?3 o$ q& b .name = "user_led2",5 A% J, ?' ^7 V" z7 c: f: D
.default_trigger = "default-on",
9 a( N" R8 x. k },% s. _ m3 Y! U# K, D, r% ?
{
! u( g' u6 V8 l0 U: L3 s .active_low = 0,: d$ `9 \: {5 G
.gpio = DA850_USER_LED3,
% F9 V( O3 p. b* M* P5 X5 T9 l) ^ .name = "user_led3",, A: r0 \ n: a' W% S% {, q
.default_trigger = "default-on",9 R2 E t! i7 Y8 P7 l$ i4 M7 g
},. D0 |# u! f, ^! O; K2 p- c* C& I
};
7 F0 ^( k1 @9 p1 Y1 x( g* B4 I
$ p! Y: ^; I5 I2 H+ K X0 K+ cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) g9 I9 H) ~& }9 k2 V" A .leds = da850_evm_tl_leds, D7 w d$ G! Z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 a0 t# D( R2 m( ?6 h' }
}; F+ o1 _2 J. o5 f9 v
$ P1 S7 ^& k9 L2 C" u' L2 i
static void led_dev_release(struct device *dev)
5 X+ j& R4 k6 k- p6 A3 A( d" j{
8 R9 \9 @& T% ^" P1 u};/ S, N% \( f% m# b+ o
2 |1 }: Z* }5 L
static struct platform_device da850_evm_tl_leds_device = {
, T; H( Q( G1 a; ~# m* Y9 [7 ^+ h: [ .name = "leds-gpio",
, m8 c: t' L# f1 K .id = 1,
6 a6 ~7 d! t: Q2 D; z .dev = {( C9 {: v! {! x K. ?% q1 [
.platform_data = &da850_evm_tl_leds_pdata,. Q' G) e8 c6 F% R9 t1 z# S' O
.release = led_dev_release,
0 C% A# v9 D" ?+ s }
; J: Y; O* @! g' C" `3 V1 F};
6 x( q3 z, A. D
' P. `4 P3 U4 s/ Kstatic int __init led_platform_init(void)+ z. S9 d( z. U/ r
{
! c ?& w+ O( [) f1 r# y int ret;
1 o. D% T. Y% K* P#if 0& u& T, C" F- [7 b1 ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ @+ ?5 q+ d6 u1 R if (ret)" q( G- w* s: Y* K3 `) l M# H$ B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 D' L- I0 Q; a+ w- I% L, C" s
"%d\n", ret);1 r/ a/ I, P8 N: Z; b& x9 m
#endif4 l0 e+ n2 o: r& u8 L: p! G
ret = platform_device_register(&da850_evm_tl_leds_device);9 A" l! W; i. @4 }6 m
if (ret)
8 Z: u+ e: @ f, a8 E0 m pr_warning("Could not register som GPIO expander LEDS");/ X0 B" L) d+ y/ i
else, S+ N6 r4 U* P3 r2 n$ Y, Q$ Q
printk(KERN_INFO "LED register sucessful!\n");
* O+ i& l0 Q* O- O! h. D1 @
& Y# G" ~" s* z% r3 e! P5 Z return ret;6 v$ T8 Y ^) }5 C! e) V* W6 d
}
8 V7 c9 `9 Y1 U2 X
; X. Y0 F" r0 D8 dstatic void __exit led_platform_exit(void)
) s- @" m' @. W' T{! d4 x( `$ I& M i0 E4 W1 I5 l
platform_device_unregister(&da850_evm_tl_leds_device);
) ~6 w- f9 d. b( V& t# a, R( g
8 S0 }) E. e0 K# r9 g& E" b printk(KERN_INFO "LED unregister!\n");9 T; `# k% c# g& j# E5 i, R4 _! w$ @2 Q
}
# A& t6 n# H3 ^. c4 \8 ^/ m5 v3 [/ s% O/ g6 u2 g5 r/ L
module_init(led_platform_init);9 Q/ W2 o; h# @' P. Q- ]
module_exit(led_platform_exit);$ T- n" D9 N5 Z" a, `- p
) J9 o9 w$ R0 _6 |0 B
MODULE_DESCRIPTION("Led platform driver");/ g; H/ Q$ o' K) G
MODULE_AUTHOR("Tronlong");
+ g; r. X7 t/ @9 {8 `6 TMODULE_LICENSE("GPL");
# B$ C0 J; b/ T; B8 }* d4 }) s1 @
: {1 T3 i' n) G4 S |
|