|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" G+ c, I! u5 ?: W5 T1 F# k
#include <linux/init.h>
9 H X5 A) P& U! e; r! M; b; C$ H#include <linux/module.h>7 X& J3 e) K7 ?
#include <linux/kernel.h>8 e3 D; I7 _- X) I1 D2 L
#include <linux/types.h>: r/ `( S$ L5 C6 _" v
#include <linux/gpio.h>! u3 X( V a$ o6 o: j; `: V
#include <linux/leds.h>% v2 e: f* {) K0 _' h0 n# ^
#include <linux/platform_device.h># s3 {5 k! M! N- }3 o- Q9 B6 Y2 C
! {/ U2 ?$ i r! e5 b#include <asm/mach-types.h>, |- w. U. y* o
#include <asm/mach/arch.h>
0 Y5 J9 i: x3 g" k! E" G#include <mach/da8xx.h>4 R$ C9 m9 o* i0 l5 F
#include <mach/mux.h># I% I# N, l, W. z
9 F- k+ m' l4 f3 H
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 T$ g& Z( R3 T8 k
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" G f' X( O9 B* q" ^#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 ?# y$ R' d# H& K, v/ i: f
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ I6 M- p/ s n; J. z1 q
- x* q& e. I4 X1 o1 r0 R+ m
/* assign the tl som board LED-GPIOs*/
! }- E" j$ C/ M$ ?+ Z2 jstatic const short da850_evm_tl_user_led_pins[] = {5 e+ y1 ?% u2 |& U
/* These pins are definition at <mach/mux.h> file */3 d; S5 g" C8 K1 a. l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ h, @ y* C2 d' L -1, N4 Y- a7 E) C1 f D" T( R# }
};' l" ^; f; a8 A) y# m9 y% @$ C$ F& P, c
' m! b1 d) S5 t8 d2 ?
static struct gpio_led da850_evm_tl_leds[] = {
* ~* K6 |& j6 J5 W8 b* M- p4 ?0 l# v {
7 h# D- G" r/ |% a/ z9 n2 f% O .active_low = 0,
0 Q; X, ~& m6 ]6 X1 i8 }: f .gpio = DA850_USER_LED0,
/ B8 i7 l! a; ?7 y( h .name = "user_led0",
' W2 a' t- u& ~4 L' ~ ?! c+ b .default_trigger = "default-on",
- q' ]7 }; ~7 W1 F' Z) x* H- B },+ B: V- I- R+ }
{9 M( p! ]; y, }8 ]
.active_low = 0,) O, Q5 d; F& g7 A: q9 [! T0 ~
.gpio = DA850_USER_LED1,; B |0 r" D1 Z( e7 X9 V* F
.name = "user_led1",
; b$ t5 a/ z# O .default_trigger = "default-on",
2 y/ y5 S# _" @6 B. W },# o2 A5 j( }! k$ c7 Z3 a0 `
{1 Q& d' ~' \1 P! E
.active_low = 0,* Y# D. c2 x8 u
.gpio = DA850_USER_LED2,. i* F# q. a: v/ W/ i e
.name = "user_led2",
$ K1 T7 y* E; C0 J1 z .default_trigger = "default-on",1 m! L* w. J. b* J x
},0 k& B% p" X: U; @# |! U6 N3 U7 _3 O. z+ j4 f
{
2 X; H# F6 l7 f1 s .active_low = 0,/ X1 a7 f) H- ^/ a3 F2 ?
.gpio = DA850_USER_LED3,! r& a2 V$ L( Y) \- G) a
.name = "user_led3",
9 b' v$ k! s/ } .default_trigger = "default-on",- ]5 C: X* @' e% z( e* s0 p, T
},
! b7 V5 n6 e2 N5 @5 A/ A};* |, s; P: K4 {) P( |
- ]: T9 \ r/ hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 u, Y: n F$ C% ]2 v% j8 E; B, d$ F
.leds = da850_evm_tl_leds,
8 ^% d# r' i( v+ {0 q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% A, _$ @3 |5 I5 u) w U4 |
};$ ]& m( }' W. T3 U
% P( ?: d& b0 U/ y* O7 J
static void led_dev_release(struct device *dev)
2 S8 S( L# W9 x% p& ~9 y8 B% l5 m6 l{4 d# F5 M( N" W5 k4 j/ e
};
1 o) x0 n8 e- e3 _3 A
4 o1 Q: d6 Y) j1 ]static struct platform_device da850_evm_tl_leds_device = {( ]) L1 o( x" Z
.name = "leds-gpio",
! H& u* L$ r) E1 L5 M( \+ E$ Q9 M .id = 1,
7 H: G: A! U7 K .dev = {; U E. e% U7 e
.platform_data = &da850_evm_tl_leds_pdata,, m$ v* C8 N9 T" l! }: S
.release = led_dev_release,# e9 B9 h* _; O
}/ R$ s% E8 E. Y
};2 Z: Q2 Z# g2 I& ^( q6 E! p) ]3 R
[" M' v# G. G3 }
static int __init led_platform_init(void)7 L' Q4 j, U- [. C
{" x8 [4 X8 a" N' `9 U& ~+ o
int ret;$ [$ v# d8 i4 _9 T5 [! d
#if 0' [( I( U; i# z% f6 A- P& b- D S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" @0 D2 b3 F* w8 T if (ret)
1 t- M2 M3 {! Z+ O' G) | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 z5 {' ^" g% E! a2 N. q X( ^
"%d\n", ret);+ ^; D1 W G& c9 p F3 Z: G7 J
#endif$ ]# i# I2 G3 y
ret = platform_device_register(&da850_evm_tl_leds_device);
( l9 R* s+ J3 N) E$ h7 r2 A4 U# x if (ret)
( ]' N# e( [' K6 Y6 y( B6 U' H pr_warning("Could not register som GPIO expander LEDS");
" g! B& T% I _, z i; n else
& J8 b" b: N4 h- k& U1 G' O& W printk(KERN_INFO "LED register sucessful!\n");
, _ O, P% B+ M5 p( b
! J5 f7 ]. p/ c6 r# l3 V) W return ret;% _5 g* y1 b: c$ e5 a! Q
}
: y5 N6 A' o# e& j: \& B( e1 @6 `7 v, M) m. z0 @) V
static void __exit led_platform_exit(void): K, n% N, D S P
{( f+ m3 u# l* F6 C; H. {
platform_device_unregister(&da850_evm_tl_leds_device);3 e# J% I7 q/ k1 j- [9 Q8 U
" S$ j1 X) h9 O2 @9 \ printk(KERN_INFO "LED unregister!\n");
2 n' t+ s& b5 v) Z* P s& r}
2 G5 l% i, F: i& `/ G
7 A' _& u9 Q. I" l9 umodule_init(led_platform_init);
1 K$ i% W2 z0 h3 G( u- dmodule_exit(led_platform_exit);
' Z; Y$ g3 @8 ~& g- x" ] i( E7 ]2 W
MODULE_DESCRIPTION("Led platform driver");
, w: p- u' z |1 _/ e3 `5 }' `MODULE_AUTHOR("Tronlong");
/ d1 ?3 F! G& ~; p A% \ W( rMODULE_LICENSE("GPL");; I# z9 Z+ d7 p
) q$ S+ C$ C c
|
|