|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ X* |7 a0 A3 k v#include <linux/init.h>
# p5 O! D w, G2 B#include <linux/module.h>
" R! v' o p4 G; w; z#include <linux/kernel.h>
+ g6 u( N! W* K8 d n#include <linux/types.h>
: x' E6 E- I6 X0 z, L/ J2 p! P: C6 i#include <linux/gpio.h>, E: r2 s5 ~8 Z, ^( c- l. }
#include <linux/leds.h>
1 I) U1 p3 G# G#include <linux/platform_device.h>
% b( h3 o; W3 d' r4 R* f2 n
, g$ d; Z1 ~3 n- c) M w- R( [0 M#include <asm/mach-types.h>, x ]5 I8 i5 z/ q: z4 D- D
#include <asm/mach/arch.h>8 K0 f( X1 W4 V! H5 ^* H
#include <mach/da8xx.h>5 y, i& Z" p& `
#include <mach/mux.h>
; s4 G3 H' G: J- R8 K& W0 ^% b5 h8 A- k' v; X& F7 H9 L; Y; k$ o2 a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( s8 P5 F6 } q5 t6 w f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 }( r1 B! g9 {2 c
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 w* n- ]7 F1 }#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. @5 V. V% z N8 G) O' C+ Z. g& B0 Q4 U4 V E) r, A. d
/* assign the tl som board LED-GPIOs*/7 c1 U& n. m2 `$ t7 l% B- p
static const short da850_evm_tl_user_led_pins[] = {
! i9 V! o( I1 g* o# }9 E /* These pins are definition at <mach/mux.h> file */6 { x/ W9 ~( R8 O2 u- O
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 O( x' C1 Z$ B; ]1 `. ^ -16 P5 U6 `; {- b) \& q8 _0 [" V
};
5 O! o+ o4 Y" P' h
7 `2 w3 r ?' P% U4 {+ K( Wstatic struct gpio_led da850_evm_tl_leds[] = {
( ?: R: Z- ?) R8 S4 x r7 Z' Z {
( }5 I7 F: H. s& |; c .active_low = 0,& _3 W, I" d6 \+ h O3 B" M0 |& X
.gpio = DA850_USER_LED0,
_9 u Y; P" v& Z2 T# l) P* X .name = "user_led0",
( o n v9 e* b$ m- g5 C9 X! J .default_trigger = "default-on",
3 A( M2 G* M: B' i8 d% l },* j( k" _* N2 v6 V# t Q( Q' ^! U, x
{/ H/ P- a7 R; |, T- y f
.active_low = 0,' P) B$ f6 b0 t/ ^: _
.gpio = DA850_USER_LED1,
x, l' E; N0 \9 ~ .name = "user_led1",
: }0 ~6 w$ K0 Q& v6 B- B s .default_trigger = "default-on",9 e& N! o6 D! F- K: M! ~
},3 e* R6 y: u0 y9 b# Q. e
{
" Q; [1 z8 K$ m% J: ] .active_low = 0,4 m; }) {8 n9 S! o% q
.gpio = DA850_USER_LED2,5 f: Z0 J2 o3 H4 n. c8 Y
.name = "user_led2",/ q0 ?# J% D) j, Y$ i
.default_trigger = "default-on",
' B% l' N5 N7 `6 h) m },% v" p+ }) H9 J- j3 |8 z& L
{
( ^* I. U; q" D8 x0 ^, m/ ` .active_low = 0,: T. F2 `# R: j0 O( T4 b9 Z
.gpio = DA850_USER_LED3,
3 G6 W# U/ C9 A0 t .name = "user_led3",) v( O' m& o" i, [
.default_trigger = "default-on",* U! B3 B2 Z$ ~1 q1 I4 Q
},
; O) W8 F8 S, }/ m};6 B- H, j& x, c) J- b; c2 P5 D& p
! B- {. x- y& E) B1 O9 u6 \# k' X4 U
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& \6 j7 _) T8 l% P
.leds = da850_evm_tl_leds,
! {& f2 S4 Y2 S M% b0 U: m .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, F2 P" a) f0 M4 a: R6 E
};; X/ q9 G) E" G
) z: u: _9 y- a. Zstatic void led_dev_release(struct device *dev)
8 f. ?2 X! W1 j" f" e4 a{! s4 I% ]* M+ ~1 I2 H! O' U
};
3 s, C/ ^* q2 o! J0 {& i* H7 h ~+ u \* }, [9 T
static struct platform_device da850_evm_tl_leds_device = {
$ A. v2 X7 e: b" Z .name = "leds-gpio",
6 x0 M9 s: d4 Q) h5 p* r .id = 1,9 F s# k r! G! l
.dev = {/ y6 i- S% K1 a$ m( Y& o' ^
.platform_data = &da850_evm_tl_leds_pdata,
7 j% f% O7 m/ Y8 z9 _! i .release = led_dev_release,' ^$ E5 v* _& B8 N* x
}) @& u( U+ B' d- O1 {1 U
};9 f. U: n+ ?4 b2 B6 F5 o2 r
9 e1 H+ E2 Z) q/ R- ?# `
static int __init led_platform_init(void)1 p) s+ {8 E( j [1 n; x& b
{: W8 D8 Z* c4 m
int ret;
2 J8 H1 M5 l' C* p#if 0# F$ J O1 n' A' G( e- v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 g+ g; X# s' \3 W3 p. }' i
if (ret)" B m7 ~ Y; [
pr_warning("da850_evm_tl_leds_init : User LED mux failed :" f% h( C; E) ?: w/ X
"%d\n", ret);
9 n8 o2 o9 M) ^# ]. @+ p#endif
- f1 q s" e# k' B5 l ret = platform_device_register(&da850_evm_tl_leds_device);7 N5 Z, B [ q2 q
if (ret)6 q. h& v o, S
pr_warning("Could not register som GPIO expander LEDS");
( R( @- F9 ~6 x$ r v else( b/ Q2 U+ ^: X8 m$ k
printk(KERN_INFO "LED register sucessful!\n");9 a! S0 P9 B9 L- {: X' x/ Z
7 L9 E8 L+ x# u
return ret;
( {2 m" f$ f- O' }. ?) z}
. L5 y' q) k; E4 \' W: o5 h. P: J' ~
static void __exit led_platform_exit(void)
2 N w% @3 L4 W5 u5 j0 J, b8 V{
6 P) V+ A2 J. a' ` d4 P+ J) N7 B platform_device_unregister(&da850_evm_tl_leds_device);/ n4 X# V. d0 `
; Y) C" u( R+ e& K* {6 g& ?
printk(KERN_INFO "LED unregister!\n");3 Y" h5 ^; {6 X4 ^
}
; y$ v S4 o# b
$ @, J5 [0 v: n. ]3 b4 {7 ?7 X" n* zmodule_init(led_platform_init);
p) h( O* H" @+ _# b( ^" ymodule_exit(led_platform_exit);
: Z9 t# s2 \8 I
/ {% X' e" C; E5 DMODULE_DESCRIPTION("Led platform driver");
O& @+ u" v" v s5 i6 z; Y" H) |MODULE_AUTHOR("Tronlong");
$ m4 t7 |; m3 F: JMODULE_LICENSE("GPL");
B i4 G& n" v }. L9 @2 |
$ @3 T6 k2 j0 m: k* o1 c9 \ |
|