|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. D- R. o: `2 g# s4 V3 H#include <linux/init.h>/ t) x3 b" S( h) W! f; D
#include <linux/module.h>
- G5 M7 j ~. I+ j7 u0 K#include <linux/kernel.h>
4 i/ x: a. e$ Y* D0 X1 T( y#include <linux/types.h>
/ G6 ^7 E5 X2 A% b#include <linux/gpio.h>
; K) W8 ?. L* ]9 j5 T4 p8 L#include <linux/leds.h>0 Y: ?1 M! W$ ^; E0 w
#include <linux/platform_device.h>$ ?$ A1 h7 p7 z0 z* r! I9 R8 q
& L+ i9 t% {, g7 ?4 d2 a
#include <asm/mach-types.h>7 x: o; z. b- s
#include <asm/mach/arch.h>1 ]! |$ C8 j2 W+ Y* O
#include <mach/da8xx.h>
6 Y, k7 h( w' S" ?#include <mach/mux.h>
9 K' s- o% G9 ~; R, B9 D+ W) j8 h1 l/ j" H# @$ R1 F) J3 U7 z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% x! A* {6 P s5 h" w4 p+ @#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& b" p- p) z/ b; @" n
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! U/ W5 y. A+ {) ^2 _
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ h( z5 C- b2 m* ?0 g8 g6 p/ @
g( S" X6 a' P- f/* assign the tl som board LED-GPIOs*/& ~2 ?# U& x- ]; P
static const short da850_evm_tl_user_led_pins[] = {
5 @' w! f* u) X: f, H3 q+ S /* These pins are definition at <mach/mux.h> file */% G k! u2 H. g- k3 |. Y2 M( Q5 u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 U6 U0 m5 l m8 ]8 w* B- k
-1( x. p3 d# g; q4 x, R' f
}; f, H! A8 U: ^$ P6 c+ m! Q
- z" X, D$ ?0 }* v7 Rstatic struct gpio_led da850_evm_tl_leds[] = {- A$ i& E0 i4 q' V7 E
{
. I3 _% s8 |, T/ |5 D( I .active_low = 0,
; j: b) E3 u( i% J .gpio = DA850_USER_LED0,
' W+ ?0 W, |# ?0 p& C .name = "user_led0",
) g1 z7 [3 ~; F5 Y6 H2 J$ i6 d .default_trigger = "default-on",
, l3 D' J1 B! T& i* S, g },
# n1 r8 F3 t' R* `6 d0 {+ T' S0 Z {
% G$ C, D! x" @- Q: `# s5 { .active_low = 0,
, K4 F1 W3 J+ s* q .gpio = DA850_USER_LED1,
- T5 X: q }: o& k6 l- a5 j .name = "user_led1",0 d/ e% W$ S, [, J8 R
.default_trigger = "default-on",7 i2 P6 ]7 i" J
},
4 g; I( J' e- i& o; E" o {" V# E) p/ F% f7 h2 K+ x
.active_low = 0,% w+ N6 L( f/ [
.gpio = DA850_USER_LED2,. h8 }! F+ P, }
.name = "user_led2",' R" h% Z& G: z6 U
.default_trigger = "default-on",
+ V+ D/ {* ^. N/ C; w' W },6 {% Z, l$ E( W" M; t5 c# l
{: r+ n' A- N+ k+ [) r7 _, o% k
.active_low = 0,
8 {2 d8 J, F- R; E .gpio = DA850_USER_LED3,
4 h$ ^& B1 i! K6 ?. h# m7 C; P- |+ ` .name = "user_led3",
* e. |6 F/ L8 y7 S" C5 i) n2 c1 c .default_trigger = "default-on",
% k# v% N) ~: B1 l2 P* m },6 }& Y) g- p2 s" L3 B
};
P" B% Z7 l) `! m( F$ K
: b1 ?; ]) _( a. j7 O' L! l/ p8 dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ H9 g/ H+ I3 r9 E0 B7 B9 p .leds = da850_evm_tl_leds,
/ n, p. U2 B5 L2 f5 \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( Q' d" ]( Q P z9 E4 @# V};
" e) ?0 c8 A9 G/ Z6 w5 D$ k5 w0 ~' Y. C/ z/ [
static void led_dev_release(struct device *dev)
- B. D6 e2 S0 v1 _: l- `( f# A{
) J. h" ?2 O" r& }1 f};
8 E: W, o( b4 H5 i2 b, I' g- Q; ^; _) t* B0 ^% m& f
static struct platform_device da850_evm_tl_leds_device = {8 ^, C5 G- [4 r" F
.name = "leds-gpio",
+ J1 e! t( P1 ~ .id = 1,3 G# |+ J4 O) ~ T0 w3 B" d# M
.dev = {
/ X+ g) v) e; ? .platform_data = &da850_evm_tl_leds_pdata,. `9 A2 W( [! c/ T8 ?3 V4 d, x. z
.release = led_dev_release,
1 g+ y. R3 ?5 k4 \$ U V O }
( _/ M3 j& n I/ w6 m0 s0 r* B};
# @+ G0 x+ s7 j" B( |0 o3 n; t( y5 D' w" r( M: X
static int __init led_platform_init(void)
* ~9 e$ g( `; [1 f2 t{
/ i/ U0 b6 A% [ int ret;
( Z3 y* b, r3 O#if 0
* k- b$ k3 W/ H% o* x/ J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 l0 D% ~1 [+ T1 e( C3 o; t if (ret) y5 [- w' u) B: Q+ B* P
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% g/ Y6 J0 m5 O; r o+ z- T "%d\n", ret);
3 L/ ?: u; [. j# X$ S#endif% ]7 k4 B: B6 X7 v: j0 H5 U
ret = platform_device_register(&da850_evm_tl_leds_device);
$ G: S7 j8 ^$ F6 G) z) n% t if (ret)9 T8 _) G) ?% T3 \. P
pr_warning("Could not register som GPIO expander LEDS");
4 s7 k5 ]5 `+ G# B. ~* o- G" ` else
3 q7 c8 D" j" P2 i2 p! A" K7 }, S) q printk(KERN_INFO "LED register sucessful!\n");
* q. G( v; P% x: a; r0 p
$ f% F7 r; u7 h5 U" h3 C& }* {0 } return ret;# V3 [ {( B; d2 R. p# X0 y ~; }
}! D2 }7 D/ {" g- N- ^( M
, Z4 ?$ ~( \( j) {* P: Q
static void __exit led_platform_exit(void)
2 C. A6 U- C2 J$ ~% a{; n5 K4 y/ G9 M4 N8 S/ L
platform_device_unregister(&da850_evm_tl_leds_device);# J4 j2 k! N$ R0 o. W; ]
4 f6 d) F9 U2 r- ?9 a! \$ l
printk(KERN_INFO "LED unregister!\n");2 q% q: ]: ]+ j0 Y7 n* X
}
. ?( G: ]0 _6 d, l
# t: o8 x- @1 w' q/ zmodule_init(led_platform_init);
& [ x) p2 T& Fmodule_exit(led_platform_exit);
% e+ J9 X, X8 K$ s9 ]
. r! C( T! v& V9 s5 s$ Z5 S. QMODULE_DESCRIPTION("Led platform driver");
$ m4 A. X& e7 VMODULE_AUTHOR("Tronlong");. A; f: s; L9 N* R. S
MODULE_LICENSE("GPL");2 |4 n/ B) v3 {" E N" l% s
- J" a0 W: y: d1 N: u
|
|