|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ i" B/ z, `. i/ W3 ~2 J. b#include <linux/init.h>
" I0 [: u9 C( _- E# a4 L) o#include <linux/module.h>3 I6 B7 r3 {* G# `7 h6 t1 c9 j8 ^
#include <linux/kernel.h>
" G' V. ~- {+ Q* K8 d4 _#include <linux/types.h>; X' [: U: K1 T% p6 K5 ~& a
#include <linux/gpio.h>2 g; `. I8 ~! V: u" @# ^ f
#include <linux/leds.h>: {) T6 \- G% Z5 m- H9 t: a
#include <linux/platform_device.h>5 i- \2 j( K# ]' r
# n; U4 T: D( R. L* w" a5 T/ a
#include <asm/mach-types.h>
+ j: W/ b% [1 }#include <asm/mach/arch.h>, K" |5 o* K: M& I6 u6 e0 K0 h9 l
#include <mach/da8xx.h>
& h/ W' I' {% ?/ b" r/ R#include <mach/mux.h>
/ J! H& V$ I: h) V
& Y5 Z0 ~0 y, W- I) a+ p# S1 {#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% f+ ?/ y& k$ K6 p% [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: @% I2 s% Q/ Z: b$ H' c9 u c#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ ]% G' `2 b% e& E3 o/ ?3 x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& V8 k$ ?( B, P
& g3 _8 S9 C0 d7 y, @; _9 I/* assign the tl som board LED-GPIOs*/& z, ~1 I3 s+ l1 n/ h
static const short da850_evm_tl_user_led_pins[] = {( b. a# r6 E6 l6 H; Z" { B8 F
/* These pins are definition at <mach/mux.h> file */% p9 O- e1 k4 W
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 ~! o, R9 v! Y5 c6 N* ^
-1! r) M. }: X$ \: Z5 Y
};% i9 P3 F1 J* I, u
% z4 O( J9 t1 }1 W( H8 d8 ?/ a1 }. wstatic struct gpio_led da850_evm_tl_leds[] = {. o; g7 W) J# b" _: m, O
{8 K6 u) P' l1 G3 E: W' h
.active_low = 0,7 z9 r3 [7 w6 ]; ?
.gpio = DA850_USER_LED0,1 `+ U9 w3 h H! O
.name = "user_led0",
* L+ }0 [2 T& _5 y, D+ e& N .default_trigger = "default-on",
, J8 Y6 Y H {4 h$ \) y },$ X) A* }) ~/ J: X
{
, ~+ @: P; f7 E, p1 ]- |: i .active_low = 0,
2 y$ m( }3 m% g, k6 W0 r .gpio = DA850_USER_LED1,
* k+ [3 x0 W& ~ .name = "user_led1",1 Z( y9 d( V. [5 G# h6 Y: _
.default_trigger = "default-on",
$ X/ M2 [, Z6 ~3 g },% V. k; I: C4 |' `- R3 n/ ]
{/ C5 ~; k) Q; v& B) p4 |& O
.active_low = 0,* v: x1 S/ I* o6 ~" S
.gpio = DA850_USER_LED2,3 k- v& F$ @' `" J% u
.name = "user_led2",- b; w; Z6 S) \1 [+ v
.default_trigger = "default-on",4 e( r* g: W. j+ J, x* p
},) d# u* i; A7 {9 f% Q# S" |# V( L
{0 l' F8 o/ b) a/ y
.active_low = 0,
" N5 p5 [, S4 p5 @) f9 B9 t .gpio = DA850_USER_LED3,
% ?2 M1 v+ Q! t* V .name = "user_led3",) v+ }% f: V I, z7 h2 O2 ^. y! `
.default_trigger = "default-on",
% b1 \7 [7 b5 M N2 x i2 o },* M2 j4 K7 I9 X+ l1 I
};
$ A6 M7 O0 j% |" d( w4 J' J, \2 z' s; H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 h; |$ J1 F ]$ [: a" I
.leds = da850_evm_tl_leds,
, j. R3 n& G" N; e .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ ~+ U8 B x, o' M' {. [: f
};$ f% |% {4 ~, D8 X/ y' j* X" z3 A
; q P; L0 j* e" T" b# Bstatic void led_dev_release(struct device *dev)8 M$ \& u1 J( {/ c- w
{
! D+ M+ \8 Z! _! v! R+ z7 A};
6 @/ D# y2 K* L0 P+ K! Z, X7 \1 l* ^# U7 G3 {6 X& v6 Y0 h
static struct platform_device da850_evm_tl_leds_device = {
7 t8 L9 `4 k: r% A0 D/ Q) C .name = "leds-gpio",8 F: p! w) V$ {' \
.id = 1,1 @+ T7 N4 J6 j" X# x8 U; ~( v
.dev = {- d$ T. M$ E4 `
.platform_data = &da850_evm_tl_leds_pdata,0 ]4 n" K, t5 R3 r0 i
.release = led_dev_release,$ W: v- H8 ~/ J& b% i
}
- E8 c! ^) g1 {+ [' T) y# b0 e$ X K};
3 i! P! [8 J( \' I
# k5 K! j2 ?8 a/ X- j* Bstatic int __init led_platform_init(void)3 Y: g0 J% g; m w; n, Q
{
; y. s2 r( l$ m, h( t int ret;+ }4 ~1 n- @: g2 m5 u2 ^5 z
#if 01 K* R* C( d* C% }: t/ g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 S, l- J0 {- X' A4 Z7 z
if (ret)9 k3 `, P1 h% }( t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% k* o% r0 R" X( E7 X* @& u
"%d\n", ret);0 B4 Y z; ]4 z
#endif+ m2 t& _) g. j/ q( O2 Y' e
ret = platform_device_register(&da850_evm_tl_leds_device);$ O6 V3 J4 J! ^2 I! D
if (ret)
& i% i) o0 u& q. i4 P2 s4 Q pr_warning("Could not register som GPIO expander LEDS");
1 F1 O% w& ]4 H else, p" q, H. H" G5 m
printk(KERN_INFO "LED register sucessful!\n");
: \ c3 Z. T+ g) d' g0 W+ c3 `' i2 G. }2 f
return ret;4 N0 N7 A% S! r$ [
}' |+ s6 {9 H5 M8 ?8 y7 r
( _; ]/ |# h# Q* P& z
static void __exit led_platform_exit(void)3 Q; J3 ~7 P: y; J/ Q; |# F
{. a2 }0 q0 l/ `- z; @3 Z2 I
platform_device_unregister(&da850_evm_tl_leds_device);; w; T" m) [; t, Z* C) y
4 Q- ]/ j* [3 @( t6 ]* Z. r printk(KERN_INFO "LED unregister!\n");
1 w0 Z/ v/ ^2 o. J}
7 U6 `. p, W: ^ ~+ M7 S: v1 |6 H0 y4 m& f F) m
module_init(led_platform_init);
; o4 I' v' b7 h9 f7 Mmodule_exit(led_platform_exit);
, _5 K0 A3 _$ G: W9 a; y
5 n% H( s+ Q1 q; Y# l3 ~5 kMODULE_DESCRIPTION("Led platform driver");
% _; t, G3 ~8 l; V; R- A$ NMODULE_AUTHOR("Tronlong");1 {) w: f6 N4 Y" u' E8 S! s
MODULE_LICENSE("GPL");
; w( Q z1 t: L# l0 u) r) M" g2 a. q
|
|