|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ w& l5 n u$ y+ K#include <linux/init.h>4 v0 ^6 i9 ?- I2 z6 N. l5 ~0 i- a
#include <linux/module.h>
/ `, c" s+ w( u- ]: Z#include <linux/kernel.h>8 x% m8 ?) ?& u, l" o
#include <linux/types.h>
- u( X1 m n* l+ [" \$ z0 U5 T% v#include <linux/gpio.h>
- Q$ k( {7 ]9 I! A, r#include <linux/leds.h>
3 W( x# [- ~2 ~8 t* |# o: R#include <linux/platform_device.h>, X8 q# d. J1 D% }1 n
: V$ B" ^/ p( J/ b7 ?
#include <asm/mach-types.h>( q2 i, U$ Y( y% X
#include <asm/mach/arch.h>
6 j( x1 T& E; M1 o- W/ v& f#include <mach/da8xx.h>6 k1 f$ A) w! u. r1 D8 m, P
#include <mach/mux.h>/ {' I8 j! Q5 U2 S! F
' Y1 ?+ {/ B4 Q0 l! E Z" V2 ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 K" a* Q- J; C R p0 o; c7 `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* A/ h5 J& h6 ]/ Y' V+ M8 R' g+ Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 U2 G; A' _4 w$ S) s# I
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 K/ m+ {, }* i# Y6 S3 H6 n6 O2 F* U' |
/* assign the tl som board LED-GPIOs*/
* k6 p" y% r. C, f% V+ Fstatic const short da850_evm_tl_user_led_pins[] = {
- g8 }/ R' G. P6 T /* These pins are definition at <mach/mux.h> file */9 z$ c3 _' b0 Z/ n8 a) m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 O0 n) h3 w+ ~& c! G h3 P* {: j -1) y# d5 A3 K( h
};
$ t* z% e1 J/ w1 y
T1 o) T. `" I8 r2 Rstatic struct gpio_led da850_evm_tl_leds[] = { K* j b3 v* a* f( y
{, u4 k; p( ?* J. k0 a. _+ S- ?
.active_low = 0,
: m7 f7 f" g$ W T .gpio = DA850_USER_LED0,( r- L0 C, D& i
.name = "user_led0",& [9 W5 W, ]5 e2 q$ ?9 i, r
.default_trigger = "default-on",3 D: ]$ l2 v: {: N9 v7 ^' H
},- R, j0 O- z9 A( ^/ q5 u' ^2 S( j
{
6 J& Q- v, [9 o% I$ s8 x4 K .active_low = 0,
; L' _ y) [4 L" q/ j9 M .gpio = DA850_USER_LED1,& e( f( S( X) q- J1 f" J
.name = "user_led1",7 w5 z" u" j8 G- W6 n( k! u9 `
.default_trigger = "default-on",9 ^2 V8 V1 d7 S6 R( p( K# R- V; w9 v
},
5 j( G- J! N0 x1 |: Q$ U {
9 Q* Y0 B. e6 ^% P8 M .active_low = 0,) }8 |4 R1 _6 Z' N1 }$ {
.gpio = DA850_USER_LED2,
8 I; H1 R! k7 N* X% j: H) l .name = "user_led2",
' A0 V( C' f, s; @ .default_trigger = "default-on",
4 S: R2 d: C4 y1 L },
3 M+ e m2 Y1 ] {
# j$ W+ c6 d3 k1 @6 }# c0 D) w7 m .active_low = 0,, w# [6 [ V8 t9 }) W; H- m
.gpio = DA850_USER_LED3,
& \, z# T4 y Q& U0 ~; W2 L& T .name = "user_led3",
) g+ q( e) K( N. Q# R2 o/ j. u .default_trigger = "default-on",1 m! H, _4 @+ G1 Z3 c( R+ U
},
4 T7 _8 ]& u3 F9 m3 s+ t2 q};
V) a7 R$ {5 ]: M! L4 z/ [# O5 i& [& B" ~+ B# s4 Q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- V, r; t1 q7 r2 z9 f, J5 R! _
.leds = da850_evm_tl_leds,
% T0 |# a# Y% o7 n Q' [ K9 q* [1 m .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' s/ V" I" c2 @& }
};; q* [; L d; H
1 i# ^. ?3 Y: i8 F# L
static void led_dev_release(struct device *dev)/ _* J ^' H6 d1 @5 z
{
, Y0 N2 G: T4 [};7 A; O: J. f+ }. Y4 X
- f* ~+ _# m" M$ c0 mstatic struct platform_device da850_evm_tl_leds_device = {# _/ k6 j8 v/ H9 l
.name = "leds-gpio",% x) i; w1 d$ ]0 q9 Q) v! T
.id = 1,8 _4 [: J4 o' ?: M/ o
.dev = {
) A+ e$ r, n8 m1 V .platform_data = &da850_evm_tl_leds_pdata,
, P$ I$ W8 w2 G .release = led_dev_release,9 g) q0 \0 M% B
}' G* p6 p2 v5 M0 I$ k
};
6 i$ ?3 I4 Z( P2 M. a F
2 G7 R( n. k+ q3 N2 Y; Ustatic int __init led_platform_init(void)1 r- E# R6 l# s9 G
{
0 _4 w4 p2 a- N int ret;& A* U2 @* t5 d$ G6 ]$ W! z
#if 0- s6 z: Z9 L& i, X/ l
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 i3 F9 ~9 C# }; v
if (ret)* I& b9 ^# w7 p/ m: E5 d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# X3 r# o: Q9 p3 W% a" F$ Y
"%d\n", ret);
. S8 a3 V- c6 I5 q8 s#endif) G: O! G. V/ r C
ret = platform_device_register(&da850_evm_tl_leds_device);$ B1 g0 t- \8 n+ T8 M/ M& e6 `- l
if (ret)% W' O# S8 j: }9 y
pr_warning("Could not register som GPIO expander LEDS");9 m' a0 C2 k O) Z) V2 ~, c
else
K3 X' E5 M2 m% k- k& D printk(KERN_INFO "LED register sucessful!\n");* {$ x. K9 m7 |" n* u# H
' w! R, T& U0 @( ~: l
return ret;
+ m4 n1 n, E7 v- T2 p- i}
2 |' h3 H0 ~9 t) M! P5 x% i; V0 }0 [ S: `* x
static void __exit led_platform_exit(void)
! W5 D% Q) m) x5 C3 M4 X{1 `3 z5 n5 z. C$ a8 a& Z/ ~4 H- [% a
platform_device_unregister(&da850_evm_tl_leds_device);
; {- G* E- a( t
5 `: ]! ~/ D+ c4 C) U printk(KERN_INFO "LED unregister!\n");
+ {/ B- _1 j1 L}
% k- B/ A3 k; X
2 G! R- o7 C( R; P D8 u# J$ mmodule_init(led_platform_init);; P; u% c8 R# `; O# A; X* q! w! T
module_exit(led_platform_exit);
: b5 _8 B( K% ]- e
5 q& D% E7 w2 J- l* T3 N! |MODULE_DESCRIPTION("Led platform driver");" P6 Q; }: m1 |1 |% U
MODULE_AUTHOR("Tronlong");$ w( M7 X( J( F- ]
MODULE_LICENSE("GPL");
^6 K* Q6 c4 B0 l- Z% z8 m8 B! a0 q
6 o6 |* i! @: b/ v- @ |
|