|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 k$ q; Y8 n- ~. _5 _! s+ G
#include <linux/init.h>; g- e y" C8 F% m# N& [2 W1 n+ s
#include <linux/module.h>
' S& h. h$ g; V#include <linux/kernel.h>
7 y9 b# K9 |4 K#include <linux/types.h> E5 Z% n( U: }# c7 b; h6 T9 X+ d& n
#include <linux/gpio.h>
2 M5 D; ?( O1 b9 S8 V. L#include <linux/leds.h>
+ C! R6 b# k- S3 }#include <linux/platform_device.h>9 L( l, y! o' \7 E; y' p8 J
9 e1 X3 l1 H$ @#include <asm/mach-types.h>
4 t& T8 D6 s8 S$ I. J& ~#include <asm/mach/arch.h>
" o+ N3 Z$ h ]4 O$ b' \#include <mach/da8xx.h>
/ O9 Y- l: Q" [/ \& d#include <mach/mux.h>
& p' u1 O5 Y; x+ F0 \: I3 [/ N! V! K, d( }7 Y- ^$ I
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 \0 k+ ~4 w' A2 N+ ^; @# k! c, f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ e. D1 ?# r) `% M1 q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* L- `! `8 W( t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 ?# o& ~5 Q" p8 [3 N+ D( O. d, H8 r1 @" l
/* assign the tl som board LED-GPIOs*/ P" J+ l! D5 ^# t, [& \
static const short da850_evm_tl_user_led_pins[] = {
, o/ H, B2 s3 \* `/ C( F% g# Y /* These pins are definition at <mach/mux.h> file */
^5 Z1 }9 L# H; {" |1 G" Z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 F9 ~( F3 J$ [2 y. b! d, Z% [ -13 I! g _. t7 d$ C: M& M' s0 C1 @+ U; n
};
+ i2 D* O0 [8 w% H$ {
% |) v9 z2 @ l) @+ i3 p6 |% W: ~static struct gpio_led da850_evm_tl_leds[] = {
, P" Y, m$ G# E8 P {
- p% Q3 B/ P! ` O, L .active_low = 0,
0 `& q! p3 ?( k9 ~ .gpio = DA850_USER_LED0,
: [3 J" r) Z1 U# P$ y+ A .name = "user_led0",* q, G/ }, o# }" L1 I7 t1 N
.default_trigger = "default-on",2 A! q3 K( `: g+ F
},( F- y/ _% Q+ L) A
{
! X/ X' d9 e _/ o) m+ T0 _; Q .active_low = 0,
' o$ N1 V% B* z6 z0 e6 f; B .gpio = DA850_USER_LED1,
% s- h/ t8 X, Z. S- g! W .name = "user_led1",
5 L" }, Y+ ~8 V8 f8 h+ v9 A9 V .default_trigger = "default-on",, w6 q4 b3 y! S- E* U6 v5 r
},
; U( }; k% Z! u0 w4 G: |- c {
* p/ |! A5 e0 s. o% r* b .active_low = 0,: @6 ?( n4 j* D5 q
.gpio = DA850_USER_LED2,- F2 {" T; N4 U! A" L; ^
.name = "user_led2",
0 I4 o# N! f7 Z .default_trigger = "default-on",* [6 Q; s/ V; G, P7 o
},
# w3 q, T# l8 n$ ^ {# D" R3 e# F: y- C0 S+ B
.active_low = 0,0 Y( \2 }6 s6 N# s/ o3 {1 ^
.gpio = DA850_USER_LED3,; p* O% c$ N' ~5 k/ s: a2 e
.name = "user_led3",
5 ~1 W, i$ J- \% C" c* R .default_trigger = "default-on",! W1 W9 O6 p6 f8 B" ^! v" t
},
3 L- k3 d! D1 E. O};; M3 |. i# ?* b3 F |; m
7 n+ t1 S* R3 F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 b4 F, o5 P5 ?& C1 d
.leds = da850_evm_tl_leds,' F, t- c" j6 j5 Z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 G! ~. G- j8 _: \% X I
};
4 s8 u( M* k% w7 k
! R$ h! H; C# S1 u$ M3 qstatic void led_dev_release(struct device *dev)
& }9 [; t8 ?9 H# {' V{ i, R& M- ^& i% r- E6 k
};2 s8 y; d: @# }# |2 D% N
0 X8 k7 M3 E$ A& }3 A. h( M3 ^
static struct platform_device da850_evm_tl_leds_device = {1 i8 W# W( K; k2 g' U$ Q X
.name = "leds-gpio",* d: r f! k# Z) C6 }+ j/ ]
.id = 1,
6 [$ ~' C% A" s3 \& [, u; r7 Z .dev = {7 E7 r0 a$ Z z! A
.platform_data = &da850_evm_tl_leds_pdata,+ j0 u7 ~+ i" N- Z3 M2 b8 D
.release = led_dev_release,
1 p! |* g; Q9 E( l2 v s% u; J }
) f# T! u! X, V3 o};
# h8 J+ t0 y4 W1 G; _& n7 | j1 [7 x0 L- x) B- c
static int __init led_platform_init(void)% c# x( [+ w+ l4 k" j
{
7 Y$ c; `0 j1 I( K; c int ret;
" `/ I6 q b _- d2 W& V#if 0$ @! b3 f% j, {3 I
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% }1 @! m" Q' O. A if (ret)& c5 k6 o: l$ ~ ?* J& d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! J7 v: O- l5 f$ x
"%d\n", ret);
1 O2 b! \9 v! M5 g f- e#endif' a) s# k) a: A3 D9 Z
ret = platform_device_register(&da850_evm_tl_leds_device);
3 O: d- @$ c2 V" b5 D+ W7 ?! z if (ret)
E$ }) M( `# D) k pr_warning("Could not register som GPIO expander LEDS");
+ V* Q. |2 |2 F* _0 R# l. F else' w" R2 R1 J' j/ z9 k, I" u
printk(KERN_INFO "LED register sucessful!\n");5 P% u+ A6 r5 m; X2 l0 Z0 ?
* N7 F. l4 x8 N$ B- `: P
return ret;9 o2 F h* L* K+ z% J0 W
}
( m) N( h4 P( k* p. s# t, O: |9 g# [5 L
# L0 Z E8 x, a6 C) X: L" y) gstatic void __exit led_platform_exit(void)
" ~5 D5 q& w- H/ h M{: {" f- Z- q& D
platform_device_unregister(&da850_evm_tl_leds_device);
% l' n. M2 r! ]' h5 i% c
9 I7 D: K4 h+ }3 \0 _2 g$ h5 R printk(KERN_INFO "LED unregister!\n");( ?2 v: v. a9 P' F F
}2 T+ Y. i" V9 V$ b3 T1 A, e5 k$ M) ^
& h3 Y- T+ f U9 S! N9 a( l+ \module_init(led_platform_init);& `% h5 C( c; q& B
module_exit(led_platform_exit);
( ]0 b5 }' Q4 h+ u
+ Z* B6 x1 @: ?4 EMODULE_DESCRIPTION("Led platform driver");
+ o- q, w: p, G% G$ l' tMODULE_AUTHOR("Tronlong");/ y% K' y; y* v+ Y4 E
MODULE_LICENSE("GPL");
3 E/ @' n; I: ^/ \+ O. R) |8 e+ q4 G7 q6 [% b" ^# s
|
|