|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, v9 M" T( h" U9 Z% ~4 }#include <linux/init.h>
. T5 n9 h, U: ?5 H5 |$ u* q#include <linux/module.h>
' u; i. f6 p) k( T) k#include <linux/kernel.h>8 J6 A+ q0 }0 d6 G$ [
#include <linux/types.h>8 ^, @ m4 R, G8 t( u' O' j/ f
#include <linux/gpio.h>1 Z3 o' I" K' ? s( X1 r% N
#include <linux/leds.h>" ?# z3 M3 @; t% y$ p+ l: y
#include <linux/platform_device.h>
; F. q6 U; k0 k- S Q8 k8 K# Y" ]7 T" h9 w
#include <asm/mach-types.h>
3 ^% o9 a+ { c4 ]& M#include <asm/mach/arch.h>
) J9 e$ ^7 |* G8 }3 ]: P, f#include <mach/da8xx.h>
" g4 P+ J+ x0 h7 a#include <mach/mux.h>+ X( q- Y1 d' j7 T6 F a
- X& G2 y; l$ [* S#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): ^' Z8 S# Z; d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; h2 R) X2 T( n% ~: k2 r#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 c9 U3 `3 a. |* o* X#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" S4 [8 Q' W. ?1 J' W: F+ S
* D; ?3 B1 f3 \9 j% w/ P2 \/* assign the tl som board LED-GPIOs*/
$ n, t" A% e& z+ \0 c' Astatic const short da850_evm_tl_user_led_pins[] = {3 v, }8 z5 r+ h; B" R
/* These pins are definition at <mach/mux.h> file */
$ e2 ~5 u# h9 R4 `6 {- r& N- f/ G9 F DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* z* t0 o- ? Y& D( g5 e
-1% i) n& T- u( p, P
};/ L7 \% o6 n3 K: r5 v9 A; W
- P5 \- M- q4 |' X* A2 w
static struct gpio_led da850_evm_tl_leds[] = {2 ^& W- b. C% x, A! R7 C1 }
{7 g! u* f+ B3 [2 [) ]
.active_low = 0,
% N- b" M" l1 x9 } .gpio = DA850_USER_LED0,
' w% x6 E3 }, j( r .name = "user_led0",9 }9 h v, d; U+ b
.default_trigger = "default-on",
" g7 C# e2 `2 P( V; G% ? },8 C6 q! `" h8 {: v/ A" i
{; [) T1 H R+ u- P/ U6 a# q
.active_low = 0,
5 j! q7 f; s3 H% O .gpio = DA850_USER_LED1,8 E1 d. Q8 ]. I5 [
.name = "user_led1",# l' I8 S4 \1 C, o; ]
.default_trigger = "default-on",; [* G/ R" O4 Y
},
7 |) u6 z& d9 h; a" Z. } {
" s- a2 _- I# v7 } .active_low = 0,
% E3 y+ C6 \8 ] .gpio = DA850_USER_LED2,; N5 f+ F% ?! X. c. J9 O
.name = "user_led2",
+ N: \- E. r' c j4 z# q) n6 L .default_trigger = "default-on",0 ~( ~ `* V; z" ~1 t, Y" v
},
+ V4 M+ l' H1 P& t. A {/ M o5 O# M7 x3 h" ], \7 T
.active_low = 0,: D5 B% w( N5 u% {2 w* c& _; w G
.gpio = DA850_USER_LED3,: c9 e3 p$ K" a& Q6 s% x+ z
.name = "user_led3",
! _/ z8 E) ?+ u3 C- n$ t3 W .default_trigger = "default-on",
2 l% |. b9 f7 b: o* O" u: ] },
* J) A8 w% N k! ?7 J};
8 \" `2 G, q G; b+ n& V+ g) P) b' F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 E+ D; r! o9 H: O- m: G .leds = da850_evm_tl_leds,9 B4 q( V W; F& O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 ~- Q8 {' s) _5 y
};/ N |& P" h4 @1 m+ ^
5 y0 i+ Y9 M3 \7 Q
static void led_dev_release(struct device *dev)! F, D0 G: o: @) p- I5 e
{
! h: Z1 I) t$ ]! D) J};) U# B" l" C0 j) H, q/ @' n
- Z( U; I( o4 kstatic struct platform_device da850_evm_tl_leds_device = {+ T7 v8 c+ I: y! e1 I, E. e2 d; ]! G
.name = "leds-gpio",8 N8 X' n8 P& g/ G/ b! ?
.id = 1,
0 G+ _; M+ \' T9 n- j$ H5 T .dev = {- F/ Z" R( f' s' r& f
.platform_data = &da850_evm_tl_leds_pdata,4 K( u9 Z4 ], ]1 _$ j4 \
.release = led_dev_release,. J0 Q; [9 f% |, C$ n% z; |
}
. N0 _( q9 C* _/ Y};6 X. F. U6 F' L. O# ]* E
( Z9 U t, Z/ W, K8 qstatic int __init led_platform_init(void)
( {- v# n0 B1 i/ n( }9 b6 J( l; i3 A1 U{
6 g* P- ~- |1 s" E- B int ret;. M7 w, l/ z }3 Y5 r* d) K
#if 0
' S7 E( q4 \+ B R, ~0 A6 a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 c( [/ l- \( `
if (ret)
6 \ ^2 D+ M# g" p3 s8 D pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 C# M) p! u$ ~" w& M9 o* L "%d\n", ret);
4 N9 [) @, m+ ]$ j#endif% C( D% r/ w, w0 M/ [( Y
ret = platform_device_register(&da850_evm_tl_leds_device);9 {5 X/ `" i. ]( S/ h0 s$ g
if (ret)! Y+ G- a! Z% `1 y; i
pr_warning("Could not register som GPIO expander LEDS");
7 H' D4 t7 f" H else
?* f; ~. }( Y6 P printk(KERN_INFO "LED register sucessful!\n");
, E( H$ r% u( j- G5 r9 h5 k1 D% }. w. j( Z/ } s& R
return ret;
( l6 z. Z5 Q- u8 V7 @( g! c X}2 c9 ]3 y2 K9 }' i
# Q: L+ p: ?$ H: n+ U$ @0 N9 E
static void __exit led_platform_exit(void): v# _- M) P$ @% j6 H
{8 c2 |7 ~+ Q, b6 b W
platform_device_unregister(&da850_evm_tl_leds_device);
c. W- {7 ~0 C/ B% s3 p2 v0 @: A( `
* k! C! V4 y' b7 |9 f% ?# q1 W printk(KERN_INFO "LED unregister!\n");8 w* l, J7 ~1 h' ~% D6 B
}
" I+ e, Z) K A2 z
1 D2 w/ q) m# p) [& Fmodule_init(led_platform_init);% G- w6 R& F! ]3 n# m/ i
module_exit(led_platform_exit);3 Z2 a7 X) m3 J& D
6 I) i0 ]9 h% F- u. }) sMODULE_DESCRIPTION("Led platform driver");* T- i! ?( `* d% G/ ]3 d$ M8 q
MODULE_AUTHOR("Tronlong");9 v, I* c5 X+ M# F
MODULE_LICENSE("GPL");; v, S9 |) K. I' S- P
6 t, p( w O0 n- X B* ~5 i |
|