|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* x, J3 ~/ L) e2 Q" w
#include <linux/init.h>! t1 ~2 v+ t' J( j8 v' H" y
#include <linux/module.h>
4 B) i! v _& M! ]#include <linux/kernel.h>) q' y0 N/ l6 T2 _) w) }, A
#include <linux/types.h>1 c/ B( A; `( x& ?
#include <linux/gpio.h>
: Y+ @; o# D$ z$ I5 V. e2 U- |#include <linux/leds.h>
6 y* D! c! S; H5 W& }2 d$ w: B#include <linux/platform_device.h>7 U. X. V6 m6 S! s$ Z
# z$ h4 l- T5 t#include <asm/mach-types.h>
6 c3 n$ M m2 q/ {) A4 v6 L1 D#include <asm/mach/arch.h>
- J; `5 k% ]/ G; R7 O2 \6 }' t#include <mach/da8xx.h>
9 s C: F0 T ?- F j1 O! P; v#include <mach/mux.h>
. |' @4 _9 X0 x9 j! J2 d
$ p9 l; ?' N0 A1 J#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 Y1 j5 P) k8 Y% D( s2 q* `5 E
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& I P m q F: l$ f#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). K6 y0 V% _* N! ^+ \( M* _* P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 z3 g7 x9 h% i4 g9 c- f
% o/ E; Q9 n$ [' D& p/ t$ t( E$ a
/* assign the tl som board LED-GPIOs*/
, P5 \8 W( y( `/ y- Gstatic const short da850_evm_tl_user_led_pins[] = {# A+ Q% {0 N- s, h6 X/ l/ B
/* These pins are definition at <mach/mux.h> file */ `8 G; ~+ j! A4 L/ P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 |- _: \4 G0 U3 W5 v4 l- W* r5 J -1
+ ~9 o# ]: z8 T W9 m};9 p" H1 O7 Q& ?5 w' K0 o5 Q" B
1 D* O, X! L' dstatic struct gpio_led da850_evm_tl_leds[] = {* @* W0 l. S6 q; i: O6 M% k" E2 j
{$ G7 `7 ?& K* L7 l+ n: L
.active_low = 0,/ k$ c. q1 z. t& o! r" f
.gpio = DA850_USER_LED0,6 u- x- I2 s3 @) j1 o
.name = "user_led0",
# P" {+ \0 r8 @/ p/ Y3 ?* N .default_trigger = "default-on",
! `# k( ^% B6 y },' a" W' u. g9 k8 R$ n
{
1 j9 W p- t. Y6 S- d5 r .active_low = 0,4 ^3 A; \ _% [ i; L6 G5 N' E
.gpio = DA850_USER_LED1,
$ |3 T4 c; D3 a .name = "user_led1",$ |8 E# K8 B! l9 F' g0 Y8 Y* s; X
.default_trigger = "default-on"," a" }% B" [3 [
},: S3 N4 Z( S& X( U' L4 N
{
8 x: C, L& L! j' Y. b1 ? .active_low = 0,2 Y$ l7 _. [( h/ V
.gpio = DA850_USER_LED2,! B0 D2 K) e9 z6 T
.name = "user_led2",
" {! ^$ K. L7 U' F' n .default_trigger = "default-on", r" x1 R# X/ j+ G9 g4 R' F
},# ]: h* y) P* }
{4 K& Y- S9 V* ~9 T5 Y& c$ I7 a
.active_low = 0,7 \6 J! z( \3 }6 |1 o. Q/ d
.gpio = DA850_USER_LED3,3 ]' F7 R' X `, L2 \. {8 D, r. U
.name = "user_led3",
2 g) [) Z3 s, |5 h @ .default_trigger = "default-on",$ D, F# a. L% m0 s" O1 v- F
},8 d" l% N- w* S" g' x2 |. F
};
; r9 U8 T4 w* \4 }4 m3 P( Y: |, Q5 |( D
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* C# R1 O! i6 }/ R7 w .leds = da850_evm_tl_leds,1 V+ J1 |- E" M
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 w/ i; |% C9 ^0 K% t" z* ]2 G};9 o2 L9 | L( N2 q
4 }; | I: P! Q- C7 ~8 ?
static void led_dev_release(struct device *dev)/ W# E; R. o, V$ \
{: ~6 S2 l8 r. e7 H. n. T
};9 u5 m/ m' Z4 t1 ]; e
3 ?0 x4 i2 p- Y1 Y7 }' Estatic struct platform_device da850_evm_tl_leds_device = {8 M% j* f5 v+ Z
.name = "leds-gpio",5 I5 g1 |4 I! [# F; p. g$ ]
.id = 1,
# Y6 q' `! d5 T! i .dev = {
g& e6 F0 w6 \4 f+ ` .platform_data = &da850_evm_tl_leds_pdata,) |( I, k' i" K* N
.release = led_dev_release,
' g, e$ {! I/ P# }" i }" X9 D) _/ q. J4 a9 X
};
3 t# f$ n& D( O' @; ^ ^ |; S% v1 c; z* Q0 l+ L
static int __init led_platform_init(void)
, c [, @5 l6 b{& M/ _. {8 h. a h6 t
int ret;. g; m& `, a2 M% e) B& l7 Z
#if 0+ q ~! E: h5 [; c! J" j8 ~
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# d% v- j: J2 I( K' H
if (ret)/ _0 i3 u) k- A7 j* o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' C. o v. c, U' @ "%d\n", ret);; Q! H: q+ E2 s8 l. N- p
#endif) }! ^& Y; a" S$ {1 L1 j" R
ret = platform_device_register(&da850_evm_tl_leds_device);% H6 I- L0 ?' {8 g% ?" S, Z4 K
if (ret)! g! X6 m' v0 Y! w _$ ^) P9 P
pr_warning("Could not register som GPIO expander LEDS");
2 ~. L! L; g% d9 B+ v$ o$ g3 ]& K else" n& r1 f0 M3 {9 D- ^
printk(KERN_INFO "LED register sucessful!\n");/ ?+ b/ R6 a S/ A( S* Z; z& W
3 _$ {2 |. Z! p return ret;
/ [, i: g# I4 w}6 \. v4 ^6 m" R$ H9 J
9 K( E. ~4 t) \7 a9 U1 x- Estatic void __exit led_platform_exit(void)
, a0 K$ H' V: M V( c{
, V! P8 ^- w5 F6 c; \1 [) j( f platform_device_unregister(&da850_evm_tl_leds_device);3 E) O( {; y, I9 ~8 L
7 V8 p2 Y, M+ Y1 f7 h0 f printk(KERN_INFO "LED unregister!\n");: F- k9 I: o5 d2 n
}
3 X4 a3 C7 t( B6 n( ]8 k z% z( w: Q! A' I4 u6 v8 P! p D
module_init(led_platform_init);
0 y" o( ^( u" X6 z" n) ]9 ~module_exit(led_platform_exit);
2 @; ]: x- ]% v3 Q p9 N( P- j1 I4 F! f: m
MODULE_DESCRIPTION("Led platform driver");- B8 m8 R" n4 [+ C
MODULE_AUTHOR("Tronlong");- Q3 h1 H3 }6 N8 k& g: v
MODULE_LICENSE("GPL");/ \% S' r' D$ Y% r' J' s# O; Q
1 O2 ?, I" f2 {+ ~$ r |
|