|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" r* d$ a( [" H; `; X1 w#include <linux/init.h>+ s: b) |1 t0 H9 P3 B7 }
#include <linux/module.h>
4 L! O! _$ |5 Q$ q5 H9 g#include <linux/kernel.h>
5 p) e2 E6 m8 D0 G#include <linux/types.h>
, S& F" q' P; D#include <linux/gpio.h>
& n* C9 Z! ]4 v3 b: M. K3 l#include <linux/leds.h>2 n, ^. D, w; x+ L
#include <linux/platform_device.h>2 T2 ^, C/ K; B7 D1 D# R0 P
& D* K* \+ a( }5 @! B$ B#include <asm/mach-types.h>2 K/ v3 p2 [% \7 x
#include <asm/mach/arch.h>" N2 u& h( ^, W( E; V! A
#include <mach/da8xx.h>4 i! ^0 t, X2 H3 A6 a" a4 a/ y: F
#include <mach/mux.h>9 v% l% q* l8 k
/ C5 z2 R$ I/ k: D0 I. y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ A9 A' x9 a" c: X( v. @" E
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 M0 p0 |7 r+ o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 P# w; W* T9 U& g- H0 }1 d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 M) @, B) A2 ]) w! q' [0 J `" K1 i6 O5 L, x6 [7 N
/* assign the tl som board LED-GPIOs*/( L0 {1 z1 r; D$ \
static const short da850_evm_tl_user_led_pins[] = {: o! C6 H! u4 |9 p5 F5 i' A) q
/* These pins are definition at <mach/mux.h> file */3 l; E+ a& U4 v0 O! R4 m0 ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," W* Q- `% v; g1 a1 I
-1
7 O2 S/ {# r- a};7 h/ D8 J9 }5 N3 ~3 k
. m6 T9 R4 k( ]0 ^- t
static struct gpio_led da850_evm_tl_leds[] = {, t+ v9 v; t1 i+ a9 N% z0 a& y% ?
{
) t, Y4 }% r/ I v3 W$ }1 B .active_low = 0,
! l' J$ O) _, h, i0 n* C .gpio = DA850_USER_LED0,) K5 h9 O0 `9 w1 l
.name = "user_led0",
1 h9 }. s4 n) x% ^& b8 m$ F9 f .default_trigger = "default-on",
w+ L' ^2 v* l1 J3 Y, q5 T, X },
- [0 Y6 `4 O* d, R: B a' k- h {
n5 p4 U2 N1 x+ x6 _% u0 W) { .active_low = 0,# }; C2 B6 B( ~ a# d7 `
.gpio = DA850_USER_LED1,% `; s; f- b. [2 X
.name = "user_led1",
; f0 J- L- R4 }, T: O6 g0 p .default_trigger = "default-on",
4 _# U# ~" R2 @% n4 u1 ~( S }," s) X6 s+ T* F& T, j7 ^9 p: C
{
+ G& f# V/ H/ Q6 @9 A .active_low = 0," a0 Q6 ]5 A/ H6 m6 A# n5 K$ p- Y
.gpio = DA850_USER_LED2,
9 e9 C% S! `2 |6 G4 c- n8 I3 C .name = "user_led2",
0 H% F" n4 N5 n2 u .default_trigger = "default-on",
+ j* R$ ~( j8 I* d+ U1 k },
2 z, b' c+ q" |4 F* k) i {
4 a& v; k. c8 D# @9 u5 b# t% P .active_low = 0,
4 v* k5 [3 ~. Y" k5 x .gpio = DA850_USER_LED3,
+ t5 [; \( v3 ] .name = "user_led3",
; P, W* D1 J: D/ G: Y .default_trigger = "default-on",6 N: U* u2 }. E
},
& V2 N& [5 y$ N9 v};% B8 [) @$ f! }5 ~( c
" B1 t6 M' ~1 K; \1 l6 w, V% Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ i9 c" C- U& q
.leds = da850_evm_tl_leds,% N6 b% ~1 O- P" R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ M0 J! @- X8 }1 f
};
# \9 L; a; D& j/ H, h7 V& l: S" W8 Y* E3 d
static void led_dev_release(struct device *dev)
; k9 U+ W5 |( I" d( R2 O{( E7 c# m6 N# A- x
};
" h# ~, y5 x0 z+ V7 a
1 F6 C, C8 R: l3 R' k5 r; B, p7 Rstatic struct platform_device da850_evm_tl_leds_device = {6 p& R$ Q9 k2 v. I2 b& s' D+ ]
.name = "leds-gpio",7 S! {5 g3 K9 m* ]
.id = 1,* |/ J6 m/ M2 ^
.dev = { q$ ^- A- U+ O
.platform_data = &da850_evm_tl_leds_pdata,3 S, H3 h# T6 Z/ J% N
.release = led_dev_release, ?$ @7 A. {) z
}
1 g$ M: ^% ?# ~: ?};; z0 p% a6 }$ d0 }+ l" s6 u
2 h( z# {1 g; E, Astatic int __init led_platform_init(void)
8 o$ J8 R5 o; `; F2 k! [{
+ t9 R- [4 @. Z1 m3 ` int ret;
7 `( `& t8 C8 A* u( Z8 R8 T: @#if 0
' }" ]5 l9 r) I0 j- } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 M- ~* B4 m; C1 z6 y
if (ret)
8 }, o2 [& k6 j+ T# K pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- i8 r& F9 N. K+ R) a
"%d\n", ret);
+ V) G. Z+ h, T. i, v#endif* @6 c' \2 {1 v: r) a5 H
ret = platform_device_register(&da850_evm_tl_leds_device);
+ J# _3 T X A% i, P$ J if (ret)- O. P7 v: Y, p8 a* F
pr_warning("Could not register som GPIO expander LEDS");( E T, E( B6 q$ e
else
# I3 w" x- x; F; V) p printk(KERN_INFO "LED register sucessful!\n");+ G2 ^. W% t9 q# a9 e3 t
5 I" x% M+ m' m return ret;
2 E+ d3 F2 ^0 l# _8 \5 S}
, Z: H+ P4 W% U8 C8 ^4 B$ h; x
0 C) p0 T# ^' u+ h& ]8 X4 t4 Dstatic void __exit led_platform_exit(void)
) Q: [9 U R5 `{9 c/ y4 u5 h& K9 t6 \
platform_device_unregister(&da850_evm_tl_leds_device);8 S' z/ I* _+ g. K( V
: Y8 w8 b% [, r3 i6 a: b4 e
printk(KERN_INFO "LED unregister!\n");
# Z& V" z8 E% ^* Z$ r0 |} f0 d8 [9 N" K2 z5 _& ]: T
" T3 a o( V6 ^/ ^) }module_init(led_platform_init);
2 _9 T/ W; G9 P0 {; l: }module_exit(led_platform_exit);
1 B; M3 m3 H* V8 e; ], G2 X
& ^9 {4 ]5 _% H6 e" xMODULE_DESCRIPTION("Led platform driver");2 Z2 h' R `+ m+ S" p
MODULE_AUTHOR("Tronlong");
6 [: q+ a& t+ y( s& R5 d( @, g% dMODULE_LICENSE("GPL");
W: ?: U9 g, g8 F d8 I+ O0 C$ Z$ H: T
|
|