|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 U8 d9 i* h4 f#include <linux/init.h>
0 W$ n4 u V; U#include <linux/module.h>
6 h- w% Q, z; }3 L6 b/ `( r#include <linux/kernel.h>" _3 \, X, R/ F& R+ v f" \/ G
#include <linux/types.h>
* m) y& g# C, q# {2 n' d#include <linux/gpio.h>
" p6 }* T* U) c( _( G#include <linux/leds.h>
7 M0 N$ @. @# L, A, V( j) g7 G#include <linux/platform_device.h>: t6 P) P2 E2 @- U! B4 Y+ ?0 k
% r! X" @4 Y/ f
#include <asm/mach-types.h>
9 r, q6 N7 L- G% P( C, r4 s! @3 k#include <asm/mach/arch.h>% P3 p- q6 k1 h* v
#include <mach/da8xx.h>1 {, ?8 Q* Z; m. |
#include <mach/mux.h>
' q1 z, Z: W5 s" P
* I5 v5 Q7 ?/ a3 E& u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 t' H: U8 B3 W/ r
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ L8 j! l, u) E3 T
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& }: [* ^& ?" h, N
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ X! \7 z9 e/ m* r7 x" k2 X& I; C+ V1 G0 z* U! ~' c
/* assign the tl som board LED-GPIOs*/
: j' M# H3 v/ estatic const short da850_evm_tl_user_led_pins[] = {% u3 c2 u. Z N5 K
/* These pins are definition at <mach/mux.h> file */ B y5 F6 X+ v5 t
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 J2 \& e! F& x; V8 ]9 u( [( ]5 T6 v -1
) F6 r: s! a! j9 ~; H6 k0 R& Y};5 f) F w1 F( W* F; t+ t2 s' ~
* q/ d/ o' s2 D- @- X2 l5 u, `static struct gpio_led da850_evm_tl_leds[] = {' s! o' a4 u: b. t0 k2 Z
{/ ^) n6 Z! s& @7 d0 k* W. L/ E
.active_low = 0,
4 |% j6 w# t% a# \" M .gpio = DA850_USER_LED0,
; t2 V1 @. Y! P .name = "user_led0",* g* R9 E! x) H" ~* P N
.default_trigger = "default-on", w0 k2 k7 C- O/ C. `
},# K7 f: P& t m: y3 J* k
{
3 v( d2 x: U8 J8 \; {3 f W$ L3 O# d .active_low = 0,
- d8 m2 s! }) r1 O7 \' f) O" c .gpio = DA850_USER_LED1,% _ U( z P/ @7 B% O8 ]2 n
.name = "user_led1",
# v( I3 B; S% N/ I! p .default_trigger = "default-on",1 Z# a9 i, u7 L
},8 [4 [# f! g2 ^* v4 g
{
9 @) Z+ S3 F7 a5 o5 W; y .active_low = 0,& u: ]: b$ t) { K/ T
.gpio = DA850_USER_LED2," b: l0 a* [$ S
.name = "user_led2",0 ^: G" S0 V1 b4 o5 c
.default_trigger = "default-on",2 _# q2 Y3 q- r) M3 k, {) V
},' {/ K+ j% _# |) b; V' h
{
9 D' M3 m7 S- Q& k6 w* L .active_low = 0, O9 _2 ?" m' v% a3 P
.gpio = DA850_USER_LED3,
2 G) u/ _( r( U& J; E .name = "user_led3",
?+ b) |) r3 a$ | .default_trigger = "default-on",
8 Z( x( W, ?5 I5 k; _- E: f# l! e, e },9 R: t& Z" o1 y! v
};
$ ?$ b( K+ ]3 t' O, l6 }) I
9 |9 w0 O- a! y7 o, L4 hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) v; n, `, f! }- @! B) @) @
.leds = da850_evm_tl_leds,, z* \( O& l) V
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) H+ u+ m5 t3 H; |/ |- C};- o5 |) {0 J: z& [" V7 l; M
9 f, b w- T8 p& g0 B7 I" Zstatic void led_dev_release(struct device *dev)( H; v; {2 H5 P9 X- b9 W. k
{
* M' p* K! V" |: v8 [& g8 g2 z};
# k# F) ]4 Y- _- {# l. M9 c7 x4 p/ }3 P% G& K+ s& ^; l* t
static struct platform_device da850_evm_tl_leds_device = {
, }+ [) k# J2 ~3 F9 ? .name = "leds-gpio",
( I. b5 Z- U1 p3 F& |# k# P .id = 1,# |) x E+ w: }# c
.dev = {% ?2 D- D$ U4 ~' R7 g7 M
.platform_data = &da850_evm_tl_leds_pdata,
: c6 q/ i, U! C" ?. Y" f .release = led_dev_release,8 V$ a, ]+ }7 u/ h; X+ F
}
$ Z( i6 q. j. a, v! P! G& F3 |; V};
7 J5 Z& Z8 M+ T+ T: k+ n7 v1 A
: q8 v5 I: W Y; wstatic int __init led_platform_init(void)
N c+ m, c- }0 O2 a{
, T# x- q) I( O: R5 x5 T- ^ int ret;
: J7 D% \& \/ U$ d4 F% j7 ^/ T#if 0
, B3 n9 o3 b9 g: l ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ m A% m/ @5 a; Y$ h
if (ret)9 L6 }8 c+ n4 p: ^6 U% ~' C5 w; M
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 G" v" P# {) d1 p# A9 w "%d\n", ret);
4 f2 q) |' U$ g' R J#endif, J( T z3 s0 W
ret = platform_device_register(&da850_evm_tl_leds_device);
0 G3 c+ v8 i1 O if (ret)
+ N, K( l0 ~ i* G pr_warning("Could not register som GPIO expander LEDS");
) `, a* W0 [3 M, C. R$ j! D' e else5 y/ H/ K3 |6 ]5 z [8 K
printk(KERN_INFO "LED register sucessful!\n");" p( E% _7 M6 |! E1 p9 P
- a8 ~! b+ a6 a+ G, W
return ret;
9 o7 I/ _( ` `8 M7 ^: p3 P}
& d" u* |. C3 N# x$ t7 W) M' |% e4 T+ X; a2 x
static void __exit led_platform_exit(void)
) h) y! f# t; k) n5 ]" C% a{8 }- K+ |' k7 m# G1 C
platform_device_unregister(&da850_evm_tl_leds_device);: Q0 d) K2 z! ?. n
/ i1 q2 h- D% g b; `6 q printk(KERN_INFO "LED unregister!\n");
4 r. V* ^! e# Z* y0 r8 v" x* y9 ?}
9 {! ~ c, R7 w2 i" ^. H7 }6 Y6 Y( r
module_init(led_platform_init);
5 S8 K/ V- U, R9 {% xmodule_exit(led_platform_exit);$ T) l B2 ~& L# z# m
6 C2 a: I# P' RMODULE_DESCRIPTION("Led platform driver");
9 u& l) Q+ {1 b2 I- N5 rMODULE_AUTHOR("Tronlong");
D) j" h1 h4 _5 m& q$ F( n5 WMODULE_LICENSE("GPL");) F& x2 M2 a- u V+ l
$ i: K( P" v: U7 {. T |
|