|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 o1 l; G4 L/ r+ J9 ?( R#include <linux/init.h>8 W5 A3 h) P/ ]7 U" M/ E: m
#include <linux/module.h>! x+ N9 |) I d/ c
#include <linux/kernel.h>
5 R; j, S- Z/ M, S#include <linux/types.h>
" q$ Z* F' n. f1 f0 n) j#include <linux/gpio.h>, o4 [& q. g3 B5 Q1 _8 O- a2 d T
#include <linux/leds.h>4 L0 O5 P, J( R+ i g: N1 e
#include <linux/platform_device.h>3 A7 X0 J* p6 I/ r0 o% Q( `4 o% v
) k3 K! h# a- e#include <asm/mach-types.h>
, F- ?5 | r, E& l: I#include <asm/mach/arch.h>
# B3 i1 R$ o2 x& }* p( @7 v3 S#include <mach/da8xx.h>( O+ h' A$ y, A0 G
#include <mach/mux.h>
% M+ q& B2 v) v9 H- f0 p0 p) N
5 m; v' D+ W+ J5 r#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 n' o! B4 K+ p: f
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" |1 K6 P$ z2 E
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& L9 C* @8 p+ a# Z0 Y) ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 p1 a5 y I4 q# K' L- ?0 a& J+ W4 H
/* assign the tl som board LED-GPIOs*/. Y& l9 p; `3 _ \1 W
static const short da850_evm_tl_user_led_pins[] = {
6 c0 @. t8 o( @4 [0 x /* These pins are definition at <mach/mux.h> file */
W4 b1 n; K; H. T DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 C$ R% X) T) t0 z8 k -1
. G( A5 `7 N8 r" x: j5 E, Z" h};0 D% |# D4 J4 ]1 H. b/ P; k4 ]& k
7 ^5 m/ [3 A1 \. n, Tstatic struct gpio_led da850_evm_tl_leds[] = {4 m; t: q% k' z* l g. @7 z; r; k
{; `7 l" T4 @& [6 n2 N
.active_low = 0,; @( J1 d. P8 H; u, C8 H. j
.gpio = DA850_USER_LED0,
$ U. k2 E$ g% D4 w .name = "user_led0",
* u/ @8 z/ C( I& o; f0 [- Y" Z .default_trigger = "default-on",
+ {# f+ \# _* L! Z7 v! Q },
3 ^6 N1 d% f* C e% C {
) t. Q% m; a: [4 [ .active_low = 0,
- v i" k- Z* a7 e/ {# V0 ^ .gpio = DA850_USER_LED1,
7 |' g: j! i. C9 x$ M& m; A .name = "user_led1",
; N: h+ {/ k9 ^" i2 v .default_trigger = "default-on",0 r. u3 E! M9 q/ |" S) o/ P5 b
},- T9 a v1 X# Q# h3 m
{" I1 j) z! s# \6 `$ o6 D: ^
.active_low = 0,+ i% P7 E8 p/ @1 x
.gpio = DA850_USER_LED2,
+ M/ T( u# n! N( h k: b .name = "user_led2",- `; }, _8 `( _ m8 w0 ]
.default_trigger = "default-on",) O6 i. S5 Q: ]1 F3 l
},: N9 O5 F. v! M; l5 C8 X
{
( P p' `' ~7 p% s" W .active_low = 0,; u" P/ ~4 B$ f! b: u( \8 ~
.gpio = DA850_USER_LED3,
% H2 B8 p6 y7 ^5 T, w .name = "user_led3",/ ?0 A" S) A( N' \+ d; y( J
.default_trigger = "default-on",
( G# t* i; Q# g },
7 H; Z7 b! e$ v4 k# {& G& I$ d};& n) K: N2 e6 W0 c: r+ W1 `
7 \. M. H8 E/ z) Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 s8 {# E) i9 {0 `# f9 ?' Y .leds = da850_evm_tl_leds,* F! Q" }1 i# R! |( n% N- q+ ]2 f; k
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; R3 Q0 F, o" D, i
};
2 a' U. G2 | {2 r" b5 u! z% s6 x
& ?& i! \# t) f Z; n4 Z2 I( D& \$ Estatic void led_dev_release(struct device *dev)3 d+ k& |7 J4 E* Y
{
" H. g' F$ U9 k3 ~};& ^, }4 X e# Y# n& t- v8 r9 b9 Y
( ?* ]+ W; @- l/ B* pstatic struct platform_device da850_evm_tl_leds_device = {/ X) U$ @! D7 H- d4 u
.name = "leds-gpio"," J8 |8 ?; q2 i. u+ O1 z- _
.id = 1,
0 T' p* [ S1 C6 m1 M/ W7 ~ .dev = {
6 F/ _# D# K$ q) ~9 S .platform_data = &da850_evm_tl_leds_pdata,
4 j, V# w- \. u( r .release = led_dev_release,
& ?; d& ?' g( ]/ b2 \/ h( E* z }
- _! C, e6 T3 C. g9 l};1 g7 g+ T9 u: U* i _& |' d6 a
4 K5 U1 G9 V% V# x4 u2 |3 Y$ ~' B+ zstatic int __init led_platform_init(void)
2 N: v0 Y; Y$ w2 s* \{
6 R5 i8 B* w* m' N+ \0 S F int ret;
# ^. |$ f1 H( Q1 @! z4 q( K2 ^6 d#if 0
' v8 C" M% z: D" U ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. b8 g" r0 |0 y if (ret). x1 v+ s ]0 s+ O* j6 x9 ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 I1 o8 t) t; ]( Z
"%d\n", ret);
6 A9 }/ S4 P- T" [" |#endif
, K; [/ \- j M0 O5 Z ret = platform_device_register(&da850_evm_tl_leds_device);
% u( D: ^: g) E3 w if (ret)4 |( _7 I5 W% D4 {2 x C M5 K
pr_warning("Could not register som GPIO expander LEDS");
% `6 f# d) p0 [ else
0 l) i5 T% [. k8 s/ S5 A2 O printk(KERN_INFO "LED register sucessful!\n");
* y& Y8 G6 R# J. z' l. C# u7 z8 N- P* E. H, ]
return ret;; I- G3 D% F" o' V
}
3 i! i+ U! S1 n4 U7 a$ q
5 X) F. ^& T. [. }1 @6 W! istatic void __exit led_platform_exit(void)" f3 l/ z: Z2 _' Q4 D/ C0 J: D
{
0 A5 R- S& E$ ^. f platform_device_unregister(&da850_evm_tl_leds_device);( q$ H9 |5 y' M# N: m) _ u8 J
$ ~! s5 a! d+ O) M, y+ c, Z printk(KERN_INFO "LED unregister!\n");
" A0 ?/ u ~. l}5 M- i6 ^) V3 E. [
' F' m! K0 ~3 y( W. Vmodule_init(led_platform_init);
# D/ q7 \$ V5 s$ N" Qmodule_exit(led_platform_exit);) K& A& {2 V8 B" N7 b( y, Y
1 J3 M" k! S- Q# m( i2 u5 _MODULE_DESCRIPTION("Led platform driver");- o. w: v! q( P3 a6 ]% {
MODULE_AUTHOR("Tronlong");) T) i, e* f$ S0 ~
MODULE_LICENSE("GPL");
$ X, c0 [4 {6 q0 W4 ?2 K' a. R9 G" [8 t( y0 y
|
|