|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& `' d/ m ] i0 G#include <linux/init.h>
* I- D' S9 `4 E$ K6 d" ?1 v8 {#include <linux/module.h>
7 v$ _1 j) y" P; z. r6 d% b#include <linux/kernel.h>& J0 a/ `3 ~# {# s" p4 z- l
#include <linux/types.h># b) f. a* C: u- t' p1 m; O0 A9 a
#include <linux/gpio.h>
5 N7 F" ~8 w+ Q3 {! F* J#include <linux/leds.h>
- Y2 o% ?# u! c6 D; S4 z#include <linux/platform_device.h>
" _" G* D& E* Y: u0 ?5 i. \
! u5 R* P" p1 X1 W% `#include <asm/mach-types.h>
+ h4 T% Z' i! D. t9 X#include <asm/mach/arch.h>
/ J% e# G) d& h. \#include <mach/da8xx.h>
: g# T6 c. _: B#include <mach/mux.h>
! c( J/ L6 g+ Q
' m9 E7 u6 C+ d$ J#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 S. ^ j0 r" H
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. C% g r- T7 e8 y8 M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ i, I8 g7 h1 J( V) P* z3 i D
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ Z5 j8 X7 N* u. `6 n
! i3 [' g! w) v- S/ ^! C' f) s
/* assign the tl som board LED-GPIOs*/9 _- j( a& n: W2 D& k( [3 v
static const short da850_evm_tl_user_led_pins[] = {2 C9 X& J' l7 M
/* These pins are definition at <mach/mux.h> file */
* N5 O+ S6 {; j( D# X0 l; v* @ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ W( N- t% n$ B2 Q" v -1; J9 j* h5 [, r' Z# }
};& O, a! s p; H; _" V' G
& t2 N" m3 O ?7 D. x
static struct gpio_led da850_evm_tl_leds[] = {
4 }8 f2 y3 }: f4 b# |5 _ {
$ |; ~% {' t/ u* @' I {. s& m .active_low = 0,- U. k" i+ {6 h
.gpio = DA850_USER_LED0,1 y3 d0 ^+ e. M8 F1 d# Z
.name = "user_led0",
) ?. X: R( `6 y6 Z+ M. S .default_trigger = "default-on",: y) x( a5 Y+ `; F, D0 [6 f4 h
},
. a# y) T* l( k* E: ^: b, M& b$ L {8 n% k& ]" A N* p8 R
.active_low = 0,9 e/ i+ V* ?9 e7 } \
.gpio = DA850_USER_LED1,
J9 Q/ h& j4 [/ z- o5 y. A L* ~ .name = "user_led1",7 Z% a/ D. ]; n2 R- ]
.default_trigger = "default-on",, H6 p, o0 o1 n" a
}, l4 f/ ^8 c' ?1 W
{% J0 Q$ u5 J" Z; n3 v0 q7 z+ [' g- m; a
.active_low = 0,
( g, {0 @5 g- l6 b/ V5 Y; ` .gpio = DA850_USER_LED2,
9 `* p# B) P6 D v9 L8 q .name = "user_led2",
+ |; u: U6 Q6 ^& s- u1 Y .default_trigger = "default-on",
, r: }: ^0 [6 L; }; D },
) A" S& ~2 R0 q+ K) L8 b: q {& _4 h4 Y) z, y J* c
.active_low = 0,& y, w, y" x5 z
.gpio = DA850_USER_LED3,4 f4 I! `5 x7 X- r* E# `
.name = "user_led3", q, _; A' l& m8 b2 m' j5 o
.default_trigger = "default-on",5 J7 _8 ~+ p3 i* h& q) m
},
+ A& ^5 S' P( D};" R& c- _2 P; b U! a
9 c' K, }: |$ j0 lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 `1 [* G8 A8 A \ m" k) {5 _
.leds = da850_evm_tl_leds,* N# F% p8 @% M5 _0 m ?1 N
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 [" r4 y( L& R1 F7 v/ r, L! \};
: X; \" [7 X. \, i$ x
( R4 C3 j1 c: m" P% |. m) b2 ?" ?static void led_dev_release(struct device *dev)
@! ]/ f% }$ F' x9 H{+ o- I2 W4 y7 Y, `9 a' t" A
};
: a: V5 P7 R2 V# `0 g0 j: c2 h" N. |! Y' o m8 J0 ~9 n8 {
static struct platform_device da850_evm_tl_leds_device = {
* L$ ~6 P& \7 g( g8 @! a5 } .name = "leds-gpio",* M' a" i. A0 j
.id = 1,. F& n: l; \2 G" U6 k/ Y
.dev = {
! S. r: S: [& J( a# K .platform_data = &da850_evm_tl_leds_pdata,
! t; L9 O$ `% | .release = led_dev_release,
+ P+ d- l J2 X1 [ }
* }: D7 ]: s0 T# K6 v7 m# K};) }5 ~' e$ y' V8 Y
4 X7 P- [/ n) G. t/ b. X6 m/ Ostatic int __init led_platform_init(void)
+ ~# k6 a' p' _% V{9 Y1 R5 Z7 H( D* w' N$ t
int ret;
4 d9 D& t+ h, ]* Q#if 0! g: |7 q3 m5 ]3 W2 z0 _9 r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' r2 X1 Y, r. g3 S, l if (ret)) H* F6 b' x8 ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") q6 `2 y. ~& l0 J
"%d\n", ret);/ H% w* X1 G6 `" U3 z5 K3 P
#endif
9 E7 _3 ]5 x0 e! z$ `0 t* V, m, C9 c ret = platform_device_register(&da850_evm_tl_leds_device);
7 _ E" m. r0 g' D/ a if (ret)
' w2 b6 |6 V) \, i6 e pr_warning("Could not register som GPIO expander LEDS");
/ r8 K7 @% K3 f. A3 U9 v9 H) B else
: C1 `0 a. g1 K6 G printk(KERN_INFO "LED register sucessful!\n");
# S1 W; V) C; C4 x! ^( J* j: o; y+ F' Z! W" ^) G
return ret;
1 H/ u$ o! c- z4 A# |}3 c6 ^& F$ `+ M
& X0 W3 y& x- o( ]$ j' a9 s _4 ~static void __exit led_platform_exit(void): k( C4 b( S0 Y$ y
{) Q/ t1 P; N/ z* g1 x
platform_device_unregister(&da850_evm_tl_leds_device);# F+ h% e8 z3 N' R2 {. z
3 s% q, e7 z0 f/ {- t0 a i. b printk(KERN_INFO "LED unregister!\n");0 b0 w* o7 r$ V- ]9 Z
}) E( j0 U* G) h- J, z& ^! k! b
: G3 B& f+ k- G
module_init(led_platform_init);
0 [5 ~( S% _$ Z, A: bmodule_exit(led_platform_exit);
& h# \+ O8 K3 K2 p
+ L6 v1 B; r9 _, Y2 L* YMODULE_DESCRIPTION("Led platform driver");
( h* B( m6 ?$ ?0 n. p1 iMODULE_AUTHOR("Tronlong");
: u: S0 p! S/ ?MODULE_LICENSE("GPL");
7 n E# Z) m9 d6 K) ~5 K4 D8 X$ u3 j+ ?) b, K6 p
|
|