|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) I2 ]! e5 o+ l+ A0 }9 ^& _; P" x#include <linux/init.h>8 C7 J0 r4 @6 }. l5 q) r* f8 s/ \) e
#include <linux/module.h>
) e5 X; k5 g' X3 ^& P#include <linux/kernel.h>
0 m6 b: h) O9 r6 b#include <linux/types.h>
1 x. Z3 F2 R* L& N3 Q* g' W#include <linux/gpio.h>; }2 n% {1 o6 y2 X) n: \
#include <linux/leds.h>7 i; Z5 ]( x, q' e- e% F, n0 Y
#include <linux/platform_device.h>; o& e8 c% e1 O# c3 s5 j7 s
- Z; V0 a3 R2 p: {( \; c2 _#include <asm/mach-types.h>( ~" a* |! D. s" l# E( y) Z f
#include <asm/mach/arch.h>
+ @8 W5 ~# o7 o, D, b#include <mach/da8xx.h>0 F/ `: ]; t+ U: d# p& n
#include <mach/mux.h>4 m. f7 a/ Y D( E9 ~
6 c) E& t, z2 t( P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* V6 o6 [% _- [9 d* w
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ |0 |. _6 F4 f9 ]. K7 s/ p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; ?$ t0 `" J4 w( }1 {, D/ v9 J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 l2 P# |- b# q0 x9 ]( R6 O- v
6 M$ ]4 g/ Y3 f( `
/* assign the tl som board LED-GPIOs*/
0 b* t/ V) E! J1 X+ Fstatic const short da850_evm_tl_user_led_pins[] = { H- R2 `6 g: ^/ {
/* These pins are definition at <mach/mux.h> file */
* ?+ C" F' F0 ]* e; {0 e5 X DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- a" C" s5 e0 W! }0 _" n/ M -1" G6 ^7 d' r- e# F/ \; Q
};
$ c3 |, \ o2 I
8 ~, m( ^1 _; P" x0 s8 j) _static struct gpio_led da850_evm_tl_leds[] = {; u* W/ Y1 M1 d% A! r5 g& J9 y
{
& t6 W5 s( n7 H6 R1 q/ w7 h6 Y2 F! Z; k .active_low = 0,! _# M$ V5 G+ _- Q2 l! j
.gpio = DA850_USER_LED0,
! {6 `! L3 q/ k6 y# E4 B6 O+ z .name = "user_led0",# G4 z4 }9 K4 L8 c% B7 [
.default_trigger = "default-on",8 }) Q& I* D; z5 ]; }. [
},8 T( @0 s! W" b; A" q
{2 q1 i3 H+ ^) K& }8 C" M
.active_low = 0,
* ?0 [3 v+ s% \& `, M! D( ~ .gpio = DA850_USER_LED1,' `- Z# H8 ~0 y1 F3 g
.name = "user_led1",
$ t# C5 J2 V2 R1 K! e .default_trigger = "default-on",
! _- y% c) I- Z# f) R+ Q$ P },
! k+ R/ S E5 O/ X+ N1 F* Q9 ? {
+ D& W- _9 |8 M6 H+ ] .active_low = 0,4 e6 H5 ^! Q' E+ E. o& r
.gpio = DA850_USER_LED2,- _/ ~ M$ Z- V! B) q7 Z% j
.name = "user_led2", Y& H6 Z8 W& J* T8 `) g* \
.default_trigger = "default-on",
* T# N: P& k h/ ^5 V },
4 W5 f0 M: f) m8 `( c {1 o9 X8 E6 R- j1 p- |, |- S+ H/ i8 S
.active_low = 0,7 v6 N' ^3 K+ K: d, ~# y& i" C
.gpio = DA850_USER_LED3,3 U {) z% I3 x8 n5 p$ w
.name = "user_led3",* `6 H. X( w" {" C! t/ s
.default_trigger = "default-on",
: Y$ N5 _. T/ K5 r C },
9 J. E) Q: w1 L8 I; u# j};
/ B& F- N- [6 u h; s6 x
4 G0 R, R" s" K! x% Y1 vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# `3 v/ T$ o! }- }
.leds = da850_evm_tl_leds,
* X& l( }+ V B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 {) O: z3 W0 E2 x+ T5 L, C5 g
};
. {; D& @0 s4 x" ^
" V4 X4 P, H" T! i/ \1 `- Fstatic void led_dev_release(struct device *dev)5 w2 T3 q8 n8 C% M% v' G
{5 ~: |( R. n7 k6 I3 w$ W& l1 e" y
};8 P! s: {8 X/ L% i2 B( x! c" E. G
5 e% y3 q: |; z! L* W
static struct platform_device da850_evm_tl_leds_device = {( v Y- k- u9 R0 \
.name = "leds-gpio",
$ q( }+ f1 n3 D/ K8 D .id = 1,( g: o/ a* ~6 T. ^7 |' D& |, j
.dev = {" j5 p/ z" C& M; Q6 j5 K) _
.platform_data = &da850_evm_tl_leds_pdata,; \; @! {4 k8 ?9 D3 w
.release = led_dev_release,
3 N: X! @ {7 q+ `$ \ }
+ S5 F7 _5 K+ Y- {};
! |3 s4 h2 C1 t% J" _
$ e4 D1 N- Z) p2 z/ N4 \9 Bstatic int __init led_platform_init(void)
2 `4 D7 q9 M6 I f{& i! ~. K6 `/ ?, n) ?2 \$ L8 ]
int ret;
/ L. } r1 l# W P#if 08 A, C& w+ p! B3 M
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& n; `- V7 c4 o1 P6 V( j! D3 L' W if (ret)
0 U, Z0 F3 H2 m2 k/ X/ V pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 I" m. v7 q8 W+ r# r, j "%d\n", ret);; g) o" ?, f6 D1 }0 E
#endif2 B2 {( p6 V! i
ret = platform_device_register(&da850_evm_tl_leds_device);
) y% C% U' S6 ~# F3 B {7 H if (ret)
8 r) u$ s6 r3 q7 R X pr_warning("Could not register som GPIO expander LEDS");! S) I3 v8 H' ]+ N
else
3 ^& ?/ s5 F0 k8 b9 f3 T# e printk(KERN_INFO "LED register sucessful!\n");* O0 }& i/ c7 D0 b2 A
" _6 T. g$ b& i0 F! H return ret;. f0 h3 P5 Z( M9 N3 L
}$ Y, U$ }8 H& s) c; o, q. p: M
4 c Q4 x% q+ I. ~7 H+ Jstatic void __exit led_platform_exit(void)
' X4 j' q- V1 m* m/ A; K, h{% Z: L$ d5 L( \6 N' A9 z
platform_device_unregister(&da850_evm_tl_leds_device);
r- T6 A# {( I A' O2 [: ^1 c9 @
; w. k e k7 X# @: C, R4 ` printk(KERN_INFO "LED unregister!\n");4 p1 B7 c I& w# h) p
}
) U t3 y( B7 M4 X; @8 d; P6 y- z& n
module_init(led_platform_init);
2 D: C3 I6 C2 g: Xmodule_exit(led_platform_exit);1 T* o0 e+ p# R O! y9 D, `# p
8 r Q [9 W& }, t, FMODULE_DESCRIPTION("Led platform driver");9 s$ u* Q. e6 k, K4 t
MODULE_AUTHOR("Tronlong");/ M3 l/ R* f1 |4 Y0 T8 B% @
MODULE_LICENSE("GPL");
* ^% F, [3 N" v2 f) P
" I$ C8 p/ d' E4 p |
|