|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% C* E; R& R0 I( a
#include <linux/init.h>0 v6 s. e/ I4 @: I0 v7 x7 g y
#include <linux/module.h>
! P. f" A" w' z* S2 m+ ]0 e" M5 k#include <linux/kernel.h>; e' F1 h# X) @' q& y4 r
#include <linux/types.h>
' R( N8 w- Y: K9 u#include <linux/gpio.h>- c( {, {& W: g2 h! W; q) E
#include <linux/leds.h>
9 Q' J9 j6 D" r: q3 m#include <linux/platform_device.h>
. S3 r2 j3 `' c) m2 T$ P% x6 [: x! a/ K% A; @6 }& [! U
#include <asm/mach-types.h>/ q5 d! u( H; f0 J! ?
#include <asm/mach/arch.h>
* E' j% X7 b- |9 |, {; z#include <mach/da8xx.h>4 v; ?0 p. H& v9 r& K
#include <mach/mux.h>
4 K6 Q1 t, Y: r2 W1 D$ N, o; k) Y/ i! L# Y; o" o/ F1 b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 X+ J5 e' a% _* p3 z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" V J6 c! w* q* k. [+ s6 t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 T5 S m# f# }& a" A5 c#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ m2 t& q7 |+ l# E, ]( @8 T
8 v& `6 g" y h* h. a# b! Q2 z" J" }/* assign the tl som board LED-GPIOs*/
& f; |9 _+ U# E6 X& ~- rstatic const short da850_evm_tl_user_led_pins[] = {
# j- p) Y B& q/ K /* These pins are definition at <mach/mux.h> file */& s" E1 ?* u3 x; q6 G' [+ \: b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, h/ a. F( S4 C: V8 v
-1* y- ^6 R2 [+ `" o. `- W# J
};' E; z% S W w W6 s
. ]9 U2 G0 m. V
static struct gpio_led da850_evm_tl_leds[] = {0 r; ^* R+ W+ `9 [) h- v. i
{: X. g6 m5 g8 w
.active_low = 0,
) B" R M/ X+ p k* T .gpio = DA850_USER_LED0,
2 n- P) F" [$ ]% ?1 | .name = "user_led0",; p# Q y# ~; A, E3 f7 f+ D7 U7 g
.default_trigger = "default-on",) v& w% t+ ^! B8 V1 e
},3 _, Y9 f0 O: ]4 h1 H" z
{
- U5 b7 ^" Y: W* e1 z .active_low = 0,4 T+ O v# b/ M) M
.gpio = DA850_USER_LED1,
- F. a* A' b' M8 P" ^ .name = "user_led1",
6 Y3 C( Q" {+ h9 F .default_trigger = "default-on",8 e% Q ~7 O2 V, J& O
},
" ^9 V: I' k. E. E {+ Q0 a q: o' V) a( v8 ~: e
.active_low = 0,! K$ B7 K# z1 ~' X% O: Z+ r
.gpio = DA850_USER_LED2,/ B8 r7 [ ^5 j& n
.name = "user_led2",# f! R+ W$ }% Z+ c
.default_trigger = "default-on",
" l5 D r9 D- {, ~5 X/ W },6 a6 h, d% N- ]9 }& g5 F/ i
{
. E p: i* y0 C9 b3 I. f0 M. x .active_low = 0,
4 r& W+ b' m% P3 Z5 X .gpio = DA850_USER_LED3,
2 [7 M0 J% v; T C" U .name = "user_led3",
! Y: [# y) x* o$ Z6 P$ a# G1 ]4 o .default_trigger = "default-on",
3 p8 W8 [" Q2 v4 _- y# b6 M },! b$ Q( g. b: J: P4 K! r
};' r8 \) }3 s- t3 J4 l
4 a R* O4 M7 Q; sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) t. h' \- m. p) n2 H; k# x .leds = da850_evm_tl_leds,7 o4 H# o: z/ d
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 g1 Z* G6 f I& q/ `( m- N
};
5 C1 S( n1 k7 r& M- m; P8 L2 |: O2 ~: N" S. i' m
static void led_dev_release(struct device *dev)# w! }" F" {5 C
{
* z+ P0 q5 K' g' @};
7 L2 @ i5 j+ P" p, w+ N7 R! M5 H* w- A4 S
static struct platform_device da850_evm_tl_leds_device = {
1 }1 V' |' T& |% j. }: p .name = "leds-gpio",9 X/ F, a' b7 G* r4 ?0 k
.id = 1,
: W9 L, u# B& f6 X .dev = {
& {! W: K) a$ ]2 ?# C! {* A8 v .platform_data = &da850_evm_tl_leds_pdata,
1 s4 u( q! l" j& u6 z$ t0 g .release = led_dev_release,
# k$ w/ R6 w, A }
8 z) ?/ E$ g1 K- S};
h3 O+ m9 A- [9 V# H
+ E# z9 H& F' C7 Q0 X7 Qstatic int __init led_platform_init(void)4 e4 Y) n! E7 @4 D" L+ o3 \" _
{
6 g2 K) }! c* i1 a; b* l6 N% X int ret;
. o8 t/ \. E- ~6 L& C+ T4 t1 v#if 0; m4 v8 U' L* @: ]5 f
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 c6 _; V/ j# u+ M2 l if (ret)
8 ?" D9 b5 P. F x pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 {% p2 w* A* m
"%d\n", ret);
3 }/ S. p+ u& l* _$ E, p! P* R#endif
) ^" f) D' h" G n" |& T ret = platform_device_register(&da850_evm_tl_leds_device);% X, r* N( B! E% }9 k5 w
if (ret)- n' s4 [; S8 W
pr_warning("Could not register som GPIO expander LEDS");
4 a. c' b9 i- ]: g/ S4 B5 M else
4 u4 S7 j8 s3 l printk(KERN_INFO "LED register sucessful!\n");
# J/ X2 H5 V) X: e7 A
! @7 m# w: v* y6 ^ return ret;
( z- K! O( X$ {! r4 J}! n/ t4 u& s; m! O: P
* I% J! \, D; {8 m: G# [1 A. E M3 fstatic void __exit led_platform_exit(void)
0 i* e" y7 E; ~, C. X8 a{. Y) t. d! C3 @9 P) \+ E4 g3 U
platform_device_unregister(&da850_evm_tl_leds_device);6 L6 \0 a1 y/ |
' n4 ?! Y: J7 z9 L& j/ v% f" V' m printk(KERN_INFO "LED unregister!\n");
% ]' l$ @* h: W' ^ G: ?3 L}
& s# q% \- t4 j* c: A0 ~
, v: S; W0 s. k( \2 omodule_init(led_platform_init);
* [3 v1 c$ L- R0 r" M umodule_exit(led_platform_exit);5 D; i& h. X6 P& j( X+ E
5 ^# \" u9 d" C3 q
MODULE_DESCRIPTION("Led platform driver");0 [4 S6 V+ l$ k% T8 w. L$ _
MODULE_AUTHOR("Tronlong");8 _5 D h9 Q k5 q8 X' j1 s
MODULE_LICENSE("GPL");
+ ]4 K! ]# ]2 S9 e9 _% X9 A, n: ^/ n7 f8 P! `/ L2 W
|
|