|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 A5 R" ], W9 W+ W" x" M
#include <linux/init.h>3 I' w7 k, Y) A6 P+ P9 K8 g
#include <linux/module.h>/ w! q5 [5 r7 _9 [8 J5 E
#include <linux/kernel.h>9 t+ t$ \0 l* o1 V( Z) l" _$ h
#include <linux/types.h>. I4 d2 N7 |! J! E3 H' p
#include <linux/gpio.h>
( b) p& b8 Y T#include <linux/leds.h>" b% Q$ I& l; ?
#include <linux/platform_device.h>0 _! t- ~. q/ G) G
# J4 j" Z$ P" A. A6 o#include <asm/mach-types.h>2 l6 Y2 o( r" J
#include <asm/mach/arch.h>
( a4 f7 s8 b0 u% N#include <mach/da8xx.h>- o( u. a# z! ~! \
#include <mach/mux.h>* c j( y7 K( s- Y; M2 |
1 r' D- h- C9 Z! d2 E' D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% o' A4 r& R4 J9 A, n1 T7 t) e#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" a; D! E0 ?' _6 T' ^# o4 B#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. ~$ B- J! g9 Q8 Y% S+ \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 f& d+ j- E1 d. y$ P6 G
. S/ V' a% R- B3 p% y/ ?
/* assign the tl som board LED-GPIOs*/
; \: g9 t0 C9 I$ @& n% dstatic const short da850_evm_tl_user_led_pins[] = {
?0 w. n0 \2 ~6 Q, k /* These pins are definition at <mach/mux.h> file */
( x. A5 v% c1 K7 X5 ~9 M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; e+ Y/ b. q1 t- ~2 a -1: @- ]7 C! W: P9 ^1 a- e, f
};/ L7 f8 x! z8 ]/ R# t+ n3 P
+ s4 M+ T' u! P5 k" Ustatic struct gpio_led da850_evm_tl_leds[] = {
* z( f, [9 ]5 @0 i9 | {9 w, X& z# ^+ e6 r
.active_low = 0,
$ T. g% _- w, Q .gpio = DA850_USER_LED0,* z; J% l8 }( n3 C3 B
.name = "user_led0",
) I$ @, L% f' b9 Z1 p( s .default_trigger = "default-on",
7 P3 }2 Y% d7 r5 m8 k- [ },
' o. L& `# j3 z; k6 M {
6 ]/ q& e( e8 y: x4 | .active_low = 0,
$ A1 K/ c) y1 W/ R% z8 ?, z .gpio = DA850_USER_LED1,. L8 a. E4 u+ P8 S
.name = "user_led1",/ A4 u2 j5 K; l0 O- i
.default_trigger = "default-on",
$ H; W' w6 H9 G. f1 } },
- x2 X: ]4 z3 J {) H2 \- @! G" M6 ~
.active_low = 0,
; k0 C/ D/ t& z6 k, | .gpio = DA850_USER_LED2,
# J, n( B$ U8 | .name = "user_led2",9 [; M$ ^2 l2 i" S
.default_trigger = "default-on",% L+ k# M( x* |# y! B
},
+ Z/ s2 o$ L* U2 _ {+ g' Q& Y; t$ \; M
.active_low = 0,4 V. J( I) T% p- M. V- {6 X; Q
.gpio = DA850_USER_LED3,
3 z9 U7 ^2 v$ a* I4 \4 Q X0 u .name = "user_led3",; F3 t, F& }2 o. }) B
.default_trigger = "default-on",7 y' q, ~% p9 i' @8 {
},
! n+ T* [6 c, q};
; P+ R, r$ O- r* I8 M' e! ], @7 P( `3 S y% j9 d0 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 O8 m2 a, v# S
.leds = da850_evm_tl_leds,6 ^% L4 ], X0 ?- f7 n/ ]' ^' f6 l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 ?/ F L. X5 C6 E1 [
};
* E+ Y9 c5 z! k/ p
' E |7 Z8 G- f6 l4 rstatic void led_dev_release(struct device *dev)
. y$ p0 L7 e: ^6 C: {' i# r{% S5 V8 A' e9 ?( O" q% q A% r
};
u" ?% B! {! I% p3 C) R, P% j( c( Y
9 b; ?" ~" w- V- O8 |' Dstatic struct platform_device da850_evm_tl_leds_device = {
j0 d, ^! L: ^ .name = "leds-gpio",
% j/ r4 z- p' x: E% L, m .id = 1,0 l* d5 K' E/ g0 T5 C2 f
.dev = {
3 x' n( {* t: a0 [ .platform_data = &da850_evm_tl_leds_pdata,* G+ `/ e" I( y1 E, H, \7 Q
.release = led_dev_release,
- G L2 e9 g% O3 e: e9 g* H9 B; h }
, @( F) X( j Q J! [};
3 q7 o# I7 X! c w: J8 Q. w- t! b
3 t( U2 I: y% Fstatic int __init led_platform_init(void)/ O2 Q) [* z: U2 B+ }) p
{* G r) {8 b7 x$ F3 g( q
int ret;
+ [ P- [- w1 W4 W9 q#if 0/ ~4 X D6 o& T
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 ] V' G- v9 [- c- x if (ret)1 u0 s" v0 N7 X% X% X5 o( `6 v7 ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 a/ n0 ^. f0 u( L
"%d\n", ret);0 x1 O( E1 Q6 V3 ]7 K& G
#endif0 c9 u7 p9 a6 ?# S7 W, a+ L0 ?) P
ret = platform_device_register(&da850_evm_tl_leds_device);
/ N4 {, ?9 E2 l if (ret)
$ p: l: a- F1 n& h2 L: y1 X) L2 q& s pr_warning("Could not register som GPIO expander LEDS");
5 }; l) U: ^ w" ~" C/ C3 ~9 G0 `' t8 A else) [( S. h- {0 H# E% y
printk(KERN_INFO "LED register sucessful!\n");
8 N- o1 ^0 K( W, ?( O* \
* Z% p6 f- N4 ^' ^5 J3 ^ return ret;
* D1 q5 g1 D0 S& t9 q$ l}
! v) Z% b+ B( F$ K$ c, a W9 a+ m
$ a+ x; T6 U" H. s4 w* a8 H/ Istatic void __exit led_platform_exit(void)
/ [ S8 I' G# K$ W{
* ~5 y: S$ l/ m" [; k- D9 b platform_device_unregister(&da850_evm_tl_leds_device);
- r# p. i, Z8 h8 }6 \2 W' N$ V+ S ?( O- Q8 H/ B' n; q1 @- Q
printk(KERN_INFO "LED unregister!\n");* ^4 }, E5 Q+ |$ v. V8 G& C9 @
}
( Y' ? W4 c7 W4 ?2 R* w
5 ^% q' L1 Z# D8 @3 r' Nmodule_init(led_platform_init);
; k& h2 a! r0 g6 Omodule_exit(led_platform_exit);
}, m) v; S9 S* q5 q
7 k- s' V" ^& P% p8 F! T3 T. ~: @# JMODULE_DESCRIPTION("Led platform driver");$ V, f4 Z: H8 A7 L% E0 w
MODULE_AUTHOR("Tronlong");
! W. w$ r5 {* N3 |+ n( pMODULE_LICENSE("GPL");
& {. f0 G2 V z. \1 v) J5 C( G7 ]' h$ L2 j s9 B
|
|