|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) x/ Q" _# X! m- e4 z#include <linux/init.h>
7 C" K) r" N% z" C5 B6 p2 U#include <linux/module.h>
4 o. e. w/ H5 N& t1 F#include <linux/kernel.h>$ P/ R3 ^5 \+ w7 g
#include <linux/types.h>
' x- Q. q( |5 ]; G+ u: O#include <linux/gpio.h>
; L7 H @* r; o* o& l#include <linux/leds.h>
& q d: n* E8 }- T: z1 X#include <linux/platform_device.h>
( B& G, X: s- [+ ~& T) Q( ?4 w! z/ L
#include <asm/mach-types.h>' O' j9 j9 T' c! R1 P/ s$ e9 T( q
#include <asm/mach/arch.h>8 \3 b; c6 P) F8 h1 `7 h2 n
#include <mach/da8xx.h>1 Z2 z1 _" G0 l G
#include <mach/mux.h>
! G7 U# x5 M" e& J$ E5 P& f1 S' T+ ]$ f) J
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# M: H. o/ S! s6 f& n+ T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 o3 Z7 n% }& Z& X4 C
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ @6 Y% k+ j( Z7 I7 j7 N+ `& x3 Y- X#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' `, K; F z6 Y# k9 X" q+ E
7 S8 g2 F$ F" j8 y% O" r
/* assign the tl som board LED-GPIOs*/; o, [) b8 B' s# n9 K, t$ X
static const short da850_evm_tl_user_led_pins[] = {
3 Q" W! h( A$ u$ w; v" ` /* These pins are definition at <mach/mux.h> file */- L- v4 l0 W1 b& ~) d8 [, y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 R7 r: s1 e" G! C* ^! y -1 c2 Z- B+ R3 j! l' C3 M# g: [
};
; x: ~- \2 v3 j6 u9 N8 O
* V' H' h. t, _5 k, @static struct gpio_led da850_evm_tl_leds[] = {
5 [, n3 o& H) w: L {
' Z& y8 S ?+ K' R8 m .active_low = 0,
# a6 U4 b# V8 w9 B1 e .gpio = DA850_USER_LED0,+ `0 M* Z( q& u9 w$ R9 H9 D3 j9 _+ W
.name = "user_led0",* Q' `& P0 ?) E
.default_trigger = "default-on",% k* O* Y! X5 e) T- t
},( O4 j5 e0 h( ~* L* v5 Y: y0 N7 u0 q
{; b, v7 \ @2 a. s* {
.active_low = 0,
. F! q9 n* {. `& Q$ D8 Z+ ] .gpio = DA850_USER_LED1,
7 U5 v$ c9 q! X .name = "user_led1",9 J) x. m( ^! R3 F( n' R& O
.default_trigger = "default-on",
6 x$ @9 m5 ?. W# k* _' r }, c5 G: J) M% i# J5 l- ]5 o# _
{* ~6 d4 F9 {& F4 N6 ^6 }4 T
.active_low = 0,) S' n0 n( s# ]& A0 [ b
.gpio = DA850_USER_LED2,6 M) l' R0 z: d& ]& f% |
.name = "user_led2",0 e$ R+ H% l4 h. {% v) D
.default_trigger = "default-on",. U4 B: f/ L' r3 N8 O- P8 X1 Z
},3 V- n" V1 T9 n+ }
{
6 A$ b3 d5 L4 H3 S6 Q* F6 }, v f .active_low = 0,& l, X5 x1 o+ J- m
.gpio = DA850_USER_LED3,4 C# H1 ] L- R& D6 V
.name = "user_led3",5 v$ o M3 Q! r; d+ r
.default_trigger = "default-on", D* t. d4 J' _' ], Q
},
: t' _" V! m5 i) ]; F8 P+ a7 w};
4 i! y; e1 M8 @5 g( s
3 m0 h$ P2 \# r' n3 g. E5 ~static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# P/ Y( x1 ]+ D9 J: i .leds = da850_evm_tl_leds,
- F4 r: R3 \- U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! O6 U, i7 I3 \4 |1 f
};
# }3 @& m: [, M+ F- F9 C8 u% u e( S( l; B! g" c9 J# N! A; ^
static void led_dev_release(struct device *dev)
$ u) f; a8 e; V5 l/ v) y0 O( c{
3 t* a& `9 j+ a};( F% X8 G4 c$ M! _. C4 @$ L
* O, @5 Z3 @& l, D6 s+ G0 n& _static struct platform_device da850_evm_tl_leds_device = {% F& J4 c9 t0 Z" T" J
.name = "leds-gpio",
, m+ Y, r# N2 e( V* s# ~ .id = 1,
* v9 Q! m* M0 m .dev = {
# E! q: M; ]# |2 E# ]1 q* k2 @* `6 B .platform_data = &da850_evm_tl_leds_pdata," U" Q& T7 i% P! O" o
.release = led_dev_release,
/ b1 Q2 _- R" p }
# K8 d/ h b, x3 G* ~" n};, V e9 u3 f1 W- B
/ w. B/ P1 p$ R6 c4 {( h
static int __init led_platform_init(void)4 U7 u! z3 _, c2 T8 d' M8 d
{; j# y: V: ^0 v/ j; I3 k
int ret;
3 J7 D: I6 U( J8 v% u. A6 V#if 0
& s! f' [. @- g ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) g7 D) e2 `! H9 z; O1 a if (ret)
9 i$ V$ A' T2 A( B. n c pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 _ y' b$ @0 `: Q& e "%d\n", ret);
3 T" b* \& \7 t! V#endif3 b& A. K5 `0 C; n9 c/ O3 U7 n) m
ret = platform_device_register(&da850_evm_tl_leds_device);
! p3 F6 |% I+ V( p3 K( K" ] if (ret)# I7 ]# X9 F% G: U* U& D2 S/ q, T Z
pr_warning("Could not register som GPIO expander LEDS");
2 Z( R- c# D" M7 R else. p- p2 l8 q* ?' @+ s; R
printk(KERN_INFO "LED register sucessful!\n");# n7 P! W$ ^* i" Q- K1 e- t$ Z0 J
* s- p& N+ E4 \. |: M return ret;
7 ^* S6 } v8 y# p0 l}
& E1 V4 Z- |; N X, o
* S8 L @4 w1 i2 ^% Tstatic void __exit led_platform_exit(void) ^0 Z' A& C: F& r1 S1 u
{
# b( K/ v! _' X6 N% O6 }( d platform_device_unregister(&da850_evm_tl_leds_device);1 P/ Z7 g5 x# }
6 q9 X4 T [& y: [4 O& D1 D
printk(KERN_INFO "LED unregister!\n");
- l0 f6 d; u, {' S5 u) o. B}8 x5 v2 m( D; x/ N
0 e6 q7 h( E3 I @# t$ P; }4 D% jmodule_init(led_platform_init);/ s( f1 S( x- L0 i9 e( W- v9 }; |
module_exit(led_platform_exit);6 X& ?; l- N5 A2 g0 q$ u
& U# Q3 D4 y; m$ s5 w/ k
MODULE_DESCRIPTION("Led platform driver");
) p' D4 H: M( S sMODULE_AUTHOR("Tronlong");
. F( v" z2 _1 |MODULE_LICENSE("GPL");8 r6 n! I' A) P1 Z8 U0 M0 R7 x
1 O( p [8 `- r" g |
|