|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ F' N4 ~+ S! q8 ^, V3 g0 D#include <linux/init.h>
; m$ y& C5 f7 m V- i$ q#include <linux/module.h>$ c8 ?+ c3 E) a' L
#include <linux/kernel.h>
7 f: p) \! N" F0 f% }#include <linux/types.h>
1 O3 [ I/ ] O' |' R3 L- a' n#include <linux/gpio.h>
: u. R1 }; g# f' ~( u0 P+ o#include <linux/leds.h>' w. F$ V) p! h$ p; z5 R6 @
#include <linux/platform_device.h>
# O5 @: j( F8 l W0 p: y$ U# O3 S1 h5 I& J" n i8 D f6 @$ m
#include <asm/mach-types.h>
( A' D; X; ~& g: R. n#include <asm/mach/arch.h>
8 W; u6 B$ r2 Q W' r#include <mach/da8xx.h>) x7 Q1 a# I b. H
#include <mach/mux.h>
) }- c, j9 j$ }/ {0 A3 Z, g3 V8 e" ?, e6 t7 e
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, T Z" @) y; {- t9 @- b5 [! L#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( u$ z& V$ T+ ]6 y3 [, R/ Z) n#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" C. p& |; @6 s#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ u- m) [8 H+ v0 ]5 L) s2 b7 R# [
7 H% H" C& A$ W3 }" d6 k/ u
/* assign the tl som board LED-GPIOs*/$ `' m1 c9 i7 _6 r% }) N
static const short da850_evm_tl_user_led_pins[] = {$ q$ a2 X$ w, v3 j, A4 L4 U
/* These pins are definition at <mach/mux.h> file */) \1 ]1 R; U: n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 _6 z* g+ K( m+ G! } -1
6 d# u p+ z# d$ _5 G};
8 P$ G1 v) D! P" X& }% Y3 `# Z' Y7 `- }$ k! z& J: K. u" g
static struct gpio_led da850_evm_tl_leds[] = {
, V$ H! O/ D( j& ^! ^" T {
) _# o8 b0 N9 y9 F .active_low = 0,
5 S$ H U7 g1 \. ?; N" b .gpio = DA850_USER_LED0,3 Y# l: `/ g2 I% V8 ^' T6 ]0 T' _
.name = "user_led0", y' c1 Y4 k. \5 \0 s
.default_trigger = "default-on",
% I: v2 x9 G7 e2 e& ]4 E: `2 z },
5 Y" {9 m& u( L7 t2 S3 m: q8 f {
6 m4 X7 R2 s/ T# H2 K& }1 V .active_low = 0,
q2 W4 G0 z( v( }" \; O G) N+ U .gpio = DA850_USER_LED1,
7 z, s6 \) ?( k( c; [" ~! h .name = "user_led1"," R, R6 m5 `8 o
.default_trigger = "default-on",
D( a0 \0 ~1 e! y8 B/ @& H+ t },; }4 y" ^' A& g' R
{' Y: `0 ~) c7 a" M
.active_low = 0,, P3 X7 L+ \2 M' Q" F
.gpio = DA850_USER_LED2,/ |% n$ |' `7 u/ w5 j, b& v
.name = "user_led2",) X3 [" Q4 @+ G( L+ a: p( c
.default_trigger = "default-on",) |$ j! c- O/ ^" g+ |
},. Z* a! v2 @" w' F
{/ f" x* b S* t- D( {1 C" x
.active_low = 0,& O+ ~3 k2 I6 S3 R$ N2 x U
.gpio = DA850_USER_LED3,
0 W8 f5 R; U4 ]/ A9 h! {* w( L .name = "user_led3",
1 @- W7 o" o: {& `' x .default_trigger = "default-on",' I" a* s) ~' [2 E' s X4 I
},* U& Q* m8 A- A- y0 a" J
};
! T, q- w% A8 v& U. s8 U% Y
- G/ B8 a9 F9 @, |4 Q8 H qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 z X3 K4 ]' \! C6 }1 X
.leds = da850_evm_tl_leds,* G5 x- [8 `/ v- v) S$ {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% y0 S/ u7 N8 p% `: r& W4 T3 c# u};
& b7 g0 k$ v3 k% Q; i+ Z7 C1 M' p0 d M l) X: |% U% {4 J8 H: [
static void led_dev_release(struct device *dev)
, S6 E4 l* h5 S{
) t$ o2 h7 j) d W0 ~+ W};
# Y) `7 W$ `, s( a. V. U$ M- ~/ u7 y; `# P, h: U, A6 C
static struct platform_device da850_evm_tl_leds_device = {8 p$ A% N" ]" a" ^4 \
.name = "leds-gpio",1 D' s+ ?" h* d: \3 t+ v
.id = 1,
! X9 p! r' \7 k U/ P- q .dev = {
2 D B/ W8 ?% h) l( h: d .platform_data = &da850_evm_tl_leds_pdata,
6 D4 ^9 ?$ m, G L* d2 P1 ^' c- G .release = led_dev_release,
' ~: ^, q. Z. ]9 w) ]4 |3 n }7 J/ A8 }/ f5 E
};
. E3 Y0 W/ V# u% s5 o
" Z* b0 W) R0 L, D: Vstatic int __init led_platform_init(void)+ c, W0 l& x( H( p" |% L/ O
{
2 `- g: f/ A, k int ret;' a5 f. s; ^) h, ~* L0 _
#if 0
1 V( M. W: ` } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 z5 C) T9 }! V' z3 e0 g, g if (ret)
- C& { b0 V/ O( ~+ [7 z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- o* }' J$ Q/ w7 ]: z "%d\n", ret);
+ O% N8 \- g& h4 e6 Q#endif
# g: @- Q: o: |& A5 S" o. y ret = platform_device_register(&da850_evm_tl_leds_device);
- d" `' C0 C) E if (ret)2 C6 e( H. ]9 t; e. A
pr_warning("Could not register som GPIO expander LEDS");/ \" w4 F7 G& q& }! t1 }
else! M) S, C( Z V* S
printk(KERN_INFO "LED register sucessful!\n");4 Z! D9 \( v! W1 q
( V( H* L2 C/ l+ E. n$ q return ret;
c1 U K6 e- P9 L! x}3 a x7 ^7 L% }- ]8 C3 }: l( n4 o9 C
9 S2 M4 a; e& P4 c# F- U
static void __exit led_platform_exit(void)
+ p& i9 w* L9 _, I0 @{5 }$ |8 i4 Q; g! t+ a5 i
platform_device_unregister(&da850_evm_tl_leds_device);
) r6 I( P8 {+ v( }- ]: d0 a+ u/ R7 U# N/ K# \9 ^; {/ J8 l2 b: V
printk(KERN_INFO "LED unregister!\n");2 C+ f4 w0 l" p1 _0 q
}1 z- y. f' }, q: f7 l2 Z
) \5 e4 f- E! N$ ^8 C M. t2 \* Vmodule_init(led_platform_init);* k; v& u( x6 \; ?
module_exit(led_platform_exit); ~- s; I6 \2 m& z
( S: A7 ^ W; A1 _+ \/ ~: a6 i
MODULE_DESCRIPTION("Led platform driver");( W; h1 | H& k( [! g
MODULE_AUTHOR("Tronlong");; L, l% l# n9 w+ g
MODULE_LICENSE("GPL");
( A$ s6 B1 g5 A, a1 Y6 u9 q3 ^, v" y
|
|