|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. ?! J6 ^& x- t; D, X3 V! c! B
#include <linux/init.h>) J/ E" s& c8 Z# W/ V/ D: n
#include <linux/module.h># ?5 b% |3 V2 J. e
#include <linux/kernel.h>
4 Y& I$ p ?$ O* O& M% N: y#include <linux/types.h> z" o @% J# B4 O3 Y
#include <linux/gpio.h>
: { f5 H! d5 Y6 K# N6 h#include <linux/leds.h>
, F, H0 c. K- b: X, E+ N#include <linux/platform_device.h>
' d7 i. _4 D! t. |3 P) ]6 n) X6 D! p5 n4 }4 o4 _# h
#include <asm/mach-types.h>
& u; s4 f# c8 y+ Q0 T! R#include <asm/mach/arch.h>' b0 a7 M( h S0 s" ~
#include <mach/da8xx.h>
3 q. o& H- {. i' {4 h#include <mach/mux.h>/ n& s' \) F5 Z+ ?- s% z$ d! P
+ u3 n3 u: S& Y4 p; o5 q1 I6 Q0 k: {
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ ]/ {) Y$ G% _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% |' u. F7 Y' j3 U+ L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' y8 f& b) W4 ]6 ~/ i/ Z/ R# T% s( @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ h8 @( Z5 u) B5 V* U9 u; V3 q" _# f
. r: V$ z5 p- ~2 i9 K4 _2 y( |
/* assign the tl som board LED-GPIOs*/3 p& ]/ T2 w4 k5 W$ G' ?+ d2 x: B
static const short da850_evm_tl_user_led_pins[] = {
5 \) n( h+ {% e- B& d9 j6 x /* These pins are definition at <mach/mux.h> file */- c( @4 n" m/ \; ^) k: K$ j
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& n# Y5 u0 @! @8 ? -1
$ {: I- j/ o4 K5 Z# |7 q& r};% k- d* s+ u' w! o3 q2 E2 W
! f2 L) Y5 [0 e# X% g, _* cstatic struct gpio_led da850_evm_tl_leds[] = {% b. K* V/ _3 C" j8 v* L1 P7 ]
{# n8 \4 n& @0 u2 Y0 Z8 O, m; {1 m
.active_low = 0,
! {: T6 L0 K% |" [. _3 } .gpio = DA850_USER_LED0,
+ M% }) a8 A7 \) J .name = "user_led0"," S* y9 f, {7 U! }. R) g& X/ V* e' x
.default_trigger = "default-on",9 k) \3 V. M2 r+ |6 V$ Q
},
3 S$ M% }8 o8 M. M) v% Y {) p! i, @4 i5 k p% X' A
.active_low = 0,7 W8 Y5 N: @1 ]
.gpio = DA850_USER_LED1,
7 G) _; r% w, h0 D6 G .name = "user_led1",( d0 L$ w X. }6 Y5 p1 H
.default_trigger = "default-on",+ @0 K: Z% b, i _
},1 M4 D7 S6 U4 J+ ]( I! y# Q
{7 d' }8 `! _- p* f- D1 ~+ s
.active_low = 0,& w0 D/ l7 o+ e* Y
.gpio = DA850_USER_LED2,6 s; `9 h9 e* ~- p2 l
.name = "user_led2",
$ \* b9 I& U" @ .default_trigger = "default-on",) u0 v# j3 F: D/ F) s0 i
},
8 D {9 E; f% B9 W, |# Y {! E/ d6 T0 A7 T) B! h% X9 [
.active_low = 0,
; f" q9 l% y! s) j- w+ o% K5 \ .gpio = DA850_USER_LED3,! {/ \ }, N- z& q/ q2 } C
.name = "user_led3",4 ?5 H& ?" r0 d& D! k: ~/ G
.default_trigger = "default-on",! A: W7 \# R i
},
3 U- d. V+ Z9 S% W7 ]8 Y, [, `};7 r# b. k4 O/ W8 H! ^: T) q. t
/ C- }- l3 z% C0 E5 J5 R( X3 ?static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ `- y+ k9 O# C( h .leds = da850_evm_tl_leds,
, [* T1 A: S/ i .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- j+ k7 `. {8 l K! F
};7 q0 Q# w/ q( N3 d
0 L9 H2 {! u+ fstatic void led_dev_release(struct device *dev)
/ J* n( C) N. \) S+ H n{
1 F- m# T* H# M. J; }, V; |};% w3 C& x; M# l- B9 M
9 ]; v8 P m; b: cstatic struct platform_device da850_evm_tl_leds_device = {( {8 m& [% o3 s4 L
.name = "leds-gpio",0 I4 ]2 o* o; B- s+ v; U z9 D
.id = 1,
7 ?. @% I& f. Z0 E .dev = {# z6 B$ }& O5 l
.platform_data = &da850_evm_tl_leds_pdata,* A) S+ U7 A7 B& {' O: _
.release = led_dev_release,8 C( S4 q) W/ B! O0 T5 D
}( }! b" n) h i/ R0 c6 d% q; J" R5 H
};) c7 M* x: n* S0 P
( A- F7 g" v- Q) M, I9 T8 y2 [static int __init led_platform_init(void)
. e0 r! M: D# x$ B{8 v& D g$ Z- D) i$ A
int ret;/ k& j/ c# \. j, z
#if 08 u4 p) O! f9 e& N% h
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) H/ \- v( n, ^, I6 A
if (ret)
" ]& W: k. O: u% h! T pr_warning("da850_evm_tl_leds_init : User LED mux failed :", l& S8 G: a$ S4 {
"%d\n", ret);5 K) {; f- Y |6 [, y7 Q# w
#endif
: r" S/ x; B& d ret = platform_device_register(&da850_evm_tl_leds_device);: ~: ]! J! b+ Q: |3 g) W* F8 I
if (ret). e( ~2 Q8 W2 Q: T: ?( B
pr_warning("Could not register som GPIO expander LEDS");7 I0 s( a0 N1 ^7 V J7 I
else( t+ a( J8 w# P6 Q( i
printk(KERN_INFO "LED register sucessful!\n");
r& |$ ]4 v- {0 q
: m" W3 _2 W K# o$ a1 t0 X return ret;
) `& X, R* m/ X# T( l}
! _! v6 {/ v3 s+ I1 c
- u: U2 [! w6 `1 M) Jstatic void __exit led_platform_exit(void)2 H" m. @& j: g4 o: o6 e
{5 }6 N0 ?# l, J* `
platform_device_unregister(&da850_evm_tl_leds_device);
7 V F$ k* E* ~1 X- z8 I" A: |, ]1 M4 J' ]
printk(KERN_INFO "LED unregister!\n");
8 b" w J* X5 d4 s}& P! k" j( d+ k6 }! a, C# Q
: A9 n- N; h$ ]$ m) l: Ymodule_init(led_platform_init);
7 R7 o' s- p- L" R. R, P* e5 omodule_exit(led_platform_exit);
8 e. V- w5 |( I$ Y5 M, \, O
q5 X0 [/ k/ ^ i) NMODULE_DESCRIPTION("Led platform driver");1 @( y" a2 l) ~ ^5 l9 Q
MODULE_AUTHOR("Tronlong");) h; F/ V; e- [( T/ F
MODULE_LICENSE("GPL");
/ ^" {! G( K4 }; _
* u; t# ~9 p ?* I |
|