|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' A: o a/ p- g- v% |
#include <linux/init.h>/ p, S6 d' \8 }9 `
#include <linux/module.h>
9 b' ~ I( p8 x9 [6 x#include <linux/kernel.h>* g; P7 q5 x. ~9 B& s$ m+ [
#include <linux/types.h>' @* C* B4 q" ]: }( W9 r
#include <linux/gpio.h>/ k- O- b* t% ^+ a
#include <linux/leds.h>
/ e$ O5 m, U' i N( T+ _+ g3 A#include <linux/platform_device.h>* z! E1 S0 W9 q1 O
9 e, T7 f3 S! d! s! f#include <asm/mach-types.h>
2 R* g3 M" u& {#include <asm/mach/arch.h>, N. B" R- ^/ Y. S9 j' M8 {
#include <mach/da8xx.h>: Z2 {$ X+ R2 C+ \% S
#include <mach/mux.h>5 J9 ?; G" B; q( l. T/ C
C6 O4 z, P; V8 c" k4 t2 {#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 y R8 S9 g8 {0 n; O( a( b#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 n7 I% z( O3 q J. [. t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% R* T' w# }7 n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 G2 B2 H# `0 F9 G4 Q# J* S2 R0 ?: V) J
/* assign the tl som board LED-GPIOs*/3 r" Y1 g! k8 T8 K8 P; x
static const short da850_evm_tl_user_led_pins[] = {
# u1 A" g) Y1 E% ^2 y5 v( x /* These pins are definition at <mach/mux.h> file */7 X- m- q, n3 D
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ V( F K" r% l
-1
Y/ H& a5 c& ]) E1 `) I* V2 R! O; |};: r% e# z, w1 I1 J! r+ g( K3 G
9 O" ]7 T' o& d! P" n5 {static struct gpio_led da850_evm_tl_leds[] = {
" R: l. E: a( m# N& L6 ] {) {" g6 r J% ~& F* _
.active_low = 0,
) }" b" v5 k1 T/ ^* L D+ g .gpio = DA850_USER_LED0,
! g: ] ^$ t. N* A9 H .name = "user_led0",
- v/ ?) Q4 e) q2 C .default_trigger = "default-on",& z2 ]8 k+ w5 m
},
~% f5 P$ T9 E6 o y7 K. d! c { D5 j4 K, f/ Z( E
.active_low = 0,
7 n8 A+ R7 v0 E .gpio = DA850_USER_LED1,7 o' O# ?$ u" P3 ]
.name = "user_led1",
# f8 L. U2 V/ X, r7 S- E .default_trigger = "default-on",
' j& Y# M& i- q& f) b },& h& u3 e7 Y) i: S4 S& D
{
; s! G$ |% c" z5 t C' G .active_low = 0,
, |* |2 S2 L9 u3 R) Z+ E .gpio = DA850_USER_LED2,. B* U8 U" Y0 V" p+ D7 f
.name = "user_led2",
$ U' \: l* B7 l" ? .default_trigger = "default-on",: ^5 d; W) G, ^5 I! m
},; y, y' a3 P1 s
{* Y6 T M% _! T* V# Z
.active_low = 0,: B# e7 ]# |' u7 s3 h8 ~: }
.gpio = DA850_USER_LED3,7 ?( Z6 M, L0 x
.name = "user_led3",
, D2 Q, n. }' W$ i9 y$ a .default_trigger = "default-on",
% h7 e( A5 }( B% i# { },
# J- w2 k- o, v};. R" s5 `3 y; D5 q; Z& P3 z
1 K" j1 c+ ?5 M7 c& X. Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 J' H* B3 E4 \+ g* A0 C4 V8 P+ }2 R .leds = da850_evm_tl_leds,
' ^6 I1 f$ ?6 {% F2 O .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ T, |% z0 e/ x8 G+ Z6 O# g: M};, F3 X$ Y& {! Y) O2 e, R; g
$ O8 F9 S3 H$ O; t2 e
static void led_dev_release(struct device *dev)( A1 c# K2 X- h. _
{3 O1 [3 ]( k: t9 q/ @$ Y
};9 I1 n/ U* s+ B& `3 r
/ x7 e% Q) }" N9 x! ystatic struct platform_device da850_evm_tl_leds_device = {4 K: U3 i, _7 n' e, y7 ^
.name = "leds-gpio",
- B# @ b+ A, n2 o$ b1 T .id = 1,2 |% j8 H& F: C! b l- }) ~5 G
.dev = {
, b; _/ Z3 l3 G; D j$ n .platform_data = &da850_evm_tl_leds_pdata,
) w! X4 W6 a/ i+ _5 k& S: t7 T .release = led_dev_release,
; {7 J1 s1 o# R' W7 X. J }
* M2 R$ P0 X3 K/ s};. b C3 n5 W. G
0 H A s4 x4 b# V' G$ b! j) v" Pstatic int __init led_platform_init(void)9 k3 b; q( `3 g( r1 c
{# D6 h0 I+ ~ P# W8 x
int ret;
4 k5 h2 u3 K( H) e" U#if 0/ {( ?3 j3 i. t0 i5 O4 K$ S$ j) j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) \1 h l! k2 N' r( Q) h
if (ret) H. |1 o9 P8 B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ m. L m# H7 I% m" I- l% {% I
"%d\n", ret);% K A5 I1 @3 T1 t( x$ t# A
#endif3 R+ X' J; n( Q. W
ret = platform_device_register(&da850_evm_tl_leds_device);7 G) }. r0 R$ ^ d
if (ret)
! ^! {/ u8 \3 _2 I2 M# o pr_warning("Could not register som GPIO expander LEDS");
% A" t: A) h0 W3 w& n1 x( n else$ G, n/ N2 ?9 E1 o
printk(KERN_INFO "LED register sucessful!\n");
; }/ H# m: k3 M0 w+ @( k
; L4 J+ @3 C" H* }3 F( ^ return ret;
9 d: O8 s" w- X3 X0 m7 M( N' i}* @: N0 o c- o5 u: y
$ k8 e g- ]& _/ p G$ Q# Q
static void __exit led_platform_exit(void)& R, a9 i# O& l7 X5 s+ P9 c
{" K ]3 ~. \2 z2 m
platform_device_unregister(&da850_evm_tl_leds_device);
" { k8 R$ Y, z8 u; z! L) a
2 b4 T( s6 I1 E" o printk(KERN_INFO "LED unregister!\n");' Y! Z$ I3 n2 Z, z
}
5 m3 _5 u# ?$ H2 W8 C. Q
4 |/ K, {" x) `+ z2 zmodule_init(led_platform_init);# e2 ^; T8 @* s' ^ c
module_exit(led_platform_exit);5 o* j2 C6 N, |$ E5 M' L8 J
, v+ q& b+ r* y/ k& HMODULE_DESCRIPTION("Led platform driver");4 a) Z3 C4 ^& N- f& M( y+ x
MODULE_AUTHOR("Tronlong");
+ ~1 w' P3 T3 c. dMODULE_LICENSE("GPL");
' r; {- P" x! Y0 X3 U1 k( G T( }1 x6 ^4 m
|
|