|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( N! Z0 d0 T. }* z6 `" n
#include <linux/init.h>; m( W' m0 I" H8 h) A$ v% F0 Z
#include <linux/module.h>
8 p' ]4 r# F0 I1 ~+ ~#include <linux/kernel.h>+ V! @3 M% Y. ^, e, Y2 l
#include <linux/types.h> X. g) ]7 F, {: ^
#include <linux/gpio.h>. _8 o3 D+ A! E6 T( m1 L
#include <linux/leds.h>
' O3 u, n; r6 b3 @; X#include <linux/platform_device.h>9 d* X7 z2 u) r
. A) ~, L/ u/ t6 D, p4 c#include <asm/mach-types.h>
: d* v) D% t6 W2 { ?! ^! b2 P#include <asm/mach/arch.h>! ]7 d" k# b: }4 q" B8 i, A
#include <mach/da8xx.h>
4 I: r* S4 x) j$ U+ {#include <mach/mux.h>
' w6 n! n0 K8 p) ]+ t5 `: b! ?# R# X/ o- E# h; L7 {8 c% k! [" {! E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! r2 K3 s, r8 a i- t# s1 x#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, ]0 D+ a' `8 |$ ^- @' d @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 z4 d+ v @( @; P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- a/ B' z8 v! ]$ `; c) }; u& r1 d$ f4 z3 { D( g9 S( j
/* assign the tl som board LED-GPIOs*/
9 K' Q' u" c* H) \$ t' Mstatic const short da850_evm_tl_user_led_pins[] = {
5 g; k/ z5 w/ I, O/ c& B& M /* These pins are definition at <mach/mux.h> file */% b, U9 y9 B* z O2 |
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: V+ |# Y, G3 W6 u. w" X -1
0 l& C: f: h& E2 }0 a0 v};
; k- U. A( i5 T% l, N& S$ m% T$ `. _4 z! f/ j p
static struct gpio_led da850_evm_tl_leds[] = {* o' N8 _9 e% s, G/ c2 \$ n
{: e; V; ^& U# G3 }& H/ W% _: K/ Y
.active_low = 0,% \& e& \0 r" }& Q/ a
.gpio = DA850_USER_LED0,
( O3 v4 x9 h# N1 q2 [) K7 ? .name = "user_led0",
! }* v! W! v1 ^9 y* m0 b1 r# U .default_trigger = "default-on",: G Z( \+ u% Z: U$ `/ O3 ~% ?
},- _( G/ h8 u# x/ y" e
{5 l3 G' A) b3 m3 }0 Q; c
.active_low = 0,1 e# c1 s9 o* Z- u: Q
.gpio = DA850_USER_LED1,
( i: M+ R! a% X/ Y .name = "user_led1",. U# x E. j( P; R7 o( ~
.default_trigger = "default-on",. S/ o5 a+ O, N, _0 w
},
. J! H! A( T& S: D {
- u/ d) ^+ B; H) n, v v .active_low = 0,1 ^; y) ~) F; H! i6 H7 v: K9 i% {
.gpio = DA850_USER_LED2,' h. G( F; `& |. ^* U$ c5 A
.name = "user_led2",* P& v/ `+ T+ M. H \8 h- k
.default_trigger = "default-on",
' _# f) q2 J. x8 S' f% c/ G },
L; }( L! H2 j1 A {
6 O3 }2 q' C8 `4 `+ e! |- U. X .active_low = 0,
+ }7 n1 j3 E# g3 J2 n2 C3 ]9 n .gpio = DA850_USER_LED3,' S3 e8 R6 T3 E1 E% E
.name = "user_led3",
z- e9 U$ U( D+ [6 S .default_trigger = "default-on",
- n6 w% j- V. ?+ ?( o$ B( A },
4 q0 Z8 K/ D, F( x' O! A4 l' L0 y};
* U. q: B+ v/ G4 f
( u9 q* M% O- M; z. `+ G7 V3 [static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" ]6 W1 o% h S' |" _7 H/ q
.leds = da850_evm_tl_leds,2 w/ p! A6 ~/ U+ a
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 {3 x4 n# P& `+ |
};
0 O+ w- O& j/ V0 ?6 }& M# h* k
% _ `- o" p* g7 d3 T$ h) nstatic void led_dev_release(struct device *dev)
( i( G0 P3 W* U# E, y5 g3 U6 n. ?- Z# Z{
( `; l- O6 Y! p% i: u4 |9 Q};
+ S* i! O; F! d V
" t. f+ r( A% q; Jstatic struct platform_device da850_evm_tl_leds_device = {
1 T. d; m0 K$ W. N1 i2 \ .name = "leds-gpio",
2 J2 F5 H( Z; K8 |" c$ b0 X2 E! O( { .id = 1,
2 J- v8 M) N3 R" Z) t0 B- s5 T1 ` .dev = {
6 ^* Y D+ K J; L% M- v. ?; ] .platform_data = &da850_evm_tl_leds_pdata,* P$ b$ i9 X$ J, N* o
.release = led_dev_release,
7 [3 I9 _( e7 _ }! G- V- ~) p L- O% }7 |9 _ d% n
};) F: s' @! E( N& ]4 K; K; Q" Z8 A
/ L* M, I7 V& s; b$ P- qstatic int __init led_platform_init(void)
! F* Z% g4 M7 d/ s' [: t/ F{
4 o7 E' [; B3 L int ret;% g$ w u% _' k$ `
#if 0
! C# q3 C# S# W+ |# X ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ {3 [* O8 l1 y* P' V8 P$ m# g
if (ret)3 d. H( Q! t# s( K# t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 a4 z9 [" C9 X- M, M
"%d\n", ret);
4 l( O S G- f# g' k#endif6 U( Q- V4 \& z8 K2 N3 a* G
ret = platform_device_register(&da850_evm_tl_leds_device);
) ^% f- e ]6 q- g8 j( j if (ret)/ n5 s' C! T: q/ i
pr_warning("Could not register som GPIO expander LEDS");! ]; q0 P& W% W
else3 R r. T5 w: C6 E+ Z4 X. E
printk(KERN_INFO "LED register sucessful!\n");
/ R6 R" a1 w% |# ]# O1 `* z |2 u# ?& e r3 Q3 Q( Q5 X9 U
return ret;9 [$ l, @; [: m
}
* j2 l+ @1 j; b. e4 g5 H2 B9 t% E- l2 g W: a
static void __exit led_platform_exit(void)8 v( H9 V. n9 P) t
{
7 e1 s' O. k) Y2 [( O3 u platform_device_unregister(&da850_evm_tl_leds_device);
+ d* k G) b% M% q
. H( w# P5 w) [2 ^ printk(KERN_INFO "LED unregister!\n");% n5 x) Q- I# Y, ^
}6 B5 h8 _& l. E: r
, S: O% p1 ^. ]
module_init(led_platform_init);
# g# P' v. L) l" p& q ?module_exit(led_platform_exit);% u, T5 z5 a$ A- {# x
, T( j( w2 O. IMODULE_DESCRIPTION("Led platform driver");# u" Z$ ]0 ~: V2 I; N
MODULE_AUTHOR("Tronlong");- b% U# N1 R: C2 I7 b: e0 a
MODULE_LICENSE("GPL");
8 d/ e, o7 F! x( f! }1 U, ^1 w5 H# A* B
|
|