|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. `: V& Y& }9 ~+ G
#include <linux/init.h>
$ x0 t7 e! x0 l#include <linux/module.h>7 K- _/ X3 ]7 |( D# d* s" v
#include <linux/kernel.h>
1 K4 F2 s" \* b* O9 }5 m5 j+ ?#include <linux/types.h>
8 c" i9 S3 I6 v B& A#include <linux/gpio.h>
! H$ q; U! J% l: H#include <linux/leds.h>
8 t$ r( A6 W6 C7 V! l9 Z7 ]2 D#include <linux/platform_device.h>
6 K; z2 x0 W* [& ^8 l4 `# B2 v
7 E4 t; A9 g3 [' E#include <asm/mach-types.h>* Q# l6 ^& }& |" A( C$ \, h1 A
#include <asm/mach/arch.h>4 ^2 R" H0 f) d9 V& F: a0 `
#include <mach/da8xx.h> _% C0 j* `) x3 C8 x- ~" u9 ^; K8 g
#include <mach/mux.h>
C5 j3 H6 {0 \2 p+ p: q1 ^1 {* T* F2 j! ]$ [- Y/ `
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
x/ K' Z5 a/ H+ a4 Y" A#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' e: J, c9 U- B8 {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 t5 Z, l- R& W2 X5 X Q3 \+ A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 ]! D5 P" x5 _2 d x) l& m
8 S8 W) }: x k2 b/* assign the tl som board LED-GPIOs*/
3 x% p3 V' I$ y b% ostatic const short da850_evm_tl_user_led_pins[] = {0 @' A7 R& L+ z8 v- l
/* These pins are definition at <mach/mux.h> file */
j6 J) d H4 k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 |9 X6 L+ W- k* i3 F -1
. v' U0 e# e( Q6 ^};3 ~" I# W, m. J
: V% |" D% Q- x& [" @# C; P' K( t& c2 C" w
static struct gpio_led da850_evm_tl_leds[] = {
; v& U' N* u& L/ x3 Y | {
' q1 v# Y/ x9 d: _. a6 s: o .active_low = 0,! P1 {0 Z' O$ ^5 y v! G& q+ o
.gpio = DA850_USER_LED0,
! ?: j$ p* x$ K& v1 [ .name = "user_led0",
, T: B _" e H% Z% j .default_trigger = "default-on",( q3 E- i1 U8 P% d1 x4 @
},
& {2 I c5 B' V: p* v" L, P- Q, T {
( g8 s& ]- g. B+ P/ L% Z .active_low = 0,! j5 v' M) L7 ~: B/ ]
.gpio = DA850_USER_LED1,, L0 C$ W3 r* Y* `* T( j
.name = "user_led1"," V, H- ~0 l' e1 Q M) q! X
.default_trigger = "default-on",
0 p4 T, w" b+ v% Y# \" T2 b( j },
+ H3 S: T& C" L6 M/ o+ u; G" J {
" H7 ^! J, ^4 y" i% `$ _" B .active_low = 0,
% \2 k/ R+ }5 ^% t: u+ n .gpio = DA850_USER_LED2,: q/ c. p8 k- f j6 N0 B; {/ M
.name = "user_led2",! q; ^+ S% g) v
.default_trigger = "default-on",
, u2 p. i2 A3 F) I },
" q8 C6 `+ o7 H' ~" H& |8 Z {0 \6 i" i! _3 {: }. f
.active_low = 0,
8 e' H) j9 ^* V0 W2 G ~2 h .gpio = DA850_USER_LED3,; G2 R$ R0 n, I+ Q% S
.name = "user_led3",
1 E1 a) X, ^7 J% W; k$ A2 N4 { .default_trigger = "default-on",
7 l1 q8 t, n( I7 [# h# ~7 ^ },) s% \* Q( ~: b$ N
};
% W U t/ }: y8 k1 U: }( n+ ~% M+ X6 \; S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! s B6 Q& g# u. r- T
.leds = da850_evm_tl_leds,
+ c7 I) z; G5 `% I% s+ b/ c+ F .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. ?+ U* c" X+ c: H' w! D2 A3 e
};
& q& o3 G3 y$ Y
I7 M& n& w6 }. Y. X2 N4 {5 }! [2 Lstatic void led_dev_release(struct device *dev)9 c" U/ T* B0 H2 _/ z- r8 x
{& K, x( Q. q6 x" \
};
: Y, f. n& o* f' o6 u- J
0 A# `: {6 d7 g! d z! p8 fstatic struct platform_device da850_evm_tl_leds_device = {6 r* b4 v( N% P y4 m9 o V
.name = "leds-gpio",! r3 o9 M* g% u; ^5 |3 D
.id = 1,
3 |. Q" _. o! C; y .dev = {. ?* T% {" `% J" V! {: P9 c
.platform_data = &da850_evm_tl_leds_pdata,4 E4 G* W. p# t
.release = led_dev_release,
6 F) R3 S: y- N }
. w+ W8 w$ @* t9 L/ T& n};
r4 S V6 a: Y$ `2 p) x* `% Q2 e
static int __init led_platform_init(void)) m1 n5 ?5 `% e- N8 \9 h) V# i
{7 s4 k, E" m/ ^) S, W. \
int ret;
) X6 W% p! ]" m( ]" h7 m% g#if 01 d f+ j# _% B5 e
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; O) h4 C3 ?2 I: [% [+ ?3 J
if (ret)
* `" ?8 u! v* F6 ] pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 ?. k2 p( D) [$ l* O$ r) H "%d\n", ret);
' b" s6 J( f! {2 q/ I2 b: Y7 }5 b#endif
% {7 o" ?- C) R9 w0 E/ N ret = platform_device_register(&da850_evm_tl_leds_device);
+ [1 v4 S9 ~5 c/ ~4 q3 _# [( E if (ret)/ J9 |6 A( u8 Q9 O
pr_warning("Could not register som GPIO expander LEDS");
) X5 Z( q5 L: h else3 P4 a5 J; ]; u! m
printk(KERN_INFO "LED register sucessful!\n");
" k: h+ k; F0 \ ?8 ^1 X2 x# U' K1 Y( k( L" ]" \
return ret;
+ \) @' g, J: q" \; z}* C* }7 R0 |" A
% A7 }% [. V. o& X' S& r* T
static void __exit led_platform_exit(void)9 J) ^( E! m) L d) r
{
3 W {- |! c- U5 s+ e/ w% m platform_device_unregister(&da850_evm_tl_leds_device);
$ [7 g* I3 N+ K6 a; E5 k- R# [4 n- k4 E$ e/ J' ]3 j; }9 Y& l
printk(KERN_INFO "LED unregister!\n");
8 z W8 F! C7 k5 p" F2 i2 C. [* }}
/ u, R2 ~! l% ]3 n' J
+ i2 r, C1 I1 {6 Y8 Z8 t0 Xmodule_init(led_platform_init);1 K/ a w4 _, G9 w
module_exit(led_platform_exit);
, g8 a, E2 j6 b5 H0 Z0 Q3 W) p& U
MODULE_DESCRIPTION("Led platform driver");. _4 L% x2 P" u7 w7 s
MODULE_AUTHOR("Tronlong");2 _) [, N- _1 i$ j
MODULE_LICENSE("GPL");* e4 \7 C! w* Z4 |" R% {% F
9 W! M( t* j. H. `$ O: n3 K |
|