|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 d v' @2 p1 f) Z6 }( r
#include <linux/init.h>5 t2 H( F1 G! q2 k2 f( R
#include <linux/module.h>
2 I# Z. {8 l6 A' x9 t5 D2 U# ]% j" S#include <linux/kernel.h>
9 L3 n* d" B' [/ o* e/ _#include <linux/types.h>4 \) ?% Z1 l- @4 `
#include <linux/gpio.h>
! I, i" L g( u2 T& I#include <linux/leds.h>
. S+ E* Z- L7 o! x: _! j#include <linux/platform_device.h>9 T4 O: b" t0 P& G6 u' ~; ~" ~
/ f+ k: q, |+ r% g, f! C- Y; I#include <asm/mach-types.h>
4 P- c% B3 E6 X7 F/ q0 H* q, B! g#include <asm/mach/arch.h>
* Z1 O7 @ d5 d- p1 O# e5 q#include <mach/da8xx.h>8 l& @/ M6 ]9 J; i* E6 i! P& C
#include <mach/mux.h>
. e8 r* H9 V! b6 D& a% D3 }# y: d
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) y' N7 e2 A+ _9 P
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# F) z- x% [! q! D/ l# o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( a, A6 G# j2 N3 S' q( y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 T( B( O2 C& B
1 ]# w2 H. J( w- y9 R+ X/* assign the tl som board LED-GPIOs*/. O& P4 }% }+ S: |
static const short da850_evm_tl_user_led_pins[] = {+ o$ x0 r- X0 ?0 j* w
/* These pins are definition at <mach/mux.h> file */
( p6 u; q& D( B3 X& y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% F8 |( p6 i: V9 n: e4 @2 ~
-19 O' b9 l* W+ Y/ X- A
};
]# o* w2 T6 @3 E# u! P) A; _& J( f. z
static struct gpio_led da850_evm_tl_leds[] = {& ^9 q Q8 o6 i
{
) k2 l' E8 E( z2 c7 J( a" B( b8 y! i .active_low = 0,; `5 x' S: Z1 E" Q+ n; [
.gpio = DA850_USER_LED0,
' i7 ]2 R' J& u' P/ u, ] .name = "user_led0",
' H1 M9 o9 |, r ]: C6 q. u( j5 n .default_trigger = "default-on",
# x- I1 O" O: T H, U },2 l* c2 k5 E. p- e, @
{) D+ I- n# r4 C* L0 j4 ^! H
.active_low = 0,
. _' M+ m2 z7 c' A) Q* I .gpio = DA850_USER_LED1,& i; Z1 c5 n6 X I5 ^& S, ]9 S$ W. }
.name = "user_led1",9 U+ k2 ]: e( o' L+ Q
.default_trigger = "default-on",
1 [2 E* { `9 p6 E4 K3 j3 ~ },
2 X; J; ~, S* B0 M( R {3 E4 p1 x5 V7 W1 I$ D* {/ G: @
.active_low = 0,
* ]7 t( h# H' x+ T' d* Y: s3 s. r .gpio = DA850_USER_LED2,
! Q1 a3 N' F1 n6 j( J: V# } .name = "user_led2",
* E# J& J9 q& s; s .default_trigger = "default-on",3 ]. ]- @1 d. U6 Q- j$ K
},
/ u& q+ G+ x- N {
# H: Z! X2 ^* q9 n .active_low = 0,
3 ?* l0 ] F/ Q& k+ T; k& _: x. G .gpio = DA850_USER_LED3,: A) X' }5 W: D
.name = "user_led3",
3 z# n1 t; T$ d+ V7 I .default_trigger = "default-on",
; ?/ p6 Y! x" l4 `6 r3 S& j },
" ?* D1 {1 X9 ]* q6 y5 u/ ]3 ?* r2 @};1 e3 o# Q1 ?4 X# n
' h& S D0 i$ g% k: i$ l: ]/ }/ tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 g/ b+ v& a0 n& O" |6 Y% v
.leds = da850_evm_tl_leds,# S0 N( v0 I0 @* |6 T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 X2 `: x8 g( W
};2 u, c( c% M# r% `8 \5 Y
- C5 q) A# P, E& h
static void led_dev_release(struct device *dev)
3 S/ s( A% `, p{
" m: p4 `: f" ?9 w5 t& F9 k7 z};% O$ o+ K d; v. a, v' c8 m% `; N
+ ^: j- ~. {( F7 w; lstatic struct platform_device da850_evm_tl_leds_device = {4 s5 F5 q1 _7 C' s' c
.name = "leds-gpio",. k; k* M, U% F t( ^& u; u
.id = 1,
, d7 G; z. v1 O7 } .dev = {8 ?7 f! z" A* F: C O6 d
.platform_data = &da850_evm_tl_leds_pdata,
% p3 K: q3 [* W4 A1 a( E5 W .release = led_dev_release,6 N1 r. y9 p* o
}
, w& X3 P8 d* [! D! {};. @! [ ]8 K1 U1 _' g) q6 q
. J/ C$ G3 o6 a+ [ [) J. ?static int __init led_platform_init(void)
/ q* g9 E- l9 F3 w" l1 c c{) P# `* h; o/ a6 L0 @4 K5 R
int ret;
! _+ u) H& [* s0 J#if 0
6 [$ N2 e$ b: U4 _ T) K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( f5 u, c/ A3 `3 { if (ret)
# a; O3 c' a" Z1 c0 G& j pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 K: H3 k. v q "%d\n", ret);) u9 ^. _; U( i M) O/ m% Y2 q6 E
#endif
8 b! s/ I- f4 | ret = platform_device_register(&da850_evm_tl_leds_device);
! }. q! j& x) r: f/ V) P. m if (ret)
; }; }, L) @4 l% W pr_warning("Could not register som GPIO expander LEDS");
8 E g2 y2 ?+ Q else
, }3 U5 @+ d+ E' A1 m6 A4 f3 ] printk(KERN_INFO "LED register sucessful!\n");9 d' ` }# A7 p7 a9 H$ c0 F
4 ]8 Q6 I. z; k0 t8 d; H6 u' z
return ret; g& [& w6 y- w. u7 z- F2 E1 h
}* w9 R( _; @0 ^+ g/ @, P# I
8 U; O4 {& Q; r9 _static void __exit led_platform_exit(void)! |2 I! g8 n6 m0 o3 H5 v
{5 M1 c& x' C% R1 |3 Q
platform_device_unregister(&da850_evm_tl_leds_device);
% S0 Q. y1 W% {7 v! R. F4 g2 {5 t; o0 f$ r9 V
printk(KERN_INFO "LED unregister!\n");- \" r0 I) P- [$ w
}
! N$ L, i; _( b+ q
% p: ^( i, G- ?module_init(led_platform_init);$ G& e# A( k- y. v
module_exit(led_platform_exit);
3 ?# o4 x/ a* y: B
5 T" ~9 {- v7 R. z' U9 [MODULE_DESCRIPTION("Led platform driver");
$ @8 D" X6 [* e; t9 J- [MODULE_AUTHOR("Tronlong");
9 b6 {* d1 u$ a* q, d+ p3 vMODULE_LICENSE("GPL");' v$ w. }0 R, n! y- P
& m7 T4 d0 e1 j' d |
|