|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# S2 V: u+ p3 d$ ~3 \7 a9 R0 k. Y3 n
#include <linux/init.h>* f" _4 M8 f2 o9 s+ d: G
#include <linux/module.h>
8 L0 e+ F7 p% G/ [/ P#include <linux/kernel.h>
9 N+ t4 T# m9 z3 ^% F% L#include <linux/types.h>
& a( g5 n& z/ k: i+ l#include <linux/gpio.h>
- a+ {0 F8 R! _( f& [( @1 Z+ O#include <linux/leds.h>
L! l8 _' V" w" y4 z3 P#include <linux/platform_device.h>/ z8 @1 `# E: |
! k7 Q4 ^( u% j4 K) N$ t& T
#include <asm/mach-types.h>
& y @% g8 x& | M9 \$ Z' v#include <asm/mach/arch.h>
" q& L) z9 h8 \7 t2 n6 w#include <mach/da8xx.h>9 m( _; g0 ^" I# V
#include <mach/mux.h>
4 f, m+ H( j3 ]; n) j
4 Q4 M N p& p4 |& T- Z2 z: U* {#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& z; r' K* q7 ?- ?: O. U5 a7 W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& c8 a! c/ Z/ y. c#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 t8 C7 G( k! m3 P6 N
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& i9 y b$ \* Q& b' J
8 x$ @$ {# d4 l$ {3 z/* assign the tl som board LED-GPIOs*/# l0 j; \' ]: H; @" i; k9 @6 b
static const short da850_evm_tl_user_led_pins[] = {
, ?- ~0 }+ Q h/ N+ V% i /* These pins are definition at <mach/mux.h> file */
5 q" D! f. \" d, k# ~6 v* o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( P, b+ O6 Y) H' b- O- ]: b. D9 S
-1' [3 l4 R, I. ~7 z
};
7 C) E" c0 F b. ~/ {9 t! B! t) B E! b$ w! p; x8 z% W! T: B
static struct gpio_led da850_evm_tl_leds[] = {
! @. R# t' P( d2 r4 r {
6 O# t% M$ C5 {3 q3 W7 C6 g1 i" x .active_low = 0,! x5 H- Q$ s& {' n0 O& Q
.gpio = DA850_USER_LED0,
0 W5 w% N4 T" x' q8 y1 K .name = "user_led0",
9 O! u7 o+ I- W4 Z .default_trigger = "default-on",
3 W* b7 Z$ f& E },
6 B; o5 f% W& I8 A {
+ y& }: }) w$ G/ n .active_low = 0,' B4 i/ v. d0 i8 g4 [; N# ~6 O
.gpio = DA850_USER_LED1,# L7 P# f# j& ]# S! K
.name = "user_led1", S- v: o: ?) w+ u$ g* X; |
.default_trigger = "default-on",
1 E2 s" U6 ~- @ },
, V# ~0 I8 n9 |1 |7 u. A4 p {
9 z- A. j. C2 ]1 F; `- U# s* D" y .active_low = 0,
6 E6 y" C: R# N' e3 j .gpio = DA850_USER_LED2," V4 B5 B7 O5 a6 u7 B3 z" h
.name = "user_led2",
- y0 T$ ~; [! ^ |% T7 z# V: A .default_trigger = "default-on",
; y/ o/ x2 |0 h/ o3 k1 s* z },
7 d7 _6 ?; ?6 C/ N; c& \( U+ G {0 D) e7 j, |0 f8 b: M
.active_low = 0,
0 W! ~: A4 s$ U: d+ {* h4 R .gpio = DA850_USER_LED3,2 _5 r; g5 r/ p2 y( B9 o8 R
.name = "user_led3",
7 s, E1 l8 f @" n/ z* f .default_trigger = "default-on",/ y/ p( U# o% V6 V4 X$ z
},
7 X: @' u8 f7 L/ @- P L};
$ P* ]4 Q% {+ n: h/ {9 ?/ @/ X
/ ^! z! d6 O' Z% O0 bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" g" l; U& ?# s7 ]% Y
.leds = da850_evm_tl_leds,
7 E9 ]1 }8 q' x4 d8 P .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. r8 _; ~& i% {6 F( K
};' I; V8 L- o3 }' N5 b
7 ]6 W; h4 s- T
static void led_dev_release(struct device *dev)
: t9 G/ d( X1 n% p{4 w" _' A9 m$ ]6 d$ W# {
};
! A9 w$ E& r2 E: z5 c/ J
. H" Q* D. @+ @( K K2 Zstatic struct platform_device da850_evm_tl_leds_device = {
" u& G) s F9 i$ b2 q' ~ .name = "leds-gpio",; w& B1 X8 V- ?; |
.id = 1,: b% Q7 [7 _* H
.dev = {
6 T0 j4 ~6 T- f- c* k, S .platform_data = &da850_evm_tl_leds_pdata,
& Q: o _8 E% Q .release = led_dev_release,) Z9 T8 B! S; }8 m
}; v2 l! ^% } y( E2 t
};
" J9 f& ~5 x* [& V- h+ T' X4 w. b7 y7 K6 b5 q3 w
static int __init led_platform_init(void)# N4 p8 ?2 z# w3 l
{
6 c4 s: d/ l. e, t# Z& q2 ~ int ret;1 q: E9 W1 |+ ?5 P% _
#if 02 @' F0 G; t) _! Z0 B6 `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' [. B/ n9 m% c) s6 K1 |
if (ret)
$ V& ~7 v, v# W5 `3 `6 _4 e* x pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: R/ f4 Z1 m1 A "%d\n", ret);
, b9 r& D# t0 v* F#endif
) A2 r o: N, e2 c7 S ret = platform_device_register(&da850_evm_tl_leds_device);
9 i# k# R4 ~0 q8 E( R% [( \- m if (ret)& a0 c# o) k+ q' v
pr_warning("Could not register som GPIO expander LEDS");! Y3 m, e) t' T/ j3 b6 I
else0 Y/ V& W L9 i# X7 g4 Q
printk(KERN_INFO "LED register sucessful!\n");, v! s) t! ^5 k# S2 i( \
" c' k, U: A/ c3 L8 H; d% D return ret;2 x4 w: k& r9 k# {) v
}
Y! B3 Q0 }4 ]" P6 c! t
$ [/ f6 L" s9 j- E: B/ _static void __exit led_platform_exit(void)# v! i4 y, U) t3 Y; D* V( i: c' y2 x
{
2 a/ m7 O9 j6 v" o platform_device_unregister(&da850_evm_tl_leds_device);5 t! B$ R% t( I& n. t* Y5 B9 X
6 k! t6 |& n0 X/ ]
printk(KERN_INFO "LED unregister!\n");2 n- F0 D; \* t8 a( ?. [, d1 v
}5 a9 `" r% S" Z3 F N5 L8 E
% C" E8 @6 I" _8 J0 omodule_init(led_platform_init);4 \3 Q2 J* E9 R0 y
module_exit(led_platform_exit);
* @: Y) u5 P: `& r' f1 e: E9 @6 q% ?) C* P8 b& C# Q5 C
MODULE_DESCRIPTION("Led platform driver");- L: i4 b; e% \8 H9 z2 E% }
MODULE_AUTHOR("Tronlong");' i! o& P6 ?6 k! h
MODULE_LICENSE("GPL");6 Y( g k; |" h4 F$ \
$ D2 D$ _6 o) ] |
|