|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ h- B' b9 R; t9 O
#include <linux/init.h>
* T+ g) j5 ^2 {#include <linux/module.h>+ E+ Y) B5 Z) X6 U3 E a2 D. O/ ?
#include <linux/kernel.h>
6 a7 m- U7 h/ U. J#include <linux/types.h># l* x0 U: n! ^& P, { W
#include <linux/gpio.h>
3 u4 X7 G/ l" C7 k+ }#include <linux/leds.h>
6 t$ ^, O1 Q3 z" ]#include <linux/platform_device.h>6 r' p' `' x% U: t+ g8 j
0 n0 j0 h5 B. m( d" Z
#include <asm/mach-types.h>
2 ^! v, m" i6 I#include <asm/mach/arch.h>" F; `8 a* A+ }8 d5 Z
#include <mach/da8xx.h> }, j Y4 @. [; y
#include <mach/mux.h>% c! c+ w/ B' i" H/ H: l
7 \/ x+ W( }% o1 k, E. _
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& c6 h( V5 t. m7 r- o, _- x#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
n9 j6 O$ r7 h W' N( s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 I% ?; m. C: B8 z" W& h! O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); C0 c9 d8 ?0 p0 m. E" a; P/ q
8 f5 m" V0 v% X4 m/* assign the tl som board LED-GPIOs*/
2 g) h# J- v8 {% M8 b% Istatic const short da850_evm_tl_user_led_pins[] = {4 X3 w" J: V- {" [( u1 r! _
/* These pins are definition at <mach/mux.h> file */
( M0 G4 C* K- K2 U* K1 m6 ~ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# K, V" \0 P- N3 I+ h* ^) m1 G! I
-1- U. k9 `& s/ Y: s6 m
};4 y; _2 H* e0 K# h- n9 Z T1 O; R
/ ]: a. P# }; B/ P1 w0 istatic struct gpio_led da850_evm_tl_leds[] = {9 N6 s0 U8 u0 X1 d
{5 }9 }& j) w5 G! m( o5 j9 M @
.active_low = 0,/ o) k/ \) Q# n b* D4 x; [' \
.gpio = DA850_USER_LED0,
5 ^1 M" ^+ \) b0 i1 Z) ~9 ^; D" d .name = "user_led0", H* D) d2 z( E/ c" B
.default_trigger = "default-on",
; `$ N- `3 ]/ j( V2 t7 U' e5 o },* e$ o9 U3 l3 a: v% `# g
{
# C' v4 T* m+ o .active_low = 0,5 b5 ]9 f5 e2 p. A* s
.gpio = DA850_USER_LED1,
2 m$ s7 K! {' Z; I .name = "user_led1",1 K- r. P1 \" t$ m" l
.default_trigger = "default-on",
* ^- Y& V8 s2 _( k% `( ? },- Q6 N- y# E' Q" {* x
{6 m" }5 y% I! j
.active_low = 0,9 k% F3 P* o z5 [. {1 M
.gpio = DA850_USER_LED2,
8 J' i9 W* e9 S e' d .name = "user_led2",- v1 d: a. G2 w1 f9 r& y* a+ ~4 b
.default_trigger = "default-on",
# R3 \. N! ^3 p% @ },4 }4 n+ S: c2 k& }% r8 C( O. ?! E
{2 G6 m2 p2 |4 P( x" C
.active_low = 0,. t% o9 A3 j5 @; G3 q) a+ ^
.gpio = DA850_USER_LED3,. Q1 l- R% }9 w( L( L! j* j
.name = "user_led3",1 }5 q& m/ X s4 h5 ]: r/ Y3 U
.default_trigger = "default-on",
# f5 H( A5 t* b; a: T$ ^6 ?; |) M },
6 T* P% W6 Q# G- }" O};
7 A( A- N4 S, i( \* M( ^, H& T
; j. G( q, M) p; nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: V! ?* ^: \& I* x2 ^5 q* l$ k2 P
.leds = da850_evm_tl_leds,
9 t, w; ~$ C* K' c: x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 ^5 u- l- w9 y( B};% e6 O! J0 j. j! T
) C- `) s. y# i1 m) S% Z
static void led_dev_release(struct device *dev)
) w3 h" Q8 R2 M; e+ K4 }. Y( S: q{/ ]. @9 q8 v/ @- T7 c* L4 ?
};
1 `1 R% } L) P4 B; V( w" B( U
4 y/ s( t( x) R% A5 sstatic struct platform_device da850_evm_tl_leds_device = {2 Z+ y( }* [/ C8 K$ q- x
.name = "leds-gpio",
. q3 W8 \! T# `; [" ]; a e& h$ S! w .id = 1,
- h$ x, p6 k1 ~4 f& c) e x .dev = {/ s3 }. f' d# [( O% D( D- o4 |
.platform_data = &da850_evm_tl_leds_pdata,
( q+ v) ^& R5 _0 x$ H2 o* z .release = led_dev_release,
- d e: l% n4 `0 C }
* n6 J: i$ v" K! @6 Z};
& R, d; L. H) q
( T! Z- D) F/ a9 Xstatic int __init led_platform_init(void)
' ^: B5 b$ v/ V{+ I' ^- H8 v0 x+ K
int ret;" O1 m# r$ f5 Q& h1 j
#if 0. n# [9 g" p/ b$ k- W6 O- {
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ F( J& M3 H E/ o/ s if (ret)
7 r& T7 N) l2 X9 u& ~* h5 t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 M, ]2 [ K" o, V4 c( H "%d\n", ret);
: l8 a* j x5 s$ n0 v5 M1 @! N#endif
. ?: n. W* @& i/ Z" ?/ k- V ret = platform_device_register(&da850_evm_tl_leds_device);
* P& O$ k, j& B if (ret)
3 `3 X" e9 n7 w9 ]8 L5 A+ R pr_warning("Could not register som GPIO expander LEDS");
7 v8 b, }- E5 Z: R# r else8 A; }* X* w- a; N, @7 V
printk(KERN_INFO "LED register sucessful!\n");/ _5 R( X1 I9 U8 ?1 Y$ V
; {: b6 O7 v+ d* H
return ret;& q' j& c' a, Z* y% Z( D- v* B
}9 K4 j& s- _) Y' g
; A" a' G% ^1 ~- ^ W& z* ~static void __exit led_platform_exit(void)$ Q& |3 V* c5 Z5 y' B
{2 d0 M& Y- n* ?) P
platform_device_unregister(&da850_evm_tl_leds_device);2 r& E, @: a/ C0 J+ [
2 n1 G% E! A- f( I9 F printk(KERN_INFO "LED unregister!\n");
, z; s# x4 O1 T8 ?$ J5 [) W}; s b* v( @5 D( Q( E$ h) B9 p5 n
7 h. A' v: R. Mmodule_init(led_platform_init);
0 O8 p- _# e+ W! Pmodule_exit(led_platform_exit);# P2 E2 }% t0 i% ?
( N/ B# |# b v
MODULE_DESCRIPTION("Led platform driver");/ O& R+ Z) C/ j% M, x
MODULE_AUTHOR("Tronlong");
. U. d% ~7 a9 o5 i* o( n% n3 r2 eMODULE_LICENSE("GPL");4 F5 Y" }9 h* n# C; D! O, L/ v
* E8 t. P1 Q. B; Q9 L/ ~# F
|
|