|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 [# ?2 [, x$ _$ v: d: F4 @) O#include <linux/init.h># T9 s1 \' n7 s7 a
#include <linux/module.h>
! l7 ]7 x0 S1 M! F/ m# D; E* r- v#include <linux/kernel.h>) v* ]* Q3 j2 S
#include <linux/types.h>' f+ V6 j% M& Q3 M, U- B
#include <linux/gpio.h>' |/ o/ I: A I7 i5 J
#include <linux/leds.h>
9 z! F; b5 N! E& G9 _#include <linux/platform_device.h>9 m! T. r7 o0 K) v; ^6 w+ A, ]
2 ^% R# a* ~: d" @* H/ Q' X
#include <asm/mach-types.h>+ }" H% j3 |8 L1 g% X+ `% l
#include <asm/mach/arch.h>
: z9 B' t2 E$ C( |* s) r Y1 C#include <mach/da8xx.h>2 _& k- | w& E* u1 G: O7 T( Y0 a) u
#include <mach/mux.h>& i0 D" S$ X* f+ T A, ^! V5 g
2 Q) a' \# I4 K4 [+ {#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 `3 r+ B# r" `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ a+ A& d/ J! F#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 V) H* i! L! p#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
R$ O$ W4 `, ^6 z
9 ?- W# c9 T u! V/ R7 \9 c1 w/* assign the tl som board LED-GPIOs*/. b3 t+ e4 c3 V: u3 {6 I' [
static const short da850_evm_tl_user_led_pins[] = {
0 ?1 e& x# t3 \8 k /* These pins are definition at <mach/mux.h> file */
1 S* @2 p: X. y! K, t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ e+ k) m: i+ z: f
-1
9 ~9 v- w8 ]% W: t: s4 b( t7 C};
4 o, t- q+ x! o( J5 f7 n
1 j+ r2 c7 r' r, k4 Xstatic struct gpio_led da850_evm_tl_leds[] = {( H& Q1 h0 u1 O% M/ ~
{
. y( U2 L" v! n. t. `% P .active_low = 0,) e+ z- i9 g# i0 |) u+ h7 u
.gpio = DA850_USER_LED0,
. { B! k7 R0 m+ R/ K .name = "user_led0",
1 o0 r' D; |/ t6 X .default_trigger = "default-on",2 k+ g" d9 G& H* H3 i0 ]
}, N( g" Z2 M H7 ?, b$ x
{6 r" \3 G8 `3 O: p0 `8 u; K
.active_low = 0,1 k2 f% b, p0 t, {; l9 C# l
.gpio = DA850_USER_LED1," L1 u' C2 ]" {6 s8 G9 K
.name = "user_led1",
$ q' ?" k6 J' I1 P .default_trigger = "default-on",8 o* P, h+ `& i3 ?9 `
},
( z1 [3 t0 W. Y4 F { a1 k* ^+ `1 i4 o; a
.active_low = 0,
$ N! _- ^0 m7 C4 O* x% ]# _% C .gpio = DA850_USER_LED2,: k4 N0 T4 j, j. B n7 O
.name = "user_led2",9 [7 \5 e) k6 F0 u, f) a' d
.default_trigger = "default-on", ?5 O" E' w9 L- G- Q$ _- j
},
2 \5 q2 C2 k' b' t1 m; s {
8 [2 p8 c5 D- @& b( }0 {4 S .active_low = 0,, T8 g$ A' i" L( x- E$ u
.gpio = DA850_USER_LED3,
0 u9 R4 P' ?/ `. Y' v8 C) E .name = "user_led3",8 s9 e4 z. D1 H
.default_trigger = "default-on",- U& P2 Z8 V- X8 Z. k) x, r
},1 }$ ]7 d. E7 {3 x, d
};2 ]# W2 i$ w+ K6 }& G3 j) L
) U+ J3 f$ n9 P) e" n
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ B y" D* x5 e* S% a( R
.leds = da850_evm_tl_leds,
6 H3 ^0 f* A" p .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 |8 b$ Z% K0 n+ Y( Y};. J Z- r4 X6 g' j1 B( S2 a
% y. z" d7 O" w/ k+ n+ istatic void led_dev_release(struct device *dev)
2 W: u/ s7 m4 `' V6 f- R{1 ?6 D4 c# L# Z; }7 w6 {/ @# e
};4 H- h4 i' Y' [4 E; x6 K5 X
/ m5 r3 b- _2 [3 G3 ^static struct platform_device da850_evm_tl_leds_device = {
& z( _* l! h' E# g .name = "leds-gpio",
9 y! Z( w6 T+ v7 ~9 a! M .id = 1,3 P$ {7 D/ f, F/ l _) A3 D
.dev = {
! {3 H% Q8 P2 S. g. [) ? .platform_data = &da850_evm_tl_leds_pdata,
' m& ]8 y- c, ]8 @4 Y6 i .release = led_dev_release,& g5 c+ z6 ^, f- s9 s6 {4 b0 A
}0 V2 P) v5 t1 C4 n
};: v* v* S* i5 B* X1 c
) g# u7 c# N, D7 d- A1 x+ _
static int __init led_platform_init(void)3 x5 i; Z+ _# m0 K' X0 \
{
( o2 v% f$ K; c; M! v int ret;
% k; L5 | ]: N$ `: x#if 0
" D: h) c& Y e( p ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 W o. p9 v. _3 M O. F% A if (ret)5 u j s$ N( }# v) [2 y7 H% P" H7 D
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! Q. w7 M+ T2 C "%d\n", ret);8 v3 k, Z3 \: ^* K
#endif
; m+ K [0 X s; v ret = platform_device_register(&da850_evm_tl_leds_device);% a! M( S( R4 j H+ P( O
if (ret)) v; f: u$ W5 N$ ^
pr_warning("Could not register som GPIO expander LEDS");: A+ q! u+ P% y K+ T
else% [5 A& _3 S& z5 A4 Z
printk(KERN_INFO "LED register sucessful!\n");
* i& Y2 x" N& |. h2 G3 J# s2 F' c6 B5 |2 C3 g
return ret;3 E. K* q6 J4 r5 V
}
7 ]% r, C6 @* `9 G' [
% c6 D( i4 H4 r6 X- B/ W2 qstatic void __exit led_platform_exit(void)3 ?$ `1 ?; }* [
{ v6 n0 [" g* i8 V7 g3 b
platform_device_unregister(&da850_evm_tl_leds_device);
$ [3 T- y; @, C1 O1 Z" \# G/ u. Z' o; N# }% [ o0 L
printk(KERN_INFO "LED unregister!\n");& w% E' P" J/ a8 b
}6 b" h$ E- e- A7 Z- }2 z
0 n1 h, P Q5 {* Bmodule_init(led_platform_init);
0 ^% P. t& N, _0 L$ jmodule_exit(led_platform_exit);& @4 U0 I Y, j" u9 [
# \( S6 w% K9 Z& ~; m3 UMODULE_DESCRIPTION("Led platform driver");
; x( t0 v5 o! b; B- z0 I1 ^ CMODULE_AUTHOR("Tronlong");2 P* V; ^$ k5 c# ~& I6 P
MODULE_LICENSE("GPL");( p; U: g. [9 @( q. d
) T( O! y; J5 C; }: T) u |
|