|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 a' i+ l3 H5 d3 G0 e4 ^3 ]1 v#include <linux/init.h>. |4 [1 w; }' }$ ?
#include <linux/module.h>
/ U0 l0 L9 \5 g: L$ h5 |+ u# Z#include <linux/kernel.h>
4 I9 h6 Z |! w: ~9 B3 | }5 ~#include <linux/types.h>, `5 l1 b' |1 [* M* J: H, C5 r
#include <linux/gpio.h>
. ~- b4 _- w; S1 i' ]; q#include <linux/leds.h>5 O- u1 z; }1 o0 Z
#include <linux/platform_device.h>
0 t$ `9 J, y j9 V# b" I T
- ?' p) O, e4 {7 @& C- i#include <asm/mach-types.h>
( h! R( j8 S" v- r5 ~$ m; W# i#include <asm/mach/arch.h>0 j3 T* j' O% a8 u+ [. T2 g: I
#include <mach/da8xx.h>
7 M* m; z4 o( w) e# O$ b#include <mach/mux.h>5 {; D# U& r- C, ~9 `6 A
" V- Z9 J5 z/ W1 W' ?1 `
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
K* |7 i4 r9 a% O: b' K; W/ {#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 q3 {/ _3 r% r2 ~! |8 f6 h& |4 }5 M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 J: e9 n( |7 {( b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 d2 u; p; o; G# u6 j4 t5 a9 t u; K4 v. E: C
/* assign the tl som board LED-GPIOs*/
# c) a0 T- q) @2 h5 B7 Vstatic const short da850_evm_tl_user_led_pins[] = {
2 S- P& O) p4 {# M! h+ l /* These pins are definition at <mach/mux.h> file */( Y4 b4 D9 |( I) k- t, f
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* T8 x9 h+ O! W -1) k- k4 S! o8 j, d9 Y6 [
};
7 d, d; y2 V, d$ c n
+ W& k+ d Z$ Dstatic struct gpio_led da850_evm_tl_leds[] = {6 P& o, v& j R
{
4 M5 L. A* J* E6 [5 {" x+ ]% T: k y .active_low = 0,/ L' b1 C8 j I+ j& v
.gpio = DA850_USER_LED0,
, [2 X: K% ~; M# q" t .name = "user_led0",
: T* W) P9 n/ b/ L/ X. i .default_trigger = "default-on", a. |) j) U; J% Y. k3 R
},, L3 v. l$ S! V K: W% i% N* f
{: { e% d4 f' I
.active_low = 0,
- N" K' I, S& k3 W4 w$ K .gpio = DA850_USER_LED1,
- J+ y0 k3 n* r' Z+ R# [ .name = "user_led1",
& _/ @* T8 n( J/ I .default_trigger = "default-on",
: [; r0 E$ W) u' N8 C },- [1 ~7 G% ^8 l5 L- O& z# @" o
{3 Q4 ~% C# R4 ]8 g
.active_low = 0,
( A) S* J) m# E: _ .gpio = DA850_USER_LED2,+ {# J% I, b( z/ E% B' R
.name = "user_led2",! r7 }6 |! A3 R* i4 n: ]" c0 \- O
.default_trigger = "default-on",
" x) N9 ~" b A9 m- x- P },( m( j) A( ~6 G, @# S/ I
{
1 p; m- f/ e; ^9 l .active_low = 0,+ _! `- O+ ?3 k( d- h4 `( t. o" |
.gpio = DA850_USER_LED3,; ]" h4 s5 g& X9 S* T
.name = "user_led3",# m+ c: R% y# O b& X6 O& R2 |6 ?1 C
.default_trigger = "default-on",) E- X- I4 F. O0 ?. R, z9 R, c# L
},2 m5 t! I' y) o) @8 Y6 T) z# F3 t* j3 d
};: h% v0 R% w/ P% C8 f2 | l/ j
. Y5 _ D" U* b9 Y# q: G0 C/ B2 X
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ e& S4 h4 [7 m' ]( R+ L4 `, Q7 z
.leds = da850_evm_tl_leds,- L% D* c6 F+ I: O, `3 @7 G
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 S+ }- z; e8 ]$ k8 q; \};8 V( @2 y. `5 Y2 d6 E0 J1 J# K
2 m, f( s) ?2 I
static void led_dev_release(struct device *dev)
0 \, ?& Q" M$ o: H# X M! p{
. S) k" l0 ^% M) Z1 r};
. F! L. g1 q. t: T+ d$ O+ z* T3 w- d3 k
static struct platform_device da850_evm_tl_leds_device = {, O6 ]& C; B& g; a6 j$ y
.name = "leds-gpio",
" |0 Y7 p, @4 `0 @ .id = 1,# B4 @2 x( d# c: c O
.dev = {3 r& e7 m% N/ C6 r; ], r' u/ S# Y$ ^
.platform_data = &da850_evm_tl_leds_pdata,
( A' v6 [% Y* W! a. h/ g }, x .release = led_dev_release,% A" U* n$ w8 K6 S* R. t# d( c3 v
}4 F, y$ ?* ?. p. C$ ~& i
};: `. U" p8 d. @1 P% F
, g3 m8 g4 H4 H% g' e9 l
static int __init led_platform_init(void): Y9 Q! Z* m5 M/ n& j( g: e3 X$ a- V
{
4 W1 @+ @7 I) i- d2 [( V$ } int ret; S4 g' N4 r7 B5 e5 G& D
#if 01 G3 N5 |2 q# O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( K$ }! O4 k8 `$ |& O& ~/ ^ if (ret)( j, _/ Z" U4 e; y9 k
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( R% G( f( q5 p "%d\n", ret);
' [" s. A: W& }) u9 ?#endif% D7 b9 C, ]3 X; n+ e: `0 ~, i
ret = platform_device_register(&da850_evm_tl_leds_device);2 [! p+ I) x! ?7 y
if (ret); ?, `( [, M) p9 h$ }
pr_warning("Could not register som GPIO expander LEDS");6 Z$ ]. F1 s, @/ |. \- n& n5 L
else
# Y1 I3 V7 z; `& F4 n2 l/ C( u/ @% b printk(KERN_INFO "LED register sucessful!\n");4 u: L0 _2 Y- r' R2 l. p2 O- M
2 k# b, a" z. J( ] return ret;
; {4 Z5 z% y! V) {$ p, y5 ?; P}/ L2 `4 v2 l; u0 m( ^ V
6 C1 F2 M; P+ t8 _static void __exit led_platform_exit(void)
+ }- X# m1 C; \* H: O{
) [/ N/ [1 M& E9 y5 p4 C8 o2 V( j platform_device_unregister(&da850_evm_tl_leds_device);
j6 J; u% ^' t" y# u" r6 O: _
/ W: D) f$ O2 U+ B/ ` printk(KERN_INFO "LED unregister!\n");
+ O- _. w3 |, m8 N0 t4 P}
. t2 L, r: K% j/ \
( n, @+ r8 n2 n8 l' d& Vmodule_init(led_platform_init);
5 C( N8 @, @) p- Q! t8 Hmodule_exit(led_platform_exit);
2 J! K$ i# K; C2 @9 u! d
. [% z; h2 M, b1 V( _3 L1 h+ ^MODULE_DESCRIPTION("Led platform driver");
4 l# E/ r, \. f- w$ I/ s! eMODULE_AUTHOR("Tronlong");
9 V3 l+ g- T- L; GMODULE_LICENSE("GPL");
3 c& I7 ~# u" q0 G. u& }2 k) q: i! }0 I6 A' c5 N/ l+ n" w
|
|