|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- l/ d0 b! j" p7 E
#include <linux/init.h>$ K4 F6 d" T$ v7 [
#include <linux/module.h>7 y; s- e- u9 [
#include <linux/kernel.h>9 |; J5 R$ c% L9 K$ T9 s1 J! ]; y
#include <linux/types.h>
$ z4 N3 r. f$ z% C' R7 z% R#include <linux/gpio.h>
% C6 {/ M* d+ u7 K#include <linux/leds.h>
7 r1 ^8 c8 \6 @1 G( \" _/ l#include <linux/platform_device.h>' U5 C' p5 f9 N W: U3 G6 F
. x. B# k, L- o0 f3 n
#include <asm/mach-types.h>
2 @# a% p3 M( Q. T. c9 H+ e#include <asm/mach/arch.h>
c9 z1 v! r6 ] q6 K% H4 u#include <mach/da8xx.h>
0 j& o: g% M6 O, t+ G#include <mach/mux.h>! }' \$ {; k6 a! k5 }2 }
6 |4 o( m9 x) W! Y5 W+ x
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; g0 L' `+ f! h& O7 S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& g! R, o9 g, | k w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" Y) x p; D6 f* Q$ J' q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' t6 C1 A9 V; P
( y3 `) U% C5 G3 a: [" y# M' J/* assign the tl som board LED-GPIOs*/& l2 t* } \- g5 {) u' ]4 g
static const short da850_evm_tl_user_led_pins[] = {% H$ p0 p1 l$ F# r
/* These pins are definition at <mach/mux.h> file */3 r, K) y! n$ p: G3 o
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* Q K4 l1 }; W( e$ F' F
-1( R# @& ^+ [* c3 a: p8 D0 b
};" }0 u5 N# F* ?# q6 U
7 h9 [, r% R' |' |" i
static struct gpio_led da850_evm_tl_leds[] = {
0 g1 b7 a4 _0 } D1 ` {
) {! M9 c5 T `4 e6 w .active_low = 0,/ a* z6 K3 g$ ~8 ]; X6 q
.gpio = DA850_USER_LED0,
( Z" k2 D/ \, W- I' K .name = "user_led0",8 u, v7 y, r( K# @0 l
.default_trigger = "default-on",# L& {5 l: H ~
},# c- t( M* `! s8 w% t( q6 `
{
. K- b! { Z, J6 x .active_low = 0,9 j; f c- M* V3 ^3 R: G: o- @/ |
.gpio = DA850_USER_LED1,
$ z- q6 c9 P; S4 n .name = "user_led1",
4 s+ P1 Z! _' C2 S6 Y/ _3 v3 l6 W .default_trigger = "default-on",
7 C" k! c; c z: u },
) I! A( ~' b+ Q) z* d {$ i6 D, l$ Z! U8 ^' \9 Q
.active_low = 0,
5 q. D5 ]" l# f3 B2 R .gpio = DA850_USER_LED2,, ?0 X! d5 J0 y h2 z( Q' k) U# G& ?
.name = "user_led2",
0 S* a1 T" l& e0 [" ^+ e .default_trigger = "default-on", I8 k3 _) e9 J4 p2 q
},, V) A: `% X! {4 j+ J# G7 g0 j* @2 h
{
/ ?. p/ w1 L- }( m# B .active_low = 0,
I9 d+ k5 N. f) }2 t) T .gpio = DA850_USER_LED3,9 s! D/ E# q! g; L8 G5 `6 Y3 E
.name = "user_led3",
3 ^4 ?+ G; ?) D l# x# G .default_trigger = "default-on", x; Y9 k9 v2 Q5 Q$ @4 w& D0 W
},
+ j' I8 P( q( k/ _& m};; b9 d7 k' s" T0 Y" ]9 i
! Y ~' S# l& d. W4 r0 X3 J+ U- {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 L Y7 |- r' T4 [5 E
.leds = da850_evm_tl_leds,1 I1 a5 d7 ]4 u I5 {+ t
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 x7 B6 X* j3 N3 g$ m2 J$ ]
}; J1 \. J% Q1 h" R8 |5 A! B6 l* F
6 M5 H: d, T; d7 }) rstatic void led_dev_release(struct device *dev)" D: c4 k7 }: r( J5 q( K
{
. E/ B2 l* _ C1 g; m2 a};( M3 E4 N* D1 q# G4 t
7 k. A# O: G' _" K3 H) R ?static struct platform_device da850_evm_tl_leds_device = {
3 U- |; C, p8 |! \. W .name = "leds-gpio",) {0 ~" h$ K' _) u1 P, {
.id = 1,
- @5 l# J- b5 c .dev = {( ?5 I9 [$ j+ N" ^. X7 r: f
.platform_data = &da850_evm_tl_leds_pdata,
& V3 W0 @. y. {: W .release = led_dev_release,
) m9 ^$ V8 O& `2 U1 n6 v9 V }
* D3 q& J2 ~9 G3 X};
6 {) Z/ ^% w* r8 K0 i# p4 B) ?, I$ K7 ]6 x; O
static int __init led_platform_init(void). c) t* {6 U9 u3 H5 [
{
. p% p: F9 y. j3 J1 ^( ^ o% \ int ret;& z3 P& i6 x+ t& A7 L$ N
#if 0/ ?* s6 A/ A: W3 U2 H1 ?$ C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
n' W5 W; h8 [. v( N- y4 B if (ret)
7 T( ?% `, _! q" i: \ I0 k* Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- J' r) S, H8 v, h! F+ W "%d\n", ret);- m7 B" b0 Q7 O4 r V# t x, }% r
#endif9 h- W8 Z& _& l. \) o$ u
ret = platform_device_register(&da850_evm_tl_leds_device);6 W3 j: y+ B! j: [- [. g
if (ret)% M/ l6 Y( I& `% }4 s( C( t
pr_warning("Could not register som GPIO expander LEDS");1 a* Z8 ]( h% d# H. |2 ^
else* ~. @/ d" L& j2 I5 t
printk(KERN_INFO "LED register sucessful!\n");
, V0 ?* Q1 t3 }% {/ P8 p/ k1 ?2 [, K: o' a, d
return ret;
6 q3 V o$ X$ @$ S}
2 k# n7 V B; Q, e* k' U
6 i2 D. O2 a S) {static void __exit led_platform_exit(void)
0 @6 o& t3 F$ K9 X5 L" z{4 l8 ^* W a0 ?! |" u' }3 y
platform_device_unregister(&da850_evm_tl_leds_device);
0 G0 F& D* Z/ c7 `+ `
2 G* D3 v7 D9 X, q4 l printk(KERN_INFO "LED unregister!\n");, L, [' a2 G6 ^, d% i
}
! t) Z+ W" ^6 h k9 c6 ]) }% o
! X) y) `" K6 X+ V4 w/ x+ Z4 F+ cmodule_init(led_platform_init);, z2 @6 Z$ y9 I" J; S
module_exit(led_platform_exit);/ R8 \) b# M. }# g% }5 p
" s1 H8 a7 D, f+ }' u! tMODULE_DESCRIPTION("Led platform driver");% s- s8 C3 @9 N% M% P3 i( w
MODULE_AUTHOR("Tronlong");
. E3 P8 M& Q2 b3 W& D# ZMODULE_LICENSE("GPL");
" n$ O+ a# i, M d# k2 g: e
& j$ h1 Z6 ]' ]# M7 T% b* l3 | |
|