|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 E# g/ o" r$ t5 e3 T#include <linux/init.h>( n/ W+ l# v9 p6 t% c
#include <linux/module.h>
/ q3 ?4 ^% \; r: \- H#include <linux/kernel.h>
4 T# t. Q, V5 Y#include <linux/types.h>8 R- h. I6 l% T/ H4 \8 g8 u0 q7 Z8 Q
#include <linux/gpio.h>6 ^, G- M; r; W' d# L0 I
#include <linux/leds.h>
, R/ z$ R }* R#include <linux/platform_device.h>$ k5 Y$ c! j" X) k
; e& R, Y, e" G- K7 m#include <asm/mach-types.h>/ O; p- t; ^: F4 R
#include <asm/mach/arch.h>
( _3 U0 w1 |& b' U8 ]#include <mach/da8xx.h>4 Z8 V) k: x, h0 G% T; L3 S
#include <mach/mux.h>
) @+ x) l! X' q6 D$ B8 a; l, }, ~# ]4 |- \. Y; j* l/ p: }5 J
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* Q2 ^, b6 S6 d5 j5 u$ q9 ~3 \#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 q) D- Q/ |& B* C* L
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 |% [2 n9 L0 x: L( L# H+ ~#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). i8 h9 [; \5 g% ]% { H `1 x7 | B* J1 z
- b6 ~; \, c; U9 C, k3 r, e7 G
/* assign the tl som board LED-GPIOs*/
" y$ x; h; c0 y' l0 G6 Cstatic const short da850_evm_tl_user_led_pins[] = {
* [ P6 s6 X8 u+ ]1 ^# H /* These pins are definition at <mach/mux.h> file */
4 x: ~. r- `8 {9 h: M7 k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ p% D" c# c4 }# u) C! Y9 X
-14 a+ O9 U6 C: {* T
};
4 k7 b+ R9 H1 F5 \0 S- t, t8 b* M6 A
7 ?% | b, S& A5 ustatic struct gpio_led da850_evm_tl_leds[] = {; V1 i! E2 q. U5 b' i! w' q
{
3 L: R3 C4 W0 W" T$ ]+ b0 _1 U8 B .active_low = 0,4 B: R0 N* E# w
.gpio = DA850_USER_LED0,7 \" C+ @8 E" N8 B2 E) Z% `
.name = "user_led0",
. v1 r8 m9 J, w$ M3 n$ } .default_trigger = "default-on",6 y ]( m( l0 T5 i, Y3 l
},
' q; J0 H5 c& }& w9 _4 j$ Z# M. ~2 n2 W* { {
$ o5 x( p) s; P2 S: T .active_low = 0,# K* x# Y( }) I C5 u) A" C
.gpio = DA850_USER_LED1,. M; S) I- Z9 B, p* U' f, W
.name = "user_led1",
) \) |( C0 I, e' n .default_trigger = "default-on",
: M+ ~# M$ W* ?' `8 T- d3 ` },
# p) E$ |& j' o/ r$ d {/ b# l+ ]. M' D8 N2 H
.active_low = 0,
/ ?' O& T( w- U$ b% c. O( E: A .gpio = DA850_USER_LED2,
4 k4 B" M! j! H1 R7 N4 w. } .name = "user_led2",
0 [$ l$ `* q( a1 k! E; V .default_trigger = "default-on",
( V. V8 s! N+ I# T7 K6 b+ d. M },
( m3 P, ^$ R5 U9 S* L( J5 F {( j0 D& M' C% \. u! ^
.active_low = 0,. R; {. A/ g1 q- ], ?7 C
.gpio = DA850_USER_LED3,
+ b' Z) I: b2 V$ j4 A; p7 } .name = "user_led3",* o3 t. S0 R, k+ L$ i: s9 H8 \
.default_trigger = "default-on",
, M( f }* ?0 D+ d( G/ r },. o" I, Y9 o- G% _# h) P7 N" M
};, q2 Z, q$ l0 J8 [7 s# c
3 A7 Z5 {8 s7 v- ]* |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! c" p$ n8 k: b
.leds = da850_evm_tl_leds,% |; R5 G; K& u5 M X) v y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),! B% m* _5 {* Y5 x% Q; n" G8 U' N# Z
};
! [ f) i! s3 p7 V/ k8 ^+ }( e
7 r! ~4 k6 F Q# ^$ M" N; n" Nstatic void led_dev_release(struct device *dev)
- c6 p, C$ D( [0 T m( P3 W: \# i{
3 i# O& b) f: I: C# N};
* H! e' ?" r3 R4 R$ k7 e
. Q: P, d# e+ P& cstatic struct platform_device da850_evm_tl_leds_device = {
8 [9 e! u! C" T: P. v+ S- l, [; U: K .name = "leds-gpio",
# W; F) \$ d0 X0 ^ .id = 1,- e `. c' G. F3 e7 e
.dev = {+ _: Z4 T+ | }; m4 `
.platform_data = &da850_evm_tl_leds_pdata,. V+ m* m: w* Y4 v& s
.release = led_dev_release,
' s$ O& w- V8 ?3 v }
" N( n# |1 ]5 G( p, k6 a: ?6 V};
! Q8 \* c! [. k8 n+ b) v: v$ j; Q' D+ E4 v, b: [, ^+ a) i
static int __init led_platform_init(void)
) Q3 X }- b3 G6 c) o{% v# v6 \+ k2 G
int ret;
# L- ]+ E7 M5 b/ i#if 06 c" d8 S; ]# `- y# E2 F
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. G+ K! j- h! i9 t9 R8 o
if (ret); h: L# f# C1 `# ]# p @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' U( H/ D' r+ M/ ]- }
"%d\n", ret);# R' \+ F i( A8 v
#endif
. L% C& @( _0 A; @& u k9 Q, c3 u: c ret = platform_device_register(&da850_evm_tl_leds_device);
: X& i2 v) C) S; c4 a) N if (ret)7 X% K( @9 L7 v o( Y& D; r5 c
pr_warning("Could not register som GPIO expander LEDS");) H2 P" C( r8 j
else }+ r7 n! {+ g0 q
printk(KERN_INFO "LED register sucessful!\n");# K! q2 t( u5 ]' s+ x4 W
5 D( |) x, @" I3 A4 Q
return ret;
' P' I# M: [6 q# |/ v' a1 I* ]}4 F. J& E# r% j* L
( |# l. O+ l2 ~! jstatic void __exit led_platform_exit(void)5 i W7 T. D8 ?
{" x6 w# H6 f+ i! ^
platform_device_unregister(&da850_evm_tl_leds_device);# j. y4 @- I8 U
" M% H k1 q) Z8 l" P+ H printk(KERN_INFO "LED unregister!\n");& _& j. J, H q. e- ?4 {
}' c6 f4 ]9 ]1 K# S
( W/ T$ @* M: j( Umodule_init(led_platform_init);, I. N5 L" _, x& c
module_exit(led_platform_exit);& z/ C/ P/ X7 ^2 ^8 N6 K- B
3 F. K( p& _1 ^6 VMODULE_DESCRIPTION("Led platform driver");, a0 ~' V6 B0 K c! o
MODULE_AUTHOR("Tronlong");5 m3 r }- ^0 z( k" l4 V! O5 a
MODULE_LICENSE("GPL");
. o! I, K+ L/ f0 ?2 y
3 @- N! v% b8 Z, C0 T |
|