|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 X; O4 U8 _4 P4 D# W) T
#include <linux/init.h>
6 s, i s" b* y4 ?5 M5 T4 r T% i- W#include <linux/module.h>
+ h# w1 H) I, F. C#include <linux/kernel.h>
" m( W3 E: z, e8 s9 g* O) l#include <linux/types.h>0 X1 t# C5 Z" i
#include <linux/gpio.h>
+ E1 v% p- G% I2 n C#include <linux/leds.h>* f! s1 J+ e0 m
#include <linux/platform_device.h># }+ Q6 B/ O* D# L
( V! g# {8 M( U6 v9 H# Q) G#include <asm/mach-types.h># d t5 B' w S# |
#include <asm/mach/arch.h>6 L- z1 G! O! l
#include <mach/da8xx.h>
% F& U# T: }. {3 }; e3 F#include <mach/mux.h>; Y1 Q |; d* `! _" Q1 h) R1 |
7 i6 q, l' O' V' w2 l: J- Z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* F$ @% ?' a9 \ D4 }! u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' I/ [' v, }1 G& \9 v#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) O" j2 F& U; L8 W#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! |/ G L* e- O! N& y$ V+ ]" b' S8 \& I( t% M6 [" V3 g* F5 F
/* assign the tl som board LED-GPIOs*/
' w0 [% e9 R/ k+ W3 K- @+ `static const short da850_evm_tl_user_led_pins[] = {; {/ N2 k3 J; _' R
/* These pins are definition at <mach/mux.h> file */. d7 ^ x& l+ T0 |0 I. @
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 v* v, ]2 t# T/ J -13 I# F+ S1 J+ [) h$ M& N2 g3 H
};
* j i. s% Z* Z/ I7 S- X& b) }5 n; V* R$ ?& Y
static struct gpio_led da850_evm_tl_leds[] = {
1 S) L% ]! v, E1 ?6 q. v {0 X# j* u' |, p& ?+ A6 D) L$ m( @! q
.active_low = 0,
! s6 ]# D5 s8 d4 L$ B- B .gpio = DA850_USER_LED0,2 C0 c, Q, V& C, W; { L
.name = "user_led0",) d6 ~( P+ |/ z2 z7 j
.default_trigger = "default-on",
8 J" j% b9 j; m; U9 F },
8 |" M2 |& V* m/ p" Z {
; E! X6 V! U1 k! |5 m% v+ q .active_low = 0,5 o7 b E1 l; {- m
.gpio = DA850_USER_LED1,
& @1 L: X/ e6 J" |" B1 ? .name = "user_led1",- |1 O f5 I: v6 g8 E$ o
.default_trigger = "default-on",7 ?( ?+ S: q8 W1 k
},
4 v+ A$ `7 m0 w" }- G( R {
/ u" n3 k ]5 N* Q3 L4 L .active_low = 0,
5 n2 |1 a2 J% r0 p5 M+ W .gpio = DA850_USER_LED2,6 u" @0 C! x# ]# x
.name = "user_led2",
2 \* K+ |/ }" o6 }- a .default_trigger = "default-on",
0 h/ f) O2 S/ o. M9 ~ },
3 B* ]3 D: q: Z! H+ J) c6 U6 B7 b {
# {* W d0 I. @3 Q) H. A .active_low = 0,8 y2 D( h: _' X; I M- g
.gpio = DA850_USER_LED3,
: A/ M: ^$ r3 }# t9 _3 ^ .name = "user_led3",
; N- i" P3 b3 D# \ .default_trigger = "default-on",
( y0 ?4 G( B* {& H6 C- T$ [" X# X },. w+ ~! P, z; W6 O0 y6 I- ^7 Q
};
' g3 h- v' h" N9 x0 ~! [) o: x4 J
$ [5 d$ x! u$ _, Z" ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ ]; ~0 u0 u' ^/ z .leds = da850_evm_tl_leds,
' G4 e" J) @1 `; G) X6 v0 L .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 @, H# S3 _; E' \7 M2 h};" D6 v% z* ]+ X4 W& r( M
; F( F4 i7 d0 Y Q
static void led_dev_release(struct device *dev): U2 S/ W$ t1 t0 C- D
{
: D' u K5 J/ o2 q* N2 B/ Q};, r# ^% h1 J- Q! ]
5 T/ L) n+ ^8 q* F( ~static struct platform_device da850_evm_tl_leds_device = {5 M/ I; r1 S$ O. X5 w7 x9 |; H
.name = "leds-gpio",. T9 w; p$ W6 J: s
.id = 1,2 A6 ? z: P k- U
.dev = {
, G0 a0 a- _* d .platform_data = &da850_evm_tl_leds_pdata,% C- U- P; @/ e, K4 e8 s
.release = led_dev_release,. @1 P2 e% E+ g) ?0 K6 b. r
}7 H# f) m' M& ^! }% ]# A. B8 l" a) u: W
};+ F4 p1 i2 C% B# e* Z
: j( i2 u4 f. y+ k8 xstatic int __init led_platform_init(void)
2 `+ R0 _' n# j Z9 ^{; i1 X, F, z. r) k8 y( L
int ret;
1 j' O; I# n+ j1 J#if 0
$ M& c& e! j% I. X/ Q& Q$ z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: A) Y, G) t1 `* ] } if (ret)
6 a) Z- a+ @3 ]& q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 s, B% Z' ~" t: t; K; @
"%d\n", ret);
- m8 y: y( b: Q8 n' U0 a. Q0 z#endif
8 u5 W/ T4 t1 m0 |( A/ [2 X; `' ~( r ret = platform_device_register(&da850_evm_tl_leds_device);
9 f* Q: M7 N, l4 O if (ret)
7 s: H5 f& v8 y7 Y# P8 h( O pr_warning("Could not register som GPIO expander LEDS");
. x. X/ T3 i$ J/ E: @2 u else, j3 V/ z7 o& q6 J- Q
printk(KERN_INFO "LED register sucessful!\n");
$ U) R: l' Y% _3 f1 o. Z- l% p& |+ N9 }3 W/ u
return ret;
# T! R6 }1 q( l d+ u* N}% N; _4 u8 W" T- V* Y
: N! q7 @# ~; C* Hstatic void __exit led_platform_exit(void)
1 U) Z: a2 @# w* \{/ V( J5 v" e/ U( W
platform_device_unregister(&da850_evm_tl_leds_device);3 r$ U# l2 c: F
- f* E; O" t- R5 R4 I printk(KERN_INFO "LED unregister!\n");. u" @2 K& N2 s2 @4 T: b! u' w
}
1 S9 g: ~0 K+ r' K" P5 y- `& K/ w0 c
module_init(led_platform_init);
: |0 I# h7 [& e/ P, \/ o+ Hmodule_exit(led_platform_exit);
# z5 b9 N. N1 u9 N" ? }
8 u' G) }4 r! ]- NMODULE_DESCRIPTION("Led platform driver");
; C0 ?# T6 s- M3 Q$ @5 d7 GMODULE_AUTHOR("Tronlong");) t8 y4 r7 ?8 Q3 E
MODULE_LICENSE("GPL");4 F) F2 T) n- B4 q5 f) e* p+ o
* e% O- x4 v0 D* E, o9 ~; t |
|