|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ g3 e3 E8 z! s3 T9 n#include <linux/init.h>
6 n$ b( J& e6 R/ l5 n#include <linux/module.h>- z- L7 f0 S8 Y% g+ B5 u
#include <linux/kernel.h>
0 E! U8 B/ y1 C" B: d" c#include <linux/types.h>
8 x# _& z m, }- G8 r#include <linux/gpio.h>
( R% Y( g$ i4 R# L5 [% Z, ^#include <linux/leds.h>
4 _4 [- J# y% [- M; T#include <linux/platform_device.h>
3 t8 x* [4 p3 R! Q
% r1 H( v9 q4 M9 b% H; W% A. a#include <asm/mach-types.h>
3 B! q; @& l0 Z+ m0 g#include <asm/mach/arch.h>- v$ F8 H# w7 T
#include <mach/da8xx.h>
, ~ K7 r& h9 Y* L9 {* \4 k#include <mach/mux.h>
; n$ P$ T7 B. P: `
0 `% A6 C' w; T- S8 O1 j+ N4 d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ [- V8 Q1 W Z0 i" o% w
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ D7 i. X. S( k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! @ Y; o2 K p1 n$ k: `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" K6 l# k- ?( B+ M8 l
- k; ? m3 u- f* Q! N3 V& W7 B/* assign the tl som board LED-GPIOs*/0 j# Y2 P" O0 v0 F
static const short da850_evm_tl_user_led_pins[] = {
) @2 o+ R; _, J% M" i" S; D7 K( X/ a /* These pins are definition at <mach/mux.h> file */
1 s+ H f4 r; W7 [4 g% o# t2 i DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% D3 g7 w! U ?3 q( h: m- Y
-15 W m* q. r4 u0 j; `) }9 M
};
- M0 f7 Y' s+ H# s4 V9 Y% Q L. N4 b& s4 E. O0 I
static struct gpio_led da850_evm_tl_leds[] = {
* B/ E8 `0 l' M. Z* m! i0 h {
4 o0 E& R* }5 f g+ `3 x6 R- i .active_low = 0,
! h, H. B1 o. p1 l% `: n .gpio = DA850_USER_LED0,
* y1 i4 i5 O/ R3 G1 Z .name = "user_led0",! ]* k0 x* f) _0 ^7 i9 _7 |
.default_trigger = "default-on", @$ C$ B5 t8 [ V: g7 G' G- q) f
},
- r2 I- G- W0 q5 x3 I2 _! t {
# [* c9 z$ h1 J6 j .active_low = 0,
; _" x. {8 b) H1 `* ? .gpio = DA850_USER_LED1,
$ z% T0 n& L7 H .name = "user_led1",: J! W. J5 `, B. P
.default_trigger = "default-on",
! f7 S" w* i& e$ r },
/ V+ p$ V: d* ~+ `+ \3 @ {
e5 i6 V4 L& u# p, ?! w .active_low = 0,
/ d& _/ D8 F* ~ ~ .gpio = DA850_USER_LED2,6 |% G5 Y, A4 {8 a9 U
.name = "user_led2",! N, M* t0 W: A4 b9 @
.default_trigger = "default-on",
5 ?+ | [; V8 W1 } },$ o2 A1 X, e$ b x6 F* j. X+ V
{
$ t" y% j, Z# l. `3 D .active_low = 0,
j7 \) d a$ O5 w, S% F! } .gpio = DA850_USER_LED3,
9 I. R6 D! f5 y+ J .name = "user_led3",1 M# S. W$ Y1 y0 c
.default_trigger = "default-on",
4 c; y/ }8 O. D% D! j) P },3 s: K0 R/ D5 Q/ a9 q% u1 g
};
$ V2 d' a; { Y# N1 u) [' a: f
, M: b2 C9 K1 y6 {/ n2 q B: u' Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( O# ]+ y) X0 i .leds = da850_evm_tl_leds,7 Y; q0 o4 ~5 ~) j7 d! P5 h
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; Y) }# t0 c9 C+ b F
};6 C; K% V) j7 Z0 H2 L& u# k8 N
& j/ y9 G: X7 I Ostatic void led_dev_release(struct device *dev)
" M: g7 S1 ^' B( t{
9 h; j3 s7 c1 g+ d# X2 z};- B8 |9 L& P4 m3 k7 ^ p
' o; X0 W1 U Q0 G9 {static struct platform_device da850_evm_tl_leds_device = {0 |1 \4 S6 r8 }! [4 Z
.name = "leds-gpio",
, e& x% f) c* n$ g f$ d( y) O' g$ M. T$ f .id = 1,
& d, ^& G; l1 B9 e8 S0 W& @ .dev = {
# m, v) f- A, z8 _, r0 a .platform_data = &da850_evm_tl_leds_pdata,
" |, m' e. _: p* d9 y) j. Q1 P .release = led_dev_release,2 M! b& ?9 i- ^
}1 H+ H( B" H7 H
};+ {! x: m2 _8 P8 Z
" k& r+ }% u* d* b7 m D
static int __init led_platform_init(void)
/ w6 a1 B2 t0 I: X2 L{! P) ^! W6 g# j: r" A
int ret;
2 J, Z' @& }' P: s0 ~8 l#if 0
4 C: @0 A6 {. r0 M, a4 N ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# _( s9 h9 l. K- i D8 y if (ret)- X. E F) l) Y1 @* f5 q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 }8 t( |/ W5 \/ | "%d\n", ret);4 l4 n0 \: }/ l( b6 |7 I: B7 T
#endif
' d% Q3 G% g6 L8 j5 V ret = platform_device_register(&da850_evm_tl_leds_device);8 G3 g g( z9 A; J. W7 |
if (ret)
/ Z* P* W; j5 T3 W0 W6 ~ pr_warning("Could not register som GPIO expander LEDS");- U$ y1 N: q$ X
else9 F, Y5 b( ^4 ^3 P/ D6 O9 O$ ?
printk(KERN_INFO "LED register sucessful!\n");. _& @! Y( e. s3 h3 @- V2 ]/ j
' f# ?5 w/ u$ f& ?( w+ {5 B return ret;5 w$ M% r. U" C4 r6 J2 O- [ L$ N+ c
}1 k5 T! ]; j+ c0 w
2 W! k3 X9 Z; @6 e3 }+ c3 r
static void __exit led_platform_exit(void)
5 g F* [% m' l2 J6 g2 H{/ a+ M6 U9 F1 A" T' f' M, u- l* f0 \
platform_device_unregister(&da850_evm_tl_leds_device);
5 p& J& e/ @0 Z1 s' x. s' x- Q5 y3 l( u
printk(KERN_INFO "LED unregister!\n");) I9 R) J4 ^! D* }# X3 P
}
: E0 |5 N) p" N8 s9 _1 E8 W( K& \1 B$ y; B9 x( z: V3 u. ]( M, V
module_init(led_platform_init);
6 {* d2 |# Q" l( [( Y. w# A* \$ Mmodule_exit(led_platform_exit);5 P& B. x2 M$ Z5 _# C; H3 _6 \
3 q& R/ @8 W. h3 S9 N8 jMODULE_DESCRIPTION("Led platform driver");
/ A `$ b0 U* J4 }! Y5 dMODULE_AUTHOR("Tronlong");
: R! p5 o; [8 tMODULE_LICENSE("GPL");
2 N- C: e; L6 [! `2 A- Y/ o2 \- R A8 m! t3 r
|
|