|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ B# H! p# I9 D8 j ]; L0 D+ k8 y
#include <linux/init.h>
' N+ v1 q( [- c9 O2 u" ?#include <linux/module.h>
, D1 }7 K/ W2 | s#include <linux/kernel.h>
' z, [* k* g5 F4 u5 @#include <linux/types.h>( t! ~0 V8 @2 A7 D! v, K3 V$ e% v4 F4 T. Q |
#include <linux/gpio.h>
8 X1 O$ q2 z ?% q. v#include <linux/leds.h>( ]" o5 G! b$ Z: x; A$ j3 d
#include <linux/platform_device.h>
: }7 a2 g6 @ l& T8 O( S: Z1 S0 X6 U* h- v! K/ B3 D9 b1 \
#include <asm/mach-types.h>6 z3 p( M- x1 @8 J* H. Z
#include <asm/mach/arch.h>
2 Z' u( r! B- M' @& u: c3 @+ S7 L#include <mach/da8xx.h>5 \; k7 c1 B* R7 L
#include <mach/mux.h>8 ~$ V; E2 q0 C2 v* `- C
" q! I4 D: E; p" B& k
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( k b. T; R; r$ |#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ y2 a6 F+ Q* X3 R9 e; F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ B& u! n: V9 \, I1 \$ ^5 `+ O+ Y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# p7 k. X# _( m' k6 A0 q- ?- q
! S: i8 v7 n8 w: `' E8 l/* assign the tl som board LED-GPIOs*/
9 V( Y4 E1 e: [5 @static const short da850_evm_tl_user_led_pins[] = {
3 k& _9 V; Q e) c /* These pins are definition at <mach/mux.h> file */
" ^- J5 K% ?( p0 V4 j0 k6 n4 h DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ S: z1 G! q" p -19 t2 ?9 f( c7 F
};
8 f9 R7 n3 c1 j$ q" b1 `" \( }' b7 W) Q. D2 G2 t+ F1 U3 ]
static struct gpio_led da850_evm_tl_leds[] = {
9 a$ g& B- l8 s% y$ A8 s6 H' b {2 q! x# B1 i- l# T
.active_low = 0,6 [7 ?& P: ]3 c0 [- e& K
.gpio = DA850_USER_LED0,+ W' M' r. v. e$ y" e% O$ t
.name = "user_led0",
+ y0 D/ M+ r) ^% s, C: V- N .default_trigger = "default-on",
, t# \) S1 Z3 m. O) t9 L4 W },# f4 k4 @; v$ A$ _9 R! G q" [
{
1 r$ P4 F; {) r .active_low = 0," N% {4 D5 O. m* j
.gpio = DA850_USER_LED1,4 X2 q! X- ]; e
.name = "user_led1",/ f. n- i C C( @4 Z4 @. G/ H
.default_trigger = "default-on",
7 R8 @ q9 [; { },
& t% u; A1 g2 e1 j2 Q4 x7 t- z {: B2 l$ k6 g+ ~* t+ Z: k
.active_low = 0,
0 V. E+ e, d/ O .gpio = DA850_USER_LED2,1 Q. Y8 I* r4 O& T
.name = "user_led2",
6 a' U, x% C3 k2 z K# H# N; V; T .default_trigger = "default-on", a" H, P. R' y/ [$ j+ f2 Y
},8 m9 s" ~6 h0 u- v
{. m3 x" h1 q1 S; d- V D* c- ^3 o
.active_low = 0," a2 {' e$ Y# s, v
.gpio = DA850_USER_LED3,
* m, p, j% H( `, R6 N& K" B8 I .name = "user_led3",! n' i2 Q( k: c; O0 l
.default_trigger = "default-on",
$ n6 s7 n# Z6 ~0 J },( I! O$ u3 a, Z9 N# i/ k, D
};
7 n( O2 m( G# i, B% H7 n' e% M; ~4 i' c
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, t( |, @+ `' s7 ?& \ M .leds = da850_evm_tl_leds,
6 k8 D: a2 U3 x1 U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, ~2 G* P( }7 e y: I: g& X};; d. r# p4 o$ v3 D, j |) Q) d$ J' a
! R' w& ]$ q1 ^' P
static void led_dev_release(struct device *dev)
' H4 d* `3 \, `: y& C" @( ]6 X% Q{
! O; ]6 O3 ?, Q/ J. o9 Q) X};
$ Q& Q/ C8 I" w' A" l) [
9 z `3 t4 _8 E9 Q5 Lstatic struct platform_device da850_evm_tl_leds_device = {
/ Y X8 |. L$ y6 Z .name = "leds-gpio",- L- ?3 T6 w4 X9 P6 B% Z" @3 _
.id = 1,
8 \1 r w. a! U .dev = {
6 t% p; ]4 _$ }! b: W7 @: V .platform_data = &da850_evm_tl_leds_pdata,+ \- L1 w; c2 ?8 Z- R* W# D1 g0 n
.release = led_dev_release,9 |5 ^" K5 D8 O; l2 I( y
}# [. `5 p) x( G+ S, {. I5 U* x
};2 o7 P, `( C( N2 a7 v% c4 V% I
; @" V2 h0 |. y9 B. \: c! Kstatic int __init led_platform_init(void)" ~* x0 M$ Y+ K/ N! S, i; ~
{/ W( a9 b5 ?7 t5 C
int ret;% ^2 i3 _& Y6 |% ]0 F8 M
#if 0$ W! F- y, {- w* Z* \; `. S& g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" J2 M% z F4 I) ~: y; U3 u1 M, Q
if (ret)
1 D+ S$ ^2 _) m2 d- A' z4 H pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ @* ]0 |" O! y2 q. h2 f9 y "%d\n", ret);: ^1 e# b+ T6 h9 N( K
#endif |+ v- \7 c6 M9 ~
ret = platform_device_register(&da850_evm_tl_leds_device);1 y ~6 [, {( y
if (ret)! C5 Z8 E6 C- x8 B p' ?5 |
pr_warning("Could not register som GPIO expander LEDS");
3 }0 n+ u" N2 o% U8 D else
# A n0 d$ s9 b9 y& {+ b) ` printk(KERN_INFO "LED register sucessful!\n");+ k/ u2 s7 q, _. x4 b; D+ x
3 P- Y" n/ w5 v* _3 y# z% | return ret;; b: k9 c/ F, z
}& {* g/ V4 \- z
% t7 V7 g/ g$ e) ^; F
static void __exit led_platform_exit(void)
2 e; B' I: G3 u9 w5 O{5 k0 ^( h' O/ q+ G
platform_device_unregister(&da850_evm_tl_leds_device);9 I$ @. p/ E2 Q$ Z. x
# x& t* `; @9 A$ a9 q( a! y printk(KERN_INFO "LED unregister!\n");" y- q& v' O5 u8 ^1 Y
}. m' N, m( i2 l5 q" Q" f
$ G& J0 Q7 r6 ^1 n9 n% Rmodule_init(led_platform_init);
" ?8 _4 s9 f9 Imodule_exit(led_platform_exit);7 O6 p0 g" Y2 R: p2 i6 I
/ ]% x$ S# \; _& D
MODULE_DESCRIPTION("Led platform driver");( q* E, g9 O1 B7 v. g/ n8 a
MODULE_AUTHOR("Tronlong");
5 v1 D! k& N: j$ q. b6 T1 pMODULE_LICENSE("GPL");
3 _2 R+ X0 J. H$ p1 W% Q" U7 z6 z& L. J' O8 l8 { p; y
|
|