|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 c3 q3 A4 d4 u& q4 k, U1 r. @
#include <linux/init.h>
9 ]$ `9 O( a" ^% _& {+ S#include <linux/module.h>
5 h. E' x% h6 Z# x( [. J: m* d#include <linux/kernel.h>' `) E- t& ~9 O" ~4 m/ Z
#include <linux/types.h>
2 m d1 Q5 D3 }+ l#include <linux/gpio.h>4 C4 j% q) \/ R1 F4 }, i2 y/ ^
#include <linux/leds.h>
& ^! E$ h" n! E' D) e+ G3 q#include <linux/platform_device.h>
0 j$ d; D6 x l# J& G) E5 z' s7 i0 j& u& L0 U' ~1 s; R/ F6 \8 x
#include <asm/mach-types.h>; c+ f9 D$ }) F
#include <asm/mach/arch.h>
6 F" c& W9 ~9 q8 H$ x& _' n" q#include <mach/da8xx.h>% L: o: `8 j3 F3 U# ?6 l6 x- E/ x
#include <mach/mux.h>
0 r3 L% o- K7 B7 _0 H. n* @, N; ]$ g( P
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): G4 [- u4 O" y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 E# P2 d5 w; s' P" N9 A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 g! n9 n1 B8 F0 e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) A( X& h Q; w! v
. W2 n0 t) q8 y. C" v a# \( ^/* assign the tl som board LED-GPIOs*/
- } U1 d& n) {6 ~) C; Nstatic const short da850_evm_tl_user_led_pins[] = {
- X# U5 Z9 N9 k& O7 u( W /* These pins are definition at <mach/mux.h> file */& R) v+ A9 ~) e5 s
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 c1 F! F% i9 ] -1* R) D2 b; z& q
};/ K" J: X" T! h/ F$ b1 V6 ]
1 y" y; ?" i( W0 S( m4 m, pstatic struct gpio_led da850_evm_tl_leds[] = {1 X: o3 i, x% L; j, V1 l% G6 d- T
{
9 O+ |) [2 Q0 X# r .active_low = 0,
2 E7 X7 m( j F, x" o4 N3 [" q .gpio = DA850_USER_LED0,7 K2 g8 Y% F z2 G' h/ E% M
.name = "user_led0",( t1 G+ \ H7 s2 I( G
.default_trigger = "default-on",% H# k! I0 f. U6 | L( F' b- M
},
" C/ ~, s! @$ b3 ]& t) g& C {
a" U* b {. J .active_low = 0,/ ~5 X" x1 ]4 ~
.gpio = DA850_USER_LED1,; _& ~8 w. ]1 O+ x6 v! u: Y+ a
.name = "user_led1"," ~! U( F, s$ Y1 \1 @
.default_trigger = "default-on",
7 ^6 W8 Y/ M1 V- a" v },# z9 C1 k/ ~; q [
{
: Q1 v9 U6 `; D .active_low = 0,( X3 A' w! y' E! D6 h
.gpio = DA850_USER_LED2,
, j5 \! f9 x7 G7 Q4 }( w7 T: z" J .name = "user_led2",8 T2 l0 t- l* J
.default_trigger = "default-on",
6 u% y; e; i. V' F },
+ C5 e, ~9 \2 p1 l- W8 f {0 _! `. e% m4 K
.active_low = 0,4 j$ q5 A8 o& b! o! b& X; Q
.gpio = DA850_USER_LED3,; i3 \( S6 z2 @5 j& K& }, k& ?: E
.name = "user_led3",
& @ R& n' l: | m1 m0 j! K .default_trigger = "default-on",
; l/ Y9 p( C* Q; W- A) b" r3 d }," }6 }7 r' @# X/ F$ L
};8 e* I* v) z4 ^# }. _
. v8 b+ X9 _! K) D! ^; Y1 ~static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ d* x8 k" L" D# N9 }3 S9 z/ O .leds = da850_evm_tl_leds,
) @5 C, p7 e3 _' k' k: d8 z. @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 O) f; x0 I$ K0 J
};
) b5 x/ u! s6 V1 r' W Q' T9 S2 s3 Q! j9 g9 c. \
static void led_dev_release(struct device *dev)
( y$ j: ~9 M& D' i{
7 a8 V8 @" T% o- x3 V; u) F3 T }};
* K& E$ R% Y V! d
7 U+ M3 E! v" z1 h$ lstatic struct platform_device da850_evm_tl_leds_device = {
, g) q) C/ B2 g+ X6 p .name = "leds-gpio",. j" o- Z* Z+ U4 T7 L% x
.id = 1,) d& p Q4 J; i* x
.dev = {
' S7 f4 B7 _2 [/ X9 r" u .platform_data = &da850_evm_tl_leds_pdata,
. u$ U) Q' i3 E- v9 p .release = led_dev_release,. N5 h% N z8 E/ X3 W; h
}( o2 E; d; A( g/ O' W
};6 C% N. P% G; Z; k; M; M
$ [3 l; s$ W! L
static int __init led_platform_init(void)
8 C7 \# ^2 _/ v7 d' ` O{
5 c* ]2 {( \1 j! n2 J# \/ K s int ret;( S; Y$ _, y9 K! W- \
#if 0# r1 C" a+ s! c; s4 O5 Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- D2 q" o& m2 J/ K4 v z+ V9 ~. B; j if (ret)
( r/ U- ?5 u* l. F. B pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 ~# F( Y- L" Q5 r* d3 r C
"%d\n", ret);) z6 n7 q6 i. `# F1 O
#endif) ~# t$ V& F, M! T2 j
ret = platform_device_register(&da850_evm_tl_leds_device);
1 s/ V' W; Q2 X if (ret)
7 g7 n7 n# V: {8 `% } pr_warning("Could not register som GPIO expander LEDS");
; Q- }9 a4 V& A9 L- u% @ else) x4 M+ Q) q( E2 H7 F z' `
printk(KERN_INFO "LED register sucessful!\n");: [) M; F0 ]0 P- M0 ~
: F, T' }/ k/ q# G6 R& T& h return ret;
2 L( _( x3 v0 e( g5 Z$ H6 m% E- S}8 J3 @/ Q6 D! X" g, X( U' G
( C5 S6 q# S! x- P! x
static void __exit led_platform_exit(void)" T) w! ]6 z- a* x+ O q" r$ o$ ?
{
; d3 g. B# y! m$ W9 V' O platform_device_unregister(&da850_evm_tl_leds_device);
, y" F# Z7 j( M5 I# g1 ?- n3 @, |, A. w0 i0 q: m! X9 o* L
printk(KERN_INFO "LED unregister!\n");! N9 j. G) U% ]! x6 r: I" ~2 t9 E) ^
}
' w/ s4 h# B% s' K1 y" j$ q8 W, H! @+ R, L: s9 `& S! ]" M7 Z$ t& C# h
module_init(led_platform_init);
+ b5 D$ d: W: ?module_exit(led_platform_exit);
' M; p6 y4 O6 O) G- U1 A" P" v2 f/ `/ s4 E: _
MODULE_DESCRIPTION("Led platform driver");
6 T; {0 t! \7 o: a2 H- Y' w( d IMODULE_AUTHOR("Tronlong");3 x% [2 j: @8 E
MODULE_LICENSE("GPL");
% d4 F9 e/ c+ q1 ^+ ?) E3 a
7 Q! m) f( X3 [: E7 q" C |
|