|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( W( i. k: H; o8 d9 F" A6 \#include <linux/init.h>
5 v1 z3 z: \% H2 Y1 Q1 E" X#include <linux/module.h>0 z! Q* J) y; s" f
#include <linux/kernel.h>0 ]6 [3 A( x. H% Y( y) R
#include <linux/types.h>) l- b& v* ?* ~2 }, i ]
#include <linux/gpio.h>4 r% m. }# {) @& F+ ~0 V
#include <linux/leds.h>
2 D1 Z- t! L6 u( i& g& D#include <linux/platform_device.h>" j" s2 r$ e; B) L3 L
$ @) M- n. c0 F; A9 s; H" V0 x#include <asm/mach-types.h>" ]# a% d7 o+ d: Q. Y
#include <asm/mach/arch.h>( ]3 ^4 ~- [* R" q
#include <mach/da8xx.h>. j# I3 V' m# N: S
#include <mach/mux.h>, S, X- c4 i! B. l
/ d4 w+ c; U$ T! O& I7 s$ Q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! s/ D7 {! l% ?- k$ n
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! ?& z2 I( M8 E% {0 t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" M2 W9 k& M3 l9 f1 Y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 d' g8 T6 u" C$ p$ U9 _: d
7 O% q6 T8 S7 R G) c6 a6 D
/* assign the tl som board LED-GPIOs*/
8 ^+ b1 O/ |! b/ Istatic const short da850_evm_tl_user_led_pins[] = {5 ? @3 `- `* o+ Z, n! ?* r
/* These pins are definition at <mach/mux.h> file */; R* O8 T& {; }0 `
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, a" t# o1 K4 ]: o: `0 m8 c1 x -18 q2 Q8 q K/ |$ o9 z
};
( N& [9 ~+ G5 D* _& U! c, l0 {# ^. y8 H" t. \$ c) k
static struct gpio_led da850_evm_tl_leds[] = {
! I/ V! |+ R& J% `1 `3 a2 I; e& S {: v) y4 t7 D6 |8 K8 l8 B
.active_low = 0,
1 @4 u" t) ]7 d4 s* f .gpio = DA850_USER_LED0,
+ A* K( E" m6 \0 V .name = "user_led0",
* P# W5 l/ |% j6 G .default_trigger = "default-on",. h, t2 D" _/ B1 y7 A
},7 O$ a# u5 i4 r8 \* K9 G
{
$ a- A$ ] q; T1 b: h( o/ k5 F& G .active_low = 0,
6 N& v$ _& w4 F' J# {4 v% i% y .gpio = DA850_USER_LED1,0 F4 U. M; c5 L
.name = "user_led1",
5 j g3 s, e* r2 H% B .default_trigger = "default-on",. U6 P5 H- F b
},
2 K2 j9 z1 U% Y* Z" E" d {
! P; H/ i( T. X6 J3 C8 | .active_low = 0,
5 z, @6 @* _/ t: W) _9 T- e .gpio = DA850_USER_LED2,
/ g2 \) j: T& A% {4 ?4 }& I .name = "user_led2",
3 I1 R* m3 S9 b2 i .default_trigger = "default-on",
- K( p0 l2 I6 U2 Z2 D },
8 r- ~* h0 k0 m% X0 @6 _6 F+ j+ \ {
2 N9 b* K4 Y& R& w) ]; p g; U .active_low = 0,
7 ]# w) q2 n+ j8 x% Y .gpio = DA850_USER_LED3,
@- k$ K5 I- t' Q2 G .name = "user_led3",& e# u$ U$ }+ H, M% x; s
.default_trigger = "default-on",
; D; Q" n# Y$ _1 F8 o' d( Q },
( C3 q( ?$ P6 k" u};" I# L% ~( G/ `3 o( J1 h+ w
) i1 S1 ?( d+ b: K' k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; ^/ ]! [) h4 [5 | .leds = da850_evm_tl_leds,
- ~* s$ P5 r+ D2 G .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 s, q+ W% _# D% m1 C' }" a
};4 i: Q P+ U6 Q* D0 b: p+ a, c5 u7 ^
# K9 M5 u4 S/ |$ j; P/ R/ P9 E
static void led_dev_release(struct device *dev)1 x" Y: {% a+ X l" J% X
{& k" W+ g1 s- p: H( Q6 X
};
( l9 q. l( |& S* ~5 b: L
% E$ h! _4 [% k4 H' e, C' _6 i" S! hstatic struct platform_device da850_evm_tl_leds_device = {
3 s+ W6 _8 J# J' E' n .name = "leds-gpio",
0 q/ y3 g9 K- v) W, {* o .id = 1,, a/ g7 R% c9 I y( ^3 v
.dev = {% Y) ~: ~4 M( f4 ^8 U
.platform_data = &da850_evm_tl_leds_pdata,
; L! C7 ^+ ?( _) `) M .release = led_dev_release,
1 g' o0 V$ d W, h- |5 f/ U9 [, l }& J5 M0 H5 z z+ E
};
4 Z( I0 t4 V6 S. _9 s
1 g' x0 U8 S' S% k* Qstatic int __init led_platform_init(void)
* B. G- a- I% T{7 m! |2 l& x1 M9 _
int ret;
6 U5 e; x9 t1 A7 o; p. t4 r#if 0
( Z- N% Q: A2 U0 t8 B* ^ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' M; K# O( j7 o- p" Y+ h if (ret)9 i& ?4 _: ]- U8 I% Y: I( q7 r' C8 [
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' E: Z$ f+ H W$ ] "%d\n", ret);- U; ] A/ U. Z8 @) ?
#endif+ ^: k& y2 C3 i- z4 M2 I
ret = platform_device_register(&da850_evm_tl_leds_device);
$ C- R* n$ a1 N& V# E. m5 ]- V if (ret)
' E1 z S }) v6 p. J pr_warning("Could not register som GPIO expander LEDS");
, `1 Y P1 ]- H8 Q( V+ X6 t else+ @; J2 g9 C9 a' o
printk(KERN_INFO "LED register sucessful!\n");$ j: K! C7 p! a# h- S
* Y' a8 c! }" S0 a+ I1 _, ^1 T
return ret;
+ [* E0 J9 a7 \3 ^( E}
: C1 Z" y+ t2 f5 r
" ]2 h0 I P% `. U+ e5 B+ i; O# \static void __exit led_platform_exit(void)
! z' R: h+ d( o' Z' [# ~) M8 M9 X8 |{$ H1 V) c" P, n% D; ~" x( \
platform_device_unregister(&da850_evm_tl_leds_device);
" }" W% ]+ m, d8 i
& b# U/ Y( X: L4 b5 A7 U' \" D printk(KERN_INFO "LED unregister!\n");
& C. t9 t# F% Q9 t1 l3 `}1 _; O0 m" c$ ~7 c; x4 ]) D
8 W% T/ J8 D+ e' Imodule_init(led_platform_init); k1 d; e; i+ @4 x% ]5 ]
module_exit(led_platform_exit); C0 H! u8 p+ n- l- w/ O# H
# L0 F+ Z+ h# m7 v$ {6 S7 }
MODULE_DESCRIPTION("Led platform driver");' { u6 o" R" \0 F
MODULE_AUTHOR("Tronlong");. j7 ^8 }. i/ `/ u, t- F
MODULE_LICENSE("GPL");3 r z4 P( y- [
& I7 s) \8 i# A3 q
|
|