|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 M8 d5 y4 z6 x b- e/ P. X; Y/ [
#include <linux/init.h>
' l6 X0 P# e: T3 v. @3 @) f* W#include <linux/module.h>
! A4 A3 o/ }' v/ G3 Z/ P! G#include <linux/kernel.h>6 ]7 _$ ~3 g/ ^* b
#include <linux/types.h>3 k# t/ j7 Z5 F/ Q7 ?- E+ j
#include <linux/gpio.h>( I! [% `9 n5 u5 J8 A$ N# m; C
#include <linux/leds.h>1 }- b0 z* w9 \/ w" h8 {
#include <linux/platform_device.h>9 Y% u! t; W4 M
) r8 r6 [. h* R, L#include <asm/mach-types.h>
' ~$ ]5 u3 f4 e#include <asm/mach/arch.h>
6 c& D' P; l5 b( H. e/ b0 ~#include <mach/da8xx.h>
3 B! Q/ D S/ b. Y. i" l#include <mach/mux.h>
9 Y6 W8 ?- M! e$ v- A+ t1 [, {4 M/ I& C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 k2 Q3 D4 S8 O7 \3 I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ R6 P: ?* t* N1 ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ {- C8 Y! y& @. m/ }! ~+ Y: i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); r2 ]( U1 ^- l3 p$ \
( s; ~: @( k$ O/* assign the tl som board LED-GPIOs*/
9 u3 Z p" q0 y( \static const short da850_evm_tl_user_led_pins[] = {
2 B+ v( n" `- Q6 x9 v" d! e! S /* These pins are definition at <mach/mux.h> file */) N+ H" O. K& ]. J" p1 H
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- _) X& u+ b+ N' ~
-1! G! Z5 B, Z6 M
};( b m3 m4 V" o
+ G& K% g) X5 D! Wstatic struct gpio_led da850_evm_tl_leds[] = {2 z. R4 {1 E0 q: ?( T7 v9 t
{7 f! I4 P9 A/ B! i5 v- Q
.active_low = 0,
$ |3 a: w0 }3 c3 S* h3 S! | .gpio = DA850_USER_LED0,
" B% y9 [' t) H9 N" @3 l .name = "user_led0",! G& _% z ^$ P) y
.default_trigger = "default-on",
2 O! y- K% F1 q4 }, f6 \ },* j9 V* U: a$ Y
{
# @2 t% R7 n8 l' J0 Q8 \. E .active_low = 0,
) y6 G6 O( Z; R9 w; l/ r0 U" {5 G .gpio = DA850_USER_LED1, U! k+ z0 h1 H3 K% B. Z) `
.name = "user_led1",5 y$ }9 l* v2 G" U% A) u
.default_trigger = "default-on",: T' v0 ?$ F' S B5 o
},
$ \: l$ s3 Z% u. \ {
. j! }1 U% d( `- {( H7 Q .active_low = 0,
- K# r* ~/ D" F4 m( {4 a! T .gpio = DA850_USER_LED2,
: l v w' f M3 ` .name = "user_led2",
D2 s. ]1 p4 g- ^& H; S4 \ .default_trigger = "default-on",
5 _7 N6 O: j- Z },+ `: v& \0 b' w+ w: W$ z( l
{
1 V' r4 S6 l3 x .active_low = 0,
/ y! a7 g3 b+ ^: _$ F( x .gpio = DA850_USER_LED3,% M: ?) @6 {3 R
.name = "user_led3",( b, ]- R! h6 `5 Q, S
.default_trigger = "default-on"," U; K. R* a# M, o8 C% t3 I0 h/ X. x
},' Q, L! o0 A) K, w9 R) L
};. x; l/ {: C) T8 U
7 O) J) t0 y! K& S1 Z$ ]+ I; _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" {+ r8 x" O8 w0 }& j+ O
.leds = da850_evm_tl_leds,
0 r: K1 h/ u3 f, x+ ^ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 c6 m4 g# u) F};
# r4 t6 s! y3 q& ~, b( F
6 C# E- z9 i- L$ k: Z: Dstatic void led_dev_release(struct device *dev)4 W% w; c, ?2 f3 [8 N1 Z5 C3 M V: F
{
; s! G, F5 h) j9 k4 }9 P}; w3 N/ f) G) K4 _; U) ~
/ A3 b r1 U! n% H. L
static struct platform_device da850_evm_tl_leds_device = {
) U0 q1 V0 I; \+ {& @7 M1 x, d$ f .name = "leds-gpio",
0 r0 W/ w/ G6 e P .id = 1,
! P* [& `3 ]5 Y .dev = {: m2 B+ K+ q; y3 n; k5 B ~5 ?
.platform_data = &da850_evm_tl_leds_pdata,; S0 f; x( V2 i1 ^1 M
.release = led_dev_release,
T* Y. i2 N: V }1 e: ?: D& K- B
};
# I/ u6 _$ Y* r6 C8 y) f Q* e! w
static int __init led_platform_init(void)
9 {; }& S! `5 s& J' f/ f7 s{7 H/ [( |% x* D% ^, d7 ^- l# s
int ret;7 X( H4 [' m8 Y$ B7 n
#if 0
) a E2 u1 H2 J) v; z/ u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% u# z |: o; E8 G( Z; P* C if (ret)
3 a2 i2 D' h8 U2 e3 T% b Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 B! |* V0 P% @" J: w9 J% x
"%d\n", ret);- R+ |3 ]2 A7 K$ ? e
#endif+ ~+ T6 {1 Z) {9 V- ^" G. w0 `; \
ret = platform_device_register(&da850_evm_tl_leds_device);; L# Z' J$ K# f2 s
if (ret)
+ I- ~5 ` f! y% a0 X pr_warning("Could not register som GPIO expander LEDS");: x8 m) y! x# B1 `
else- X$ a2 Y5 Y6 v( S/ W
printk(KERN_INFO "LED register sucessful!\n");
* h- d# o8 @5 R0 A& `, @+ r2 o, i
! T5 C0 K) N) K2 A: J% K return ret;
+ n* ^+ `% E0 I3 [1 O; S}
0 c) ?8 W' |" ] N; t8 y- F
: l. `# Y+ I& |$ Sstatic void __exit led_platform_exit(void)
/ g( \4 V/ T8 r{# x; M9 W' A" g0 |8 q
platform_device_unregister(&da850_evm_tl_leds_device);
; q1 [! f: w0 R, E+ s! P* M8 A, S# ?" Z H. @9 b7 N
printk(KERN_INFO "LED unregister!\n");2 L& [ J, ?1 U: ^
}( X9 x: H, h: V, T+ H8 I# }
. B% {3 ~3 ~- D, H D& C
module_init(led_platform_init);5 o, A, l% R; q3 B1 E
module_exit(led_platform_exit); D+ i& E1 f+ n( I% H' A# s0 r
5 _% S4 v% h/ g4 W4 |5 QMODULE_DESCRIPTION("Led platform driver");
6 P' `" X& Q' c" SMODULE_AUTHOR("Tronlong");
5 ~; l/ H* v9 ^' \4 h3 e- qMODULE_LICENSE("GPL");
4 r2 G9 a' d+ z* T
! V0 \/ [. ?, W |
|