|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 q0 k+ R) f1 R) A
#include <linux/init.h>
1 v, R0 c& e. g) h8 Q#include <linux/module.h>& _$ S6 \2 Y' L' X' Z
#include <linux/kernel.h>
9 A& Z5 [& _! R a#include <linux/types.h>7 S8 [9 b" @/ a2 O
#include <linux/gpio.h>! `8 N+ M0 w- `$ O8 Q! m
#include <linux/leds.h>" e5 [" _2 `& U+ [0 K2 X
#include <linux/platform_device.h>
( D& G$ p. X6 i) I
% f9 H9 ^9 N- T/ V; k. A5 ~#include <asm/mach-types.h>- d, j$ A3 T2 ]* C' H
#include <asm/mach/arch.h>
/ N; v% O, f5 C6 K/ |7 w6 c% r#include <mach/da8xx.h>
% _) e' \6 G" G) V) w, }#include <mach/mux.h>* v) L' p9 z) ^
* r% Q) u0 |1 b3 D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& h1 |; [3 j# p, L#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 r+ d% ?* a7 K, {" R
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) t1 {. {. z7 y u9 r: s" m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) w$ s$ Y7 J. z5 ^: x
. G) c8 O/ D- U8 V* ?
/* assign the tl som board LED-GPIOs*/3 N5 e2 ?3 l+ T' p! r! ^7 [2 T
static const short da850_evm_tl_user_led_pins[] = {2 i u7 r, K; a+ J0 D; H! U: ?
/* These pins are definition at <mach/mux.h> file */
4 D7 L2 M3 g: |+ l# j5 | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 T1 r$ `) G1 l' A, H% M* _ -1- {# Z& E$ W7 x1 ~9 A- v
};
! F& I0 `5 Z/ A( R
5 {! }5 I! G0 Z* [9 P* h! l( dstatic struct gpio_led da850_evm_tl_leds[] = {- }( l/ o+ x+ m! L8 ~; L1 N3 T
{
% d5 k: ~( m) l3 i9 e4 p0 F: Y .active_low = 0,7 t$ Y! c" j! e6 W4 W
.gpio = DA850_USER_LED0,
4 q, a" f2 E9 [2 A .name = "user_led0",
0 I1 K" U& b' u* ]: k6 p6 X6 @1 r .default_trigger = "default-on",
+ w3 V9 d% V( y },
j- ~5 A# B2 _( _/ p$ @" @. T {2 Z, g O' p! ~* g: b& Q5 l0 n+ ~
.active_low = 0,
7 @- Y: t* F( x2 P .gpio = DA850_USER_LED1,) G' {% m5 F0 E6 }1 a2 q$ O
.name = "user_led1",
7 }0 H' ]' V$ S1 m9 w& f4 n# p .default_trigger = "default-on",$ Y j: n( ]5 s, W' x3 }3 M" W
},
$ I* ?* O& h* Z# U {
, I, g- R8 v5 T2 ]2 X) k .active_low = 0,3 S2 V+ V: }. X6 U
.gpio = DA850_USER_LED2,5 s/ k h0 Y& F: ~$ f$ ~
.name = "user_led2",
) x8 C1 }8 ?3 C& f3 T2 _5 u .default_trigger = "default-on",5 ?% Z" p; S. p v: {2 u. |
},( m- G5 o, j2 v6 T, r* G4 T
{
7 D/ I9 l& P/ C" K, E) E .active_low = 0,
! |& u$ q! ]5 r) H* O .gpio = DA850_USER_LED3,
* P. \3 \2 v9 V5 s. d: E .name = "user_led3",% A7 h7 B" Q7 L/ ]
.default_trigger = "default-on",
9 G/ z+ ^% Y: s- O* L f },
0 U6 x. u6 }8 g};
- N. a% Q1 P9 h% f7 h+ {, J* t
- C, D/ F, h2 O9 n* p0 sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 ]9 o# R2 C% j; Q, m* E .leds = da850_evm_tl_leds,
2 D5 H% A( z6 e3 R- r5 K' L .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, d; Z* S' }- k* K0 U2 K7 r& u2 O1 j
};. D9 N: M, _. v" ~1 h2 t7 P
9 J! ?& v* D- q- ^2 c3 h
static void led_dev_release(struct device *dev)
5 i' q; Y. |% F0 R# b6 \# J{9 k1 @+ C/ D" ?* P: W1 E
};
/ r) w& v5 w* \7 y/ Y: j! L! t5 D7 i7 ?) m
static struct platform_device da850_evm_tl_leds_device = {
% w% C& p8 R: |; ?! E .name = "leds-gpio",
6 t4 r6 v6 a0 P7 D$ x .id = 1,, x1 R, T: m( E, @7 o
.dev = {9 h% u' z4 u6 X0 X/ u2 B) i. P- c
.platform_data = &da850_evm_tl_leds_pdata,3 V6 O. ^* D% K: M! G# j' F- z
.release = led_dev_release,- Q8 e/ D2 f/ B h4 f
}) b- \ r% ^/ K" A0 x3 w3 w o2 g
};
" X) G, a4 q& @$ g$ \; g T2 G9 S6 N* P( i6 D5 ? |
static int __init led_platform_init(void)
) W5 i- Y5 G) _6 f{
+ s- k4 F; v; F$ e int ret;( _% O* a9 a. R: K: y
#if 0
6 S/ p3 y' \: t( b+ K$ G/ h1 ^ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* |9 i* z7 e& F9 @0 E& |" X if (ret); A: q( O) m" s$ o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 w: }1 @) L- s2 x/ c "%d\n", ret);
' J3 A! F! ]& F: Y$ @! P#endif
2 j; a" S5 R/ x ret = platform_device_register(&da850_evm_tl_leds_device);8 E% S% g( u7 X0 m, u3 F, k+ h
if (ret)) |$ G. W! B1 f& Q) m H& z
pr_warning("Could not register som GPIO expander LEDS");. U4 U6 q' V( ^
else
: P, L% y3 T' d) P* m& Z+ b printk(KERN_INFO "LED register sucessful!\n");
" [7 m6 H( D t1 z! a
' F) M9 C. D6 M return ret; ]/ ~; x7 ?& N
}, Z5 X% N0 D- y" E {$ V8 N
3 a6 r$ [: L8 E% a3 n1 y
static void __exit led_platform_exit(void)
6 ^& f6 f5 w0 A% p, U# h. y" [) O{
+ e- c* g3 \# ?0 x: S/ X platform_device_unregister(&da850_evm_tl_leds_device);6 j- ^& r: e6 h4 E3 w Z
, c2 t: f+ c( j5 O printk(KERN_INFO "LED unregister!\n");
* K; }+ j9 b y. C} W: f X4 C. a T9 |
$ z) M E1 W1 j+ Z6 l* nmodule_init(led_platform_init);: s" [& y; X! Z9 T9 B
module_exit(led_platform_exit);) o) E/ z7 y& H& _. M7 P2 M: V
6 }8 n+ l! h6 _+ Z" u- o6 v
MODULE_DESCRIPTION("Led platform driver");! t# p& i$ s' i+ p/ d
MODULE_AUTHOR("Tronlong");* p; M4 F. D- O# O" ?# t1 t- E
MODULE_LICENSE("GPL");5 V3 u" J7 y' o
6 T; ^* X: p: Q" y3 j+ @5 W
|
|