|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 W [4 Q. [; K#include <linux/init.h>
9 l+ B+ l6 R2 R) ~: ]#include <linux/module.h>
3 m3 \. ~/ j7 e \4 C' y) d#include <linux/kernel.h>2 Z: i- S8 O3 j# [0 q# Q
#include <linux/types.h>
9 l9 C$ b; N% \3 f1 Z+ m#include <linux/gpio.h>
) R0 I3 P% L& H#include <linux/leds.h>7 [& i) H0 M% Q2 }
#include <linux/platform_device.h>
% M* X" W$ [. F
, r9 \# K3 k. b+ B) J: p6 G#include <asm/mach-types.h>& ~6 h7 Q* D2 S
#include <asm/mach/arch.h>
4 G/ J$ Q9 i+ C# u l+ u* y0 ]' P#include <mach/da8xx.h>
^ B1 `6 q1 m) ~! t#include <mach/mux.h>
) x* `, C: p: x) m1 v/ U
. k A# Z! t; c8 @( b0 M#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 x! @2 W; \' }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 T2 X, Z5 [, z( p" r#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 l$ o0 c7 h% K; b1 a- g2 ^+ Z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: B! X! O: U+ P" _& z, ]! A0 _% y' ^/ M0 r( O5 B' r2 p* Q+ M8 d
/* assign the tl som board LED-GPIOs*/. @$ K8 N- R' ^
static const short da850_evm_tl_user_led_pins[] = {
7 t7 u1 l+ _/ z7 s5 s: m4 M /* These pins are definition at <mach/mux.h> file */
% y; x( A/ f0 M. S- D/ } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( S& |; ]- h% `; Q& N -18 c; \5 d( l+ H
};. G# h5 n: B G& x: c) T+ R+ d3 ^
: _/ b7 R+ l3 d
static struct gpio_led da850_evm_tl_leds[] = {
& j H$ I' s8 n! O; ] {" q* o J' _# K. B
.active_low = 0,8 j& g- W9 Q& [% @8 P6 E- n$ [
.gpio = DA850_USER_LED0,, E# _2 ~0 E0 D% ]( J. Y( ~) R0 l
.name = "user_led0",
6 s( e- z% P/ W" \- p .default_trigger = "default-on",4 H4 C2 ^' s, c. H( u8 |$ v# r
},
- r4 z5 l) [) V2 _; ~/ F {
* o* o$ F+ m7 z, y8 o, ~, q/ b .active_low = 0,
/ E3 o$ U# q8 `$ D: A0 N# B .gpio = DA850_USER_LED1,, I: O+ R& K) v; S& [% C
.name = "user_led1",. d( e0 |# Y' G B- d( q
.default_trigger = "default-on",
8 u6 r% x0 \* ~' A },
8 w! v3 ~; p" y; u {" {; [; n( m$ j/ N7 w
.active_low = 0,
* n3 N/ K* q0 N- X .gpio = DA850_USER_LED2,
& _4 L2 B' w# Z+ S .name = "user_led2",
3 C% v( ]! U# j" e .default_trigger = "default-on",% [ f0 ~6 E9 z9 n. o; u9 Q
},
% }+ y" t! ~. ]2 Q4 b; i {% Y9 M R" Y/ e
.active_low = 0,
3 e c' x* D3 _+ t+ p) R( r6 i .gpio = DA850_USER_LED3,
' q% }& k; j1 [& W3 d" F" I( f' H M .name = "user_led3",
* g$ C) J0 g0 t& `1 F C .default_trigger = "default-on",
) m. I9 r% |0 n g0 S9 A, z },
- \8 s. z- ]$ _" Y# T7 Z' l};! Q0 @6 @' Q! P/ Z
) \. d* S0 [- I* U/ ^, Y* r- [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 F6 n; [* X* V$ u, p4 l5 F# x' ? .leds = da850_evm_tl_leds,: m- I' `% L8 t, w8 s8 k) r
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),, a9 R$ X; }! g6 F9 k/ ^4 c
};
9 Q7 `7 R! Y; S _0 R9 m: F" {3 u/ l
static void led_dev_release(struct device *dev)
0 H5 Y* u, H6 z6 H, K{
6 _4 @8 T6 B0 B" I6 c- Q2 }};4 ]8 H* ~9 n& f2 }5 J
/ |5 F5 b% ]# Gstatic struct platform_device da850_evm_tl_leds_device = {1 ~) s3 `$ X C
.name = "leds-gpio",0 I! v! c- w4 Z
.id = 1,* ~6 h) O! e& e' O
.dev = {5 `, j8 x" i; b% C! I0 Z( U; l
.platform_data = &da850_evm_tl_leds_pdata,
! [9 D/ E/ J+ o- i( P5 s( Z3 v .release = led_dev_release,
% m5 t6 O% D, y E* R3 X8 n+ ?5 C; ? }
8 o1 I, i f/ l5 J+ E4 ^};
; _6 X% A/ I# @# c# i0 i
4 R, K! b3 ~: e, d* R0 Kstatic int __init led_platform_init(void)
' ^! ?8 w* ^: L [7 f7 |; G{( D2 e0 k3 m6 A' E* s: s" x6 E
int ret;: q* _ [4 Y3 Q! \ F
#if 02 Q% u* C- I0 T' W! D" S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 Y+ d1 y9 q& i+ |
if (ret)# k. I# b: c) o, E( V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 R5 f( f# X/ ~8 a7 O. t$ A
"%d\n", ret);# Q- D0 H" L2 H) i1 ^
#endif
. i" d% A9 k( {8 Q/ C( f4 y ret = platform_device_register(&da850_evm_tl_leds_device);
; }' }. g7 g* f5 B. Y! W1 P, p, w if (ret)
/ F; Y: X4 r0 D1 K. p7 l pr_warning("Could not register som GPIO expander LEDS");1 f n3 c- n; }& P; O+ }
else
9 F8 m& E1 `0 n# }3 l( `) V printk(KERN_INFO "LED register sucessful!\n");
3 G9 ?7 p* O( A3 f- K( \ @" z" W, m+ e
return ret;9 B: F) E$ J' n9 Q i9 i
}
% s5 e3 d- q( P6 i! I; z, r( f- s" v# f m, ~. j, Q, n1 F
static void __exit led_platform_exit(void)
& v* I! \: U% q$ v; R; a{1 A( l; m [1 f! @- u( P3 x9 t
platform_device_unregister(&da850_evm_tl_leds_device);
. |) p: X2 H5 a5 N4 s
# h$ j8 ?+ K0 `5 U& L5 Z: J printk(KERN_INFO "LED unregister!\n");
; `7 c, z. @. \' Z9 Z# o$ [}/ w! `. i; C3 P: l/ D; h- t
9 ]" h6 h c9 m5 S5 s& Z
module_init(led_platform_init);
6 [8 J0 `& a* x8 {- b5 M" Imodule_exit(led_platform_exit);
9 I5 X: F* s3 w! A; a+ i/ n5 c- V; U# [/ w7 v
MODULE_DESCRIPTION("Led platform driver");# Q( E2 t3 V( o1 ~7 j+ ~3 l
MODULE_AUTHOR("Tronlong");
& \+ W8 U$ s+ |. cMODULE_LICENSE("GPL");
5 Z$ A1 h5 C- n( x) E1 ]8 _, V$ ]1 T
|
|