|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% _7 K5 O, k" ~
#include <linux/init.h>2 M6 P' X7 T( O8 N+ @7 K1 X6 P9 _
#include <linux/module.h>; n# M' ^9 Y( ^4 `* r# q$ y, Y0 C
#include <linux/kernel.h> o) G8 i( [& a8 [' `
#include <linux/types.h>
. U( Q6 Z& @9 b6 j9 n( ?6 y( u#include <linux/gpio.h>+ K2 G6 p; l8 l4 W( ]" @
#include <linux/leds.h>" I- n2 ]! Q+ e" x( f' q! ?; i
#include <linux/platform_device.h>; y0 s9 C; k. f) F1 |' _3 t
( G% R* L! H4 d7 h# I! x# U
#include <asm/mach-types.h>+ `( M: t0 b l; m* H
#include <asm/mach/arch.h>( d3 q7 {: F, p( O) J6 g6 ]6 ]
#include <mach/da8xx.h>& n2 v! }; _) @) i
#include <mach/mux.h>4 y, F4 K# V. z
0 E, k+ Q c( Z# w#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 ~: q* J$ ^) R Q" K#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 `* U5 H- ~# f2 Z. w/ v#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" W# N' H; g/ u4 w0 D. a
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; \7 r/ w8 ?; T# o' E# B$ D! K) w- x8 W, ~# Q& E, i
/* assign the tl som board LED-GPIOs*/
0 X; Z7 Y% ?/ ]# J% Zstatic const short da850_evm_tl_user_led_pins[] = {8 A/ N6 e' ~1 M* N% \
/* These pins are definition at <mach/mux.h> file */
% w# B% I8 L' Q7 {# _. s# M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ I3 |6 D6 ?" ~5 {% x
-11 R+ i9 \2 P, O& x$ T
};/ ^- r ~: |) K( F8 L: }' W
0 ]6 {$ I. X0 t( Q" p% N0 F
static struct gpio_led da850_evm_tl_leds[] = {
; q1 h% s1 h( ]( T. f {
0 A) F% p* V5 k( i8 W6 Z .active_low = 0,1 r$ e) V1 ^' ]
.gpio = DA850_USER_LED0,& C0 T% h/ H9 E& j
.name = "user_led0",& e9 O3 I% c7 F
.default_trigger = "default-on",
1 ~" H' T9 n. }4 m2 \) w },
0 f( P6 |; |& w5 R$ i) r {3 T2 I2 Q! `7 H( O
.active_low = 0,. C+ P, N3 N0 i% l8 n! r
.gpio = DA850_USER_LED1,
$ W. T" ?) @' b! D+ m' L! f1 o" f .name = "user_led1",2 w& {: Z5 ~& P& K
.default_trigger = "default-on",
) B# f: u9 J+ _0 a* w' e },' Y; x+ |5 W5 i
{3 _, F7 i! e, E- N
.active_low = 0,1 C8 Q/ m5 K+ ^( Z: L
.gpio = DA850_USER_LED2,# M! n% v$ K, }4 @- N" U
.name = "user_led2",& ]6 Y( g2 ]: @0 P' o, O0 u
.default_trigger = "default-on",2 l3 j1 K$ V: t" e! \ s. v
},
# d' a% Z; q) z {, F; U& V1 U: z5 X# f. G/ p3 s
.active_low = 0,
- x+ Y3 r4 {, I4 h4 p* ~2 m( b* \& \ .gpio = DA850_USER_LED3,
' h$ I3 v+ x/ W" h7 Y .name = "user_led3", i! D4 f; R6 \+ I0 Q' |; W
.default_trigger = "default-on",5 ~# y- f9 J `: p! z
},6 P! ]2 s3 Q5 o6 t
};1 f5 P; P/ x' C7 o) F0 r2 K5 e( b
# g+ w! ^4 V- d9 W4 ^8 W, w
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& ~2 U9 M8 j% U$ N0 Y .leds = da850_evm_tl_leds,# `2 g. {) K3 ~7 R8 V0 ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( z7 v& u7 ` p: U+ T5 s! C7 c};) m) x6 H1 E0 h# B# S- @6 l' }' W
& j L% G+ L& G4 e& N' I( Y
static void led_dev_release(struct device *dev)$ O+ h+ }9 Z6 c/ }! k3 q* [
{2 g \. {( T& N% {% Y0 a% o: _
};% J, h5 b# U* Q0 I7 V) z) I
7 X: { l# ^, j9 i: V0 B% Dstatic struct platform_device da850_evm_tl_leds_device = {( y$ |# d# K6 C& p* q S
.name = "leds-gpio",
- J+ G: u8 c1 n" [" G .id = 1,
|: q" l6 E3 X1 a3 N6 i. M .dev = {; S- R; \. A- _) \+ j) v
.platform_data = &da850_evm_tl_leds_pdata,
6 \4 _* m5 Q9 M .release = led_dev_release,
/ r0 D4 s( ~' S& k2 a/ c; K+ m' @% d }; t$ n: o9 Y; X5 t" {% e' J& O3 v
};
7 Z0 H0 r7 ?8 Q! Y, G, W
, L1 \0 H) ]2 ^7 b5 estatic int __init led_platform_init(void)
9 D8 W9 N/ z' m) V6 e{* [& O$ j1 k3 i/ E0 T
int ret;. d D/ D7 O1 B8 h
#if 0
$ K R* s# a1 m/ B/ ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. Y- M L9 a! T3 P$ i; ?
if (ret)
& z: u! D9 d; Q# j1 m pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 Y* @" f/ q/ w/ F; g$ O "%d\n", ret);1 d) p1 V: v3 `' W( m3 H
#endif
$ s) M& N( c! t: j ret = platform_device_register(&da850_evm_tl_leds_device);
! ^' j# l8 k' a2 g$ ^8 k. V if (ret)
0 m- [( S$ t) w" [! M) P5 i5 k* g pr_warning("Could not register som GPIO expander LEDS");* c8 e! a' N2 d( o% [9 ]
else% F" d, J5 [6 ~# w, t* P+ O
printk(KERN_INFO "LED register sucessful!\n");
3 m6 K. W, ^4 B }, B6 Y
2 i, I+ Z% K9 L: g return ret;
8 t7 d* O- R4 _: i+ ]}9 B4 j3 h" _2 ~6 m- n$ r% x
% b* W% b) W2 Y9 q# e7 l) A: e# j( gstatic void __exit led_platform_exit(void)& b X, K1 u- ?4 _" @
{0 c! q; m8 c2 g+ }4 X( X
platform_device_unregister(&da850_evm_tl_leds_device);) m: }3 i* q5 r" k/ P. z( b( v
4 w0 A) Q5 _: I
printk(KERN_INFO "LED unregister!\n");* _% a) P. }' F9 \# }* G \; M& f
}
- C! x, u% ?) V9 ] z) }$ W6 |- O% }' W% y3 D3 v f3 r
module_init(led_platform_init);+ k5 A& L% f4 z2 |* E
module_exit(led_platform_exit);
7 l. Y0 J5 J2 W0 F; m. x* A: l& u9 |2 n6 z3 V
MODULE_DESCRIPTION("Led platform driver");
* n, Y! z! V. d) mMODULE_AUTHOR("Tronlong");7 ]* Z7 M( B# e+ l4 t
MODULE_LICENSE("GPL");
: n1 F7 X9 I1 D. J+ k
" I' G8 f8 B; I/ B+ o+ Q |
|