|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- y0 m& E* A) {3 H#include <linux/init.h>
( B- z/ P& r4 J, N8 c, }# o#include <linux/module.h>( z( r q! r y) n9 e
#include <linux/kernel.h>
& r6 J8 e* }4 m1 q5 h+ X#include <linux/types.h>
: O- V- P) p: j#include <linux/gpio.h>
( P- m. ?9 J0 M. O7 U/ t5 J) P6 G#include <linux/leds.h>: ?9 c7 @: Y( l1 M, h7 s# K
#include <linux/platform_device.h>
5 e- V9 G7 N d
) r3 `. r V$ _4 a#include <asm/mach-types.h>
8 Y$ d* |- W7 b- }5 a#include <asm/mach/arch.h>
4 X# ~" k/ m5 B4 o( G# u#include <mach/da8xx.h>
2 j! _ D6 H4 o0 ?#include <mach/mux.h>8 ~# D5 s$ B5 G/ i1 K/ Z
2 P4 V" Q8 o9 x+ Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; D5 s3 o+ J. h C#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): E/ E; I6 E3 r y5 M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
J' d, e$ b3 @) l: i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): N1 J( G' R7 m8 q3 ~; F. E9 ^
/ d# |; b4 }" ?7 @9 v# L% F8 n
/* assign the tl som board LED-GPIOs*/' o" b2 H. [7 d
static const short da850_evm_tl_user_led_pins[] = {
0 v" T: _0 y7 Q, b! r$ Q /* These pins are definition at <mach/mux.h> file */! k/ H/ H6 {) V6 h9 d! L
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 p; r1 w: u# p* e) v: i -1
1 U" X) R0 {( ], B6 n8 _# J2 H};0 _! t. v/ u. h5 n" B0 T- J
4 i4 z" ~$ F" e1 |6 vstatic struct gpio_led da850_evm_tl_leds[] = {
7 i* ?- M8 P% m3 { R1 w {* p7 K% v# h2 Y A
.active_low = 0,
# \! N* q( B$ d: A8 p& a .gpio = DA850_USER_LED0,9 P! L& l, [, u8 a1 N" r; }- z
.name = "user_led0",3 q. c! z- W/ L* K5 c4 q
.default_trigger = "default-on",- r1 \- y' E! j' v
},
9 w" r; P" A6 l: Q& U {3 ]6 u/ S, ~5 q6 }8 z
.active_low = 0,6 D. m; v' C4 p4 a9 n" O+ M
.gpio = DA850_USER_LED1,
" ~1 s2 M8 k4 u4 g) ^- w .name = "user_led1",
5 {$ Y: j3 [; j" H .default_trigger = "default-on",
) v" C7 X! s2 F0 q# H },; A% l# W- G1 l( M5 a' Q# U9 k
{" h7 K' _, o2 a& O
.active_low = 0,
4 n. ~# M; M; C' R3 _8 z .gpio = DA850_USER_LED2,
* P; a+ f/ w9 N7 @) S6 V .name = "user_led2",0 l% ?, D4 ]: `& C. S
.default_trigger = "default-on",
0 E0 d; Y1 \. O# T& \0 w }, \# I* c7 \/ f: \ O3 R: W$ w
{7 E2 N3 j* }6 l! q! o0 D- p
.active_low = 0,& t& |, Z; z, R0 F- N4 e
.gpio = DA850_USER_LED3,
: N! v, O3 q6 c5 k .name = "user_led3",
% v5 w* Y7 N8 s W* g1 g0 K& j2 Y .default_trigger = "default-on",+ \! A. G x, q; C
},3 p; K6 h; c# o& v
};
/ z$ r& g! o R1 Y0 X6 j
9 M g9 e, w5 hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ f0 v: v. G& `- Z! b7 h) z3 S' M
.leds = da850_evm_tl_leds," z1 R% {0 x) H
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),% b8 X" Z( m8 X8 U' W& Y. Y
};% W& q( t. e8 q3 J4 V/ [
) l, w1 O/ h2 A: h
static void led_dev_release(struct device *dev). z+ |7 L/ r2 I; F/ c1 b. Q
{* f% H0 C( ?* e# ~2 G2 G6 s0 T
};
; y, l4 y; Z4 F' Q9 g+ B( S j' X4 r" G
static struct platform_device da850_evm_tl_leds_device = {
. G" S' F. M1 D3 ^" G .name = "leds-gpio",
# x; Q% K& L. B) D1 h, | .id = 1,+ P' x) |4 a$ X0 n
.dev = {/ `6 g- @( S" Q9 o
.platform_data = &da850_evm_tl_leds_pdata,
T- {$ u* z) n3 K3 V. T .release = led_dev_release,
( J5 @5 } |. m' v }" s' S1 [& G P4 M# ?3 ~
};$ H% A+ m. A$ D/ O, B3 q
i! ?! |* l2 e9 ^. p8 w- vstatic int __init led_platform_init(void) E$ W2 Y7 e& N* Q- l( s# O
{
- i' g0 i; h/ M( l# b. E int ret;; p3 I5 x5 ?/ A N
#if 0% _2 G- j) S) b% v- \6 ~
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); n1 G0 d3 ~- k3 E9 G
if (ret)8 I. B2 w7 m/ B' F3 s* D
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! p9 n5 ?# t# p1 s* {0 J$ x* B
"%d\n", ret);* v) y. {) ]6 Q y1 N
#endif6 O( \) e( y- I/ R: I( w/ L3 z9 f
ret = platform_device_register(&da850_evm_tl_leds_device);
' f3 L" }( S" K/ L& h) }" X" N if (ret)
. f* \) p C# I; u. m9 o pr_warning("Could not register som GPIO expander LEDS");
' D6 G( i" ?: [5 g7 t else) X" V- _& T; f5 P5 t# }4 H
printk(KERN_INFO "LED register sucessful!\n");# b7 ?9 S; B; _2 ?4 h) G
' E- {5 U/ P% P
return ret;0 Y6 \0 Z" Y7 Y$ O
}
4 x" S0 M" t+ }& }: u4 g' b' x9 L% M
static void __exit led_platform_exit(void)' b0 h. Q# }5 O- ~7 M
{
1 N0 Z r: P1 O% q# L( Z; { platform_device_unregister(&da850_evm_tl_leds_device);+ q7 P F0 g" q. M- P( H- @
3 N% I- S* [8 T7 J' J printk(KERN_INFO "LED unregister!\n");
; D3 u1 }! p3 b! w! u% J}
) i" a/ s- T4 j+ G! o1 Z+ \0 q- a9 v/ e3 _' k( W( z2 r
module_init(led_platform_init);- T( u% Z& a2 }* B3 Z& r" }( A: J
module_exit(led_platform_exit);
! a5 O% Y" }# V1 J& k
2 s) ?& m! e/ }7 O' @0 K& \MODULE_DESCRIPTION("Led platform driver");
2 P( T$ M- F: M6 d8 Q! D$ D* wMODULE_AUTHOR("Tronlong");
1 ^2 w7 R8 w2 A7 f- [MODULE_LICENSE("GPL");5 c+ |! a) x% q; v n4 h3 L" g* r
$ @2 H, g0 |& m! P
|
|