|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" H. \2 [3 l- U( b8 Y" \5 D
#include <linux/init.h>) { b9 L0 ~# m" s4 C" X2 P
#include <linux/module.h>! E( K6 B7 [8 U- {9 M! z: T3 @
#include <linux/kernel.h>
0 a' ]9 h: t, @7 H$ u#include <linux/types.h>
. w* \5 k$ }8 r) U#include <linux/gpio.h>4 n0 P! E4 f3 s$ U2 T! d6 n
#include <linux/leds.h>; @) Y* y% |6 \3 K) D: q2 ?/ C0 K' b: J
#include <linux/platform_device.h> B: \# j* _4 R+ |. ?
5 ?+ h K3 J: m5 h#include <asm/mach-types.h> F$ r7 O& N2 C" w
#include <asm/mach/arch.h>
- f+ a& A" G& \3 f, m! H" C0 \#include <mach/da8xx.h>5 ^+ |' C& y4 E, Q
#include <mach/mux.h># F6 ?* y, H7 z
0 M4 |% `$ \1 i$ w9 R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 ~& K1 C# M g* G$ Q7 V8 m#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 _! t p6 j! [- e8 P& y& G) O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ v* v* p0 ?) k% x$ W- Q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" @6 S9 I% F- B4 \6 y0 Q4 A
% R& p/ a7 V; _) S5 C+ s/* assign the tl som board LED-GPIOs*/
" o3 P, `/ S! w; d$ d! cstatic const short da850_evm_tl_user_led_pins[] = {' c" W! u4 x+ H9 h& X5 {: i
/* These pins are definition at <mach/mux.h> file */% z0 l, R P, D" z& J* z) v' w7 D4 y& n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 j" Q, }* v, @) q0 W& Y2 o6 \5 M
-1# J Z& P; N; f2 `
};& d4 z6 G1 a: u- q; K. z
, g; c7 W5 a/ w3 |3 w
static struct gpio_led da850_evm_tl_leds[] = {
! e9 A j7 x8 k9 T/ C& r/ W* x: A {
1 H: z5 Z+ ?0 A$ L .active_low = 0, W$ j o) k# {/ w, ?
.gpio = DA850_USER_LED0,
; H* m9 U$ j$ |. N5 F8 O0 K; ?8 ~ .name = "user_led0",
. D) m8 ^8 z4 o9 o2 ~( J0 N .default_trigger = "default-on",
% P Y$ o* ?3 j g6 @! ]+ i9 k },* w0 U6 T8 {, B! _( |9 a% E) g
{
; v9 K+ N! |, O/ i B2 @0 W .active_low = 0,9 A* D4 J; c) N. A$ U: @8 D
.gpio = DA850_USER_LED1,) n. j' h4 _: x
.name = "user_led1",; M. ]% L" T; _" k, m d
.default_trigger = "default-on",
U* ]: i" y' {0 I' L; ~ },
! j; V- W- s" a {& j D6 u+ i3 I/ |: n
.active_low = 0,
9 `, N- I5 D) i+ D, x* M2 M$ l8 i .gpio = DA850_USER_LED2,. d7 ]/ j7 C0 Q. f3 V9 V1 @5 z
.name = "user_led2",7 J- j$ U! X" _2 i0 |; k, v) b$ O2 a
.default_trigger = "default-on",
* F1 \9 Y- z" C( p9 a% T },! O/ I& }9 [) Y8 d! a3 a
{# b4 L H4 v6 k6 f
.active_low = 0,
: i; F; s1 Y# q2 y* Y9 Y .gpio = DA850_USER_LED3,- ]+ y1 O# y4 x2 W) F& ?
.name = "user_led3",4 z( w& e5 L7 x- p+ t4 H9 S
.default_trigger = "default-on",2 |! L3 B& ~* ?" Q# h* C
},
) Z) |( w/ N6 l* h! B: G};& C, Z# n5 e: v, t0 f, N {
! e7 ~6 ^! g. Q0 @
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' v- a: C; M& C' }5 e .leds = da850_evm_tl_leds,0 h3 ^/ O( V, l& W* t, a
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. u4 f U! W) U. t0 ~
};7 z0 c, S1 W* ]
% T) _! C( t: t3 l, astatic void led_dev_release(struct device *dev)
% K$ R& o, p5 d; q{
7 B8 F6 m0 D: \$ k/ H" S8 Y6 P) A$ e};
# x) q: f( _4 [$ q: i. p' J6 l3 E+ ] z0 { O2 g0 _6 X2 N$ N2 e
static struct platform_device da850_evm_tl_leds_device = {
! K$ w Y1 {5 y" [/ ~0 _ .name = "leds-gpio",5 U4 q1 V, p: }/ y9 f4 G; R
.id = 1,
7 E2 F+ R8 \3 w. L( b7 G .dev = {
/ v9 n4 F0 L; M4 n0 g .platform_data = &da850_evm_tl_leds_pdata,
! L. G: M7 M' l5 f/ @: x .release = led_dev_release,
5 m( r' ^! ?( I, `& ~; R }! M! R9 Y+ h1 n+ q# \3 q' b% I; X) G
};
1 U) _6 V& O& ^+ W+ S4 }* |* R# ]% `" Q+ K& [3 g
static int __init led_platform_init(void): t" `( D( o. @$ y
{) C4 [% _ O0 F7 ?9 J
int ret;/ p4 G' J& }7 a2 I7 B8 b/ u, y# c
#if 0
7 ~+ v: \( n* a$ y+ u8 `/ z- N8 R) N ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, \- g& j( e1 C \. b2 A0 D6 E if (ret)1 p! k5 D- Z3 X' @) @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ M4 D3 M! p* n! O "%d\n", ret);
; Q0 {3 N9 e) `1 R#endif/ K9 U# `( s/ G* W
ret = platform_device_register(&da850_evm_tl_leds_device);6 I' u4 f; t G) R/ t
if (ret)5 O! u* {0 m0 u5 u% n# r2 t" z7 b
pr_warning("Could not register som GPIO expander LEDS");. |% ]) x! C/ u5 Y- O3 ? L) F% l5 Y
else
* d; h. N. ~8 Z printk(KERN_INFO "LED register sucessful!\n");" B5 p2 @: l; S. O$ c
8 ~* s: Q" e! l9 I# n
return ret;. U5 l, W: @) E4 H& K
}5 u- R5 ^& W, t1 S& q( P$ N
3 t) ^1 d% v. ?! @6 r
static void __exit led_platform_exit(void)
! M7 V7 _4 D1 n/ b" u& U6 Q{
" Z7 l8 K' n" y& v* X' @* r platform_device_unregister(&da850_evm_tl_leds_device);
4 @% |8 u& O0 p* J" U( J4 q
& \; L5 }! w4 J5 @ printk(KERN_INFO "LED unregister!\n");
2 a' m) r9 _; }; V}
" q) h- m' \6 }3 E+ K* g3 x! d# o, D0 {3 a
module_init(led_platform_init); F. ]) B; N, E( y/ |# ?- {
module_exit(led_platform_exit);' b' }6 B# L" g- o! S
; M; i1 A% y7 `* M! V, L' t. AMODULE_DESCRIPTION("Led platform driver");" B0 f4 Q" m% n# {
MODULE_AUTHOR("Tronlong");8 y. y. s# h% {5 k6 v
MODULE_LICENSE("GPL");
; ^5 ?. t ` o9 y% O% G$ N) r1 h- [8 X/ Z. j$ b
|
|