|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' Y1 o2 ]. d) |#include <linux/init.h>
7 ~& Q8 P( t" A3 [! [+ {7 B3 G#include <linux/module.h>8 S) m7 N7 k' R+ x8 {8 x
#include <linux/kernel.h>4 z6 W; r( }6 _8 Y( o `/ Z" g' p# i
#include <linux/types.h>
8 M' p2 j9 O( {; Z$ y: S* F4 b#include <linux/gpio.h>
5 @8 F% p$ I2 i0 [#include <linux/leds.h>+ _5 I0 u6 o* W4 z9 k- k, R
#include <linux/platform_device.h>
0 r8 e& B+ k2 O ?1 g
' i3 o9 x3 ]: S& f6 H' S#include <asm/mach-types.h>/ ?6 |" ?; K, N" k& ^9 S
#include <asm/mach/arch.h>
5 {) ]. A2 @. f4 [/ e) r4 o#include <mach/da8xx.h>1 R. j) M6 |, ~6 Y: m
#include <mach/mux.h>
8 l' Z/ c' u! V, T( {: f/ d
. j7 a" z% X) u$ r( Y! k#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 k- B7 o: P7 ^% S, o% M, H$ C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 c. |; {' k- t% N. e0 M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 ?8 v8 p* T) n+ c# a
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! @- g- p& e) L" B
, E6 J+ }8 p$ R3 a. T% C
/* assign the tl som board LED-GPIOs*/; ?+ w' d( e8 @* t) Q; K
static const short da850_evm_tl_user_led_pins[] = {
( a3 u# K) G2 `: N6 y. f8 A4 g /* These pins are definition at <mach/mux.h> file */
9 b8 Q7 X# z. O; b' A$ K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 o! k7 X* ?' j" [
-1. \3 B% H+ j5 d
};
" f+ U% t- s. o* A8 ~3 b
2 @, a# @7 z W& zstatic struct gpio_led da850_evm_tl_leds[] = {# _& f* K7 N: q
{
/ C0 g- O6 F3 R7 @0 n9 f .active_low = 0,) A: O: \; X% W
.gpio = DA850_USER_LED0,
9 D& R; _3 l, J$ w, q .name = "user_led0",8 W5 r) Q W+ Z; `. o& d. v3 M( m3 B
.default_trigger = "default-on",
- C' e4 ~) I3 `6 l },
w! R9 ^6 h" Y) j4 i8 P {: ]; Y5 K) u& r+ t
.active_low = 0,; m; o/ Z, x5 a$ {& y. `
.gpio = DA850_USER_LED1, v' z2 r- w! o0 N) i
.name = "user_led1",+ H1 ?: j- T, v0 k
.default_trigger = "default-on",# _ w2 r4 |) F
},
! W" [% U6 ?" l {
3 \% N# Q7 }+ u; B0 U .active_low = 0," ~# R! y7 J5 T+ {- g: `( j& X$ H
.gpio = DA850_USER_LED2,& N- R8 ^7 f4 @) d$ B) I
.name = "user_led2",
9 L9 n' Q, X3 H' `2 ?- i .default_trigger = "default-on",
* Q4 ?% k- [0 j3 G: f S: d, ]2 g) O: X },, N/ O# @" I y$ @; p& m0 J
{! w) a! G7 C" F3 R, g
.active_low = 0,) ^: X8 i U* A# M% U
.gpio = DA850_USER_LED3,
1 W0 M4 j: g% n8 u3 ~ .name = "user_led3",
2 B( ?6 ]( \" }; c L m! Z$ g .default_trigger = "default-on",9 Q! [' i M" L- d4 u5 Y* C6 u4 ]* h
},
8 o4 M* B; B W% H" C};% x4 g9 H3 l7 u$ E: \
9 c; v5 k* X, _% o3 w1 X/ d% {5 _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ q9 ]3 |1 I$ Z .leds = da850_evm_tl_leds," L, ]- c, r+ e8 e( H7 [
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# q, t, a" m0 ]' L};1 @+ c7 f+ U0 F& j3 M% t# A
* m; o t2 r/ N* ^8 Tstatic void led_dev_release(struct device *dev)
* E6 r4 b4 C7 N8 R9 K{$ D8 i; a% b5 M: w& |8 X6 h) e8 k
};
/ z7 E- m/ t7 O4 h& W, i, u8 ^- y- X0 w$ s2 Z* O1 N
static struct platform_device da850_evm_tl_leds_device = {
: ]* A9 \. V, p& L( y .name = "leds-gpio",
/ y5 ]$ U+ x: @: O0 ~0 W& y .id = 1,7 }8 f2 g% O: A9 _/ f
.dev = {
! D* V& ~+ @2 B8 ~2 i. K* O" S& b/ t .platform_data = &da850_evm_tl_leds_pdata,
, ^. o# d# U$ C) X9 B .release = led_dev_release,
' L. b" a) k4 c& v5 ^ }" ` T9 G E/ z A( ?4 k: l/ M
};
9 O1 Z$ c4 H$ f+ G. ^* e- M9 q* w# V* g6 {! S& A# |4 Q u6 _% r
static int __init led_platform_init(void)
- X+ T7 ^* u! {7 o9 a{/ t8 ~4 b- v0 z) u0 w. n. d
int ret; ^$ h S. p" C2 P9 @9 @
#if 0# }4 R9 A z1 L+ b, I5 h
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# m* S- d# ~, c4 o p+ V8 o, u if (ret)& {8 g3 a6 p. i' U
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( ?2 _& K" p8 Z' v
"%d\n", ret);
3 @ [+ k* N( h/ u( Y% _' a#endif! W9 q& \' \+ h
ret = platform_device_register(&da850_evm_tl_leds_device);( H' f# o' ?, N) y/ M t
if (ret)# {8 { p" t9 y
pr_warning("Could not register som GPIO expander LEDS");1 a0 P! i9 k4 }& } ^( }" _3 z
else2 C: T9 o- T2 D1 | V L% x
printk(KERN_INFO "LED register sucessful!\n");
9 I+ k! Q$ n( W K S
' f( f& L7 Q! z return ret;
" g9 M$ O# J8 I/ `: F4 v9 g}2 V- ?' t- g/ t6 R" ^
5 u5 ?2 W6 ^8 h& H) Z/ K
static void __exit led_platform_exit(void)
# }4 T3 r( V$ G{
& X3 t3 v8 \8 @$ _, h( M platform_device_unregister(&da850_evm_tl_leds_device);
3 p% U! M7 ~$ l; x/ w% ~ {5 l$ ^. x) n7 X5 ?( E3 }% ]3 p
printk(KERN_INFO "LED unregister!\n");
0 u3 i4 U% F% {! B7 G}5 V6 k/ L) z% ^5 W3 _5 g9 }
7 ]' E$ Z1 a. P3 T/ n0 E0 c5 H
module_init(led_platform_init);, i5 t' A2 ?2 `! h
module_exit(led_platform_exit);- K$ k: T' V) y! a
$ t, D) k) U: L Q# ?3 c1 d
MODULE_DESCRIPTION("Led platform driver");
7 c7 O4 _( ^4 dMODULE_AUTHOR("Tronlong");
1 \( X) ?2 N, \% ^* LMODULE_LICENSE("GPL");
3 i l. k$ B/ N. G2 i9 o; v
: P- E$ b7 w/ U) }6 t/ S |
|