|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 m2 a" L: s2 E0 p3 a% P, h
#include <linux/init.h>' L, _4 T( [2 V. T3 F( \# J8 {
#include <linux/module.h>
4 A) x2 d; C2 D#include <linux/kernel.h>
$ j; S l! s* s# S#include <linux/types.h>
0 i- D: E* d% g$ i5 g' A, ~! z) q4 i#include <linux/gpio.h>! t, j: `/ R) k
#include <linux/leds.h>
/ w( @6 H, R+ E4 N* Y#include <linux/platform_device.h>0 A5 B% O/ f6 X" S$ I) h4 l
. o( x1 r% e. j% ?( P) V( @#include <asm/mach-types.h>
, ]6 Y! o% r' o9 J; F#include <asm/mach/arch.h>+ V7 Y5 G" A8 q8 @
#include <mach/da8xx.h> L/ w7 s' ~9 a. Y+ q1 q+ H2 I
#include <mach/mux.h>
T8 Z+ L7 k2 J# x+ [% k" X9 j4 L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 F1 _4 j/ z# I, ?" a8 ^; v7 N; s: o#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 _0 U7 N( V- v; S# y5 E% V! g
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- V0 Z6 ^/ A, d( L/ n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 ~4 g+ ^3 y6 B7 [2 t3 @" c) N0 N. A! E2 m9 \
/* assign the tl som board LED-GPIOs*/6 ?9 ~. h. k: L) X; T0 {. k! }1 j
static const short da850_evm_tl_user_led_pins[] = {. U7 y$ u9 j* y; e" c
/* These pins are definition at <mach/mux.h> file */; e, V7 r8 I" o# h. y) @$ K0 m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. ^6 G/ L0 j% K- f: Y0 _0 k. x
-1
( J/ ?/ T9 y2 x: [3 Z4 @2 U( ~+ j};' ^. y# T) D1 j4 v7 f2 |1 \$ ?
. h# \/ B3 Q a8 b3 W. C* Q# Z" Tstatic struct gpio_led da850_evm_tl_leds[] = {
, q! n1 R% h3 D& f {; P8 A2 z% L4 v
.active_low = 0,* |- o+ r( q; k( T+ [* q
.gpio = DA850_USER_LED0,4 {8 c( o( o. v- X1 J
.name = "user_led0",* n8 Q2 U3 d& q* F/ Z! n/ R
.default_trigger = "default-on",* I9 z" |" b. |6 H$ t$ A" F% `/ M
},' t+ Y# Q7 n2 ~4 ^6 F! ^
{# S$ n) g6 U) |. q) u
.active_low = 0,
# V. @) l4 ]# O& r .gpio = DA850_USER_LED1,0 J! |8 U2 \2 ]9 o- n, d9 s
.name = "user_led1",& H5 ]3 p# U% T
.default_trigger = "default-on",
; B4 ^1 H7 n, X, [ r9 P },' s) }: \' O) p7 {7 A1 b2 y" C, D
{
[5 k! N" S" F2 ~% `. M2 F .active_low = 0,- a/ f2 _7 X" a' S% G5 k5 v
.gpio = DA850_USER_LED2,& x: e1 p) \$ }2 v
.name = "user_led2",- z) u( K) k% n
.default_trigger = "default-on",5 k+ d1 P* X$ T, S( v, }/ o+ f* H
},
5 h7 w$ @! r& H {. B+ V. o! z. r# F' ~3 `0 L* N
.active_low = 0,
. ~# I; |$ _9 J1 J/ w/ Y .gpio = DA850_USER_LED3, _# p% q' d& B* q
.name = "user_led3",
4 E) h) k+ O& g( {2 {1 A( S .default_trigger = "default-on",1 D" Q6 @% ~( s2 n$ Z* d1 d
},8 _4 G7 M: ?1 {& x! |* X
};
. }! `/ P( v" D% H! d4 Q5 P( ~% _4 y+ O- n5 k! k: ?% q' {
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 E7 t* d; o$ n9 l, @" j .leds = da850_evm_tl_leds,9 D0 s5 u7 [; E" u% }' S* V, }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- q: ~$ g6 w) ]) q7 r1 g
};0 Q8 B* N' o( `( M- B
0 ?# ~. _% O' J8 T$ i' Hstatic void led_dev_release(struct device *dev)5 ]& P1 l4 t+ g7 h2 \: s
{
2 V* C2 A: D; h/ b$ H};
( L4 b% o2 g v9 ~ D( r/ v3 w, d$ @6 ~8 C
static struct platform_device da850_evm_tl_leds_device = {3 }# t1 A$ F" F/ N
.name = "leds-gpio",: i7 }# o9 h* x2 T N# ?* e
.id = 1,& g" R& I% X3 N: @
.dev = {! ~( u: x1 q* b! _9 l5 G
.platform_data = &da850_evm_tl_leds_pdata,8 M- B6 O1 t3 e$ g# K: D
.release = led_dev_release,
+ ?+ w3 c- u F# v: Y }
( K6 N# G# ~4 P1 T! W" F8 s. \};6 d6 F5 Q( g* u8 @: {1 [5 q( p; ?
) w! G0 [# p9 Q
static int __init led_platform_init(void)
% {) ^, U/ f. D{
, P5 Y2 L% G# n6 T- j* s! g int ret;! c% c* l) e8 }/ g; q9 i1 [3 n; @
#if 06 O) U# i0 Q0 P/ {3 c
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 V6 E# U. n' O r4 t3 X l, \ if (ret)
9 y+ R% N4 Q3 r' b) K$ Z! s! x pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 g: Q* K6 E: d9 d1 t" x8 @
"%d\n", ret);) l, G8 h3 A3 t N5 u
#endif9 B0 l9 v7 p H- S2 k; ]; P) k' D" T
ret = platform_device_register(&da850_evm_tl_leds_device);
: u& }0 ?4 t9 W) X) p if (ret)
( y( E6 E- v T- k# V. X1 p( _4 ^ pr_warning("Could not register som GPIO expander LEDS");6 `3 Z+ n3 w* @* a$ E; l
else* u0 W/ d, c9 ^5 D" Z2 n
printk(KERN_INFO "LED register sucessful!\n");
9 _0 k; j6 I& \& d2 x
: B! E: A5 R. _ return ret;( t2 R7 D( c, v+ [, d' |: g# @1 D
}
- i3 @# t8 g. M X$ U& X/ a$ J$ z% a' R- Y
static void __exit led_platform_exit(void)1 ?3 ~+ B! e: u' i" B7 @; c$ P
{
! R4 [5 y) m$ E) S; c! t platform_device_unregister(&da850_evm_tl_leds_device);
+ [! D! H* E, i U) S$ D6 d% j
# ^! b3 T" `- Q. w0 Y" |) l' C& y printk(KERN_INFO "LED unregister!\n");/ `( o V0 r+ N7 B" ]
}
9 y7 i2 Y" T6 V5 X& |& H# s7 c; v" K5 G
module_init(led_platform_init);
" o' k& ]! ]/ c' A) Nmodule_exit(led_platform_exit);& }- h# d4 {+ ], a
# }* q7 t8 x7 d+ BMODULE_DESCRIPTION("Led platform driver");
( c5 t! S' ?' }( _$ v5 H0 EMODULE_AUTHOR("Tronlong");' l; x9 `7 _8 S6 H$ e3 W3 K# C* r
MODULE_LICENSE("GPL");2 C5 N, S+ _: i8 s
6 _5 e9 e% ?7 Q6 ~ |
|