|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ n/ g3 v- N/ q4 Q; m+ |; T9 Z; S
#include <linux/init.h>
2 g( H; b/ a8 O* ]2 k1 f. J5 p* L#include <linux/module.h>) [- y& A* {# n$ a8 }1 K
#include <linux/kernel.h>
8 m( T0 G8 d# t, k+ {5 j8 [#include <linux/types.h>
$ e# W5 V) M6 r& n8 f#include <linux/gpio.h>
8 M: N, R% ~7 z! t4 `#include <linux/leds.h>
4 X6 C5 G$ V, V$ d#include <linux/platform_device.h>
% ?% s* |1 w) n4 N/ P. }
- U! l; W5 N1 s/ h3 A" @9 v#include <asm/mach-types.h>
! o& {/ C; H. ^$ ?6 J#include <asm/mach/arch.h>* }" U, V4 J1 v$ i- s$ D- ?* W. h
#include <mach/da8xx.h>& r& @$ `' ^" l7 m$ ^9 B8 p
#include <mach/mux.h>
+ Y4 \; y$ `& m3 e1 u7 f$ A8 U- V# ^ r
4 w# _& X- s% w#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ w" I k5 f. E% m6 p V! k
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" {; `* @: C+ r' y( r& e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* Y! W0 s. U) A7 H#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& m7 |9 D/ M6 R ?4 @
u8 K' y: `$ z
/* assign the tl som board LED-GPIOs*/- `6 ]! R; G0 ]( f7 y
static const short da850_evm_tl_user_led_pins[] = {9 K0 F e( `' B3 x! p; C- V5 O
/* These pins are definition at <mach/mux.h> file */; h3 N/ B `* U& n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# B* V$ z$ G& N3 z+ G2 y* s9 J# ^
-1
- Z6 [: ^7 v4 T; n8 ^};
* H3 v" Z3 w. f) R8 Y
" I1 o6 W5 p5 I9 C4 V! estatic struct gpio_led da850_evm_tl_leds[] = {
6 E( b( A! L- |" E) y4 H {
& c% y5 {" U0 w/ q .active_low = 0,( W0 T2 D6 z" @& q" P
.gpio = DA850_USER_LED0,
; e* ~1 n( V7 y% H .name = "user_led0",( i1 ]# Z8 T Q
.default_trigger = "default-on",/ N0 I/ M" ?( p3 w: j J
},+ Y! s j4 _+ t: D
{/ u D& k6 ^: a( @9 ~% M, R: o3 m
.active_low = 0,
+ e1 K7 ^& A& g* |8 s' z2 H .gpio = DA850_USER_LED1,: \4 H J R$ z: C
.name = "user_led1",
: Q k2 G+ W: F7 u/ l, e: o0 }3 D .default_trigger = "default-on",1 P8 {- ?# m9 G0 V- T% l, \% Y
},) T0 j7 C7 Y! q
{' a$ o4 u1 w M( M, q D
.active_low = 0,$ @# ~; t7 M, F: E3 J
.gpio = DA850_USER_LED2,
6 J" j) F: W5 ?, ^ .name = "user_led2",
- q! D: N5 J* h) Z .default_trigger = "default-on",' u; \' _" Y9 N+ E* b
},
/ S9 J b, H/ j, O! A0 g {+ I$ T6 ^" Z5 m1 n. J* Z9 T. g
.active_low = 0,( X; [, b6 G, {' \0 l
.gpio = DA850_USER_LED3,' G/ }9 r2 n8 r: I
.name = "user_led3",
r% P0 |0 x# ~4 e( Q .default_trigger = "default-on",0 \% K* l8 n0 j8 }
},
) S# p7 R8 f0 r$ K. t( B};
; ~( j6 Z; L2 t( _
1 ]! v+ m, m; [: [2 h' Z: Vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( B( M' j) Z( Q% w .leds = da850_evm_tl_leds,
- r# l* C' J: H. x4 u .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% d9 l4 ]% E3 v
};
: k# i; i5 }2 `6 B/ K( M, y3 F
7 @& M% a- T# p1 G0 M" c% Nstatic void led_dev_release(struct device *dev)( K2 N7 L) z/ I4 ?! K5 w
{
+ C @5 m. T8 ^& [};
; L, m" X. Q& l* [! p2 O0 S8 C; A7 r: A/ {! D
static struct platform_device da850_evm_tl_leds_device = {
" i$ i/ I5 U1 E; G. v9 c: J .name = "leds-gpio",
) q5 k. R4 `" G, n( M; n .id = 1,7 ]+ }& L3 y( j2 Z
.dev = {
! S$ A& U# k) D .platform_data = &da850_evm_tl_leds_pdata,7 ~1 d- X4 ^+ D" x
.release = led_dev_release,6 B- E2 e& }- _5 k6 D5 t
}
/ [( a0 M, K% r};1 k7 p; O1 R0 ]7 W3 q
$ L2 w* J7 C! W: k* c& e7 V
static int __init led_platform_init(void)" t* {' A i1 v* _
{
% i8 T2 Y; S( D% g2 `4 a int ret;
; A) v9 R) e$ A3 ~1 W4 e t#if 0
+ j; T1 y9 [" y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 Z$ G* U/ ?" O) F4 v) c
if (ret)
- O' |( g# c2 f* z/ o pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 f+ k- ^$ P% r3 A* K- i2 C8 K& o
"%d\n", ret);
8 r7 B9 {6 d+ B, N) E! r#endif- V9 n& }, S0 u/ N+ T4 `4 q: L
ret = platform_device_register(&da850_evm_tl_leds_device);
{7 r- B7 m8 ` L8 T$ I3 ~ if (ret)
2 B) Z) v& ?2 T! [7 b% q pr_warning("Could not register som GPIO expander LEDS");7 W6 \' J) d" |% ]
else
5 D- h9 `6 | d' @6 l; C4 {( W; t printk(KERN_INFO "LED register sucessful!\n");
" z" E1 O5 T W6 u, ?, {4 D! F2 m
3 ?' v# M& ?+ U1 E6 d4 ]: E return ret;
9 j- A, t4 m! j- _6 m5 w}
2 s$ {( c& k$ G' n4 k. a, M) Z! i& l) F/ R2 d1 j( a! x3 C
static void __exit led_platform_exit(void)$ M) B% }* s+ X
{
. u' _+ F! R# L8 q platform_device_unregister(&da850_evm_tl_leds_device);0 d: L2 ^/ t% i; x
$ r# w! r/ w' X' { printk(KERN_INFO "LED unregister!\n");
6 V U+ a0 N4 ?/ q9 ~2 j r5 ]}9 P% _' Q5 l. g" b3 r/ g
! C( C7 `5 U% U1 H6 B0 imodule_init(led_platform_init);* X$ `, v& G5 |5 n. y2 k
module_exit(led_platform_exit);' _& R4 G3 v7 k+ J, [
- `7 D- J& W, ] s7 m m2 x6 Y
MODULE_DESCRIPTION("Led platform driver");/ R5 R, K* K7 {6 B( ?" ]- u# E5 z
MODULE_AUTHOR("Tronlong");5 c- @% O( ?9 ~. J
MODULE_LICENSE("GPL");7 N: |" ]2 X6 {! D
S4 U7 t9 \; i) Y8 A) W |
|