|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 N8 s% l+ h' H7 S+ h. {* q
#include <linux/init.h>* j- C5 W& |$ e. U
#include <linux/module.h>! k" O: @6 a7 r0 _0 Q
#include <linux/kernel.h>& [% `* Y- f* m* d
#include <linux/types.h>& `/ j5 {1 J! t+ V5 a0 t
#include <linux/gpio.h>
: Z' l! b. M3 Y$ U#include <linux/leds.h>
- f0 W9 z3 ?: L0 o. C% V: h#include <linux/platform_device.h>
4 Z% ^" x( l5 |3 m& b# b" |: J/ ^) [) s$ U: n
#include <asm/mach-types.h>6 {9 ~) K6 L; B6 C4 @
#include <asm/mach/arch.h>! I8 S" b* N% s. A F; X
#include <mach/da8xx.h>
- K9 U, i4 R: q, _1 [. w#include <mach/mux.h>) k5 K* e4 } l* Y. Y* S
7 L. {$ V/ @ M0 K) a: O#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 r+ J. ^, S7 g* R
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 F/ j0 M& }1 L
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 h5 F- V0 `8 X#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% o4 w9 A$ e8 d) ?6 O
0 _) R- c s7 A: r% r0 ~1 }/* assign the tl som board LED-GPIOs*/
) M% m8 u$ m. d, e! R, @, ]static const short da850_evm_tl_user_led_pins[] = {7 u0 ~, E- x8 |5 A
/* These pins are definition at <mach/mux.h> file */' |' v4 X6 O! F1 ^# i2 H) d! w" F
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 X+ b* ], ] R8 C) Z! }
-1
, o3 p1 y$ V1 j3 u* h};
# K) R2 h# E9 L5 \& B% K8 k
: [3 q, K! L8 }& z2 j4 kstatic struct gpio_led da850_evm_tl_leds[] = {
) q1 S% A6 s6 M+ |2 V0 P+ | {! v) ^, `& N* j! \4 _/ `$ K, _
.active_low = 0,
$ z V9 Z2 [+ r" w; ^ .gpio = DA850_USER_LED0,
8 B; z$ ]4 s3 @2 w5 `1 n# R* K .name = "user_led0",$ G; w8 H( o) K) j
.default_trigger = "default-on",
& c' p4 S0 {" T/ Q },3 t4 u/ T' [& d
{
& T u: m( R8 ^& {1 n0 H .active_low = 0,
& U }" A% N8 A, w: l: [ .gpio = DA850_USER_LED1,, {% n6 n( c* `! i- {
.name = "user_led1",
2 u: E, A Q2 V' _2 f( Y8 Z4 K .default_trigger = "default-on",
3 l" i2 h: Z' B0 W+ L* X4 M },2 o _+ y4 \# l- E8 K
{
: L3 l- I! j( i D$ l5 t .active_low = 0,$ ~ `0 Q2 p2 z6 S* f( Y# R& } G. F
.gpio = DA850_USER_LED2,
2 Y& @ h1 A3 `) T .name = "user_led2",
% g0 M! J. L4 J' K' ?8 Q7 {/ ]5 K .default_trigger = "default-on",
$ J: g- y; Y0 K6 w+ K4 ? },
5 p: J. \9 A5 Z, k9 a5 L' P {
5 c1 Y8 f, R$ ^ .active_low = 0,
$ J; X z2 z. g6 l- j+ x .gpio = DA850_USER_LED3,
% }7 W. ]: T1 a3 K4 R$ M .name = "user_led3",- k E, U: K. E) ^
.default_trigger = "default-on",% w( `$ ?( g0 c- W
},
8 W9 {" k* ?5 d. w3 T4 r};
( j. I0 f! {$ y+ Y, U/ l6 X
# L" ~+ h" @' l$ Fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, {/ b1 ]6 [/ f' J r' ? .leds = da850_evm_tl_leds,. I9 y2 [: [' A# M5 r- r6 [! e
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: C" x6 ?* o7 b% h- r6 Q};
) f) d; x+ ~& a: k; \* q- E) A/ P+ M+ [+ O: R& J8 n; Z* V
static void led_dev_release(struct device *dev)% X$ h% u0 j! Z
{
: U- ^2 E1 h; j" M7 {; c' U};% k1 Y0 J$ K, A3 Y/ e& n S
) t2 K- c7 B" T, ]( c
static struct platform_device da850_evm_tl_leds_device = {( U: s- @# }4 i% g* m
.name = "leds-gpio",
3 G1 f+ d4 o! Q: Z+ H' W$ i- d \2 a .id = 1,: W2 ~; O5 d( i
.dev = {
$ k. X2 J: y( Y .platform_data = &da850_evm_tl_leds_pdata,
: _* n' F3 R# I5 F- L- M% l7 c9 ] .release = led_dev_release,+ }5 e( K' n) F: ?( ^; h: H
}
0 U( p% x% a+ ?: D+ m0 u: E' V};
: }, i/ m% @1 w) u. b; J2 }" M6 c) i, N( r- [2 o6 Z
static int __init led_platform_init(void)
* }) G w' j; W) \8 p" O$ v. Q* w{, S& E' d+ ~3 v! {6 Q9 ?( b
int ret;8 h1 Y5 g3 n: ~# n. K9 c
#if 0
0 O6 b' t1 H7 v ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. c- Z: M; ]+ c: M if (ret)
7 \" J# n/ o1 y5 A pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) H; g, m+ o/ J: j "%d\n", ret);- l9 `/ l2 J P- j6 S- E
#endif4 ~% i5 Q: w0 k
ret = platform_device_register(&da850_evm_tl_leds_device);
4 V2 d2 T$ T4 E: M: Z if (ret)6 F- T1 J" Q z3 x1 b
pr_warning("Could not register som GPIO expander LEDS");; _$ _4 H* j& m
else
& c% ]/ h' G. ?. ~( I printk(KERN_INFO "LED register sucessful!\n");
: z, D6 Q1 }: d. l% l
" c$ r. K1 X: z: ?) V" i7 N return ret;. {- E- d3 I2 }) h2 t. s
}
0 W+ N D$ @( d0 t1 ]+ h k" j" i0 h$ y3 \& S' } b
static void __exit led_platform_exit(void)- {& m6 {: T! Z' q+ F& j
{9 m. c; l1 [. M3 Y, R
platform_device_unregister(&da850_evm_tl_leds_device);
1 q8 s0 ?2 P* @0 N- p) d- @% ~/ A9 ]4 {/ M% Y
printk(KERN_INFO "LED unregister!\n");
- x! G3 S3 m- j6 \) A ~}! q6 ?9 x0 v* x; y' q4 f
0 t+ L4 |& K" m: {. a* E$ ]
module_init(led_platform_init);1 N- d: C/ [& h' L5 ?( l* m
module_exit(led_platform_exit);
8 V3 R$ k9 \, \+ c
; y/ s5 S; b6 JMODULE_DESCRIPTION("Led platform driver"); m+ D7 k/ l* v* K! E
MODULE_AUTHOR("Tronlong");3 p+ p5 d9 g9 l
MODULE_LICENSE("GPL");7 o8 @: {4 ~/ b- L3 O# i7 Q1 v- F
6 ~/ i+ u( r- B" @( d M
|
|