|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' d, a) i' m4 m# d' l7 ?/ L#include <linux/init.h>
& x$ n/ o! v4 S) P+ L, n#include <linux/module.h>0 f8 ~0 L" }- F2 a1 J% b
#include <linux/kernel.h>) g( E& U( O2 x0 u4 x
#include <linux/types.h>5 p2 X( j4 O# x! t* H
#include <linux/gpio.h>
9 ]" @) t, K6 V+ B7 p# [#include <linux/leds.h>
- _' `9 y1 i( \2 A) |# v1 E#include <linux/platform_device.h>
9 R1 K2 a4 E$ L4 |+ n5 g9 x' I- p7 H/ a x5 U. |
#include <asm/mach-types.h>
6 {3 c& c$ M* ^, r f0 Z% P0 W9 U#include <asm/mach/arch.h>* r; M! b( J. S* C+ x
#include <mach/da8xx.h>7 ]! c6 z5 y# L7 H
#include <mach/mux.h>
/ J; u% t9 h. t. R. v+ Y8 _0 @- f; G" O( K+ t
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ ~- M: H$ t$ ~5 `8 i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 |2 h: Q% X! j+ `
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! E. N; z9 ]! K1 w! v
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# q( o* y3 N5 d, @& r8 {5 C+ v: t8 C: C% P% b
/* assign the tl som board LED-GPIOs*/, f% ]3 J3 J2 e: B" Q- H
static const short da850_evm_tl_user_led_pins[] = {' s. P) z+ o, P. p5 ?( ~
/* These pins are definition at <mach/mux.h> file */2 M. R# P7 b9 J- @5 l) u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# {6 ]+ g6 ? A: ~( V% C
-1
2 u; A+ ^: W) |( R: p};
5 m! ^, _9 w" V- W2 J( A: L1 I: }$ _+ r& p2 Q4 I. E# t
static struct gpio_led da850_evm_tl_leds[] = {9 ?& f+ D% H2 X4 v7 Q2 M8 i
{
' n: m( k6 L9 O, O0 D .active_low = 0,
* \9 u/ j6 v( Z* m) w2 m* P) D/ L% N R .gpio = DA850_USER_LED0,
3 J. P! L% i% C/ q# g% S .name = "user_led0",
7 J5 u* Y9 ^8 B9 ]/ H& W6 K. ?8 |- y .default_trigger = "default-on",
& R& {& G: @3 b( t6 Z7 Z& s+ p* t }, |6 J) J8 q- w" X7 o8 W# Z( i( L
{8 ]8 w! ^4 v4 y; c
.active_low = 0,( [0 |! u+ ?! T- v' C
.gpio = DA850_USER_LED1,8 l4 ]; t& Y/ ^/ W8 S
.name = "user_led1",
# v3 ?. F5 e+ r' a$ t. I; j n# L! \ .default_trigger = "default-on", Z: h# f& m: O3 `3 K
},
$ K* ~# B6 j' A0 x1 u {8 q) O( K: u5 E3 Q
.active_low = 0,
' o( J3 G' Q( h4 {' q! q# Y .gpio = DA850_USER_LED2,+ C, R/ T( j! M# \
.name = "user_led2",# w4 T' D, G& f/ d
.default_trigger = "default-on"," ^( }+ q4 I) y* j
},9 a2 E. L8 w. A+ s
{
" _4 W9 t1 B3 l2 c! l .active_low = 0,
* b5 d' k, `9 U1 [% d- r4 ~ t; d .gpio = DA850_USER_LED3, M; A0 Q5 I- E
.name = "user_led3",
- W' L0 E7 F" ~, B .default_trigger = "default-on",5 k! U1 J5 f9 k7 S# q
},
& E4 i h5 L6 `& c* q1 z7 k};% E% [( I# n/ a, ^4 Y. O" l
$ ~9 g7 ^3 S: q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, G- N0 ^9 U/ [" @6 N
.leds = da850_evm_tl_leds,& ?* V* c! f) l0 V5 T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 r6 @" g. A+ ^" H8 k
};7 j- n' {- j7 U/ S% P" _
9 B% [4 a4 K6 |* a
static void led_dev_release(struct device *dev)* g# l( |+ e! o' l" R
{4 B6 S1 b1 @2 e G- E5 D9 D* `) J
};
4 n0 F, G6 _8 |5 v$ |# F% g
) e$ b0 H! m2 X4 g7 I3 b5 dstatic struct platform_device da850_evm_tl_leds_device = {4 V% ]. [% p- Y$ ]! s
.name = "leds-gpio",$ y% G- ^6 A, O F3 D
.id = 1,! V/ J k3 \( q. h- Z3 G, V
.dev = {
4 @/ ? v3 m9 C9 I .platform_data = &da850_evm_tl_leds_pdata,) L( }" w* V& V9 ~$ ` H) v
.release = led_dev_release,2 Z9 l9 R0 [% ^3 T( e
}0 h; M3 r5 U4 K |2 m8 K
};" u7 q) q9 W& O6 {
6 c# i% O: M; h! r/ gstatic int __init led_platform_init(void)5 S1 o! a" `/ p9 Z4 e2 M+ z
{6 l6 ~9 Y5 t% g# `4 f0 P1 X4 i
int ret;
1 b! s* ^ q! f# t#if 0, w6 y0 y+ a# @, G: |5 ]+ A1 E U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# V, b# h# B! b) ?8 q* d' M0 X8 L
if (ret)
: w8 N5 _4 Y1 I/ c pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 {3 ]( {2 q" g, i' D; S "%d\n", ret);& E( K+ q1 h4 \
#endif
7 k j) R3 Q; u1 g* U- B, C5 E# Y0 l ret = platform_device_register(&da850_evm_tl_leds_device);
8 K7 G' ~0 _( B: g5 d) y4 d7 n if (ret); r. U/ m: v$ y# Y' I" _# t
pr_warning("Could not register som GPIO expander LEDS");, o: p* J' ~& s6 a% _" p9 E. m; p
else
- A: D* x3 L, f& A2 s6 P) W: n/ Y printk(KERN_INFO "LED register sucessful!\n");2 H) H/ w% ]4 ]: y2 h2 Z
: n' \3 ]7 n4 a- ~7 [, T return ret;( {$ m: k" K( O, V
}* z! }8 P% s& k
. H! e" [9 e) d0 qstatic void __exit led_platform_exit(void); H9 _. Z; V# [; }1 q! }7 ^
{* D* a! |* f' ], E4 N ~4 ~. ~6 A
platform_device_unregister(&da850_evm_tl_leds_device);. F% P- }( y1 h; Y* J d: q
4 S9 ]1 O+ d; U; c' e. s printk(KERN_INFO "LED unregister!\n");$ L3 w9 p/ U+ J; s* Z& P4 Q
}
3 ^' q' X2 J: T
3 i* c: r# S( M1 s7 fmodule_init(led_platform_init);0 ?0 |1 F8 s$ {: n" E
module_exit(led_platform_exit);: w9 X7 S, \6 i" _" L0 a
- _3 b/ O6 r" i( f$ v$ T
MODULE_DESCRIPTION("Led platform driver");: C3 `+ N7 ~& z0 R e
MODULE_AUTHOR("Tronlong");
# O! c: O3 G) Z' L( LMODULE_LICENSE("GPL");
% E% d# A, D0 s: U$ t$ G2 H8 g/ A5 W
|
|