|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 k- R v& ?! j; ^9 B
#include <linux/init.h>0 ]5 A0 O( J0 k% _2 H/ B
#include <linux/module.h>
+ Y" a$ E/ i7 S6 p1 @8 O) }% x#include <linux/kernel.h>& I* f9 l2 T7 v. H7 b; w1 t1 j
#include <linux/types.h>
# X- O. a+ I; U#include <linux/gpio.h>
( b2 C4 G& {8 S#include <linux/leds.h>
6 I0 |' S2 x1 y! K4 t#include <linux/platform_device.h>
2 B3 Z. Z5 E$ U6 J$ o" c# V P
% k: @5 @+ A- h) v) `0 `5 i u w* e& b#include <asm/mach-types.h>
) q, ^0 ^. [5 O; `#include <asm/mach/arch.h>
, g. ]! o% P- g6 @9 O#include <mach/da8xx.h>
; g1 h" @ j- M) R* e* J+ D4 ]* w+ ~4 `6 q#include <mach/mux.h>0 H' e$ M, h+ z5 F: S
% P1 x$ _7 t) E7 @' g* R$ V#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 @* e, B0 y; k2 b: a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 V1 A: T0 _4 ?! u( {! |
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 l7 n. o; \. q5 X5 N( x O* x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ [- F: `0 B2 D# P: u$ o+ V; f S7 s& t ?6 Y3 w8 |. L
/* assign the tl som board LED-GPIOs*/! k% W2 K3 J1 u+ e" c
static const short da850_evm_tl_user_led_pins[] = {
$ X! |, R" L; h- W0 B; G9 I, h( i /* These pins are definition at <mach/mux.h> file */
: M9 _" m9 g$ b DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. N4 a7 `5 N% }* o: n3 C. A4 i
-1 m& R L; o; |* @2 R
};" m* ?9 n+ }1 S4 i9 j
' I1 X/ E! ]# ] J w7 G* j
static struct gpio_led da850_evm_tl_leds[] = {
. P, Z# R( r; d" [% E7 v L {% S. U( X( \, Y! @. Z
.active_low = 0,) N! [6 O, w9 k1 s# u* _
.gpio = DA850_USER_LED0,
. M+ r7 P5 ] [' G" { o4 R# y .name = "user_led0",7 m( K6 [) O. c6 P( h
.default_trigger = "default-on",) u0 \; M$ e+ H: l3 H) b1 U
},5 p, I: F# {+ e% Z. t C! f
{6 d( f2 J A E' m" m, z; H
.active_low = 0,- ]) |* j. F% L! |" C4 { e
.gpio = DA850_USER_LED1,
3 Z( w% V: a5 H/ \8 I .name = "user_led1",
; Y4 a2 \2 g' R1 P! g! J3 y .default_trigger = "default-on",2 V! {5 P) Y& S7 O7 |5 ?( J
},: i1 V; X' `5 N8 Q# l4 ^
{, s$ `3 Y1 g2 Z$ E) k. b+ ~6 b3 r0 s
.active_low = 0,
! S5 i. ~2 {2 V3 f" |* l! Y- t .gpio = DA850_USER_LED2,+ c" G- ~7 q1 J
.name = "user_led2",
. |" b* m5 K/ P. b9 [( Y& s .default_trigger = "default-on",
8 o' R) b5 a5 g },. C% H, z4 j) L
{9 ]* i* r7 u% t# L" R
.active_low = 0,
5 {. D: u8 v6 `8 u) Z .gpio = DA850_USER_LED3,
& {- `2 ?& P3 \" P' }. o( o .name = "user_led3",' g" r: d v8 k& c5 u3 ?: i, \# K
.default_trigger = "default-on",
# O" P6 R8 j' N },
; v' P( a5 Z8 C+ Q" \};
" R, w! z6 t4 N2 U- F- s s* w
( c- q7 P4 R- P6 C% F# ~$ m5 fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( x" H* r3 ?& f( M1 {) v .leds = da850_evm_tl_leds,7 P9 o0 q3 Z* c1 R- j' B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. Z3 \( Y$ _% G
};, J2 H7 o. R/ |6 F6 Q2 d
% t' G/ h: E; m' e0 g \) y& Gstatic void led_dev_release(struct device *dev)
4 s7 ~+ v! y$ L$ ?! R, C/ C/ _7 ]{
& z0 D3 I! `0 \ Z$ y. ]};
0 e m- H2 S( R" v! O' J/ e9 e3 B/ @& F& Q
static struct platform_device da850_evm_tl_leds_device = {
7 \) m. i7 F2 E8 D% U6 n, ] .name = "leds-gpio",
% d4 Y$ a! Z5 Z, ] .id = 1,
! c$ F( @; q0 Z ^+ u .dev = {
) o+ f# }2 D, `- M( z: P& _ b .platform_data = &da850_evm_tl_leds_pdata,
N$ b% S5 e6 L/ k1 V .release = led_dev_release,9 F) j3 m5 O5 m3 z
}* z( j4 D7 }" ]. o% J
};( H9 c0 Y4 N& O* t* y
' P, }+ \: C* K5 L
static int __init led_platform_init(void)- q3 W& G, Q7 ]" q {
{
7 d: V3 @, r! g$ [! U u int ret;+ }# X m! f9 O( z$ z1 T0 w$ Z
#if 0
0 b) g7 f' ?4 ~2 n ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% W" i. F* \+ |7 S
if (ret)0 G" _+ l; O3 A0 m; O* |/ I1 e
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 B* b7 M8 u, g6 Z "%d\n", ret);
7 u: X8 _! ]- u) X#endif7 B4 y( ] A9 E7 s
ret = platform_device_register(&da850_evm_tl_leds_device);4 \" }& Q8 k: J; J* B |; x
if (ret)
1 G: E0 h7 H0 N. Z; C4 D/ }. }$ r pr_warning("Could not register som GPIO expander LEDS");5 C1 i! V, f3 e* F, R
else T z2 J4 f5 P0 {
printk(KERN_INFO "LED register sucessful!\n");
; Y' G; @# K7 d1 i/ k) U5 N6 d7 e( s: b
return ret;) n4 v/ \- m6 x/ G) w. h
}
6 W) ~9 F" a2 g& S5 n
" x. a% _7 }: \static void __exit led_platform_exit(void)
3 `4 R. t- J u! @, c8 t2 g' e{
* E2 m6 }6 P: _1 W+ \ platform_device_unregister(&da850_evm_tl_leds_device);4 J: j# G- ^3 r/ J
" g1 Q+ j4 S- B8 | printk(KERN_INFO "LED unregister!\n");: y/ X$ _* O' T1 L7 F
}; r$ p4 S q$ u' }
5 \+ I6 j& g0 D+ |
module_init(led_platform_init);8 r. c& d$ l/ S2 |% S
module_exit(led_platform_exit);
/ M& E0 ?% G" a" Y, T. n; ^
3 R+ `5 V- v2 ^: B$ @. IMODULE_DESCRIPTION("Led platform driver");7 O- k6 E$ ?0 _1 ^6 E0 A
MODULE_AUTHOR("Tronlong");5 B2 @+ ^( \, H7 C
MODULE_LICENSE("GPL");
' u6 y. T% r, @: B: ?0 }9 M; U0 u
0 s" K2 {- Z% M |
|