|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 m" }/ n$ v/ q! M# K
#include <linux/init.h>
* P: N& ~' \& ]6 `( j; I#include <linux/module.h>2 a6 K3 _4 q, o
#include <linux/kernel.h>
1 J0 f* K# ^4 L) D#include <linux/types.h>' m! ]1 k& X: t; V5 M
#include <linux/gpio.h>! ?+ B! |, P9 d3 P$ w+ o
#include <linux/leds.h>
% l7 q" O" L! V* b' T#include <linux/platform_device.h>
" V' d% N: K* H/ H6 G
' S& ]6 e- `3 ^. I# X! B: D#include <asm/mach-types.h>" F6 n: ~# V) o( V1 l* d/ u
#include <asm/mach/arch.h>
1 r, s% o1 a- N J- \- g#include <mach/da8xx.h>9 J5 v+ O* G. Q
#include <mach/mux.h>
; r& u& U( Z: C: l# j( X
1 m0 H; B* i; u/ P# u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 O, p& z) b) d- y2 G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 J: n. g L; c0 Z) J9 _* d4 L0 Z+ D#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% O T+ q4 b6 R#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 K1 b' o9 X2 l% G" j. v
3 W- h* J6 b+ V8 y; Q7 K/ X/* assign the tl som board LED-GPIOs*/5 c4 O2 ?+ y1 L/ D# x
static const short da850_evm_tl_user_led_pins[] = {
6 c G/ [( ?9 G' G/ z/ d0 d4 B: v /* These pins are definition at <mach/mux.h> file */
9 l E! \, g* V* l" V2 H7 `3 k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
|1 Y/ u! ?& A9 l- `& y+ ` -1
. H: G* G$ m4 w* o8 Q+ o g0 e7 M: e};
, Z3 u* N, \* s; C% ^
& F4 M9 k7 ~3 @& r7 T! pstatic struct gpio_led da850_evm_tl_leds[] = {
* `8 T& K: P" t6 I _ {
* J; G7 \( t3 w8 \# Y9 H6 S .active_low = 0," Y! b: E* C9 L
.gpio = DA850_USER_LED0,# }9 d% j; N. F3 H" u
.name = "user_led0",! n4 V4 v8 s2 ^ H3 ]3 g( H
.default_trigger = "default-on",
8 z7 j* ~. E0 e* f8 O, ~+ G },
! ^$ X& ^- B5 A- N; B# Z2 M. o {+ E$ w0 T+ g. X% p
.active_low = 0,' b' O. C$ i% U2 d5 Y
.gpio = DA850_USER_LED1,
9 b: j4 C$ X& k% N, B2 }2 T- P .name = "user_led1",0 l+ G& O. }, Q" L6 [2 d9 t- G: Q4 p
.default_trigger = "default-on",
X- c, n9 a: i, v$ q: D6 ^' h. E },- o% S' w$ o6 Z7 M i& F S
{+ T2 X+ c! J1 V
.active_low = 0,
5 ?/ z4 ?* [3 I! r6 Y# D9 p& W .gpio = DA850_USER_LED2,% Z5 S; j" B5 Z) c) N0 m
.name = "user_led2",! Q, `9 B5 X1 `, j7 A6 J
.default_trigger = "default-on",
0 r0 S& J6 w4 W8 M },+ y# @7 L/ Y& U7 Y# w
{
' E6 R4 b0 x9 G9 n9 O .active_low = 0,1 X/ V4 {" c% F6 e% R$ J/ I
.gpio = DA850_USER_LED3,% P6 p1 f: S& V" T- b! g/ x% v$ p
.name = "user_led3",6 }, g5 Z4 H! b; M2 u- i+ y, r
.default_trigger = "default-on",
: v6 K0 z/ n$ N# g% V$ V },; p! P! i' V' v2 p/ R9 Z
};7 {; A& W7 o: u% F
5 B" q. j' x5 f5 N& E: x+ c
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 o. L& k5 ?+ ^( _, `5 c6 X .leds = da850_evm_tl_leds,
7 d3 B8 R, }% @" M1 [ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# Z8 u ?+ b4 o8 A& \- O! j) o" Z
};
: ?& `3 P9 G; b$ b* Q
: Y1 b4 _: R0 n8 [static void led_dev_release(struct device *dev)
3 c" c: f2 U$ s0 L* v$ p0 x9 Z{' a, T7 ?3 r: q9 e; S7 k( \
};
8 L, q* ]. X4 r& Z& \2 u
4 l# O8 `, h3 T; t7 f2 n5 [$ \$ ~static struct platform_device da850_evm_tl_leds_device = {
' ~9 p: x7 ?2 O v8 t .name = "leds-gpio",9 u5 \% M; f+ D
.id = 1,' P9 I: N) n4 S& T
.dev = {
$ t. t3 z. p. k# J3 H" q7 l. { .platform_data = &da850_evm_tl_leds_pdata,+ l9 d. t$ i u- y6 D% G; M* m
.release = led_dev_release,
( F+ g, b" G+ z/ C" ?# T }
* C: Y5 \$ B6 J0 Q' a g};
) S9 i, T+ z2 R8 [- Z2 ?
; l0 q! N1 U; p; S+ Zstatic int __init led_platform_init(void)
$ O: `; Y7 v( _2 o* X; F U{
1 Q' Z( Y; f+ ?8 J int ret;8 l+ N/ r) b& ^: x' L' p% e
#if 0
4 u. \6 S5 u" ]" n6 r. w0 A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# s+ W! M( U; }/ q
if (ret); P3 H" ?+ b. Y& u1 z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! l) u0 n8 s# J6 ] "%d\n", ret);& M, X9 F0 Y+ N6 o* G* l
#endif" j9 r4 m y2 ^$ y; p
ret = platform_device_register(&da850_evm_tl_leds_device);
4 `% d# D W) |+ ~! \& H* ] if (ret)
# {8 R) I) T8 F% @( o pr_warning("Could not register som GPIO expander LEDS");) a8 r7 ^* c: O0 F7 S
else* {- ^. X- N ]/ f6 W, ^: w' q
printk(KERN_INFO "LED register sucessful!\n");3 {( T _! I0 Q9 H
* A! y7 \6 |: ~6 r; T
return ret;4 l/ S% k4 ?! @. ?/ R2 ?' G- m6 ^4 W7 _
}
3 ^+ T$ h( ] @. }' ~1 C
! O, T1 b! `* j: O& `1 r" Cstatic void __exit led_platform_exit(void)
1 l. x ^/ |- E( ?0 r% [/ a5 B{
1 ~+ I3 J$ q3 o% i: r5 C, _$ ^) K platform_device_unregister(&da850_evm_tl_leds_device);% p# B" k5 I8 j% x
* i% r* n i' K1 d/ V1 E9 z
printk(KERN_INFO "LED unregister!\n");0 Y; ?* l; w- v1 l! f6 ~/ c
}
1 Y0 n- l$ W5 B: H @
& e% d8 D. L( h n/ x( K( zmodule_init(led_platform_init);
' ]8 h0 {8 f$ {9 Wmodule_exit(led_platform_exit);
$ C7 o" G: x+ f
: Y& Z9 S8 F6 `( sMODULE_DESCRIPTION("Led platform driver");7 ]8 {- T7 d( E5 E4 ?
MODULE_AUTHOR("Tronlong");
9 [8 C) Q$ M. J3 RMODULE_LICENSE("GPL");7 E& M# O% Y+ ?# L; F6 r, Y- L
4 H, X9 K$ \- p( Y9 ?, {& W |
|