|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 w/ A" P; l) ]5 M0 N) K
#include <linux/init.h>. @; C8 `5 ?. |! J
#include <linux/module.h>
# h# {- J- y: ?4 D* J3 [#include <linux/kernel.h>2 S7 P- I% ?( ~9 a9 J# o* K
#include <linux/types.h>& }' S5 `: i- W% o7 X& h5 T% D
#include <linux/gpio.h>
" X. Y( x) K) {3 p- X I, z$ P#include <linux/leds.h># c$ a" N2 M6 E
#include <linux/platform_device.h>
' R- z E- C b! L* Y4 j
$ `% }6 U9 `7 m#include <asm/mach-types.h>+ B; r0 y$ y$ O3 b# [2 U
#include <asm/mach/arch.h>
6 t2 ` }4 s' _5 V+ V. ~$ ^: C#include <mach/da8xx.h>" m- q* _$ b; g4 l
#include <mach/mux.h>
8 r9 K9 e l0 @, e
: V9 q* `" _; `7 _# U#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ A+ N$ X% {9 t }. `#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ n( [2 U1 J/ ?7 G/ O$ o6 J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): P. [; P' p$ B* |; r+ ]7 ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 k' g% J+ Q9 J# A7 Y
. G9 B6 V8 e s- I: @$ D b0 I/* assign the tl som board LED-GPIOs*/
% g3 T0 W1 R' ~( y. Dstatic const short da850_evm_tl_user_led_pins[] = {
* k. W; U* X2 n3 T+ G d /* These pins are definition at <mach/mux.h> file */
2 ~8 _+ \, \3 J6 V" ] DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% h: U' f) a& C -1
9 @ O$ Z& n; U3 K; I};: Y }2 f ?6 q6 G/ f! q: R
, g/ f& I8 g% _' L8 S
static struct gpio_led da850_evm_tl_leds[] = {
C' D2 N7 U/ j. V4 g5 Y( f/ \ {- w3 ^" n- P; M0 S3 Q
.active_low = 0,
5 H! U( ~2 A: x |9 U. Q7 a .gpio = DA850_USER_LED0,6 A( P4 P. R$ X
.name = "user_led0",
: [/ e. T( b [) \6 z0 [/ _( T .default_trigger = "default-on",+ B% w( V5 W: B" k6 ?: x5 s
},
6 i/ {6 _% b- \7 ~$ Q$ u4 W6 r {
4 G! ?/ R3 Z" s C p" }2 ~ .active_low = 0,. ?5 {4 x" r: {* N
.gpio = DA850_USER_LED1, L1 s2 C5 @; P+ ~ Y$ H7 e5 {
.name = "user_led1",
9 D7 U) P; K2 z .default_trigger = "default-on",1 z/ n( {3 T/ p# Q
},
; G8 J5 [; M) _1 ?, E, P {. O1 M W6 V3 f1 c/ W: G$ L; d
.active_low = 0,( M# ?, l$ r9 z
.gpio = DA850_USER_LED2,# W( _: N. D; j) x
.name = "user_led2",% d) }/ h) w' d" I) b
.default_trigger = "default-on",1 w. \1 G( e, A! h, x& v
},
" y9 w$ r" ?8 H$ k {! O' C; U5 Y) X6 p
.active_low = 0,
8 x% o, M1 `6 c# Z/ O! ] .gpio = DA850_USER_LED3,
6 \9 X1 h ~" S! K1 x3 j .name = "user_led3",) `. ^ S$ z( r' G1 ^
.default_trigger = "default-on",
* T# B+ `( J c# Y. V },( z& d |4 z( n# p# Y
};
" D3 V* P' d# Q* W' D7 W" l* ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* F& _. a' O. P7 O* k
.leds = da850_evm_tl_leds,
Z. }: E# o/ u, H' X9 q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- x# A0 L& i2 K- f
};3 |' e8 v. B2 g) b# s2 K# @( B
8 W W& v- X* V$ A$ X$ _3 S: V
static void led_dev_release(struct device *dev) j% [: }: Z- }0 D9 N8 ?
{$ U# q, Z! D$ [- a; I
};
1 ?+ x! t+ h" o3 e1 v8 E- C" R. f5 ^; L3 ?0 \
static struct platform_device da850_evm_tl_leds_device = {8 {; T/ {3 Y l9 z
.name = "leds-gpio",4 n6 q8 a* {0 x& w
.id = 1,& J! o, c: P- `
.dev = {5 u6 p1 O' ?5 w- q. X
.platform_data = &da850_evm_tl_leds_pdata,
1 \- p8 D" y0 X! |) T9 i! H/ @9 { .release = led_dev_release,
( t C( K( r" M9 J9 d }" [" C) S# K; k! X0 h7 B+ F1 T
};' _* {/ \3 D0 E" C( z m% p/ ?' W
9 T5 }9 j5 }0 Q' w# d% L4 a5 u
static int __init led_platform_init(void)
4 E1 |+ T' ^5 t8 n0 V2 A6 U O{( z4 \1 o6 q7 ?3 c8 ~2 @
int ret;
9 ?4 u( i) f2 W s#if 0+ |( V6 F/ L9 a: E/ z6 w) G6 a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ B' ?! c( D- Z if (ret)% Z6 n! K8 b8 L$ ^
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 C6 ]+ f ]7 c; o
"%d\n", ret);
3 H( H; k, m, o. \9 G# J4 Z V#endif; k9 f1 _& |. ^0 i
ret = platform_device_register(&da850_evm_tl_leds_device);1 u4 `) h9 |" l& o, [& W4 o
if (ret)8 L3 ?6 @9 A* L4 e- _
pr_warning("Could not register som GPIO expander LEDS");: j9 E6 H/ T& q. b
else- {( }. \# [& V( z! c% D
printk(KERN_INFO "LED register sucessful!\n");8 K4 F2 K6 w' N
$ M7 s7 f: a4 v! r! d return ret;; _0 U, G0 \6 [3 `
}
" M! `; l( A( y3 l. @0 ^% M- n
7 e3 x) \ [( B; s$ r5 w, \static void __exit led_platform_exit(void)
. q' ~$ C) ~; E$ p{/ g8 }5 H/ F' j: B( V
platform_device_unregister(&da850_evm_tl_leds_device);" j( u! R+ ]1 [1 ~
, u0 q% J- c6 @* {# D printk(KERN_INFO "LED unregister!\n");) q! x2 j- j: [7 w6 l
}
9 `& C/ i7 w% E' Z/ q* }/ H+ C9 T2 M/ |" ?4 n0 M2 _
module_init(led_platform_init);
, {$ F& g) ~, H/ f2 q I( Q3 Nmodule_exit(led_platform_exit);& n( j# `4 Q& n v7 Y, x& @% V
5 u8 o% w- r" C4 dMODULE_DESCRIPTION("Led platform driver"); N4 R Y z% @( A" |( S* L3 |
MODULE_AUTHOR("Tronlong");
" D# @: ~+ q1 _+ T0 uMODULE_LICENSE("GPL");) @, b$ v3 k+ `+ d( f/ i1 A
+ b3 O) Z7 n1 y2 r( t
|
|