|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ k' [ i& n4 O
#include <linux/init.h>$ p& d' p4 W$ M2 }7 C: v! f1 a8 A
#include <linux/module.h>
; M3 v% S8 t% d8 ^#include <linux/kernel.h>
& l( P& `. T* V% R& F$ _1 q8 h#include <linux/types.h>
/ J! G, W4 X3 O9 h& \) u; A#include <linux/gpio.h>. A1 z& ~9 m k5 U% B
#include <linux/leds.h>
2 N& A/ h% M: k4 B6 F#include <linux/platform_device.h>! F. J$ n1 p+ n9 y' c3 i
; Y, r$ I/ [: v3 U7 j#include <asm/mach-types.h>6 q5 y0 y; c7 P- b
#include <asm/mach/arch.h>
$ o1 x) p3 f- U8 J& ]$ u#include <mach/da8xx.h>2 M) w3 u0 I. A w8 x
#include <mach/mux.h>9 L7 U. w; _. z; g2 v
! |) V z, Q9 C3 }4 m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% _* v* M$ L0 q1 l; Q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 L* q! Z5 w4 V% V) R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ _- P6 A6 x7 j2 U; z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" f3 F& Y8 R. Q0 i5 A0 f, q* B2 n2 [5 _1 C
/* assign the tl som board LED-GPIOs*/
$ D, u$ a# e" a, a( |& Y% Q4 fstatic const short da850_evm_tl_user_led_pins[] = {" g7 N, ?2 B, c* b( c+ ~2 t
/* These pins are definition at <mach/mux.h> file */9 H- h( }4 i6 A5 G8 n2 Z9 N6 \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 Q4 H/ V, u0 j2 }& Z( N2 U
-1! Z5 x; V' D* l4 G0 p$ M
};
: b1 | G. q w: @& ?; ^) r
0 w1 T4 f! s( C" W2 F) g5 c. Tstatic struct gpio_led da850_evm_tl_leds[] = {
! @: g. F" T. d9 F7 s2 X {
; W5 Q: o1 T O/ | M" T% t' z6 H .active_low = 0,3 A) e5 ^* X! A" s( p
.gpio = DA850_USER_LED0,
* h1 T1 l m6 C, n; l* | .name = "user_led0",+ Q9 l: B; ]7 N2 @6 E8 _
.default_trigger = "default-on",, Y! w* ^6 U( {; _ Z+ M
},- s4 g: j, R T _* Q6 F
{
; k2 h7 |- O2 ] .active_low = 0,3 i+ @) L: ]+ R" w I$ v+ B" p1 L
.gpio = DA850_USER_LED1,0 h0 x- F& g( f2 q: N2 _+ P
.name = "user_led1",
2 V+ {$ n2 E: B E .default_trigger = "default-on",3 |0 [5 k9 U1 \ \0 D/ o" t: ?
},
; d, [; ~/ d0 M1 E {
4 s. _; l/ w/ u! P7 b# P W/ G .active_low = 0,1 c' j+ w4 ^( m
.gpio = DA850_USER_LED2,
8 G5 o# ~. L4 X) H2 K .name = "user_led2",
& `, Q2 K( j+ }: E* X m. g .default_trigger = "default-on", t5 Q* I+ \/ m4 v
},, K+ H" D7 O2 o* |' V% E1 @
{0 a; ]6 j7 r* e
.active_low = 0,- ~ R1 _3 J: x
.gpio = DA850_USER_LED3,
! E9 @5 P# L' p .name = "user_led3",/ _8 B5 {0 N* `* o) C' B
.default_trigger = "default-on",7 Z( a8 m2 A3 P/ C. L5 u
},
* e: S# C( }0 v3 v5 z6 i% Y};0 a" ?; s' o i$ j. a
0 c3 [& S2 @% s9 B: O# D1 S" `static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& C. j9 ~0 }* O1 F Q* Y .leds = da850_evm_tl_leds,
" t/ h8 ~! a; ]; n .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; i. n \7 t7 H, y
};1 i9 l2 g# o; @$ h8 m- I
" y. d) z' M3 d/ e: |( V
static void led_dev_release(struct device *dev)
; Z5 P4 R8 B# \5 G+ U7 K{ W5 j( i# n8 {$ e9 z: b( M& g
};
+ [2 g! N8 v7 X8 h8 q
1 N+ W) \& F& s$ e% a( vstatic struct platform_device da850_evm_tl_leds_device = {; O/ W7 O' J' j7 v5 O. f, L
.name = "leds-gpio",- C/ t% _0 I d! m* L# W, W$ a
.id = 1,
7 H' Z$ H! a2 z .dev = {8 ?7 ^; P' I: F/ |3 w
.platform_data = &da850_evm_tl_leds_pdata,
0 T6 A) x2 W, o. }2 j .release = led_dev_release,
' |5 v- e$ a: ` ^9 [9 A3 p' Y }
) p! E9 a I. L6 V};
8 f3 u2 u0 j* x# s
: F& C4 X# ~1 t4 |# m# _static int __init led_platform_init(void)! K9 S# c" c; v+ |- B3 b# K1 Z4 @" `
{
: d$ t7 ~0 z6 q4 q/ O8 b int ret;# o! a0 V& Q4 a& b3 \/ F0 p
#if 07 r. h8 ^& `1 L6 w* @6 e
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, Z% R0 G$ i& V) g# L
if (ret)6 G _0 W9 k( x# }' M& H+ m
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ E6 m2 w* m* D% R
"%d\n", ret);
2 u. D; s- v) y# D6 f9 i% I, W& H/ U, O& ~#endif
) h' {: d) m& _" R- ` ret = platform_device_register(&da850_evm_tl_leds_device);4 \, |0 {0 ?2 B* ^ z& V
if (ret)3 c1 P& L# x, [+ Y
pr_warning("Could not register som GPIO expander LEDS");
5 v; U0 F$ B. }0 v3 } else
+ o* l0 F2 V1 a0 U" w5 C printk(KERN_INFO "LED register sucessful!\n");
2 Y" a @" G/ Y! |7 w2 h
; ^6 Z- V2 T" [# ?5 V8 Q+ S. Q- R return ret;- j K% r I8 D6 }; o' D B3 ^
}
F& W, F# ~ l7 @# o+ N0 ~& h8 U
: ~9 l% t" I" x4 ? V" |static void __exit led_platform_exit(void)! h/ _% _$ M, o) k2 a. `
{
; Y2 L2 \$ U0 v platform_device_unregister(&da850_evm_tl_leds_device);
" r- e4 D# z: H( U, m
5 R' S0 p+ q) w( b printk(KERN_INFO "LED unregister!\n");
+ H, }$ b2 M* Q: Z. d}
m7 n# i( |, V" Q1 c, |8 g% \3 A- Z
; ~! T) T8 k- H# c+ J$ fmodule_init(led_platform_init);
: Z% J1 y; @! R) O5 O0 }9 qmodule_exit(led_platform_exit);
, M U/ D' K+ b
2 n; y9 v1 M" N8 p8 m( W9 zMODULE_DESCRIPTION("Led platform driver");5 F# e/ i6 Q: P# q
MODULE_AUTHOR("Tronlong");5 V$ k6 M2 S$ u
MODULE_LICENSE("GPL");. ^3 _ ]7 ~& ~ \6 c& @& c9 D/ P& J! ^
1 o( ^9 X3 E+ W; N* l+ @ |
|