|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( y- o( Q8 I+ G, {4 X! [ F2 q( c#include <linux/init.h>: a: v) a/ M0 @
#include <linux/module.h>) u( E2 | A; l- Q# O
#include <linux/kernel.h>, q1 x- E4 @' @
#include <linux/types.h> T1 I0 s# k4 o+ @4 Z
#include <linux/gpio.h>
+ N i" M. ]- e1 n7 W2 o3 Y' j#include <linux/leds.h>
1 A4 p6 ~. r4 J6 l#include <linux/platform_device.h>
; G4 Q" }* u5 c- g( y* }9 q
4 s, G9 v# f4 Q" Z2 o#include <asm/mach-types.h>
3 j. y$ u" w9 n: f& x#include <asm/mach/arch.h>+ [+ D' F# E' v1 S8 e
#include <mach/da8xx.h>2 ~4 ^3 b+ I: B6 s
#include <mach/mux.h>
% T0 C+ E8 K: p2 z6 V8 t( {( u7 g
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% L: @$ |5 p: `7 h4 M( @#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, f6 j* e- [$ B4 L. o# @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 |7 @( t ?6 ]4 K#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): T9 X8 e' n7 e; f9 y% B! D# b
% G) n" h' I7 O3 [$ F
/* assign the tl som board LED-GPIOs*/4 s. p: D G8 U( O2 G. @3 I
static const short da850_evm_tl_user_led_pins[] = {8 i7 r7 x6 U Y# N f
/* These pins are definition at <mach/mux.h> file */: \. W& c$ V( w! a: t( b3 l5 N5 D3 h
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* b! P( a5 O0 i' |" u; ]! V& Q -1: E0 Q! R8 n1 g. w7 r
};, E- A+ U6 O; w3 w4 F4 I7 s5 e/ z
. _0 I; v/ z5 C& Q; \! C( q# p
static struct gpio_led da850_evm_tl_leds[] = {
7 K; s: {( G8 T0 t {
% k2 Q3 Q7 I3 ^4 s; m .active_low = 0,. ^4 P: a4 ^1 d; g6 T+ {. r6 ^
.gpio = DA850_USER_LED0," G; E; E$ Z! ]4 m
.name = "user_led0",
' J) s% ^+ }4 p- S0 x- N3 E .default_trigger = "default-on",
! V+ a0 A/ m0 w# ]* \4 @: h2 _7 a },
2 {# V7 y9 z9 A% |" b- a1 { {
3 p* f' k) E% v# s% Z2 {! x. w .active_low = 0,) q( K6 x5 l8 \5 s/ Z
.gpio = DA850_USER_LED1,
7 A) M1 Z4 D; L+ S4 Q, g% O7 Z .name = "user_led1", v0 l6 |8 p( Q' T
.default_trigger = "default-on",
5 I$ r' |4 ~$ f! X: o( n# M# n ^2 I },
4 I6 }3 c0 L* L0 L2 g; t0 V8 X {( T, K7 |) i/ J7 y, z9 e% ~7 {: ~
.active_low = 0,
2 m4 J/ l1 l9 A! H .gpio = DA850_USER_LED2,
) I9 r3 K4 [9 ]5 D& u+ i .name = "user_led2",* `6 ]5 i# ^3 \9 _: T$ X
.default_trigger = "default-on",
6 }2 e: [ ~/ v) Q/ [/ g },
- V3 n% Q9 k4 z. A/ X! P! V {
# n7 J$ Y6 B) K% I% { .active_low = 0,4 w. w6 U& F3 |& B& P2 ^
.gpio = DA850_USER_LED3,/ j* X( y B' g" \ H0 Q- i
.name = "user_led3",
. Q+ ?/ x. b& ^ .default_trigger = "default-on",
" c; d! p0 k, }! x& m, j! ~ },
' v# H; p7 F5 J6 Y1 m};) B) x+ [8 d: i/ O2 K! I/ |9 p
0 P, h9 N9 y/ Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 z; C: B- O* R; `
.leds = da850_evm_tl_leds,
j* l9 w( O+ r9 K; l .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# Q2 u" u& m# J ?$ L9 Z};4 L" w: e) K* D, x
+ M- x( r G0 s
static void led_dev_release(struct device *dev)7 x' _9 r' x* N* V
{( O0 I3 l# r$ I% `1 A
};
9 e3 z& }, p, L) Q: I4 X9 P+ d" g
static struct platform_device da850_evm_tl_leds_device = {
1 a8 e) w9 W/ C" [9 C( S, T5 i .name = "leds-gpio",
) X) W8 _; s; `( X$ m .id = 1,7 N- _; L- u( x
.dev = {
: D" x" I, X1 t M .platform_data = &da850_evm_tl_leds_pdata,1 W: Q9 D, A! O2 v/ X" v
.release = led_dev_release,
/ x+ D& ]7 j" Y' { }
& o( F, a! E: Z};# c: @# }3 J7 {) q `( X
$ F) w6 w$ o' H& \/ A) U' ^, ]
static int __init led_platform_init(void)
5 a/ k: M, L7 C3 N5 E' @( E6 O{. G& X+ T5 T. u' d+ T" a
int ret;. J1 Y% ^! x& Y/ g0 D! k
#if 06 u+ [/ l5 \4 i: z/ q, K
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& r( H2 m/ N: E( [ N( l
if (ret)) O+ G. g. F% \# B- X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; }4 x9 Y: q- q1 h( R2 U "%d\n", ret);
. e. c9 X+ i* ]/ T; _/ B: H1 j#endif- {: v+ T8 W/ Q9 G: }
ret = platform_device_register(&da850_evm_tl_leds_device);
$ t: A$ l+ O2 J* y: O7 j if (ret)3 G, p, L$ P8 [( i
pr_warning("Could not register som GPIO expander LEDS");' c/ K5 c k' i) z
else
7 W% ^- Y% j* U( @ printk(KERN_INFO "LED register sucessful!\n");3 ?" l8 S- v( D7 A0 m' _7 x
8 ?2 h* O4 k* F1 [4 D2 D2 W& ^
return ret;
& i7 B) a# G4 v7 N}+ p" u9 @$ N; J( S8 T+ S
! f$ @5 ?( Q% {/ l' Qstatic void __exit led_platform_exit(void)
; [) w) y3 T4 c. M{
+ P2 i R p" ` G) k platform_device_unregister(&da850_evm_tl_leds_device);" b: y8 ]/ H- v. `' S
. Q0 s& h: h# r& y' s8 s
printk(KERN_INFO "LED unregister!\n");
: [/ O5 `' Q i2 e O. u# U* h}
; c: g) h% u! `. u
4 @; j2 w+ V, e4 f8 Fmodule_init(led_platform_init);: I# {: E# r0 t( X+ A
module_exit(led_platform_exit);( S- m+ b9 Y8 o- b& m
- o! O% \ a( a& o. j$ K- `% N
MODULE_DESCRIPTION("Led platform driver");
! I! P- Y- j+ b! B" YMODULE_AUTHOR("Tronlong");4 m. d& _1 @ o' G; o
MODULE_LICENSE("GPL");
1 a8 D2 d7 X" O+ {8 N% }, a6 t3 M0 k2 T. y$ |9 ^/ i: H- w
|
|