|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 J3 D* F1 d$ X+ b* t0 w6 [) f% g#include <linux/init.h>/ t7 K6 t8 X/ F. o5 q; D2 t% R- S
#include <linux/module.h>5 C5 y, x# X) K# L5 t8 S
#include <linux/kernel.h>
' k5 _0 C& O$ ], N8 k% U6 a#include <linux/types.h>* a" u9 O$ @8 n( v, l* \* q0 x( i
#include <linux/gpio.h>
6 s4 l5 n4 C% O( L#include <linux/leds.h>1 b+ w5 d9 A$ t
#include <linux/platform_device.h>+ p: Q7 H) f) e2 X
- x: \* k1 j1 `) S#include <asm/mach-types.h>& F$ f& Z+ V- f) c- y# p# X# \$ d
#include <asm/mach/arch.h>$ p' l r+ d4 n5 E: y
#include <mach/da8xx.h>
! n4 V! q; R* L z% M#include <mach/mux.h># _! h' }* ]. m3 {
* u f$ M) I6 D. @, q$ X5 K#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; U4 I/ F& l' k2 [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 y$ t6 u4 A# ?: ~$ O! r2 ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 Q8 j0 u' A, ^$ ~% j% ]
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ k* r3 j# r3 E+ p8 a; g+ Z
3 g- l3 j |1 c; a( l2 r9 V3 o/* assign the tl som board LED-GPIOs*// c: R* T& \1 {# p% J
static const short da850_evm_tl_user_led_pins[] = {
2 R/ s- g3 d" X, _) h4 S# B: h$ G /* These pins are definition at <mach/mux.h> file */# J/ p1 E. Y9 S# H! y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 [% m/ r* v( i$ [# O9 n* |/ { -1
$ W7 z0 b( S6 t. Q};
! q9 g: N8 s+ m: U8 v! n: z( T X; Y# u
static struct gpio_led da850_evm_tl_leds[] = {7 G- R) a; u1 w2 ~, Z! F
{
$ s4 m8 q2 a, F .active_low = 0,
r2 H+ i& Q5 K& S .gpio = DA850_USER_LED0,( ?- A* @4 |" g4 Y2 @/ n
.name = "user_led0",, B4 }2 K+ a' ?7 C- Q. q6 c
.default_trigger = "default-on",0 m9 u7 ~3 K$ C/ i5 y3 F Y
},3 p( G# I3 `% t E8 N0 S2 F" t3 A
{
* z( O& a5 M/ b; A .active_low = 0,
$ Q) x9 r& l5 G- `7 D9 N .gpio = DA850_USER_LED1,
+ x! p7 O* `3 a7 j' n .name = "user_led1",& d. b7 V$ @: ~4 Z* L/ }
.default_trigger = "default-on",# r7 o- F. T* K& ]/ F% J
},
0 w9 @( s6 Z% A9 l( L4 O q {" G( r/ m( _0 d' t
.active_low = 0,
% m& K8 T: z+ e }: X .gpio = DA850_USER_LED2,/ `& x4 H; d% h% ?
.name = "user_led2",* |9 E+ \+ G) H. y1 z
.default_trigger = "default-on",
0 E& x5 S$ P5 z3 Z },
; g8 U2 D, o: K5 y: `+ J* a {
5 {% T' Y9 l l1 ?! V( [0 I .active_low = 0,1 T0 d7 F: _6 O0 g2 z
.gpio = DA850_USER_LED3,# ^8 Y/ L; c- R( K Z$ i2 u+ t
.name = "user_led3",: K6 W6 F8 e; P' t( n* F# x x
.default_trigger = "default-on",
1 ]$ [9 |1 u( P! J },
1 L1 n/ F/ H% }};
" M; I& o, q, |6 F" D1 t) k E& u
. F3 q9 Z* k% s3 {% _0 f7 astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, W. a2 i0 h' I, g9 D% l; G
.leds = da850_evm_tl_leds,. N* E; O# X, a9 Q# |4 {! C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# i; U. Y3 V8 t" Q0 |8 {
};4 y- |2 n9 ]" }% N2 a, E
# Y2 C' q" S5 [6 m# f& l" f0 ?
static void led_dev_release(struct device *dev)
3 |: V) s5 c; X9 {& N5 Z$ {$ E{
. P! C9 @$ _/ v* J& C1 b: D};
1 w ?0 l6 t4 U% R
/ ?+ i; t2 ?* t+ A% Pstatic struct platform_device da850_evm_tl_leds_device = {
- U/ Z- q# T' ]4 B4 @0 ^" H( n4 O# q .name = "leds-gpio",
8 U/ |) y- @# P4 P0 C .id = 1,
q f& E% F1 C( T" f .dev = {
" b- `2 g0 T6 j" e, { .platform_data = &da850_evm_tl_leds_pdata,
3 A- ~1 u% }( ?$ Z. S7 _' b1 n/ U .release = led_dev_release,! q- @; } H; {; d3 T
}
6 M% r, O& T w! F F# m6 v};0 W% D8 K) T2 E0 z( B5 G" H
9 ?7 [7 L, o9 y/ ostatic int __init led_platform_init(void)
8 h: z) r" r3 O. v{
4 D d2 t1 p7 \4 w: r int ret;* M9 ~! l X' k: K6 N# o
#if 04 ~: o1 e3 ]. E* y8 M" `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' `4 @ q) f$ M. m7 o) P
if (ret)4 N/ t% }. p& Y$ h! x. ]" @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 Y& ]8 T6 T9 r/ Q- }
"%d\n", ret);
4 m! P: A) K& q1 ^9 p: l0 N G. g#endif
5 l6 \9 [* t0 b& o/ _ ret = platform_device_register(&da850_evm_tl_leds_device);% c) z! R7 F4 w1 d
if (ret)1 l2 b9 y7 m, H6 T
pr_warning("Could not register som GPIO expander LEDS");. G" F, A& w# l0 j3 K8 ~
else
4 T4 Z" @4 l+ `. G; Z9 [) I4 } printk(KERN_INFO "LED register sucessful!\n");7 Y7 N9 b# H5 V; r9 `
. z8 J* b9 ], X/ ^4 X, B) c
return ret;% {7 ]# F1 F) A. O9 G" G' @
}
# g& `$ ~* B" N, Y+ U2 b# M8 w# m0 |1 c9 S
static void __exit led_platform_exit(void)
4 `; ]/ }' m2 e+ o{9 S. H: w5 \" Z% T# f. K
platform_device_unregister(&da850_evm_tl_leds_device);6 X; A7 r- E3 d; s
# L, A$ _* I* n5 o% B) O& k printk(KERN_INFO "LED unregister!\n");
! {) h3 R+ d* g) `, N# @/ m}
4 `$ a: v/ l/ ~5 o9 P
9 v& S6 q6 f/ V3 Ymodule_init(led_platform_init);$ A% `) i0 v+ D' D( L. s. A. [7 s
module_exit(led_platform_exit);
. K% X' H; D+ o7 `/ x7 z. T- M5 q
6 \: g6 L2 U3 c x9 iMODULE_DESCRIPTION("Led platform driver");) A$ I" m. U7 A" P
MODULE_AUTHOR("Tronlong");
! ^% ]; L( H0 J! {& w9 ^MODULE_LICENSE("GPL");
: C( P2 n+ |. M, R. ?5 q: G- [( ~) ?6 M
|
|