|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. A4 H) M% n5 R1 ?
#include <linux/init.h># e0 ~ I; p9 A/ f- `4 r# O
#include <linux/module.h>0 j: w* ~3 R/ n/ \
#include <linux/kernel.h>
8 R5 {% L9 q6 ]8 X) M+ s# x#include <linux/types.h>
6 k# g. \: t9 V# _#include <linux/gpio.h>
& B7 r4 q3 L" R) [#include <linux/leds.h>: a, G; M- w7 y' o! X
#include <linux/platform_device.h>& v7 M0 }% _2 Q c$ x( s- i, ]7 d1 v
) t8 H6 D; e1 e#include <asm/mach-types.h>' k+ s7 q! c1 C
#include <asm/mach/arch.h>
+ C1 F4 `% F5 n* S6 Y* H: J4 `6 [#include <mach/da8xx.h>3 F+ e9 T+ q2 m7 k& X) G
#include <mach/mux.h>- H4 L% o# E* F' K
- h. N: S: O% O- d+ E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% V$ W) }4 s0 P" z7 i, p6 R& H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! F- i; O3 D/ t' D
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ D% F! L% ~: k: R$ v9 L: l3 ?9 C3 H
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 j9 n- z: j% m8 G& {. Y8 @" N1 H; U
# C1 _( e) [4 H3 M/ G% I }
/* assign the tl som board LED-GPIOs*/
0 r; }5 d @ n" O2 ostatic const short da850_evm_tl_user_led_pins[] = {+ p7 Z( S/ Y0 |
/* These pins are definition at <mach/mux.h> file */
. D% _- J7 p, W7 C4 q' a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) L: E$ B/ f6 D- y8 F
-1
9 |2 M/ g/ b9 K};
5 B9 F. ?2 o- {7 e k5 f! o( K
" C, [# w8 q) k. K0 J# wstatic struct gpio_led da850_evm_tl_leds[] = {
7 c& J: Z9 m6 M+ D) |" x& s- U: \ {$ t8 i o q2 ` Q: m
.active_low = 0,( L8 d1 [; {0 O" s
.gpio = DA850_USER_LED0,( O0 H) y) f; A1 `( k- f% E9 L3 u
.name = "user_led0",8 B1 c" P% p! h5 g/ u* _
.default_trigger = "default-on",
# Q" F, ~& H Z4 H& M# Q O/ _ },- U0 G9 A% {+ H( T0 S' L: h9 v/ l; ?
{1 Z' [" @' b# _& X) }; v; x
.active_low = 0,' J5 O' r" [' y5 b! Q6 B, k: o9 F
.gpio = DA850_USER_LED1,& x) q8 T- b% a( y0 ?0 U
.name = "user_led1",
5 G0 l- i, e% z- R .default_trigger = "default-on",0 N; G/ u; ]9 s4 y
},6 C5 W7 L8 d1 W! m V4 s. B+ z
{5 l- U+ M, a2 W8 R
.active_low = 0,% G3 d7 V ?& A7 }: ^
.gpio = DA850_USER_LED2,+ j( l4 I* V4 w6 M' E
.name = "user_led2",
, I! e% a$ _6 y# v% v5 F .default_trigger = "default-on",
8 S" ~% u9 d8 |1 Y1 J },
9 J2 c' F" N8 n {) ^3 s" G9 d) f7 B9 `8 K) q4 B
.active_low = 0,
0 w9 R( [8 F5 b( m! t' Q0 e' O .gpio = DA850_USER_LED3,
* @: e0 c" y* a+ d0 i& I .name = "user_led3",
+ e/ S d& {% x1 e# j# Z$ B V .default_trigger = "default-on",
: X; A! e5 B. B2 m6 O* p) o5 Z },& h5 @4 n! M' C% C, f
};
f2 T; S! L( o W9 e; k/ @' `; o4 w/ B3 @' d7 {% e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 z) `5 E8 O8 z
.leds = da850_evm_tl_leds,
5 n4 z9 M1 ?' E- X .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; M* @$ M* \$ C/ i};
! @' i' @5 u: @7 k* i+ c( D C% r# I8 O0 e* o6 B @
static void led_dev_release(struct device *dev)
; j! l9 K( B: f, Q5 e$ C" x2 z, m, Q{& I5 b& h$ v& n- i5 H; ?) r9 r
};: {' @: {: k& q' C/ S* b
$ f# j0 b0 p) y) D, A. h2 j
static struct platform_device da850_evm_tl_leds_device = {
% H; _& T5 t6 S& C .name = "leds-gpio",
2 Z8 B6 D9 s1 B( P7 ^ .id = 1,
% j! W4 l) C/ c' ?! Q" N .dev = { R8 r/ g- g7 r' H7 r) T
.platform_data = &da850_evm_tl_leds_pdata,4 G8 G* q% c A. K. B; S
.release = led_dev_release,
) D8 V0 Y6 A* ], @" @/ f$ g }
: A" @1 C2 v$ I( \/ r' V2 L}; D$ l4 J- R/ o; t
5 p" B; ^% e2 S8 u: D4 Qstatic int __init led_platform_init(void)( f" h0 c9 v; j; z
{& g* Q0 m a* R2 @
int ret;
9 {3 n( U) K4 p6 K#if 0* f, s& S% J- s" x( J7 S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! V& ^, [( \/ _2 p2 W& v, A" l
if (ret)
$ J0 Z( d; ~% T1 b: { pr_warning("da850_evm_tl_leds_init : User LED mux failed :": i$ T i0 t8 A" |# P
"%d\n", ret);
* C [0 D. z) a# H+ O1 e6 O. H#endif
/ q4 O; u" P. C/ s6 m3 D( O ret = platform_device_register(&da850_evm_tl_leds_device);1 r+ g$ D1 \" }4 C& z1 H, ?
if (ret)
2 Z1 }' U; H ?8 M$ F pr_warning("Could not register som GPIO expander LEDS");
0 i2 l$ T3 v0 e0 G* t2 I else; X2 D8 a2 _# k& d( ?
printk(KERN_INFO "LED register sucessful!\n");
% ]. s/ y; i# f) @. ]
( r) T4 d4 Z ~+ Q6 y# W! d- i8 ` return ret;$ Y. n; I% o) @5 z# f2 h: \* _
}
! W1 g D" _. e5 P
" @3 M% C" G: Y2 X7 W* c3 Hstatic void __exit led_platform_exit(void)* u3 B" {* z7 X! c3 r7 G; K; |5 E
{! k! E" y3 q: F& ^/ r% `) d0 t
platform_device_unregister(&da850_evm_tl_leds_device);
6 a3 B. ?0 D" J C: \
6 _+ x4 x. b$ m- | printk(KERN_INFO "LED unregister!\n");
9 n0 f+ e- j3 E6 M}
% Y9 R% Y+ a: z; G* U+ q' e( ^' G3 ~- v) m
module_init(led_platform_init);
, M# h/ Y/ J- O( q6 D! [2 _module_exit(led_platform_exit);! p% G& l& K, Z K5 O/ [2 ]( k
! S0 ^1 ]% b5 R9 ~8 A. _MODULE_DESCRIPTION("Led platform driver");
% z \# G. W @4 A0 ]3 wMODULE_AUTHOR("Tronlong");0 O5 ]0 {4 N$ B: v* S: ^
MODULE_LICENSE("GPL");
3 }: K3 u/ H2 |$ L# i% \0 [
' I1 ~$ b+ y0 o* }5 m2 T |
|