|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 p9 ?" X+ w5 g: E1 n: c2 |#include <linux/init.h>
2 T7 I: N; M+ o' M#include <linux/module.h>' i7 p6 a! K# k4 ]( B' a
#include <linux/kernel.h>) u- T% B7 g* W- @6 _. q
#include <linux/types.h>1 ?' m. l3 x* u/ T
#include <linux/gpio.h>
: @8 n9 P& s( t, k: e% N$ @#include <linux/leds.h># v7 Z2 B2 B- d! T0 i
#include <linux/platform_device.h>
; |8 s0 y! C) T! {" C. P9 c& a: V& R7 b# W- o
#include <asm/mach-types.h>
' [' g! g3 L7 F$ v- \9 i#include <asm/mach/arch.h>
" @6 _* ~; |# @4 [0 g% e$ L' V#include <mach/da8xx.h>
4 f/ |% ]% U5 |3 ~! Z/ p#include <mach/mux.h>
! B: D! z7 X! ?) c3 k1 B. i8 n1 t" W# ~% O6 B% ^7 T# v
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" ^' n. ~3 { T7 T o
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 {% ?7 [- b% o* g9 g- v1 |
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. m* k5 `- ^4 Z/ b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). q; m: C1 j3 r5 A; S' h
. z* E, A! T; H3 {/* assign the tl som board LED-GPIOs*/
1 H8 F! }1 b i4 L) r: gstatic const short da850_evm_tl_user_led_pins[] = {
$ Z ]* h1 C2 m2 g /* These pins are definition at <mach/mux.h> file */
' t2 k9 I/ r( k- {/ G DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- u, e7 m$ V2 V. O/ q2 O3 \" N6 y
-17 J! s3 q2 q$ k6 G/ g
};- D: x$ E, r4 }4 H
4 b9 e- I8 K1 z7 {. l) X; d
static struct gpio_led da850_evm_tl_leds[] = {
1 e) Y/ X$ v. o# O {
; c G6 g" X# g; X3 ~8 Y .active_low = 0,7 p$ a" M* i" y+ Z8 J+ z
.gpio = DA850_USER_LED0,9 v6 g0 O! V. x. p) E+ W" f$ }* `
.name = "user_led0",
' v; I) ?8 g9 h2 o- F) b- e! [ .default_trigger = "default-on",: Z2 x/ f9 Y9 C( H( O3 ~
},
+ a7 X( W7 T/ O0 o* c. q {
1 i6 k. ]( O* _( H! ]0 ~6 i .active_low = 0,
4 D# U2 w" m+ N .gpio = DA850_USER_LED1,
1 i4 \) D" V/ n* ^% z& r+ _ .name = "user_led1",6 m3 W; a) \/ ^+ ~
.default_trigger = "default-on",$ p) `+ ?9 S( l
},
# \' }4 x, d/ }3 w8 ? {1 T1 `2 ?) o% j3 r/ {7 l7 C
.active_low = 0," o5 h; F% B9 R* o/ M
.gpio = DA850_USER_LED2,
h) h* t4 ^: z+ g% V: _3 Z .name = "user_led2",: V8 c+ m/ v- x5 l, r' n
.default_trigger = "default-on",
% b; S. ^. h5 b3 a },* O8 @8 G( u6 w; Z- c4 T
{ J3 i# `9 ]" q$ P6 I
.active_low = 0,
+ Y: U, b0 m( s" I {% E5 _6 O5 I! o0 w .gpio = DA850_USER_LED3,
8 @0 w/ V' b: M2 M9 Q7 e .name = "user_led3",
# e- d" [* a! N .default_trigger = "default-on",6 M& a; K( F* L4 R- q- S
},3 h e+ J% G' u
};
J9 Q" `, u' t! |$ u" Z, f% A4 r$ T1 m* ~+ P( O
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! E! @4 F/ b8 u9 v
.leds = da850_evm_tl_leds,: _; H% i9 P z1 p1 J8 A% h
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 j- s7 g$ w$ k; R4 A};
5 }, q# ?/ y' J4 a: C" I: k
8 R+ [1 |* y1 Vstatic void led_dev_release(struct device *dev)
: x* y# W1 Z& s- |! `6 H& m8 v7 x{
7 J5 ]2 N- ~; e};7 r6 W4 v3 `" _- x$ _6 U0 Q
/ G( @/ w0 s t7 [. Q9 K3 v
static struct platform_device da850_evm_tl_leds_device = {6 p' H" L( @! n' M. _
.name = "leds-gpio", L+ ?+ C5 H$ d
.id = 1,$ i% q6 F- [$ q, N, f7 {2 e
.dev = { h# a* s8 o' J3 G( Z
.platform_data = &da850_evm_tl_leds_pdata,2 W3 e% m! R) S; g8 J6 U" g% v3 E; z
.release = led_dev_release,, K4 ~# }* F; A7 J" c3 I7 P
}; l1 W: s1 R: S
};( h- K6 v2 e0 [! W, O# S
! y& R7 D; N/ M# i7 s
static int __init led_platform_init(void)* }( i8 \, J8 k4 \# d9 o
{* y9 N1 G4 Y |9 J* a! C. t
int ret;+ ~) s. E0 a- y. j# s5 {
#if 0$ \) t, W4 K8 j" Y: {
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 ~# a' {0 w3 G: F7 p% } if (ret)/ a7 E9 q( [0 |" Y1 j( c
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") W5 W* j' ] S O. g6 k
"%d\n", ret);
' M6 B& {. H# u" ^; U#endif
h" k! F, T! o7 A; k* @6 Z ret = platform_device_register(&da850_evm_tl_leds_device);
% |+ `; g2 ]. `" v* Y( m7 a2 }1 N) M if (ret)- b( r% l7 T' U8 |2 A
pr_warning("Could not register som GPIO expander LEDS");* B4 T0 Y- W |9 T% v: [% I
else+ X j+ z' b8 e( I
printk(KERN_INFO "LED register sucessful!\n");- `- q' L. s. W- I+ N' g) q
1 v2 t- X/ K3 i) `' {. b" R: |9 G
return ret;0 Q3 ?2 L7 y$ e! _5 O: n" w
}
; _- w4 g; U( G% K/ _% W9 C: A7 u; U! [( \) c2 s* _
static void __exit led_platform_exit(void)
2 J' v- A& G0 F{
7 d) g( e* e6 ?2 m+ q platform_device_unregister(&da850_evm_tl_leds_device);" I0 ]0 G1 m) L+ s: w1 u
7 X7 e( L, n) @1 X3 o+ t
printk(KERN_INFO "LED unregister!\n");/ m; d! j" C* S6 f, j% R
}
! _: b2 D( L8 N# p4 F7 J3 A& x0 E+ q/ E* d, v/ b& e; v
module_init(led_platform_init);
9 O. `$ d8 n$ I$ F7 @1 Jmodule_exit(led_platform_exit);
: v/ m4 Y/ u- I( W- o$ d: O4 V/ G0 Z5 W. J4 q
MODULE_DESCRIPTION("Led platform driver");
9 S* _" ?3 D) XMODULE_AUTHOR("Tronlong");$ d( e- b, L/ w: _/ K! t: ]
MODULE_LICENSE("GPL");7 ]/ ? C+ ]# b$ S! S3 f
9 m, g: V! d9 s% L/ F4 Y |
|