|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 U4 w$ a' G! S( l
#include <linux/init.h>0 y( l' r* D' n) h! F/ x0 V
#include <linux/module.h>
( M: @* P7 c! \8 b) }0 S# X# \#include <linux/kernel.h>- Q1 w& f! h! A" o( N& P& O) J
#include <linux/types.h>2 @$ [5 ^; a% {7 H! H# O
#include <linux/gpio.h>
4 K: |8 C+ P0 B8 } E. |1 N" ^#include <linux/leds.h>$ o- I8 j! V! a0 K1 L
#include <linux/platform_device.h>
o2 x% E: V2 B( B) D
$ Y+ i! \0 m/ K6 D#include <asm/mach-types.h>
$ A/ r3 i. H- r7 x% H. O#include <asm/mach/arch.h>
2 z4 G* r( {; W; k#include <mach/da8xx.h>
9 ]7 v/ z% l9 M1 ]* C [* }5 X- U9 |#include <mach/mux.h>
5 H% l6 ~- u) K/ R0 r! g3 p0 `# O( ` e
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 X: O% b! C4 o& N+ G* d4 i4 L" w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* ]6 x% E8 A% J$ [* p
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
`, J4 e; z1 R8 O( ^' I2 c) K5 w#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 ~3 q* ]7 P; P1 P5 g4 _: ~" }: I6 \9 M5 S5 f) b
/* assign the tl som board LED-GPIOs*/5 k# H. Q+ ?6 }/ F4 G8 R) p" P
static const short da850_evm_tl_user_led_pins[] = {2 t, z& |' w+ r! T {& D L
/* These pins are definition at <mach/mux.h> file *// H0 v7 `4 m& p" Q5 C; t# `& N
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) F' C1 |% U2 h, n9 W
-1, T. J1 O, u8 Y( ^
};
+ h. P7 c0 V7 m5 J; r8 p, K0 g$ a5 ~+ N0 J% y
static struct gpio_led da850_evm_tl_leds[] = {. ~" ^) {1 |& p6 I5 X+ c
{
: A9 y5 i0 o. }1 l& F5 ^, h b. y .active_low = 0,
4 J2 ^% H8 L4 Q$ V# x% o3 u) a/ e, i .gpio = DA850_USER_LED0,
, Y6 b f4 L1 O3 ^ .name = "user_led0",# `: B$ N) f# @& |3 m. b0 V
.default_trigger = "default-on",$ p* } i0 M: I
},
/ k& T6 e1 t% F9 ~& r# s& { {1 `9 C' e5 g' @5 U
.active_low = 0,0 U6 E9 Q' l+ y8 k% U* b
.gpio = DA850_USER_LED1,8 h5 u* K8 \% \2 t
.name = "user_led1",2 p4 S3 ]" R2 h! u, p+ G7 k
.default_trigger = "default-on",
2 ?! Y- l: ?& I4 a" G+ _, Z% Y },$ F+ y0 o0 z7 k) H6 ?5 l0 @
{ @/ Q8 N, a7 W/ O7 s
.active_low = 0,0 T, B7 W+ d9 v
.gpio = DA850_USER_LED2,
' S2 j# W; v/ m2 r9 d .name = "user_led2",
$ H$ w. K* X* Q d .default_trigger = "default-on",
" H8 B# Z! n2 G2 g6 Z. a },
" y9 U2 Y$ A2 d% G8 ~7 o# j6 ` {
; x* N+ i \: s3 z! x, F+ j .active_low = 0,
; `1 S, _/ Q. R5 z8 d .gpio = DA850_USER_LED3,# G/ l5 M& U' _( m
.name = "user_led3",% L$ O o1 R. q' ^( D% `
.default_trigger = "default-on",4 b) H% _. x* Y. D$ z
},$ E f% j2 e5 [2 _6 T- p
};3 O: W2 N0 ~. Q4 L
2 b8 F% W: k1 L6 b) T% H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 X; D" K* F7 t$ h" E, E; D8 S .leds = da850_evm_tl_leds,
% F$ u/ o* }; e .num_leds = ARRAY_SIZE(da850_evm_tl_leds), ]& W" {1 g7 |( o% R. ?5 G& E
};
( p' @9 z! Y0 W; w5 u8 |4 P
" o, n0 C( J! u1 t5 w9 Kstatic void led_dev_release(struct device *dev)
6 _; t1 Q4 g l9 Z$ D$ i{5 U# U* j( z& F- f2 `' m! o
};
# k0 {. D! J+ {: o5 S8 j2 J- G+ x; a5 b$ {( V
static struct platform_device da850_evm_tl_leds_device = {
4 U5 _" b" R& K .name = "leds-gpio"," @3 t& q! @" y9 P) D
.id = 1,
: j* X3 q0 H# j3 F1 ~9 S .dev = {
' ?" l M" `% Z0 ~, N .platform_data = &da850_evm_tl_leds_pdata,
3 l" X5 v1 z( w/ @9 o# o" y .release = led_dev_release,
Q) C& x+ J/ ` }
" c9 E! U( t7 k};$ Q# K/ P7 o# Z5 C' H# J+ F
% G6 s) |$ L+ S* {static int __init led_platform_init(void)
$ W+ t: @4 n$ {1 C' S+ L{) U9 Z- G. i- E' R4 |* e& k
int ret;. W& A1 |7 Q2 F9 P9 t
#if 0
9 h; `& V' o7 u v- t% V! n- { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& m4 R" A0 S- | j8 B7 @; J. \0 C2 ]
if (ret)' c( P: S% u4 V6 F
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; p: d2 o6 X- c2 ]5 C "%d\n", ret);
. w9 L5 _/ [. f: p( u! d#endif: h8 x9 k7 l. Y, S6 s8 @
ret = platform_device_register(&da850_evm_tl_leds_device);0 ~$ I5 z; v% s5 t" {: b% B
if (ret)
# B2 M) f4 P6 Z pr_warning("Could not register som GPIO expander LEDS");
0 z& z0 u. O5 b6 f else w# `- p5 c! i
printk(KERN_INFO "LED register sucessful!\n");
3 w1 f0 j9 \' B& H3 c4 Q' F! J6 |- e% m \2 ]- |( A7 h6 j
return ret;4 S! ]4 r, n6 P0 R$ ~
}
5 C. K5 z, G! e& Y4 F- M3 z% x6 \7 @8 Z; {
static void __exit led_platform_exit(void)" S: z; s. ]; ?: t7 @, \" E6 K
{' O6 {& d9 i, a7 n0 o) l+ o% {
platform_device_unregister(&da850_evm_tl_leds_device);
1 r, d# H4 M( i0 W9 o3 {7 L+ q% b( R2 Q6 b# J
printk(KERN_INFO "LED unregister!\n");; y. a; N. R" @ b& l d9 z5 f. y
}
1 N2 i1 S$ X/ }0 h' E
9 T( Z* s Z4 c8 `7 qmodule_init(led_platform_init);
0 f' N" u3 ?* o: bmodule_exit(led_platform_exit);
% `2 B+ } X5 K+ }; E
! h* Z7 [/ A5 h+ H$ T8 ~# uMODULE_DESCRIPTION("Led platform driver");& b, J- y. y% `) ]
MODULE_AUTHOR("Tronlong");+ ^. ^" x9 ?# d
MODULE_LICENSE("GPL");, L% a Y' u6 U1 a) k$ H) H
0 X' w2 ~0 }- O; S/ ]; O) P2 f
|
|