|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& [* `# N5 Q: @9 `
#include <linux/init.h>7 h- G0 b: u9 h+ Y: |6 \
#include <linux/module.h>9 O& f( o1 z. b% P
#include <linux/kernel.h>
1 ?* _. q* V. N v#include <linux/types.h>
2 e3 i$ G/ Z+ c g# y#include <linux/gpio.h>
# |' f4 a) D' f* W* f#include <linux/leds.h>3 E8 s* z2 ]! {( ]+ l
#include <linux/platform_device.h>' E2 ^4 B0 K! {( X
5 h6 A* c) F2 C" @#include <asm/mach-types.h>
3 k3 p# [- _; Y" K#include <asm/mach/arch.h>
3 o# o" R/ s( X" w0 o, ]& U7 G v#include <mach/da8xx.h>
8 @0 Z9 R e& M: G& f' v" L+ y#include <mach/mux.h> g8 q8 f. J3 R
( u1 T* m5 K: A: {( X
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% [% ]" x' q/ O/ Q+ Z: `, F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; {3 y a7 v4 v' Z _; a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 B/ k. c' @ k+ N* {+ l9 N" e0 ^1 _( J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 c+ E, D6 S. x; V8 g5 }% V
5 z% F$ _* ^4 I* H/ n A% k
/* assign the tl som board LED-GPIOs*/
, X8 J- Q$ }& _3 n, F; ^static const short da850_evm_tl_user_led_pins[] = {8 h, H& o4 C4 d7 F$ q
/* These pins are definition at <mach/mux.h> file */
; }) n1 H+ c. y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- I3 k% H9 |7 P% j) d! r0 H -1" y8 h# N ~2 I" w
};
$ r8 {( N( u- H3 Z5 a+ R- J
( Y: l$ ~& g# d- Q. dstatic struct gpio_led da850_evm_tl_leds[] = {! {5 ]9 [* X4 p2 R& q" R3 \' c8 N* \
{9 I' G8 B v, @; i/ t* {& z2 {. W
.active_low = 0,& Q1 T7 m; A+ }+ t# T. i
.gpio = DA850_USER_LED0,; A1 i4 x7 K. y" |
.name = "user_led0",
. v6 i j' M7 O7 d( f# X .default_trigger = "default-on",# G3 l# e% u! ]! R: Q+ [- o$ E3 m# C. L
},
% x+ w9 U1 I$ ]' n; J$ [. G* t2 D {0 ]) p) [9 }- ?* ?% g. v
.active_low = 0," A# [( M$ W) A
.gpio = DA850_USER_LED1,1 k# q( C4 S3 `# d5 H
.name = "user_led1",7 l W! p0 X0 s9 \0 z
.default_trigger = "default-on",
2 e8 J: i6 }$ D },: |$ v& N1 k! V9 J2 I' v
{
$ O' d1 Y" d# g! H$ B" }* [) C .active_low = 0,! S$ n% R0 M- K( ^1 [5 N
.gpio = DA850_USER_LED2,
; m% V$ |5 y: Q4 Q& U& b/ } .name = "user_led2",
2 z0 n6 M5 s+ Y3 l .default_trigger = "default-on",
: s7 Z: ]" e4 Q },
! V7 l* C+ H: z$ K! B! P {- q: x! ]' M' n
.active_low = 0,
6 I& k& ~- m$ @1 V .gpio = DA850_USER_LED3,/ s( _0 s/ a9 @2 g! Q0 ^3 Q1 w
.name = "user_led3",
* d; z' W; I+ o/ X .default_trigger = "default-on",9 p' N2 t- b0 u: A8 T
},; G/ W ^& R. K& \
};3 F6 }( h$ W2 ^, i; x. L
4 Y& w- G, {$ K( X5 pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' s& }% H; u/ u( n0 ` .leds = da850_evm_tl_leds,
6 D/ j) d* m2 a$ M" ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ c8 s8 t. E8 V: L1 _( u};
- L2 I" O8 E, F( N6 d" X% C/ L% t2 Z/ I/ L: [6 H& d0 L E H$ ?
static void led_dev_release(struct device *dev); r: o! o5 m/ q' t5 x0 p& @
{/ Y: N. \9 y4 u. n! i' P* [+ U0 o
};
+ x# @, a0 f; U0 |( |8 V$ c a; i- @! Q7 j! L8 n. a) v5 h. k8 l5 k
static struct platform_device da850_evm_tl_leds_device = {
: D6 r' }5 m# y5 Z- v" Y6 ^ .name = "leds-gpio",
2 R4 m' U ]8 Y3 w7 J9 _2 ^ .id = 1,
: o+ V8 z, y) y3 A, V .dev = {
. t) t8 G2 J0 S" o& J" Z .platform_data = &da850_evm_tl_leds_pdata,
7 q: Z8 V% |' k5 g t .release = led_dev_release,
% v+ x/ r k" Q/ I9 w }
' f$ c8 B/ I9 ~+ A2 ^};3 z! D( M7 C- r! q" y" X
/ C: _& a7 B" Y( v+ @$ C
static int __init led_platform_init(void)
: X3 s; R" L# W& c- Z7 m* i{! z& d5 O6 a+ L4 W; m3 H
int ret;9 \$ a. R2 \, O3 j4 k; ]$ H# D
#if 0
6 h$ E& |+ u; Q/ u/ Z8 u6 X, ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: C. _; o) X" F" R! w/ o$ u, O if (ret)6 W+ k0 }/ e6 N8 G# K V6 a
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) V3 p* t3 r4 F2 j "%d\n", ret);
; y' U f; l4 q5 t" e2 ~#endif& u: [4 _3 g: D0 j8 L- p4 S9 R
ret = platform_device_register(&da850_evm_tl_leds_device);! I# `' B5 j" c/ I6 v* R \; D
if (ret)
. w1 g8 s2 D9 l5 }8 C% h pr_warning("Could not register som GPIO expander LEDS");
- [( \, Z2 S# a4 _ else. W& k9 e5 u! T n% h
printk(KERN_INFO "LED register sucessful!\n");
0 W# Z5 h* m0 _! _8 M6 J- b: p
return ret; ~- d# }0 h0 U# I
}9 W: B: p d) X* a# C9 Q7 v
5 L$ w/ c! z. L" C. J! G/ @5 y& q
static void __exit led_platform_exit(void)
; `; o7 A$ E% a: s- o0 a$ i{* K2 [. S- u2 M G
platform_device_unregister(&da850_evm_tl_leds_device);
+ q8 |8 B1 N0 j8 _+ n9 x0 w+ I5 |6 ]! K1 o" Z' k. f) n$ f
printk(KERN_INFO "LED unregister!\n");
1 \* l& x0 e- ^# i3 |}0 g, w, Z% V0 z
* g- `3 ~8 F; c4 |9 m% Ymodule_init(led_platform_init);4 J7 K1 w5 t) n3 n* p3 [
module_exit(led_platform_exit);
- x: z# F! T/ b8 [, B
5 p' p& H+ z6 q2 z3 qMODULE_DESCRIPTION("Led platform driver");- a! `+ M. l0 t! D, f
MODULE_AUTHOR("Tronlong");
$ ~4 e7 B/ `8 Q' {' MMODULE_LICENSE("GPL");* R- E1 Y& h: s! @
( H; |; l3 V! L& r0 l |
|