|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 t6 G! s" l; g& d% o#include <linux/init.h>/ k' E+ l; f0 T' a" ~) l
#include <linux/module.h>% R; @) ]" @9 b
#include <linux/kernel.h>
' z& d2 ~$ y2 p& j4 \1 Z#include <linux/types.h>- S" P/ r1 F7 Y0 d5 f& X$ S, {
#include <linux/gpio.h>3 {. j7 ?1 x6 M0 K5 n. Y. s
#include <linux/leds.h>, u. G& S+ w6 p$ u6 c3 h
#include <linux/platform_device.h>
- r: J4 k4 ~9 W& y% j. G% i. f7 b; H$ F7 p$ \
#include <asm/mach-types.h>
0 G+ ?. h. p* ~2 Q6 Q+ |#include <asm/mach/arch.h>. L. T% X- T, N
#include <mach/da8xx.h>
( z% p7 l) ]1 ^. d) E#include <mach/mux.h>% r2 E* ~- Q2 K" u9 G. w: I' v
0 X; K5 q: p4 M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 S. Q+ n; X* Q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) Z6 Z* r8 f q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 _& y0 z# E% Z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 r9 y* `0 W- |2 }
4 w, E& A4 v, B5 @+ B% O+ G$ [; e( Z/* assign the tl som board LED-GPIOs*/
8 [! Y& ]7 {( x0 o% j+ `+ ^% A+ g, Tstatic const short da850_evm_tl_user_led_pins[] = {0 B$ w C* A: Q( S! x. W
/* These pins are definition at <mach/mux.h> file */6 D' P8 @" _& }# E: N4 T( S
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( o N* S2 D/ d5 D -1
) J! g6 l7 t1 {$ T% w8 m};
4 c4 O' B' ?2 D/ O# g7 N
$ `. w! R. S( t0 z0 U4 y. l! @static struct gpio_led da850_evm_tl_leds[] = {
7 J) c3 m% K# s* E; E {
" n* {# Q) f* t: o# ]! k .active_low = 0,
) `( v) l2 ^7 s9 A: _ .gpio = DA850_USER_LED0,/ v. W/ b& U R: j
.name = "user_led0",+ F" C3 N. h# X3 ]3 [: J" Q
.default_trigger = "default-on",1 A/ o6 b( Y1 @9 ]% V8 C
},
- W- P/ k6 S# k( J, _7 [0 Y {' k1 l) V2 M" t8 V7 h
.active_low = 0,
. C& P9 A) I; W$ O7 L .gpio = DA850_USER_LED1,
4 r9 v! l* Y" l3 p& @ .name = "user_led1",
& O% @7 j* m1 d! e! T .default_trigger = "default-on",$ N4 F3 P U; y6 s* u2 w5 V
},6 u, V% L8 \( P' U9 ]+ P- L0 p
{
3 C% Z k5 @# C5 O .active_low = 0,
" @0 i& ~( f# E6 D, e3 s .gpio = DA850_USER_LED2,/ K! W6 D) p2 N/ C
.name = "user_led2",
g. ^$ S S, `9 z9 B$ V .default_trigger = "default-on",: ]: |# ^# @# I7 H. q
},+ ]" _# G/ s, M$ g3 ?. }
{" N1 t5 Y1 H/ X
.active_low = 0,
# v2 h! U* n8 i2 M2 U .gpio = DA850_USER_LED3,# g' i6 z# O% ^( b% N3 k' w' ^
.name = "user_led3",( ?! H7 q+ B3 ?
.default_trigger = "default-on",
, t1 X t& W1 T0 j" X },+ j. a+ j/ J+ \2 v
};- q+ I! ~9 \$ Q& i; @4 o0 y
$ z' G1 z0 s6 V- z- V* Y. `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# d0 s: L2 v, ^7 ^" U: c, h .leds = da850_evm_tl_leds,
" r# W1 A# g& t9 j3 r6 t6 M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 x5 r' s1 K; `* B4 s1 [};% N+ G6 @- Q5 `3 Z( X# H' T& Y
' u: ~) h5 U! g# i% j1 R0 j+ Sstatic void led_dev_release(struct device *dev)
8 U/ U( S6 ^. Z& j3 f! q, `{/ K, b* e/ }0 c- v
};
9 K! O8 D5 m w: m% [5 g( l& X9 N% J9 f) j1 D5 m
static struct platform_device da850_evm_tl_leds_device = {- M, w- g- X* D" q, _
.name = "leds-gpio",
\" k4 P/ m6 ^5 ~8 T .id = 1,
# W- t& Z( B5 w5 J .dev = {
% G- p* X! |, o& O .platform_data = &da850_evm_tl_leds_pdata,8 \$ Z6 g# K0 G& l# f6 M- Q+ ~
.release = led_dev_release,* z/ G4 ]) J0 }- T% n
}& n! Y. O9 Z& I1 e6 p
};
: k6 @% [# Z( M# q: c6 m) ^/ ~ P8 O
static int __init led_platform_init(void)
; l! `4 `7 U/ u e) Q1 v{( W3 B/ G& _5 O6 G: }5 ?
int ret;
4 M% ~( @& q0 z$ M: v0 ~$ j#if 0# ? V" m% q4 V6 Z2 W, o: Y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 p0 ^9 H! z4 i4 r7 `/ L6 y if (ret)
# c& o, h/ z5 T7 S* W3 O% F! P pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& K5 E' u0 E1 }
"%d\n", ret);3 v4 |3 H0 @7 b. A
#endif
8 H& }3 ?& F% n8 ~ ret = platform_device_register(&da850_evm_tl_leds_device);
: T0 ]: q' x* M/ c0 C/ D, ]0 ?% @ if (ret)! b5 O) h4 ~; `' l
pr_warning("Could not register som GPIO expander LEDS");" G/ k* Q. f/ k+ A$ V- L, B! K
else
5 C/ |9 u" Q. o$ _) D+ g printk(KERN_INFO "LED register sucessful!\n");
% i% ~8 m1 e, m4 Q" w3 h9 |) T0 H& E
return ret;9 ]6 g) u6 S# |5 z; C
}0 ] ~4 z+ g; H( G, |3 L* P" n! {% R
8 }4 l! d& C# P3 ~
static void __exit led_platform_exit(void)
4 ?% I1 ^$ C$ Z, H# O1 t- n A{: u B4 d& G& L4 t5 g& C
platform_device_unregister(&da850_evm_tl_leds_device);
5 h& `/ t/ `2 i9 |( ^3 A# |1 p8 r: v5 x3 ^; n
printk(KERN_INFO "LED unregister!\n");
9 v( _4 a+ L# G, g/ U. Q4 X5 c}
% ^5 a) t- I# ^
, n: x/ J) z3 |4 a1 o% |/ [module_init(led_platform_init);
4 ^0 ]: z+ L$ L; _module_exit(led_platform_exit);6 i$ Z) W& l; r) w3 v
) `2 w4 l7 a' [+ V7 q/ [
MODULE_DESCRIPTION("Led platform driver");
5 G! F7 O& [" `/ z- oMODULE_AUTHOR("Tronlong");( b2 i5 H/ Y9 V _& w% v& P/ `: T
MODULE_LICENSE("GPL");( m: H: H& B; f* p4 ]
8 S0 X, C) v$ M* i) C4 f; V
|
|