|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 y f5 ~" |+ k: }" P, t
#include <linux/init.h>' A- y ]: T, J. T% R! |
#include <linux/module.h>- G7 [$ A! r4 j( s- I
#include <linux/kernel.h>+ @! K: V& C) R5 ]$ X- S9 z
#include <linux/types.h>
+ H# H7 i1 k4 o% Z#include <linux/gpio.h> e. b; S6 R {: I3 f3 t) X
#include <linux/leds.h> y( R3 a& |' m4 } V! r: N& T
#include <linux/platform_device.h>
6 K" R9 j- v0 u& ~; f8 e) _9 {6 o; l
/ h$ N" l4 ]' V T8 d' _; O#include <asm/mach-types.h>; N0 O# b1 S8 d
#include <asm/mach/arch.h># V) l- M& n+ h7 o7 e% F4 i& M' ^
#include <mach/da8xx.h>
. H" c7 M4 T- U+ ? J% h6 N, Z#include <mach/mux.h>
3 ?& n( Z+ @/ @- e" l
7 G8 ]+ l8 @% T A5 T4 K: k#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 l. {$ [# U- x: s) M8 b4 [
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 i2 }( h8 Q( Z. V$ H2 @- O4 f#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 h4 S6 r% m; H#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 X L9 F9 D( h% t
7 A) A9 a7 `# w- l# s/* assign the tl som board LED-GPIOs*/1 b$ D- x, H% E
static const short da850_evm_tl_user_led_pins[] = {
3 e1 L- w6 b; v( w /* These pins are definition at <mach/mux.h> file */* a: s, `3 V+ Z. p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: I% _( D4 d3 w7 q& ^( U3 C0 N% T* G
-12 J! `9 B1 z5 p( K" N
};
. Z) e; }4 ?9 ? G; Y: \1 G+ V. b. S4 k
static struct gpio_led da850_evm_tl_leds[] = {# y/ N, n, }7 f
{' j: E& T+ l- K$ u
.active_low = 0,( E3 U# F C4 s* T
.gpio = DA850_USER_LED0,
9 T g$ E4 Z9 M. ]7 J# H+ o q8 {+ J .name = "user_led0",
# O7 y( Y+ ?& @( O7 B# E4 q .default_trigger = "default-on",
1 ~" H+ j0 ?2 U. D+ _ },
8 A7 n- h$ A7 I0 Y0 S {
- O- O! l; v+ k$ v. g2 r; e .active_low = 0,
$ H4 v' n/ D* h. Y+ Z! D .gpio = DA850_USER_LED1,
& H& P) f+ T! ?$ j$ z .name = "user_led1",- g+ s3 I# x3 T$ b/ S& h
.default_trigger = "default-on",# X n5 G$ ] _) p J/ M
},- V4 I6 t, k5 e6 m! l
{% {! E6 r% [0 `% V
.active_low = 0,
7 J5 ^" V% \( ?$ Z .gpio = DA850_USER_LED2,
8 ]1 N6 u7 ]; \8 I .name = "user_led2",
6 d" ` @' m4 p& e .default_trigger = "default-on",
0 r7 |- y/ E: b4 [& @6 v },
" u* F/ G/ ^# ~7 b1 B {
# ~6 ]' _ e) l9 p7 q/ T- C1 s1 h R .active_low = 0,
1 n' [- H' Y# E# u& b .gpio = DA850_USER_LED3,
! M( f5 o P7 G" V .name = "user_led3",
, v/ z6 d* t- d6 }7 D" B .default_trigger = "default-on",' X0 Y# j* E# \6 `4 J
},
$ y* J2 [/ D1 D, l. A};
2 G/ u% h1 f! O; I, p K& @3 m# s5 w9 S1 H% S& N: |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) D$ B, K5 [3 a) k- w7 @/ y2 s .leds = da850_evm_tl_leds,9 R/ n5 ^7 `+ V; P) q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) P) z* b, X0 p6 n6 K% Z# s5 k" v};
' G! V9 n! H/ B4 F5 f) W
$ a: e* P+ P. u4 E1 rstatic void led_dev_release(struct device *dev)
& w. t+ Q' [; ^0 G{) j6 I y! i: T0 x* S. _
};
w; [2 m1 x( V+ B* |0 _5 j9 n2 d$ y+ \% N$ h! t
static struct platform_device da850_evm_tl_leds_device = {0 S( J7 y1 U$ L% K5 m0 m& A
.name = "leds-gpio",
5 j9 H5 x- Q( {4 X .id = 1,
, s; M( S8 ?% m) u7 \4 M5 H) J .dev = {
( E+ |2 x% K0 |. y: p0 e .platform_data = &da850_evm_tl_leds_pdata,: X% y. o% E" j6 b- Y/ g+ N
.release = led_dev_release,9 [, [8 s$ s, F( a
}
: i1 q* {" s0 e( _- `. a- g};4 h/ z- U! c9 g/ q* O" l
: V2 H b' N0 N6 Mstatic int __init led_platform_init(void), B1 S% B9 N* S( S
{
4 I- |% L9 o! e! {9 }* b int ret;' U8 h5 _1 O7 W
#if 04 Z K1 [2 m0 G5 Z+ A- ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( G8 x( i; K0 n* d if (ret)4 H) ]6 i0 Y1 `2 w% G( I7 q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 m8 J1 [' Y3 j) s" H "%d\n", ret);
; P3 m* ]8 |% Y1 O4 f#endif
7 R) M# E% R, L" h ret = platform_device_register(&da850_evm_tl_leds_device); g3 }+ P2 i7 f1 E
if (ret)1 R0 N- n/ r% n3 ?
pr_warning("Could not register som GPIO expander LEDS");5 d2 p, b1 J9 {
else
+ W: w3 ?2 x+ [( c, \/ I printk(KERN_INFO "LED register sucessful!\n");2 R, Q& Y" C- V+ c, q% H( O- a
1 a: L) d1 S }) Q
return ret;
4 G6 [9 w7 Y- w. u D}
9 _: c3 J# m! S+ w0 C
! m/ O$ ^/ ]% r5 Ostatic void __exit led_platform_exit(void)
+ H1 k: H; y- |- K& G{; x1 W P& w- C( ~
platform_device_unregister(&da850_evm_tl_leds_device);2 w& X- a$ }, o* _
: p ^( G2 V$ m printk(KERN_INFO "LED unregister!\n");
5 X- i' a6 w$ A1 z/ @; v}# Y% _% `5 R2 H4 q5 ]* `
& q; q4 B( q1 x3 k( Cmodule_init(led_platform_init);
# `# U9 ` V: q+ Omodule_exit(led_platform_exit);# R% D: [( U, n
1 T- e' m1 }% H& oMODULE_DESCRIPTION("Led platform driver");
. W9 I, y6 H; J" B0 T- YMODULE_AUTHOR("Tronlong");
t# s; ^. O8 cMODULE_LICENSE("GPL");
! X& N! K; V+ {' _; o" Z# M! `9 _) ?% w+ u) l$ \
|
|