|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 Q0 e7 S: r# V0 U: Y% ]#include <linux/init.h>
: x% I6 J+ ]; G, O; |, ^#include <linux/module.h>
( Q; D( ?1 l9 M9 W#include <linux/kernel.h>
1 g* P/ f1 W( b: ^! |* r# R#include <linux/types.h>
2 o6 N ~# X$ k/ l: T3 K#include <linux/gpio.h>4 \! r* Q9 c5 s8 o$ Q
#include <linux/leds.h>
- a5 |) b* y1 H: c% l( } ^% d# m#include <linux/platform_device.h>% M2 P6 V, r% u- F
( M# R5 J/ Y9 m$ l( `#include <asm/mach-types.h>" l3 [) h ~9 K( H
#include <asm/mach/arch.h>" G8 j7 r4 V2 S# X5 {# C/ t$ V
#include <mach/da8xx.h>* z8 b2 b+ [2 B, Q4 y a; ?7 }
#include <mach/mux.h>" j' u" u) ~9 I8 }
^) |: Q8 [9 X9 @( t1 }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" S. e0 ^' Q& x7 M7 _% O
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% u# ~* U% m' L! Q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& |# h+ a% S( A5 j5 r, w: K, o4 m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 ~% Z E% E, J0 ~9 W0 n( z3 j' U1 r, T- {
/* assign the tl som board LED-GPIOs*/; C& f: o- w& j0 {2 e& x" J
static const short da850_evm_tl_user_led_pins[] = {( a& }" m1 Z" C4 B& o4 I, O
/* These pins are definition at <mach/mux.h> file */
4 ~! a3 i- o2 Y* n1 g( A3 y9 }6 W DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 N. p; s" U$ A) ^- H( O -13 P7 o% G5 J1 x6 Q! F
};& X9 V+ _* x2 B* i0 J+ h0 C
5 {$ D/ d+ {. y* X4 T
static struct gpio_led da850_evm_tl_leds[] = {7 Z% h- h. [* S' ^- u2 P
{) h1 o1 U% N$ K& f+ m3 U
.active_low = 0,# X7 c5 p' g* ~* B, X# f( r5 C
.gpio = DA850_USER_LED0,
5 Y0 ~& Y, L) m( E! [ .name = "user_led0",8 [7 W; W! `/ S! G' A* D
.default_trigger = "default-on",
8 f$ P" i- |; E' R% N },; s8 S9 J: b1 \; F. T) j
{) R! G. o [) @/ m! C
.active_low = 0,, Q. w3 O6 m# K# J
.gpio = DA850_USER_LED1,
3 A0 E4 k) n4 E& _. n: N0 P .name = "user_led1",* i6 P/ P+ [, }; z
.default_trigger = "default-on",
# b+ ?0 w; m+ N% y& ?4 `# x },6 a2 Q% q7 d/ a6 m2 `! s
{* F5 P; l! D/ ~: G/ M
.active_low = 0,1 r8 O2 E' X- M. L; W
.gpio = DA850_USER_LED2,
2 f, n5 n" O' k2 v6 U0 b .name = "user_led2",
. P( Q3 [+ B/ z6 Q+ d- f9 r .default_trigger = "default-on",* b4 w+ |/ R7 O7 e3 s: o8 y
},
3 p7 |" t3 G, ?) I R7 J# | {
" G* y4 |4 P+ _, y3 a .active_low = 0,
& C. {2 T6 l1 Z0 q .gpio = DA850_USER_LED3,+ g0 m4 [ J. G5 B& ]1 z0 z
.name = "user_led3",, [! m! Q% w3 C+ V2 j% v
.default_trigger = "default-on",
/ ?3 q5 v$ C0 k% t+ [7 U },3 H) w5 n/ L' b! H7 b
};
" e4 o" }, n1 F, p. y$ j
3 n' @7 j+ }, X6 g( i5 T% G; m4 J* G' \static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 o$ Z8 ?4 q- z8 Q; L) y
.leds = da850_evm_tl_leds,/ e% n8 n# V+ P# o! P) Y5 Z: c5 ?
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 }$ T X6 g7 T. S1 j. o
};
0 M0 ]% U( o' S" ~. D& G2 t3 o, J/ t! F. j7 h F3 `" C7 t( }
static void led_dev_release(struct device *dev)/ G# E! S3 `5 Q* x9 o" e
{
/ G& w# E0 y. |: _};% g; r; N) P# o) W! y
' P1 V# c) e* \1 K" Y: N ?" S: j
static struct platform_device da850_evm_tl_leds_device = {
) W* `% O* A# }! q .name = "leds-gpio",! V4 d f2 c( v' Q7 e6 ]8 a
.id = 1,
* V# i, l5 X2 _' W- p& O0 a- U. P .dev = {
) _1 w: S" W6 h' h/ \0 W6 I .platform_data = &da850_evm_tl_leds_pdata,1 w0 E) s0 U! j; r' q2 T
.release = led_dev_release,
+ M4 l' K& X6 S4 k/ o }
3 Y: f/ `. N- m$ x};
. K. S% |$ R+ o' u
# r$ F% U7 n! ]3 Q4 o! bstatic int __init led_platform_init(void)+ X+ _ ^1 `- d/ b+ Y
{( v- `/ h/ i2 W) _5 h
int ret;- ^* s3 d5 q8 T0 _5 W* s
#if 0% f3 S7 w8 ^; ^- A
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ b: m) w) Z0 n# r1 h9 B2 F
if (ret)
! F) L4 K; u5 w$ N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 c8 }3 p o* N {, y "%d\n", ret);
0 y P& W) S- @- Q: ^#endif$ O& V; D' q; j5 x: v6 N9 S! v
ret = platform_device_register(&da850_evm_tl_leds_device);9 `/ s- o; |9 H
if (ret), l9 u1 h" D* [+ Q
pr_warning("Could not register som GPIO expander LEDS");
' L4 {/ X+ B) _5 ? else
& Y1 r$ D' V9 u" N printk(KERN_INFO "LED register sucessful!\n");8 D) r5 U. y6 g& x i3 K
/ E6 N6 r6 [8 m3 i
return ret;2 c: V$ k" u$ T% m" Z+ j, J8 n
}
4 } c. v1 q4 v/ X3 B! g1 r
6 D" N; d: O1 a( mstatic void __exit led_platform_exit(void)% x* _2 T+ ^' I. z/ {! F X
{1 {, r' W+ i! [, o& K
platform_device_unregister(&da850_evm_tl_leds_device);
" x4 H% K: {: N
$ o$ b9 b) U/ V) c$ ^. A: h5 Y printk(KERN_INFO "LED unregister!\n");
- h: v% f" E0 p9 s6 w# z}% E0 }& B3 q# h* y' i+ p* v S1 T, S; p
! W {* D: `( n
module_init(led_platform_init);
' I4 n9 ]- [/ }# u- V" Rmodule_exit(led_platform_exit);- Z1 V$ ^9 N: M
" V& M8 x9 _* R) U* `8 f7 HMODULE_DESCRIPTION("Led platform driver");
% N$ A, n- }2 s7 pMODULE_AUTHOR("Tronlong");
1 Z. q8 x: [) {9 d4 HMODULE_LICENSE("GPL");( y) g& M2 ^& m$ N
. R: a* s) ?$ u |
|