|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 u) W5 ?- Q" ~# N" B#include <linux/init.h>! |: e3 ^1 ^: b6 a) c. v
#include <linux/module.h>* c. k$ E# E, u0 H/ V* p" k2 b2 c! J
#include <linux/kernel.h>
! r6 r. O( V. u& j, h#include <linux/types.h>8 H5 |, C$ J7 {3 t: ~) Z N7 g
#include <linux/gpio.h>. ^: G' ^6 h' ~. x: h0 h
#include <linux/leds.h>: @4 A, r" Q3 j+ }- I! S
#include <linux/platform_device.h>: C% r. b: ?7 G, c" T; l' U
3 N% n6 B& W, Y6 F4 t0 y0 j5 d#include <asm/mach-types.h>. Z G( C8 Q! P3 n0 o
#include <asm/mach/arch.h>
2 [6 v! y9 ]3 i# k% z2 `( m#include <mach/da8xx.h>$ P" E* B# |3 k! g
#include <mach/mux.h>
. u: q' t! W; H1 f- R
; m" \; h! {0 ~3 G#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ q) O% e, Q( Z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ k' {0 V; o' S9 z, i/ a+ a* V0 h
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 o! h4 X) L% W9 D' k; X' y% L; B
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% v, g2 ^! l8 \) z1 P: D) R& | Y2 L$ B+ `2 { z
/* assign the tl som board LED-GPIOs*/
( d) q3 P5 X, u1 Istatic const short da850_evm_tl_user_led_pins[] = {
/ J/ F8 B5 o. i+ U% x% I; A /* These pins are definition at <mach/mux.h> file */( m; _4 o1 I* A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" ~, e/ o- z3 _, _7 s -12 c4 C, u- Z) Y, |3 U+ L% B" X6 L
};
! R+ w7 |* n( x( T& v5 y$ z* T% x6 T5 m% ~6 _7 i
static struct gpio_led da850_evm_tl_leds[] = {4 i$ ~( Y& d* A4 [$ H- P4 v( `# ]9 r* ?
{
: P0 ~' L* g+ c$ [$ `' K .active_low = 0,
& E7 S7 L8 s# o- z& X, z% i .gpio = DA850_USER_LED0,, o Q) V4 p+ C. m& w3 c- Z' O
.name = "user_led0",
+ s" Z. o Q) E* y, R, Q8 ] .default_trigger = "default-on",8 ?/ W o! r! `/ g0 S, R1 G
},
; z* j; Z- x8 N {/ j6 `2 L4 o2 j0 m; ^" X8 }- f9 `
.active_low = 0,* a: b' I. D; G! @7 ?0 z
.gpio = DA850_USER_LED1,* N; H y0 L$ q+ C. W
.name = "user_led1", a/ ~# n8 }# \3 D2 Q2 B8 _9 @+ E. y. ~
.default_trigger = "default-on",, g# G( P, Z/ d; V
},
, w$ ]' G0 {6 \& F% I* c$ A3 l {
{, l% K1 [% i7 {. x' o+ ?3 x- w- Z .active_low = 0,8 S6 G% _2 R5 g- c8 D. Y
.gpio = DA850_USER_LED2,
Z8 [9 \* n ?' i$ I .name = "user_led2",
. g6 r5 |3 U( b# h/ H8 o .default_trigger = "default-on",
& T; ~ f7 P* Q. j% U$ G1 l1 Z },
9 e7 Y) g1 z! o6 p0 z9 J/ n {3 H+ c4 w8 O* ]7 i! ?5 h
.active_low = 0,
" d* r) [. K. C0 r .gpio = DA850_USER_LED3," B9 m# U+ M/ F( o
.name = "user_led3",3 o3 O- }( {1 ]) ~
.default_trigger = "default-on",4 ?# W6 h: c& Y9 f# Y1 t
},
9 Z: F9 A+ X9 n- ^! T3 [* Q};
2 t# D+ e8 v# \9 \; J6 C$ Y- J. [' N- R& }4 k3 U
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ d7 X) r' U9 r2 t. Q7 y
.leds = da850_evm_tl_leds,5 j! [1 \8 P- K# {+ o& \3 g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 F" w6 d1 Z8 m) K
};2 M: \1 l d2 L; j+ d( T! r
' X! T0 c8 Q* H6 _: k: I8 E5 H0 [
static void led_dev_release(struct device *dev)2 Y/ R! \( ~+ r1 [4 V
{
8 M, F* A* Z8 |: i0 L};
$ {* e7 F6 h5 Q4 Q# E
/ J) }! T# U, r' a# j/ `5 \$ vstatic struct platform_device da850_evm_tl_leds_device = {
& T9 d" k- [9 \" b# z7 _+ [ .name = "leds-gpio",: _$ B9 w" l! H4 v
.id = 1,
/ t: C3 R$ N3 a Q) P0 B' L .dev = {
) P& \% O. U F .platform_data = &da850_evm_tl_leds_pdata,
5 t+ |5 k6 S1 o( K: ^' U( [ .release = led_dev_release,0 c! I' k5 ?! I
}, _ \* X) n0 b! [" _ m: V+ a P
};
5 |2 V T. q: K: k+ K: X% @6 D
7 I# O" a: r3 \, w: tstatic int __init led_platform_init(void): m. l6 a9 h% Z& \& L
{
9 s7 z* f, m2 ^# W/ [ int ret;
4 x9 ?: i) s( [- u& l#if 0
7 J% ^2 ~ W( f" r( b- M. m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, W1 Z! v, x4 m$ D: S9 B
if (ret)
7 y' I6 v1 F9 f: E3 _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. W- [' j i* a& z+ Y3 C$ R) d "%d\n", ret);
; W) Q% Q6 j. }' L9 J9 Z; _2 _#endif" S+ c, W% }& [# V1 c
ret = platform_device_register(&da850_evm_tl_leds_device);" ^; g) I8 Q7 m
if (ret): [2 J/ n. D+ @! u. H# l1 Y% p( W
pr_warning("Could not register som GPIO expander LEDS");: m9 \! F8 |( V* n4 B8 q; Y! u
else- H( p. I# e/ d1 p' a
printk(KERN_INFO "LED register sucessful!\n");
9 \4 ?( n9 v) _; [
, W, W6 s0 t1 Z3 K return ret;
: X% b1 a- Y" Q}
( h$ f1 B5 t9 L4 U4 G# `3 l0 q6 e3 Q4 S6 p L
static void __exit led_platform_exit(void)
5 i; N0 d5 Q) c+ D& J6 Q$ Q{
6 `& o& H: X: n4 p0 B9 K( w# _ platform_device_unregister(&da850_evm_tl_leds_device);
' B) \2 f% c7 }) }1 d- ]8 u; {1 \% ~6 y1 n
printk(KERN_INFO "LED unregister!\n");- v6 X$ J9 }6 G. p- B
}
% l4 o" |& q& J S1 z6 j8 L4 Q2 N8 f' d4 S- G
module_init(led_platform_init);
( r: o" c( e' |6 w1 y$ b2 j+ ~- Xmodule_exit(led_platform_exit);
5 q2 l& U4 G3 B+ |1 g
" Y& _! ]' D9 u$ aMODULE_DESCRIPTION("Led platform driver");
5 j5 Q9 M; m( O# d/ x; NMODULE_AUTHOR("Tronlong");
. }" A; S! J" MMODULE_LICENSE("GPL");
" ~/ Z& f) @. L$ f: Q" \$ i7 d2 \- m) ]: Q, w; L: L4 i0 \ f
|
|