|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 `6 ^( F; e, f. B% d: f#include <linux/init.h>2 Q; ^6 ^2 w7 F$ X; ~7 D" Z& S
#include <linux/module.h>9 u' l" [2 Y" h
#include <linux/kernel.h>0 ]6 s0 y# u1 E) e& O) b, d
#include <linux/types.h>6 G) W) d# C( g
#include <linux/gpio.h>
3 o# ^# L2 b) q5 H#include <linux/leds.h>3 U+ n K, U1 g* ]; w
#include <linux/platform_device.h>9 m; A- o; y; V! Q; Q) q
* I2 C, @; i L. c* a* E1 ^! y
#include <asm/mach-types.h>/ v2 A4 V1 v: A; D" u) h p
#include <asm/mach/arch.h>
" c* _/ n X3 V. g( G* B; ^#include <mach/da8xx.h>
* b& K5 _. ^0 p( M0 r2 W: b6 E9 B8 @, h#include <mach/mux.h>+ \, A: q4 c; r- t6 h D; |& }) Y& U
7 H+ I4 M: S: k7 E: U3 l$ `8 G) N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 d4 i# o% {3 K3 o/ S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): g$ j3 ~0 H1 a+ d1 N' M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 A. j1 x! k ^8 S" L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 F- B# w# M6 _7 \
( D6 f! b: |$ n" M, g4 F- r/* assign the tl som board LED-GPIOs*/
1 R; O) g6 X* a* ~ r& V* Fstatic const short da850_evm_tl_user_led_pins[] = {# c+ ]1 [9 W% J; ?
/* These pins are definition at <mach/mux.h> file */
' n1 q# r N1 C {! k* G( S/ ? DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, F, ~5 v6 G7 [
-1. Y: B9 A- t u q+ L3 P
};
u. Q; K6 |4 |4 ?' w6 @5 Q* \+ K) d
static struct gpio_led da850_evm_tl_leds[] = {
[/ b0 U' `: l4 a( h6 |3 p: Y {4 L- U# C! l7 `3 T8 m3 m
.active_low = 0,. N* w* U6 a/ T$ Q) X% h+ O! X
.gpio = DA850_USER_LED0,( x2 l* f+ w/ u" f! S( F( }
.name = "user_led0",
; [0 R/ O d9 [2 A .default_trigger = "default-on",
' x- u4 }: R M },( a5 y) M. p' k( ?% O0 a
{4 ]. e& t+ k+ {
.active_low = 0,
! U8 b- p5 D% B* g8 J .gpio = DA850_USER_LED1,/ [# a6 }: b0 Z8 t8 l f* d/ r
.name = "user_led1",
# U' i3 \6 K3 F- y2 a" R& w .default_trigger = "default-on"," }' y; l( n( l
},6 D2 P: w5 R. }9 ?7 i' E' D
{+ t* J& _0 D1 F* v( L/ z# m
.active_low = 0,) b( ~3 S& W8 |# Q1 n+ R0 j F$ j
.gpio = DA850_USER_LED2,7 Z' u/ T1 X( v
.name = "user_led2",
6 v4 |0 x4 k$ ]! P2 U; f9 _ .default_trigger = "default-on",
% G$ l3 ?& i3 m+ V* q# z },+ p% {9 @! _( k) p( _
{
( |. k& F% D" c& c .active_low = 0,
/ y- G7 o& [: F, e$ ]* d) U" P .gpio = DA850_USER_LED3,
) I2 M4 W( `, V$ R8 c8 s0 I .name = "user_led3",
3 n% J; K2 f, X0 Z2 e* P3 u .default_trigger = "default-on",
" u5 N% O7 t1 {; j5 L! [6 p5 e" L },
3 u" r, ^- \% g/ _2 e: ]& Q};! X4 c) s) Q4 X) d0 `1 Z9 e
1 V) n# M& G/ Q$ t: @9 K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& z Q$ K7 }) X6 D1 x1 G3 O
.leds = da850_evm_tl_leds,
' F: t8 f6 \, z) e, V2 t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& m6 l% S9 _+ r" w9 T( ^0 B) q
};# ]2 _- h! ]0 g, ~( j
W( n$ \) b/ O+ a+ kstatic void led_dev_release(struct device *dev)" i6 a, U$ Q4 X: S3 y
{
% l' ^. W, x( r8 C3 w( ]};2 L2 B; G: _! ~1 d
- o7 f$ A2 X7 V: h' L/ i7 x0 z$ m
static struct platform_device da850_evm_tl_leds_device = {( m( z$ k: j; ^4 |, z
.name = "leds-gpio",0 J! e: e2 D. n& y2 N
.id = 1,: a1 H: q3 ^2 D. l# p
.dev = {% E, Q6 q ?/ w
.platform_data = &da850_evm_tl_leds_pdata,
- o& F2 t" u5 \6 x& q( x .release = led_dev_release,
, t s+ n3 z/ X# n/ @ }( w2 m; X/ B4 C% N" o
};
) o) [$ a& W) m8 X( E" T
! ]% h. i6 c: ~+ a* w0 K# Ostatic int __init led_platform_init(void)' T# z. e9 K) P0 k
{- _- Q# K- {5 E
int ret;
% X& O C' J6 w. d#if 07 G, ]3 w$ I1 Z( r3 @% ~1 w
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- o2 D5 F( m Q+ F
if (ret)
5 p# h& z$ A3 I- v! Y' ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# U% A% I& T* p; e1 w' G# v2 j "%d\n", ret);
- ?5 X+ [) I4 K# v I/ h$ I& m#endif" ?9 Y$ L, l7 R5 Z0 I4 ^
ret = platform_device_register(&da850_evm_tl_leds_device);
" ], V: N+ H( s0 n3 `2 v if (ret)/ A2 `( m6 y& K
pr_warning("Could not register som GPIO expander LEDS");! v5 Q, x% m( e: U8 J* R3 I
else
/ W; { Q& A: S) j+ l+ Q( l printk(KERN_INFO "LED register sucessful!\n");5 {1 D: j- T) l: o2 `. ?$ G+ g
: P1 v$ p: {6 q9 S Z4 @3 F
return ret;
& _) `; j% Q4 A7 J- w}
1 C; {+ ^9 ]! z, }6 T( o6 c* d. Q. t3 |! x- ?: v/ x/ D, o' n
static void __exit led_platform_exit(void)
, ]" @/ k0 J: k{
; U$ r5 W/ z2 E& Y* Y! m# } platform_device_unregister(&da850_evm_tl_leds_device);7 f$ Y" ]2 F- V3 i
. ^2 }6 g2 w: h/ M/ y( v- | printk(KERN_INFO "LED unregister!\n");/ W6 t, I0 K- o8 s
}/ ]; b* @+ q; `: t, u( \- ~. u
0 t5 p4 P5 I4 X7 Z
module_init(led_platform_init);! k# l' [6 l' L0 f
module_exit(led_platform_exit);
' u/ E8 p& T& D& P E
- R0 Q# E. l: _: _4 rMODULE_DESCRIPTION("Led platform driver");
6 K8 a5 |' Y% V1 iMODULE_AUTHOR("Tronlong");
+ R, W5 Y: K J' w IMODULE_LICENSE("GPL");
* Q8 ^2 D, _8 V% E
e+ b, x; L ]( M7 } |
|