|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 E+ c$ ^! `, B; C9 P
#include <linux/init.h>
$ ^" s D4 M) a6 @* Q#include <linux/module.h>
( i* t3 `: a' h9 V' _; Q- F( j#include <linux/kernel.h>( P7 V" i3 _7 H
#include <linux/types.h>
! Y- v# i" H8 S#include <linux/gpio.h>
: i" f# E+ U4 w" w8 \. l+ @#include <linux/leds.h>
% R2 e( D( e/ v2 o+ j+ t#include <linux/platform_device.h>2 ]8 P: s- |1 k/ O7 m, k- U
' [5 Y; y' X( l1 T; y/ q#include <asm/mach-types.h>" g6 q9 U$ i3 R+ F! M
#include <asm/mach/arch.h>- G! H; a# h: C( P1 P
#include <mach/da8xx.h>
# O8 w" l0 r+ n3 ?#include <mach/mux.h>$ Y( Q0 i% P0 ?1 y; \! L
" P& t9 U/ t' x. S9 F5 U#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" u* P N% d w+ c3 S
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); @7 Y; }; r! A& S. s
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 L9 H! o U/ E
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& z0 ^ {) ]+ q' z$ O- j1 q# d' {
/ d% _, p' S- b$ W; U2 A. X6 U$ q/* assign the tl som board LED-GPIOs*/& c; A- o6 x/ Y$ e# x8 M3 |, ~# S
static const short da850_evm_tl_user_led_pins[] = {
6 a& g7 O' _) A7 z5 C- A% p /* These pins are definition at <mach/mux.h> file */; }( X2 X. _2 f$ v9 Y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 x( l, @1 t( q
-1
9 q, @2 w- z$ c! z3 \5 T8 N2 l};
- R+ K' |$ }3 y9 \( n% h1 P. C6 t4 i
static struct gpio_led da850_evm_tl_leds[] = {( q1 C; _7 A, M
{" `; L8 D! ]* y9 m
.active_low = 0,
" L9 ?# c4 g4 s0 Z w$ { .gpio = DA850_USER_LED0,4 O1 w% ^* n2 S* e' g. L
.name = "user_led0",3 O- b6 s; {9 x5 W5 n2 m
.default_trigger = "default-on",
+ f; S( U3 y5 Y1 w },
+ v7 X: F8 q6 g0 R {
1 x) T0 k5 S0 R$ T .active_low = 0,7 s) [& n8 { R3 T1 G& R
.gpio = DA850_USER_LED1,
7 K7 J" B$ I: e6 \5 Z1 Q" [ .name = "user_led1",
5 W' v1 o. T2 t" | .default_trigger = "default-on",
5 D6 @8 `3 x% Z; }: I( |8 a },
: Q" z2 q8 p+ Z% M. C3 F {$ l' j- O, M. b0 \2 B) _1 P
.active_low = 0,+ Y1 o! i5 g. \* ~) {( Q
.gpio = DA850_USER_LED2,% ~2 {/ o! |. U8 w* e t* ^7 z
.name = "user_led2",& V z5 k9 {8 I1 ?
.default_trigger = "default-on",9 c6 A+ m" _& i; y8 w
},- A/ C; a' A0 _4 u) ]4 _( i
{
* K, n5 W; W& I) R& v, P! t, I .active_low = 0,
% `; W( J& @6 D .gpio = DA850_USER_LED3,
4 V6 k# X5 c. Q% @ c! H6 z .name = "user_led3",
; C i$ M$ E. P) z$ S) D6 y. r$ a .default_trigger = "default-on",
+ u1 b% o$ i2 p+ X: ^ },
( M s. }( ~: K; [/ {# i};
# v/ m1 o4 D, G% d5 I5 k' P% }( m T& ?( l. \6 Z6 g
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { U/ x' o- E# F( b" k o( V
.leds = da850_evm_tl_leds,
& \' L0 j9 Y8 ~# z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ c" o4 b8 t3 }' _3 |};9 W0 {1 l5 e& g q ?9 I% o7 c9 H
/ P. d! z+ t7 t0 k6 o0 Qstatic void led_dev_release(struct device *dev)
1 f3 a7 N$ C* |1 n. u8 R! v{- ^( {) R0 p0 B; @! j
};
5 B b6 i. l2 t8 Z* w
4 v6 @% y+ U! Astatic struct platform_device da850_evm_tl_leds_device = {
( ~* h2 q2 J/ s" Z( }% U; t .name = "leds-gpio",
/ O; U, j6 C9 w! m" E5 x+ A .id = 1,
4 U1 o" g4 y' j' _9 u .dev = {
6 D& f! J6 z' E3 a/ w% A1 x0 p6 h# E: \ .platform_data = &da850_evm_tl_leds_pdata,
2 p4 k# D. [. n" I( s+ F* c) I4 Z* M .release = led_dev_release,
4 w: T+ W, E) z6 Y7 T }
D* |; l" U: A% A0 A! S/ A6 I f};
* T) S: h! ~/ R: Y F e
% M( x6 g* G0 ?- e6 xstatic int __init led_platform_init(void): l O5 n- b5 L& k( Z
{
& I/ y) P6 d7 K int ret;0 v! \5 h0 p% S
#if 0
& |0 s) T% E6 J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ D l; e% T1 ]" x, W5 j
if (ret)7 a5 S) m% j$ Y! ^6 t# R
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& c) S3 p- ]9 |& s _+ l' t) G
"%d\n", ret);
( O0 S( b5 S! q2 v0 O#endif
7 v. Y4 c' h% ]8 w% j4 p3 q2 T ret = platform_device_register(&da850_evm_tl_leds_device);/ u( Y% Q9 k' g
if (ret)
$ b% i' S, q" ?5 z0 U( C pr_warning("Could not register som GPIO expander LEDS");" _! ]: C) t, ^
else' ~ m8 o- e/ }5 \
printk(KERN_INFO "LED register sucessful!\n");
' s7 }% R4 q; U1 K2 v; w
+ W/ g: i! y" I- e# R/ ~) G% y return ret;
8 P$ t0 B% ?0 y6 F6 ~( P; I}
7 X# ^9 }: ~8 u S1 l% Z* k! t3 ` t0 n! @$ G7 d1 e# c
static void __exit led_platform_exit(void)3 j: D5 A; a! @- A' `
{
0 x9 y+ m( A. R& }; Z" ?4 z platform_device_unregister(&da850_evm_tl_leds_device);
7 i7 z0 U1 E+ o7 Q2 K2 z
2 t8 H0 h I: n& A; b! G' Z5 d printk(KERN_INFO "LED unregister!\n");& O$ h( \/ X2 M/ I$ K3 {- Q' C
}
" r( z& ~& b& B* ]) J) Q' u9 f% B
! a& M* ?9 L, e- hmodule_init(led_platform_init);/ S4 [5 f% v* a( w" [8 B7 J5 ]) c3 y
module_exit(led_platform_exit);
7 k3 x' W. M4 \" r
5 k5 d$ D# S# o' PMODULE_DESCRIPTION("Led platform driver");
) c" @5 G. e6 o& i0 lMODULE_AUTHOR("Tronlong");
9 a: \ d) T) p5 E1 a/ p/ }& K1 YMODULE_LICENSE("GPL");6 d; m# S! i; H5 i# e+ M
' d9 Y9 R9 O* i8 \ |
|