|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 j/ _8 g; m" o' B- e#include <linux/init.h>6 O+ `' ~' A# M! A4 R5 a
#include <linux/module.h>
( X; d3 ^7 k3 P0 d5 l! `#include <linux/kernel.h>
. ~# |6 L+ { E5 X#include <linux/types.h>2 T1 z% I1 M2 i
#include <linux/gpio.h>
1 y. S' _, v$ G5 H; z8 X#include <linux/leds.h>
/ b2 Q o7 r7 D6 ^#include <linux/platform_device.h>
0 q6 e* s- g5 J- Y% x% s! g$ N$ |. k8 ~! B5 G
#include <asm/mach-types.h># ] P' r1 w/ h( g7 p. G; N( U! }
#include <asm/mach/arch.h>2 }$ I6 A8 O( c }+ t- }, D
#include <mach/da8xx.h>' e5 O+ v3 _* t
#include <mach/mux.h>
9 }# q& R" W% w1 T5 y- N; s/ y5 S. p3 N/ M, p" ?+ u T- ]4 t
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ M/ i+ J: Z/ t1 d: W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 x, i' D- E* N) s5 @$ l3 d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), ]/ K7 X) f2 Y6 B; j9 T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 B! ^2 q0 L3 |" _! b( Q* s# I! o
8 }( \; b. K9 ?8 d8 Y3 o4 z
/* assign the tl som board LED-GPIOs*/
4 s# h' H7 d, I4 ?$ M' Cstatic const short da850_evm_tl_user_led_pins[] = {
; {5 Z5 v* N! v6 d6 _# V /* These pins are definition at <mach/mux.h> file */
. l$ k* ~. _! T x! V DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) m$ M* z( w; A. i( s+ L* D -1
6 |9 E$ m( h. K};* g% K( p9 E+ g% c
0 z7 ~; P5 h! m
static struct gpio_led da850_evm_tl_leds[] = {5 Q9 x+ E0 U. a4 P1 F3 V, _' {5 |
{* r6 r% H( c* s" o2 S% E4 |
.active_low = 0,7 {, T8 W% v- J9 P# ^2 \3 C O
.gpio = DA850_USER_LED0,3 D/ Q4 o; U+ X+ l' T
.name = "user_led0",
4 l3 e* g( K& h" E+ j3 e .default_trigger = "default-on",& E: e$ Q- ]" ^8 B2 G( n
},
1 z2 k& u0 H' J) M6 n7 M {
4 M5 m% \( E% T! ]4 d1 v .active_low = 0,/ \3 u* K/ F0 t- p) ]) y4 W
.gpio = DA850_USER_LED1,2 c) E2 e ?# Y! y
.name = "user_led1",* Q0 m. l; Y3 \ H1 g& h
.default_trigger = "default-on",- A2 L2 T: \9 e; l3 h7 {
},
; ~% [* X; S4 i7 ?5 P {
# n9 |2 c, t; `* h5 X j! O .active_low = 0,; Z/ X) a+ M! C2 y% c
.gpio = DA850_USER_LED2,# W _+ E0 y6 P) Z
.name = "user_led2",
- R: O0 L N( e .default_trigger = "default-on",
' Y) u. Z) h3 A; [" B* d9 _: Z },
" q/ Z6 X' O: r+ A6 z {
" W. H" E- r+ U/ R8 Y .active_low = 0,4 X- I5 r' z' x/ r7 w; N
.gpio = DA850_USER_LED3,
$ a" ~9 N+ n3 n. u7 ] .name = "user_led3",# g& ~# B) W% t6 N& c+ Q; S; [: q
.default_trigger = "default-on",
6 b% y# ] V5 T' z }," H5 \- t) w& L
};3 \: Y, |* ]5 y9 L
[; m, i1 e1 z4 F3 d& T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ L/ Q2 ]6 s. W9 q' D) x
.leds = da850_evm_tl_leds,! S9 c- L1 C/ G: p7 k9 {4 D
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: F2 Q) A6 @* @};
2 w; F3 H6 A: _
4 F8 O `( S! O3 Z1 j- bstatic void led_dev_release(struct device *dev)
% x) Z: `" c3 A8 W/ Z{2 p9 ?8 |, y7 U1 o) i
};
1 {" y9 |# Y" N L9 [0 x
9 k$ B7 j" T" c9 Mstatic struct platform_device da850_evm_tl_leds_device = {
- _/ g7 P) Z" o/ y, y .name = "leds-gpio",
% z- B/ [2 I% R, T, E' i .id = 1,- g5 N' K: O$ x7 D& g
.dev = {
) R3 A8 u0 U- H& w" U3 L .platform_data = &da850_evm_tl_leds_pdata,1 V& o& l+ r- T# Q/ E0 F" h4 ^
.release = led_dev_release," J+ f m" R# r" ?
}
* {" |, K: ~& r4 M5 v( n};7 j: M6 x( C3 t# X) l r
4 t, t; R# @; @# r# sstatic int __init led_platform_init(void)$ K6 \ C) w1 v. m9 S
{
3 ]: a- ]5 ?3 Q/ V: A3 M int ret;( F# d. |3 [6 Z- X
#if 0
' d! }- z7 Z8 C/ ~1 A& z, i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( y: j- b8 t+ ?+ O: }
if (ret)5 h l1 R* z5 l# ^- o5 o# I1 y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 ?% w8 A) F2 I
"%d\n", ret);
9 Z. ~( }% I/ f( Z3 Q* ]#endif
! Y: t9 s$ f0 i3 e ret = platform_device_register(&da850_evm_tl_leds_device);
7 G4 W/ W, D0 x4 H6 m9 n if (ret)' [: ?/ e2 d% D' j% M
pr_warning("Could not register som GPIO expander LEDS");
Y0 T b; J B) r9 V8 m else
! s& l( g& j' y& s# T printk(KERN_INFO "LED register sucessful!\n");( a, P0 ]' U. D6 F; m( d% G/ D; t
% [* t$ u& U3 E" w8 s1 _* U7 Y4 o return ret;. I! r# Q0 \9 E/ q) c
}( |, I9 a0 A1 D) ^! \9 c+ o" x
: I. Z' T7 f! z2 Q
static void __exit led_platform_exit(void)
( n- @ `! c1 @- n. E5 Q8 O# I{
# J1 U& x" g1 m9 S/ n platform_device_unregister(&da850_evm_tl_leds_device);9 K3 ~- l: Y+ Z- Y
3 S3 J' S9 L: O6 ?9 w& i3 l printk(KERN_INFO "LED unregister!\n");
- g/ z$ w0 F; y' m5 S}6 n1 l% s3 @1 P6 v- t
4 \. F3 U( a: L C; A3 L- ^2 V1 W4 G) imodule_init(led_platform_init);
0 H$ H8 v9 Y! E# pmodule_exit(led_platform_exit);. P* @1 M0 N/ `, Y; A; g8 l
1 h6 K: }9 _, X
MODULE_DESCRIPTION("Led platform driver");- e, x- R# {* I3 @$ }* ^2 o
MODULE_AUTHOR("Tronlong");9 s- g1 T* _; t+ _9 I5 |. a
MODULE_LICENSE("GPL");
% h5 P P9 z5 v7 l; M! K5 l" g. X- w5 _& o- m
|
|