|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, s* Q3 B' f& n& u#include <linux/init.h>- n$ p+ `: f5 z9 X) ?
#include <linux/module.h>! ^/ o' T- q9 O& r* U4 |
#include <linux/kernel.h>
- l+ Z+ P& ]1 T#include <linux/types.h>+ U* b$ \6 ~+ ]( O% M
#include <linux/gpio.h>
" n+ N. ^: y3 n3 v; {#include <linux/leds.h># }! s# A6 W8 [
#include <linux/platform_device.h>, n9 ?- p. M) R: x" [1 g+ c
4 _% b0 z. @$ Y/ u, L5 J0 g% d
#include <asm/mach-types.h>
" x% h( {# K) f#include <asm/mach/arch.h>6 m2 v6 @+ [* }) U& G6 L
#include <mach/da8xx.h>
' r9 m( F+ E' H: R1 V#include <mach/mux.h>
0 |! B" [4 p$ @5 M+ m4 g6 |; Q k/ {3 S& o3 q, y, {% S9 |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 O T" h+ E o6 W" v' B/ c- G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 c( k, z, t7 ~9 t) a) R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 y5 R" \+ J; d5 |
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& _7 K+ `5 X% E6 j7 `
4 \# E/ r4 M) |( e/* assign the tl som board LED-GPIOs*// j( H: ?6 e* F! n2 I0 l
static const short da850_evm_tl_user_led_pins[] = {6 q0 h5 c9 l) s; w G1 l2 |
/* These pins are definition at <mach/mux.h> file */4 A$ y, G. a# P7 H
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 Q6 d" Z) V. a3 t1 z -1
+ I/ E4 @+ C* H, ^( S};; d/ f" d. m5 w. O- d& B; h
8 F0 h6 L0 d8 y5 I) L Vstatic struct gpio_led da850_evm_tl_leds[] = {
! g- a- L) V" b* S; |; H {; h! z. J5 l7 H: g+ R
.active_low = 0,: m) a3 [) j& g3 P: ]8 n# z
.gpio = DA850_USER_LED0,
6 S, F G5 Z) d" v# M9 r; v9 d .name = "user_led0",
) Z: v z3 F) U .default_trigger = "default-on",
! z9 E, L3 O9 M, V: K7 q },* Z, r3 |$ w$ R* |0 D& @( }
{4 x A3 o6 B6 B- \- d* h) K
.active_low = 0, R# U7 j4 ~9 R
.gpio = DA850_USER_LED1,9 q( \+ w# I+ K/ ^3 Z7 x
.name = "user_led1",
@5 V0 c+ g6 |2 a) A: c3 P4 Q U .default_trigger = "default-on",
( M1 y1 y) d& s0 N' P+ c. Q },: }' j6 c) u4 m5 U a8 G# e1 u
{& ?; T# c3 k8 t: ~/ ?1 t, D b
.active_low = 0,
9 ?: X* n1 O' r3 L$ m% n .gpio = DA850_USER_LED2,
5 W6 _* Z$ M1 e" g, q+ I4 p) D .name = "user_led2",
( ^+ B, l, j3 u* K/ @- e .default_trigger = "default-on",# f5 o0 E* w+ f6 r" S7 P& {
},
# l, s8 C% ]" H0 ~ {
6 K- e+ ~/ w: Q- i .active_low = 0,3 h; P4 o, }$ `, R
.gpio = DA850_USER_LED3,& B; H" p1 [4 ~7 P' ?- u
.name = "user_led3",! o9 Q% Y8 n' x/ G
.default_trigger = "default-on",
4 v' W; Q4 q# \, y },7 l0 g6 m, ^7 M% {+ c# }2 P) ^! w
};
5 R" _4 P; z+ q) t4 \5 ^0 a
; V: x3 m, ^% `, Pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 ?) u& G) j ?5 M! o
.leds = da850_evm_tl_leds," z' f& ~" D2 f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),: K! c$ `/ I0 e0 R! i+ b% A! h1 Z
};+ v5 O T* ]) w1 @5 W
1 t* |" d4 Z# q/ A3 ~static void led_dev_release(struct device *dev)
* c& i" O, ^3 C! q: f{1 m x7 M: M7 Q# I, I7 y$ ?9 m2 [; Q
};. ]( f0 T, T0 T9 X& V0 |- v
4 N4 C4 ~9 ~6 U5 gstatic struct platform_device da850_evm_tl_leds_device = {" t+ [5 l5 Y/ E* m0 E5 j2 Y8 u
.name = "leds-gpio",/ C2 u! R( V' b9 |* K$ I
.id = 1,
* g9 t7 k8 I1 E' Q' a .dev = {
) O1 v3 d( W7 H, k% b _2 D .platform_data = &da850_evm_tl_leds_pdata,8 U2 H2 O3 Y; M) s y* X
.release = led_dev_release,3 s( W2 [ |) @2 b1 M0 [
}
( K; p: `# A4 k};
1 @- V* a2 g) @" @. G" @9 j$ @/ T* A& M
static int __init led_platform_init(void)
+ J) K+ t5 U5 X0 \4 O" g. P3 C{( M% Z! C, l [- I$ K
int ret;3 N& b# N, S- n: B# Q/ U/ O
#if 0/ l @3 w' Q" \8 u/ K7 L: ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' n" L6 Z: a* L) C2 T
if (ret)
+ |/ ^6 `) m" a7 N6 C" S* d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 z" w8 Q* Q, F0 N+ q/ x, [9 s& P7 H+ E1 _
"%d\n", ret);; A0 K, j, I. C8 h( y. j
#endif7 C/ ]7 A' \, C! y% M
ret = platform_device_register(&da850_evm_tl_leds_device);
# N4 w. }$ s/ y0 M* v- y if (ret)
4 V) k/ R0 q7 U: n/ @/ B; C pr_warning("Could not register som GPIO expander LEDS");
6 @- g$ n( i3 ? else
5 M( @: A2 ]5 h- a printk(KERN_INFO "LED register sucessful!\n");
8 y$ f+ r! V4 R8 j/ l
' t' j: a2 V2 v S+ }) P: F return ret;" l8 L! ?, ]5 w* Q4 u3 n- ^% ?* O( K
}# [/ |, `7 J6 L+ f7 [* _
- j* S1 ?% N; N5 k9 b6 Kstatic void __exit led_platform_exit(void); p$ F `9 S7 g, s/ A- s$ p
{2 E9 u4 |3 J; B T* \4 W1 i A
platform_device_unregister(&da850_evm_tl_leds_device);
. q$ b& M4 q) y) e8 k F( R; B' }8 y: ]& ~) v7 ?: h% E
printk(KERN_INFO "LED unregister!\n");6 @) |9 J0 H5 @) z
}% `1 j4 L9 E7 \
1 ?* u6 x# u0 n1 ~0 r7 @) K
module_init(led_platform_init);
1 a1 j, w) A g& T- `: {% o+ Cmodule_exit(led_platform_exit); J6 m/ R! f' L6 n
2 V0 Y/ a6 f- F, iMODULE_DESCRIPTION("Led platform driver");( g9 | Q, A2 V
MODULE_AUTHOR("Tronlong");
* J( T) k3 U- Q. lMODULE_LICENSE("GPL");
4 R! r, ?6 @9 x! v
) s/ M( m6 u0 I; P- @3 \ |
|