|
求大神给下面的程序做注解,请稍详细些,谢谢。
% Q$ O' }1 x' Z# \3 r P#include <linux/init.h>
+ l# v, x8 |5 L% ]4 S6 c" K3 G#include <linux/module.h># W t i4 h& ^$ F
#include <linux/kernel.h>
8 W. T' W0 |3 `+ D: v$ _8 F/ ?#include <linux/types.h>
3 `! I9 k% d6 E! X' a9 f( U#include <linux/gpio.h>/ I6 k' u( ^7 I6 @/ D2 M u
#include <linux/leds.h>' Q8 Z/ B! Q* B$ I
#include <linux/platform_device.h>
( u; M8 G6 W3 }- y
( e! I, P) o% O4 j8 D& h#include <asm/mach-types.h>2 }- u, D0 g1 _ d, {
#include <asm/mach/arch.h>
2 B( i6 F! G& D* N#include <mach/da8xx.h># S* p% s) i/ G8 M* K- g
#include <mach/mux.h>
0 Q6 B$ i: h R9 S+ ~% p& t& G& ^8 s% Y( v& g
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: O# c: [; R# c3 F$ R6 p: a+ J8 O#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 f4 T) V/ a& g/ [7 m- B' x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 P' O) r* E9 n3 w. }# q6 r#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% A0 G7 U f4 ?' x `! B+ \
% q$ I8 O% B: K
/* assign the tl som board LED-GPIOs*/( R/ c: Z8 A6 e0 y
static const short da850_evm_tl_user_led_pins[] = {& ]4 u5 U. c- Q0 Z8 V0 Z: g
/* These pins are definition at <mach/mux.h> file */7 f! O2 A! W! U f" u( a
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 N! i( _( F$ d: ]6 T6 A: Y* ~
-12 T5 {; f( u8 t- i
};' |4 j/ m/ X6 E7 h" `' w0 r
" W! Z7 O U1 ?: Z
static struct gpio_led da850_evm_tl_leds[] = {
8 Z. D; d( ?+ `' | {
! |, ~4 n6 v2 A/ G9 ?3 @ .active_low = 0,- Z5 I" _$ v X
.gpio = DA850_USER_LED0,
9 H7 f/ }/ i/ u5 M M .name = "user_led0",: X8 O/ Z' ?5 c4 ]# T4 ]" g
.default_trigger = "default-on",
: P- w9 \" e. Z0 N3 I$ {4 _2 f },
, c. m5 ?! e# T! r {8 J, C' ]% I0 w1 f0 @# W+ ?# O
.active_low = 0,+ q7 O% Y0 y! O9 r+ R2 D! I
.gpio = DA850_USER_LED1,$ K! {/ g$ R) X) y
.name = "user_led1",( `1 d6 u5 B- E. \5 F$ Q
.default_trigger = "default-on",. X8 @, o( D# G; Q1 A5 u Q
},% T1 R8 Q( h- `% l( F6 s& j+ T/ b
{3 b, F' h5 H3 {& D
.active_low = 0,
2 i7 M( x7 j6 e2 g( X3 | .gpio = DA850_USER_LED2,7 P/ N- J/ D, R) Z& Q2 q
.name = "user_led2",0 ]1 |; G% J" v$ `
.default_trigger = "default-on",. o4 i+ j8 K0 ?; Q
}," ?5 @% V& F2 C
{
8 @/ ?9 ?- K+ E .active_low = 0,! D4 K% D* g2 _1 Q5 w" a
.gpio = DA850_USER_LED3,6 P$ r. v# C, b! d
.name = "user_led3",
3 z6 A9 K' f8 y/ r; i D3 [5 _0 v .default_trigger = "default-on",, k+ a5 M1 \' T4 h% W4 q! H
},4 D0 Y' N' l. i% d
};9 c# b" K3 A7 l1 g! P7 R
x) k. ]' }& ]% I2 Y" K: T" W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& ]1 R7 b* K6 D0 _; V% N) c
.leds = da850_evm_tl_leds,
2 j4 H$ `. P" V# m: U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ R2 s1 Z/ n) D3 _9 z- r};4 k: { Q1 c4 n+ s- m2 q
! n8 h7 U& _5 _4 [
static void led_dev_release(struct device *dev)
0 m) b4 Z& \5 b$ p4 Q5 \* R{! _% H) N- Y" J
};" [( ^4 ~8 P3 _
" `; Q, }1 H1 `" v: rstatic struct platform_device da850_evm_tl_leds_device = { K' c/ Q5 ^- ~+ A; z5 f: Q% _
.name = "leds-gpio",3 p8 q: O; D- }, x$ m2 M0 e1 X5 i8 B
.id = 1,. ]( L7 L s1 L6 _3 N# w) Q
.dev = {
`: H) Q: |, |9 n0 z .platform_data = &da850_evm_tl_leds_pdata,
: K0 o$ u& |: t3 j# y .release = led_dev_release,# c, C" d5 q1 ]' U4 I5 k, ?7 z0 Y4 Y
}
# P. s+ B$ X- d# d. u& E! }};6 E$ o9 x" h! T5 E- Y, B
. y+ U4 ]4 S |; z# }- mstatic int __init led_platform_init(void)
1 h. b }# i: c{
1 p& ^1 b/ w8 e1 B. P+ v; k int ret;
3 @1 P) C7 ]8 T: b% Q) N#if 0
1 b4 ]6 @: S. Y: Q! ] f ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 [1 P7 y0 k6 R) F8 y3 h if (ret)
8 ^+ I0 u2 r' n8 \' X4 `3 _6 g* O+ ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :": U/ ]" K6 L& m3 V. B/ }% S9 G
"%d\n", ret);
& ~' q2 Y% E4 Q+ s2 k& I#endif9 q9 j3 l6 `% _$ h6 W
ret = platform_device_register(&da850_evm_tl_leds_device);9 \& z2 N. j/ K& a2 i
if (ret)0 k" P! J6 g9 h3 V) M8 G
pr_warning("Could not register som GPIO expander LEDS");
' M4 E/ V6 k: m9 k" s else
$ J5 v3 T" _* H8 ~" J' j printk(KERN_INFO "LED register sucessful!\n");
) p( C! \- k( ^: K+ R4 P5 M
+ \8 O# L* d' c! O# g return ret;
0 E+ F6 n7 l4 y5 [/ V}
* ^; z( S; q$ K1 i4 I B; t3 G
" T6 H3 `% w/ `& Y: U( Z G, estatic void __exit led_platform_exit(void)
3 d# r6 H9 {& c; P) @{8 F4 ~% l* I& @3 c9 y, I
platform_device_unregister(&da850_evm_tl_leds_device);
% c& v. e9 k1 c$ t% F; B0 P
# e# m8 u% G. R6 z+ U; o: I, _ printk(KERN_INFO "LED unregister!\n");8 ~# I; I) f0 ^, J
}
. a: |( V+ r& I4 o5 g
' H8 ?" r6 B0 Nmodule_init(led_platform_init);
1 @$ {3 J# z$ Q8 J% D9 e8 umodule_exit(led_platform_exit);
7 e$ t/ x+ r, S$ z/ C- P9 n1 H$ }$ f0 q7 F* p' a/ A; ^
MODULE_DESCRIPTION("Led platform driver");8 j5 O( V5 S# o( @3 |+ f
MODULE_AUTHOR("Tronlong");
0 H6 ~: ?1 I0 l l2 dMODULE_LICENSE("GPL");
; M& }1 x2 F0 L2 P* i1 T! }8 K" j5 }1 l- I
|
|