|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 |6 [3 h; f; b* h#include <linux/init.h>* i0 T0 R' l. A* r
#include <linux/module.h>+ t+ M$ g3 G4 {" v( W- w
#include <linux/kernel.h>" Z2 B/ E/ Z' x0 ~- o
#include <linux/types.h>
& x" S4 E3 F% R7 C! {9 y; h#include <linux/gpio.h>
3 G f) T$ s. a' W/ f#include <linux/leds.h>& L) H# v) O$ R5 o+ } J& n
#include <linux/platform_device.h>
: m! B) D: e) K4 x0 D
0 K3 j# a/ q2 [5 L7 `! I#include <asm/mach-types.h>) G& e3 w, F5 w4 }3 s7 R# [& U
#include <asm/mach/arch.h>
3 v4 [: H" ~/ s5 E#include <mach/da8xx.h>6 T; ]$ D9 f; x
#include <mach/mux.h>
4 v8 G4 d6 z6 Y: e" e3 X: F, k4 o! F7 y; W) R' o; Z/ J7 I( W
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 m* g) m/ t) u/ o1 j6 i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! m+ g9 u4 }% @9 s5 x$ m3 t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
t$ U( Q. j; L9 |#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 o! M% ]" [6 ~5 ~( }, z( S' d4 j' R
& I- r% s, l% W" @2 _/* assign the tl som board LED-GPIOs*/6 |* Q. Y! C5 n/ K
static const short da850_evm_tl_user_led_pins[] = {
$ H3 `& ]# C4 L; z0 w5 S& Z; v1 }7 [9 R /* These pins are definition at <mach/mux.h> file */
; s: O0 M) O ?1 W; Z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 r4 F7 A* Z; {0 s# G" ^ -16 h8 j7 W* D# H
};: p/ W1 i# v6 s6 H9 `7 U
; Q9 P4 C. v' o, ]& p
static struct gpio_led da850_evm_tl_leds[] = {& W& g/ y, H5 I+ M$ k1 A R2 ?
{
7 l8 q0 J' V8 e .active_low = 0,& P: F$ p1 M2 U$ y. T) A
.gpio = DA850_USER_LED0,+ d x9 W# e0 i. s3 d) @# Y# ^/ v
.name = "user_led0",9 Q( A7 E" s0 ~6 a* L
.default_trigger = "default-on",& M1 p- K% ?* @5 j
},
2 S4 B- D" g7 ^3 ` {2 h( w7 y8 U! x* c
.active_low = 0,4 r6 z/ ^. K6 ?6 p$ f' L( {8 F( @) a
.gpio = DA850_USER_LED1,7 j8 c2 V- c- r, a6 q& E
.name = "user_led1",7 L; G: c) i8 z0 M, ^" @) \7 J
.default_trigger = "default-on",
$ S% b0 q j4 P5 F: U },; n/ n) ~$ t2 T+ Y, G. ?
{
2 M6 v+ h: x9 c3 e( M3 ?3 K .active_low = 0,8 p/ B8 R3 ~% h$ }1 t/ q% p
.gpio = DA850_USER_LED2,
7 h8 m# d! t, J/ J* l0 R% y .name = "user_led2",) l; F+ Z* j0 K
.default_trigger = "default-on",
0 M% A2 s- @) D0 ?( D3 K6 Z0 g- r },
0 X5 J" z+ S. g9 A7 y9 F- w+ b {& D) x8 o$ y& ?% g
.active_low = 0,; J `& h. k) Z
.gpio = DA850_USER_LED3,
+ A; ?# {0 T$ w- j# T .name = "user_led3",3 v# f' r: Q3 {( R, u! c
.default_trigger = "default-on",( E& A( O& ~- O
},9 W0 S& e. d2 g; }+ b( M3 y
};9 B/ I) o. Q4 \3 J, g' \4 x, a% q+ w
7 [ {0 {9 A5 n! N) ^/ N; Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 r8 U, S* Q, e6 [9 [
.leds = da850_evm_tl_leds,* R3 t: D6 I3 b0 G6 g7 s7 a3 J. J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' Q" @" Q. Q ~1 e
};
3 H! t6 v! }$ d0 X; U7 V ?, _& ~/ w6 l
static void led_dev_release(struct device *dev)
9 C2 O, W" R3 Y9 P{5 F) s( O& }1 |1 }" f( W7 }3 M
};( W! j( ~5 P' E
9 a# y3 q$ M# T, y2 \: Istatic struct platform_device da850_evm_tl_leds_device = {% R* ?0 j9 ^4 Q* |
.name = "leds-gpio",( G1 e1 ?' K! x! z" z/ G& y! A: C
.id = 1,; u) Y& ?$ ]6 Z4 G; f4 }
.dev = {
7 ]7 n1 d: a! x0 Y9 r0 K O .platform_data = &da850_evm_tl_leds_pdata,# E( _4 b' h7 G! A; s. c
.release = led_dev_release,9 I; ~4 |8 B$ l* w6 b4 f. W( x1 W
}! f0 @6 L9 X( N3 R
};% a) }! S% O) V- E/ R% K4 U" j
7 G* v# h0 [8 m! y$ ~) ^static int __init led_platform_init(void)
8 J% h) d5 M+ H$ x8 u( f0 F# k% X{
% z" Y: }, v8 Y: C int ret;; d1 w4 N* W( e6 P( J3 E
#if 0
% i0 @8 \+ ?$ H% c. `1 g: } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ }8 ~5 B- Z/ h* z- ~6 s
if (ret)) b4 e4 v! h6 a( T5 w6 ?0 v3 [6 a* I% K
pr_warning("da850_evm_tl_leds_init : User LED mux failed :", `( T) k6 e4 E e; U" r, Z
"%d\n", ret);
5 q) R( Z- M! m+ K! _7 v4 f+ j4 v#endif) P0 j( g3 ?2 I* b" f
ret = platform_device_register(&da850_evm_tl_leds_device);- a" [/ ]( {1 D$ c7 e
if (ret)
/ d _7 T- K. {6 k. [+ P pr_warning("Could not register som GPIO expander LEDS");! R+ r3 d: y7 p, H2 h5 ]3 [# J- h. ~$ V
else, ~- A; C3 J: o' q
printk(KERN_INFO "LED register sucessful!\n");6 g) N3 |9 k& k( B
; Q; [3 I; r' U. O- Y' A return ret;) g1 p& r& U& G" v5 J' p- _6 a
}
% N0 A! D+ D/ s0 S# o2 `
8 u3 Y: Z9 \0 a9 B& m1 Ystatic void __exit led_platform_exit(void)
* c& l6 I/ j9 T! ^{
( B4 F. g* c. r' z8 |4 h4 u platform_device_unregister(&da850_evm_tl_leds_device);( L+ C' d, `4 ~! |
5 H- [7 p$ f# q# S
printk(KERN_INFO "LED unregister!\n");" {+ G* K0 J; j
}+ M. D( g0 G/ F( ^" J- W9 G. W' {
E; p2 ?( j. G8 g- x
module_init(led_platform_init);9 L; j) `& v& O1 C% ^
module_exit(led_platform_exit);
! d# L$ f6 K+ u6 F9 l* X
2 d3 w h: w* d+ ^1 K7 G/ S TMODULE_DESCRIPTION("Led platform driver");
6 S+ f: q+ V% ?$ ?/ CMODULE_AUTHOR("Tronlong");2 y) W/ W: n! P6 E& B6 E
MODULE_LICENSE("GPL");& _1 {6 H, u6 {
" G) I! J! t v# k |
|