|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# X; q& J; k7 K1 O. i
#include <linux/init.h>+ |- \: k W- U' q
#include <linux/module.h>
/ a: A0 W( y9 {7 L6 {7 n# Y#include <linux/kernel.h>
( p2 k3 R4 P0 y, K. h. q#include <linux/types.h>
2 d! \* F& n' H, P#include <linux/gpio.h>
& s) V+ Y( p7 U- ]. H5 _#include <linux/leds.h>7 k7 r; F: F' x w: r( O- u. X7 S
#include <linux/platform_device.h>1 V/ R" ~7 p! ^
. ^/ M, h0 r6 x: Q% h
#include <asm/mach-types.h>
. D" N- R9 N7 ?% p) G" c* j/ N3 q#include <asm/mach/arch.h>
1 M( L* U; E: ?4 {; y: A/ e7 K#include <mach/da8xx.h>
7 [- B+ [3 }" o3 F0 r#include <mach/mux.h>
9 I0 u! A; w X7 _# Y& a$ `# G: e" A) @1 _% G
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 ?+ K7 g% @/ F+ P4 Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' A! Z# g& u& F2 @( V2 }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ m* h2 L: f; `/ M6 J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: R% r1 r0 j; j+ ] ~& |! r/ j. M& i H4 j f6 {& {( |; A' B h
/* assign the tl som board LED-GPIOs*/$ M0 Z3 ]7 q' r+ T& y2 d! L' v# g
static const short da850_evm_tl_user_led_pins[] = {6 R$ j7 t$ b8 y, s
/* These pins are definition at <mach/mux.h> file */# i) N+ m) c; K" F, |5 H- W0 ^0 I; i
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ G/ I% U N: s- }& `
-1
, g) l* m5 F9 {. c};
9 i: A9 G, \+ C7 g7 T
; _: q( c- h/ l6 Mstatic struct gpio_led da850_evm_tl_leds[] = {9 N+ J! M% O! y0 N3 O
{
* E& L/ |& ]3 ~4 X/ T& ~2 T+ G, n) x .active_low = 0,+ Y! _5 w" X& C4 ` `
.gpio = DA850_USER_LED0,5 J4 N7 }& G2 q4 k" N$ S% f) ~
.name = "user_led0",
$ h" j1 B: Q5 L" U! B .default_trigger = "default-on",
: s7 m& a# Y0 L D- i1 S0 | },6 z# w* g8 Z! B% m' J
{$ @) u( ^% v& \, a4 M0 H
.active_low = 0,
5 Y$ [% _: r: x$ b l .gpio = DA850_USER_LED1,( P: v# Y5 G; R+ z8 h5 J
.name = "user_led1",
7 o A% b- ]0 o5 }2 V- T8 H! ] .default_trigger = "default-on",
+ u$ t' t+ x5 k, R }, [" e- O0 C5 O- D& l0 E$ A
{( ?7 K ~- B b
.active_low = 0, L& \ Z/ A: s- c( ]& S
.gpio = DA850_USER_LED2,
: E6 \: ^: \% q* F( U .name = "user_led2",
4 M5 j8 V7 h0 o4 F* I, K .default_trigger = "default-on",
1 b- {1 S' n8 n) ?! W },! M1 E4 A- W2 _ a+ ^+ `
{
" U: I0 W' m5 C; f+ m .active_low = 0,
1 w( I8 `) A; ]& I' ] .gpio = DA850_USER_LED3,
& Q, [0 P3 o# l$ H: n/ p4 J3 M .name = "user_led3",
9 E3 l' ~8 ?. F% E4 O2 y0 N* B .default_trigger = "default-on",! G8 x5 U+ {8 }# q/ d* R: m5 t
},
- J. w% ^1 @3 \};9 u4 j$ A( C/ F$ _" x
1 q- |/ k+ i, N$ D- p
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% J/ |3 |* V \
.leds = da850_evm_tl_leds,
6 J& Z7 e2 I& s+ ` .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# t4 V0 e9 ]' E3 `1 Q7 n: D
};
' d( m9 N+ Z3 p( }5 O5 z: L3 \9 z( }+ H; {- f! z
static void led_dev_release(struct device *dev)
2 {5 a, `- ?! f{! W- k6 w& C8 j% U( B# h
};' P E4 u+ b' l$ {4 F% V
* O7 [( a' A! {2 _; E7 jstatic struct platform_device da850_evm_tl_leds_device = {9 u9 E: V/ g% R4 C) q
.name = "leds-gpio",
5 S* u l' W; t* `4 ] .id = 1,
! U' P7 c. v2 `$ q( j .dev = {, p6 j# A) e9 o
.platform_data = &da850_evm_tl_leds_pdata,
( {1 M' G) X% |( i( F .release = led_dev_release,
( S, {6 s2 Z; i" B }0 f; m- Q* W" u. l. e$ F9 l
};
; g+ E8 H* _( v" W% h F8 i& W/ K
static int __init led_platform_init(void)
9 x5 E) z c: P+ I! v4 H& p{
" w a% e- k' c2 F& d) E% V. J int ret;7 k, b D) f1 T# j; B" z
#if 0
1 }1 b: d& Y6 ^' N/ O& x: y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) L- C* H% F3 N
if (ret)" P% x( ]. ]* V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 F" L7 _# E9 h. d
"%d\n", ret);" B9 p3 r! O# ?$ E3 @4 x
#endif/ I* y0 t9 i! q, O: }& b
ret = platform_device_register(&da850_evm_tl_leds_device);
. t$ s2 W* W5 T/ Q% H if (ret)( W8 s% \/ j A" Y: I H/ _
pr_warning("Could not register som GPIO expander LEDS");
; B/ x8 T3 y# g$ s; q$ O, q else0 n7 S/ j, B0 v; Y9 I/ ?6 x6 w
printk(KERN_INFO "LED register sucessful!\n");$ V0 J' v8 {7 }3 ^
6 y0 g8 |$ d4 R1 f. |9 F
return ret;
* A, }2 K7 K( `}& J, ?; v4 T8 V, _& o3 f9 n
* ?) i, u) s/ v, _& L( g. x5 zstatic void __exit led_platform_exit(void): h4 z4 A: i& O0 h
{
0 K2 d; T9 r# n% Z platform_device_unregister(&da850_evm_tl_leds_device);. l% V0 o3 n$ u4 T% ^' H+ ^
! _7 h5 v* h4 t printk(KERN_INFO "LED unregister!\n");' z3 K( M. G4 O! J
}
9 J* o4 R) N @3 k* `0 C" \2 W \" B5 e) c5 b0 \
module_init(led_platform_init);
: j" a- O' E; ?! k8 hmodule_exit(led_platform_exit);- _' f: @5 K* G7 `& j
1 V) j/ N5 q* b. zMODULE_DESCRIPTION("Led platform driver");7 l/ V( d$ a- ^/ D
MODULE_AUTHOR("Tronlong");
1 l/ d3 [2 z* B7 V- CMODULE_LICENSE("GPL");
# T* U# v) g$ w6 a7 i$ @0 E& B, B) a, V; I
|
|