|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ V Z7 @# _" l2 n) s! H5 r3 L* }5 ]
#include <linux/init.h>$ f% |. B$ Y* A# k i
#include <linux/module.h>
- p* ^3 b; x5 \% k#include <linux/kernel.h>8 X3 O* O# ?: I
#include <linux/types.h>3 J' k$ u4 n. X" O/ w
#include <linux/gpio.h>: H7 R H9 d! R% l% b
#include <linux/leds.h>( Y$ {. h( T8 M, B8 K5 p1 f
#include <linux/platform_device.h>
' Q% `! @( L: b4 R+ x* K! E7 i; n0 |) [
#include <asm/mach-types.h>
! z! D* R7 h$ k/ ]#include <asm/mach/arch.h>
$ S8 J/ g" V' J' Z" {/ T. {% H* P" N#include <mach/da8xx.h>
' q9 I5 h% k) a. ^6 f5 e+ _" |0 P#include <mach/mux.h>: i G# w7 v i
$ ^8 n( K0 t2 Z }) `4 @- R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% \ F, j: C$ O% f. b" X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ F9 w+ c0 b8 m8 Z& N3 ~- ~0 E
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& ?/ Q7 j5 `& h- U% G1 D! ~( X' R, E
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 @. C/ d1 @" Z; }1 ~3 B2 {
, u3 N4 e4 c3 \$ ]+ {( x! v
/* assign the tl som board LED-GPIOs*/( o. D) j% S% c. V" I' Y: F' ^1 u
static const short da850_evm_tl_user_led_pins[] = {% P" ^$ J/ @7 p3 j; o7 s
/* These pins are definition at <mach/mux.h> file */8 r- I/ m) j; \ Y5 E3 V: T1 c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ w$ v6 B- e3 O5 _ -1
4 F b( Y1 p8 l5 M: C};
: p1 f( g) p1 _5 Y! I# j* }
8 z) I X" ?9 l( Tstatic struct gpio_led da850_evm_tl_leds[] = {6 Y( m" Q; A1 G. L$ P3 m
{
+ C; g5 z$ C- ]4 I .active_low = 0,+ @& ]! u* V8 B
.gpio = DA850_USER_LED0,; t1 ?. K: |. P2 B j
.name = "user_led0",
: A v( o: o' N0 L' t8 U .default_trigger = "default-on",8 ~2 p6 E' W+ I9 Y* O! ]1 q
},
! ^: p' c& f& @ {2 ?! L9 O3 ]5 k4 Y( W0 m
.active_low = 0,) J3 F. |6 E( f9 g
.gpio = DA850_USER_LED1, z( g$ I: N0 S0 ~$ a* e
.name = "user_led1",
- L) `+ }2 u& n8 D* `0 E+ V! R .default_trigger = "default-on",, X- E5 H) `8 A( i
},
: }8 z0 m$ K( n) K- t {' r# @- [! \$ i
.active_low = 0,
( \" \; t" t% W' y# {7 g$ s% @ .gpio = DA850_USER_LED2,
* L* y# Q! ^8 [, w u .name = "user_led2",) K0 L; { S* o7 L
.default_trigger = "default-on",4 E x: m! L& p& `
},
6 }2 w8 Z6 W9 a {
* H; W, b; @$ G1 G7 L .active_low = 0,
- x6 t. L8 ~1 l) m .gpio = DA850_USER_LED3,
r' @ p9 J4 I0 B3 K .name = "user_led3",
) b4 y* m: f) A2 V% w .default_trigger = "default-on",
) i* R# u' q1 L. n" q },
}! U/ V0 V# K+ f- M$ f};$ E9 B* g8 v" K% C+ Z* W
0 i5 @& A) v6 D, k1 ^
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* z6 Q5 x* W9 {+ o0 _* t6 j8 }0 n .leds = da850_evm_tl_leds,
# a. s- C3 ^3 h" U# Y1 S .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 J( D9 I$ l( `( p! h
};
8 {5 P- j# f( u! p! I U: j1 C% n/ m
static void led_dev_release(struct device *dev)
/ P7 p' m2 u; O6 |, \. v% r8 t) p{! j4 R" A7 Y8 K7 H. W, ~: V
};' m/ i$ j+ j$ ~/ j% J
# H: }, c* V) I& R0 a2 X
static struct platform_device da850_evm_tl_leds_device = {, C' y6 z/ B: g# r$ w: l
.name = "leds-gpio",
. ~' e; l: r4 b# \# m6 p6 G .id = 1,
3 x, ^- l+ |' z" s i .dev = {
; k2 Q C5 G* |( l .platform_data = &da850_evm_tl_leds_pdata, g9 T0 @- y& }% ]7 I! m) d
.release = led_dev_release,
0 B6 n: _% k; N$ u, ]0 x }2 ~* R, q9 e/ C7 p9 J: v
};
6 r6 |& I y% U$ I" b$ O, ~- t* C7 D
, a$ y+ t. W9 u: w$ nstatic int __init led_platform_init(void)
1 L8 _6 `9 J/ j! f( k8 [0 `- b{" n2 I. u: P4 M3 M! ^
int ret;. i% h8 Y @8 `5 u! Z, W1 r
#if 01 T" [" ?* u0 ^! q: d
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* s, s i& p" }0 D7 ?: E if (ret)
# L6 V+ G& G5 f1 x) K) K! } pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% p1 f9 |- F7 U" o "%d\n", ret);
# k2 h; C. k+ W7 f#endif
; V+ L, u- Z2 P+ u' r ret = platform_device_register(&da850_evm_tl_leds_device);
; j6 c" L8 L! u, n if (ret)
# ~+ ]. \4 u5 E+ A; z: w% J pr_warning("Could not register som GPIO expander LEDS");
2 ] X9 Y: o' i else8 `& V# R/ q( L- c
printk(KERN_INFO "LED register sucessful!\n");
f4 V) j1 P- E6 I* u" ~- Y b& b0 \# R% c. k2 m3 L) w3 L
return ret;# {- E( a" Q& ~" A
}' k( k( y& W5 v6 ?6 D1 E
6 f( w$ p, |, N* Q
static void __exit led_platform_exit(void)4 H6 ~! @5 c! Y/ T+ |
{) M/ a& m4 z7 I& e6 c; q, y/ q
platform_device_unregister(&da850_evm_tl_leds_device);
: L: ]% p2 K+ R$ f9 ]$ U" D r. P/ v) [# S* N
printk(KERN_INFO "LED unregister!\n");
! K' [8 I" x7 P! R}3 V+ a3 H* L: \; ^- z
6 p' W3 S: Z* E+ t( s; }4 Ymodule_init(led_platform_init);" h6 c! n% R$ F! f" I% X
module_exit(led_platform_exit);+ V, J. k* O2 Q5 z* S
1 {' E7 {5 w0 B' Y6 c3 WMODULE_DESCRIPTION("Led platform driver");
# a4 o$ b3 f5 I4 X4 fMODULE_AUTHOR("Tronlong");
- t4 ~5 [" R- R! T1 J8 d8 `, @MODULE_LICENSE("GPL");
+ }/ D* C: } v- f1 I% ?1 r/ R" i! l |7 y% B: W+ I( ^
|
|