|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 D* n. s0 a8 G& n E( B#include <linux/init.h>6 i" X2 K1 U& h J8 h
#include <linux/module.h>
4 n* I) i; C! X2 p#include <linux/kernel.h> ^ q" y: |$ G# D! @
#include <linux/types.h>
1 p3 U" J ^/ R: q3 R#include <linux/gpio.h>
* R8 D8 o+ U" B! V* F/ {#include <linux/leds.h>
4 s- g: L, L3 \% R4 A2 u3 k#include <linux/platform_device.h>4 Y# B+ F$ u" } Z0 A$ k$ s& b
( p0 l" O0 y) l2 Q) i! U
#include <asm/mach-types.h>
0 m6 _: N) J& n6 i @3 ~#include <asm/mach/arch.h>
7 L# m. V: a; W% o5 v- M2 |#include <mach/da8xx.h>4 v- w6 _' D* z' q& L$ J0 o1 K) H
#include <mach/mux.h>
' V7 z0 Z. _2 Y* w- g+ [' z
+ s P1 \, E/ u' r. J8 j#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) O6 U) }- l: p9 b; j: Z8 A( v#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 q* c/ P: N4 x8 E0 }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), S- R: T+ }) M1 w6 ]! Q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
f) z# w5 {8 Y' T* \7 ^: ?
- Q* e6 R% N8 C/* assign the tl som board LED-GPIOs*/
& X, |( N: c# m9 `" w2 g) ostatic const short da850_evm_tl_user_led_pins[] = {
- b ]) J" D$ p6 f0 s /* These pins are definition at <mach/mux.h> file */
/ U5 I/ _6 g) t/ E+ l) [. { DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& I- h. d. j# N# { -1
) q, u; j2 S, Q ~ n# z7 D8 z5 s; h};
9 Q0 ~4 D4 \& h# I# D" q% a6 c& Y$ k5 B
static struct gpio_led da850_evm_tl_leds[] = {
) ^; K' \8 _! `! G4 S {/ H8 z$ O2 x* R1 N, D( V
.active_low = 0,7 `% a7 N+ P9 m% |( y
.gpio = DA850_USER_LED0,* w8 W8 R9 X5 x+ @" s; y7 V# I
.name = "user_led0",8 n7 U; } w( \8 [/ h/ N
.default_trigger = "default-on",
5 {, D ~ E$ u: e2 ? }," @0 O( A0 O& R% {
{+ k/ E& s" F' v# o( \
.active_low = 0,
- Q+ s0 v/ `0 k# F* {2 e, l .gpio = DA850_USER_LED1,
v) i, ^% Y0 b; P% p .name = "user_led1",9 w5 P" v: M. [3 ~$ A. U+ }" g
.default_trigger = "default-on",; p% V; V4 z4 |7 U! Q
},
8 F. O; _8 V5 M- u5 N6 ~ {/ V: Y) _* a3 |9 t! d/ j2 H5 L+ F
.active_low = 0,
% |8 f6 q- k+ G8 e3 z# o: |6 C# W8 C .gpio = DA850_USER_LED2, X, F H" Q+ k7 u* L: R
.name = "user_led2",
7 |1 ~# t% r# k; d' x2 m9 X o .default_trigger = "default-on",% _9 Z' |; c& t# B3 c
},6 y. a1 q; t7 B4 G6 |* U
{1 A9 w* Y# C7 B
.active_low = 0,
: ?. b6 _, @: F& T .gpio = DA850_USER_LED3,9 g8 A+ U0 C6 U& {9 T! g) c/ @
.name = "user_led3",: Q. W6 H) Y6 y3 h5 z
.default_trigger = "default-on",
8 a5 h" W" E% p/ k; E! m, j/ L! C },. u* b# G7 R1 j$ h; b8 }
};! V% `# A' L* x5 Y5 F
8 f) j+ s6 e: {6 P* Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: u& @. L1 T, h; K. ]) G9 [
.leds = da850_evm_tl_leds,
8 W8 J- \0 J8 d; ? .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! _# p3 \/ l3 N8 b};
- r6 u8 \1 K" U, p, g' U1 l0 v6 T4 H6 _
static void led_dev_release(struct device *dev)4 ?$ f* {3 W. v: d+ N; e
{
7 r; ~ {* h' F% E3 n6 A$ h/ S};
# G' R+ g9 D# V; Z5 K: |' T- U' j$ @/ x2 q
static struct platform_device da850_evm_tl_leds_device = {
& ^$ o( u: u8 A, m' g .name = "leds-gpio",
6 h) K& B4 C$ l) X1 ]* ^ .id = 1,
6 B k! @( B3 P( m- ]2 a4 G) ~1 ^& F .dev = {
0 f/ I3 Q8 A" }6 { .platform_data = &da850_evm_tl_leds_pdata,
4 a" o7 `- T( H J. B .release = led_dev_release,1 _7 ^5 ^$ T3 W% J: ?$ }
}
8 |, p6 I9 r! C$ n+ B% j+ H) Y};
) ~+ H6 h: ?1 M6 ^& {7 c
( d( H4 M: L7 S* d' |static int __init led_platform_init(void)
) t1 u# b+ F* g( H7 ?& N7 w{2 ^' B% ^2 [- c
int ret;
, ^/ }( B) Y( [! h: @4 _+ u#if 0
9 x$ w$ ?; S/ R1 [' g' b" L ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ k0 s( J8 M4 [9 H if (ret)8 E( ]/ ?7 ]" A/ g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ s. `+ b+ G. z [# E2 M/ v5 J, l
"%d\n", ret);
5 p- L/ Q% a. \/ H9 H+ O#endif! x0 ^, B) H; }# _2 J
ret = platform_device_register(&da850_evm_tl_leds_device);
9 R9 K/ v% d& [! a1 j% W7 w if (ret)
' C+ [' ~ c% e! l" r' R/ m8 K pr_warning("Could not register som GPIO expander LEDS");9 W1 M, I- T5 [8 w/ E8 S
else5 Q y/ ~/ r% \6 U
printk(KERN_INFO "LED register sucessful!\n");) r: F6 p. m( X9 r- j2 s* V% T
4 o. [4 Z% ~& e: ]8 ]: Q return ret;0 |+ E9 N1 ^) q' N5 ~" \
}
7 ^) ~+ n' f" L/ Y m& z3 K1 ]. U
static void __exit led_platform_exit(void)- Q- W" u* B3 ]6 b8 |# e
{& O$ j' c' M8 |8 N, J1 r4 c7 Y
platform_device_unregister(&da850_evm_tl_leds_device);
# `" z5 d- e0 a; O! L- g
; w0 y' x! _5 L4 w& n printk(KERN_INFO "LED unregister!\n");" @2 s# L! A' F
}; _1 ~: }8 s5 f+ E$ Y2 n" }
5 N* G: _! p. B7 I! V. L K
module_init(led_platform_init);/ X1 ?1 F+ ~/ e; F1 u% n* [# N- W! b
module_exit(led_platform_exit);
1 v* P+ H' W! s+ d3 n" \
! I% ~4 x# z _! S. v% {1 }MODULE_DESCRIPTION("Led platform driver");: s. g. w4 t# D% w2 _
MODULE_AUTHOR("Tronlong");
8 j4 L6 T6 n: X0 CMODULE_LICENSE("GPL");
$ ~ p( q+ B/ I4 [( R! N4 U
; A% a" \# b( }- k6 Z: u0 Y |
|