|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ M& b' z- V( s3 O1 ]0 w
#include <linux/init.h>9 D" ?4 {$ g7 ~5 z0 @
#include <linux/module.h>0 F7 I. i2 Q! b( j! x. f! w8 Q
#include <linux/kernel.h>
" W9 ]8 z) O8 u* ]- y#include <linux/types.h>/ l! M( P' o( Q8 c
#include <linux/gpio.h>- w. ~& y5 i$ d
#include <linux/leds.h>
1 Q+ ~7 p3 g7 M1 ~#include <linux/platform_device.h>
& K. i- j' Z" k6 T8 I, r$ ]% j+ A1 U: ^0 @/ [
#include <asm/mach-types.h>4 P* V6 f3 L4 s5 [: F% B) M
#include <asm/mach/arch.h>
0 ?7 F; R, Q7 l& ?0 R, n#include <mach/da8xx.h>5 A) U0 p9 ]4 u2 w
#include <mach/mux.h>2 `4 N: S# G$ B' r4 t
% y' n% R& P, s! T+ ^, }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( H G7 r) C5 ?; [
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 n% b8 n! c6 i#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). p" m! d3 i) V' ?: ~* `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) {. p2 s. f1 B) k
) y: B @5 E) b6 \! z( [
/* assign the tl som board LED-GPIOs*/
5 v4 d4 `; w/ o9 x: ?( J& Ustatic const short da850_evm_tl_user_led_pins[] = {1 P* b7 `. a# B" H [
/* These pins are definition at <mach/mux.h> file */
7 K+ t8 D8 ]% Y+ e& S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! ]& H h& h( i$ L
-1
9 g0 g- p7 i3 P};
8 [$ O/ j9 U; d
1 \3 X0 B5 f/ h. nstatic struct gpio_led da850_evm_tl_leds[] = {9 \7 W5 g4 a% M% w% u4 M! K1 e
{
5 d4 p6 o9 p, @: F+ o: } .active_low = 0,
5 ]7 b5 A4 N" f X: g .gpio = DA850_USER_LED0,
1 t( H+ |4 O3 u .name = "user_led0",
7 g3 W' u. r C3 p .default_trigger = "default-on",
7 `1 _% H) J! A) W7 X! R% y: M6 U' Z },* V( y. Q# O. c: |: V z: c4 t& e
{
8 N9 G6 y: G1 x .active_low = 0,3 i3 ^ t( }2 [5 ~
.gpio = DA850_USER_LED1,
" g6 g) H9 U. X# {4 J8 A& a% t .name = "user_led1",) } K9 ~3 M- a9 F( p9 E( i4 C) Q
.default_trigger = "default-on",
% G% ^' c7 p \* u },& L- d: Y/ h# x/ e. K% s7 N5 h
{8 t) l# t2 r5 N. M3 v$ f) ~8 S
.active_low = 0,
5 F) g5 {/ v0 D- P) P! G g% H .gpio = DA850_USER_LED2,$ W/ I1 k5 {0 F7 V9 m2 x
.name = "user_led2",
% ~& ]+ |6 d+ d4 T .default_trigger = "default-on",7 d% i2 Y% ` q$ ^" G8 M
},
: h9 K8 e3 N, `. D {5 G% W# G |# |
.active_low = 0,
1 f1 a$ _6 T/ X. k .gpio = DA850_USER_LED3,
$ v4 C; r7 c) N$ h .name = "user_led3",
$ G( D$ r0 A/ o% E# a! t$ Z .default_trigger = "default-on",+ K# u/ ?9 S: i
},* z1 n, C2 X* V) h* ~8 ]% ?3 a9 G
};+ C* V: z+ ?$ o$ B/ b
% s2 f8 {; G! ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- N9 d- \; ~8 G# A' M .leds = da850_evm_tl_leds,
+ E# S4 m* p8 a .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& S. ?" T1 ^ r& M2 {2 ^7 O2 M
};
9 a2 t w9 {* ^# F2 `9 h9 K% a/ D! z
3 Y8 r2 ~: I, Tstatic void led_dev_release(struct device *dev)
; h2 _( x( V7 x{
& L2 q( G3 a* m3 v2 _. I};5 {# r& C. ~0 W1 k5 ?
$ V& e- u& |4 I0 i/ q# v. H% ]% g" B
static struct platform_device da850_evm_tl_leds_device = {
+ R" i! u5 M" s+ m1 }" p5 B .name = "leds-gpio",2 j6 |% M+ N+ i) ?: Z, `* Q$ n
.id = 1,
7 a, R, f& N$ K. I# J; O .dev = {
* M8 F% \/ I$ i& d0 u p; c& i .platform_data = &da850_evm_tl_leds_pdata,5 x" I8 z7 H* X Y
.release = led_dev_release,
! ]( r* k, N. ]/ Z& b4 ] }
2 `& {) g" f0 C! `( S x% `8 l: j}; r, _+ _' H. i6 |1 N
- w$ S1 M6 V. ^1 Ustatic int __init led_platform_init(void)
1 k. S! E) L" K! z3 u& D6 d5 L- }{
( F8 g/ t8 ]% V i" {# P! Y* F int ret;
5 b( F2 W5 t6 h* t, i% T#if 0
* j( ~+ U* C! n" |+ f/ m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% ]6 |, r! C, \, R6 e if (ret)- b& J5 s( I( R' O5 V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& F4 U" k0 G. c. C' ?
"%d\n", ret);
7 u0 s/ I+ N% e5 K#endif6 N- J: C0 I2 e$ M7 E
ret = platform_device_register(&da850_evm_tl_leds_device);3 J4 U, J$ w3 q
if (ret)
. x. \7 ]# t( M# @ pr_warning("Could not register som GPIO expander LEDS");
: S5 ?; d: _: \+ P$ B* u else( P0 q( _2 U/ Z/ d9 u& ^
printk(KERN_INFO "LED register sucessful!\n");
5 P) y2 z( L3 W5 u/ n0 |: _# H0 d4 d" j/ r
return ret;
( q7 {' J$ R. ~: j}! [+ ^: N' m' E; p% W2 y& w
@9 a$ ?. p! u% y! i
static void __exit led_platform_exit(void)
" [; M0 G. }- Q; E1 c{
: K5 ?0 k) u! w8 `* g platform_device_unregister(&da850_evm_tl_leds_device);+ T. {, ^8 X& X* D x7 m9 H; p. X4 N
+ E) |* j4 i7 L& r0 m( ` printk(KERN_INFO "LED unregister!\n");
7 R3 ?4 d* y1 [ C1 s" K}5 D2 K+ h1 u, u9 ?
- U$ o3 G/ ?" O6 ?
module_init(led_platform_init);
$ v. M3 d# X9 |module_exit(led_platform_exit);
5 H& t# |2 R; i" v' F$ r: J9 `& I. D
MODULE_DESCRIPTION("Led platform driver");7 y' r' W0 L q8 S; W& N0 g6 Q& B
MODULE_AUTHOR("Tronlong");" i& D# M9 t8 R
MODULE_LICENSE("GPL");, m- x* ^) [" R$ P
9 T# ~# x2 w% T/ i4 X! M( f |
|