|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 r, i) N; z+ T* d1 F
#include <linux/init.h>
2 F- w4 V' z$ i" @6 s9 M% @#include <linux/module.h>0 y {9 P2 B+ d2 F% o- D/ U
#include <linux/kernel.h>$ s/ N0 x7 l. P7 S
#include <linux/types.h>
) T( Q- ^+ ^/ ^#include <linux/gpio.h>6 J* W' u( N' Y* M" M
#include <linux/leds.h>
" C4 P- C8 H3 R#include <linux/platform_device.h>
7 ] ~2 w6 F$ ?$ y [- k
8 Y/ h: X% ?* q- Q7 E6 X: ^! H#include <asm/mach-types.h>
& f6 @" j. \1 [3 q+ Q7 J7 Y#include <asm/mach/arch.h>" R$ N- G4 f$ N* s7 S, V4 l9 Z
#include <mach/da8xx.h>
) T" N1 f7 g9 j0 G P#include <mach/mux.h>
5 k; B3 w1 @' \3 V7 u9 p1 S0 ]: Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 c- r5 J. \. {6 d3 O; T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ t: U2 r/ i" `4 h0 W8 K5 w5 C#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 W6 ?# ~4 y# G$ ]9 b3 r#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! Q. i5 b- c* e a
9 V A' G+ S, Q: N- y/* assign the tl som board LED-GPIOs*/7 H- u+ }! G" @9 H+ a
static const short da850_evm_tl_user_led_pins[] = {' i' k" z9 h# ]0 v4 o) J
/* These pins are definition at <mach/mux.h> file */
. f9 b3 L, B& Q7 t& p; v DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' t p: y( B7 m/ }3 X8 e -1& W& m5 \" {8 c
};, r/ f0 ?4 K6 C. v( l- [
: P' E9 ?% K# Y6 Q0 g: C0 }( D
static struct gpio_led da850_evm_tl_leds[] = {
z+ z5 L+ x- [/ e& T* X* X3 h* i {) u7 S$ \4 v$ W: A; m8 O1 {
.active_low = 0,
5 `5 n4 h+ Q) Z0 o, W' Y .gpio = DA850_USER_LED0,
: d6 m# \- Q" B2 w+ G4 U3 y .name = "user_led0",* B' b" v2 H7 p# f* b' z
.default_trigger = "default-on",0 r4 F5 m" r7 o2 ]( Y( T
},% j( h2 D5 |. [
{# L- f1 N' e) _& N# K
.active_low = 0,
; n2 O7 h; u/ e6 B .gpio = DA850_USER_LED1,# N" D# f3 k/ W: H1 H( J
.name = "user_led1",
& p3 R: W, r z+ Z( ? t" i .default_trigger = "default-on",1 I4 [3 j; [! H, U4 G! w
},0 m: M$ _1 N/ j5 a+ K
{
( Z: C* K0 n6 Y: W( r .active_low = 0,
1 u+ Q/ |! d0 u& t: O, ? .gpio = DA850_USER_LED2,* P+ T9 q" q8 a8 A3 A
.name = "user_led2",
M2 C" T6 e" @- `8 a9 y& m7 U .default_trigger = "default-on",0 Z4 \6 P3 |* \
},
# a/ Z! B A$ d9 h; U2 C! k {$ ]. t% U) R+ q. S
.active_low = 0,
% Z; X# A% r; D .gpio = DA850_USER_LED3,. v9 r! n6 G# G6 Q
.name = "user_led3",- L7 l9 t( ?% a! t
.default_trigger = "default-on",# g* _' Y' Y8 H+ ~
},
: L7 f$ Q4 e, N};" g- V8 |1 h9 ^3 h
6 @ d9 h; H% J0 E- G
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, t1 p4 E( U! p+ g, [
.leds = da850_evm_tl_leds,
: i) S) e! O6 n* @! x: ` .num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ z4 d0 W0 @/ v _; F. S |7 m: }$ g2 C( ]
};
& B ~" J' N+ K3 u# p! f! C5 C0 r6 p7 X8 S; O$ ?* w
static void led_dev_release(struct device *dev)' [- ]( T. D: A0 d8 B, ^
{
1 [7 ?3 ?0 y7 e$ F J! V4 |* X};. w' m) C3 H7 P5 T! q6 c( u
5 Z/ b+ C) H* f% V: ^static struct platform_device da850_evm_tl_leds_device = {+ U9 M) O; T3 r/ B$ E
.name = "leds-gpio",( u! D+ e6 {" I
.id = 1,' A4 L8 z* S0 i5 o/ l' R# c
.dev = {
* s% K2 y6 F9 A; T4 W8 l! h0 q .platform_data = &da850_evm_tl_leds_pdata,
+ I; o7 W( V- C) K3 U .release = led_dev_release,
3 l2 f5 p6 d9 I( q5 ~. Q' h }
- M0 _9 [, b$ E5 `% }5 ~6 w};
9 l+ t# ]+ ?4 u1 b; H# l. V
; g/ `+ L2 z! N5 M, p/ p; Sstatic int __init led_platform_init(void)- w9 @5 M6 L- V. X9 O8 d
{
% y% ?7 r2 ?# ~3 }( n& O' t int ret;
! X# g4 |! s. K+ d# O! {#if 0; h6 Z1 O/ B1 H7 J& n
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( ^2 \( }, l. _* ]- b
if (ret)
0 |" S' `$ A3 W* k4 \1 K pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' k+ ?* J2 o! L/ B1 T; _
"%d\n", ret);
! Q( A/ r# Z% K4 G1 R#endif7 v2 Q# l( V$ D
ret = platform_device_register(&da850_evm_tl_leds_device);* Y9 w9 q! h3 j: T' f: M$ {8 X2 y
if (ret)2 J: D3 Y7 d9 e# M6 j, m
pr_warning("Could not register som GPIO expander LEDS");" h+ u" v' U/ O0 F0 b8 Z
else: o ~( k" D4 z
printk(KERN_INFO "LED register sucessful!\n");
9 X7 M% y ^: U; u1 E
6 o9 s% C3 N$ k# k return ret;5 Q, {3 j9 p5 J& j' h
}
/ Z. j7 n# e2 I1 l. `
" J. h; W5 z' mstatic void __exit led_platform_exit(void)6 `2 q5 r# e% p( m) v
{
' @# q. F8 r# {% e9 S4 w9 v platform_device_unregister(&da850_evm_tl_leds_device);
0 d7 I7 g. R3 w8 p1 n" i, `/ Q# T% X. L8 [; ?1 |7 F
printk(KERN_INFO "LED unregister!\n");
7 H. f j7 C% _; d6 d6 r}7 b6 ^: ^5 C* J$ f1 z
0 O& T$ ~. w/ s+ e6 [module_init(led_platform_init); K6 N) E8 O4 ^$ O6 N+ g
module_exit(led_platform_exit);! O2 ~$ Q" r0 P1 Q% x9 A
! O- r; z8 ?3 J, L: P. U' C0 Z
MODULE_DESCRIPTION("Led platform driver"); S/ N* Z8 E$ o0 v
MODULE_AUTHOR("Tronlong");( c7 K- Z! N$ x! g/ Y
MODULE_LICENSE("GPL");, _5 C/ l9 J' |5 H+ T
/ H: W) U3 ?) y |
|