|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 P- [$ I/ e9 c8 t% l6 l( o! p#include <linux/init.h>
# I) ]/ O$ z4 I2 O#include <linux/module.h>
1 m1 _2 {$ o# M9 Q+ O; D#include <linux/kernel.h>4 R1 W- C1 i v& U O2 v2 g
#include <linux/types.h>% V! P. [5 F& D; C. T0 l8 l
#include <linux/gpio.h>2 r+ L2 \; u, K
#include <linux/leds.h>6 {0 H! R0 R3 o
#include <linux/platform_device.h>, a9 K) s6 e4 K7 P& @: J; x
8 D- C% `$ e$ M& f% n0 b: l* Z
#include <asm/mach-types.h>7 E. m" M% i) h
#include <asm/mach/arch.h>: Q$ U; [, i8 b
#include <mach/da8xx.h>
% x; w3 w+ N) n$ O( e$ [; t#include <mach/mux.h>
9 y8 r! @% z _3 Q: `0 Y7 b
) @4 B: O7 J4 L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# V- z+ Q8 g* `) b J#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* ]+ @& b( y; z- U9 C! P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 U9 b1 k& S. k; _7 s# l) L4 j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# }( z8 i+ ?+ @$ @+ }
/ c- I# Q7 c& f% q$ i. ~/* assign the tl som board LED-GPIOs*/1 O) L E7 H( `. R$ h- d- b& D @
static const short da850_evm_tl_user_led_pins[] = {4 |8 ^$ S9 h2 v, U5 p
/* These pins are definition at <mach/mux.h> file */
- G! D! B" S- z2 |" J: P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" F! s- T, A9 K( s -10 \& N: n; H2 q3 r* m# ?( H+ |) j
};
8 _8 ^' S" F1 g# Y+ {$ S2 h H4 _% _$ o
static struct gpio_led da850_evm_tl_leds[] = {2 K+ h" ]% W9 X3 i6 y4 G9 D
{# I+ |7 }. w9 k0 i: a6 x: @+ V
.active_low = 0,( w1 r, b$ P: y7 Y( G% \) x
.gpio = DA850_USER_LED0,
- B/ u3 i- M2 R4 d .name = "user_led0",$ v$ R1 s) r# |- w
.default_trigger = "default-on",5 z) m8 Z* \5 F1 O8 z% w# K
},' E1 L+ K- J+ N& _ q
{
, J5 f& T4 v Z- @# y .active_low = 0,
$ k0 w) n! }- f) N$ J3 W .gpio = DA850_USER_LED1,
! [7 b/ L5 a6 \ u .name = "user_led1",
9 Z8 b( R+ ~6 w# B/ I/ u, q! @ .default_trigger = "default-on",
+ ]4 d* Z; \5 e. u' S$ v },) q9 v7 T: o. p
{
) X8 H8 p, l/ c5 H1 C .active_low = 0,: E) A+ J* I9 l$ J2 R# c
.gpio = DA850_USER_LED2,5 B4 E3 r2 ?8 }3 N) n
.name = "user_led2",# k P4 I! h0 j
.default_trigger = "default-on",3 }! `, w$ N! b" u/ e) G) Q% j
},9 [! _: t2 t. F5 `
{2 S4 [& I# s4 S6 A' z$ o
.active_low = 0,& b8 L2 x0 D1 O4 j+ k
.gpio = DA850_USER_LED3,
7 e# S2 i) |* c7 j .name = "user_led3",: v- v' [9 l" b+ ?0 r
.default_trigger = "default-on",8 B: O X! A6 A0 L6 F( _0 g
},2 j) |/ ]' }& l5 G
};" \4 S Q- G# ? x B
4 o: ^- l. ^5 A7 A l
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ t- R8 H' s$ j z9 h$ K. O .leds = da850_evm_tl_leds,
/ X$ d( h# c) _9 |5 J' m+ H# C .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 X, p3 I5 T) _+ R3 d/ m( o
};
- G* w: r; U4 g- Q% J; B7 G6 n( p6 b" r, l2 `
static void led_dev_release(struct device *dev)
' {+ N# @! }3 L; w) U; y{
2 W7 j3 `. Z8 M1 v) ?( H$ X};' X* u& ~2 e1 L& Y
% P% H' T- h6 u" c b' W V" q
static struct platform_device da850_evm_tl_leds_device = {
. L4 U* \- N% R4 C5 _, h .name = "leds-gpio",
3 q; |3 D0 `( r, Z$ k& C1 O .id = 1,
2 _( v) d$ D0 _' | .dev = {
* m# T1 x' g( @4 E7 u .platform_data = &da850_evm_tl_leds_pdata,
% a% O2 _5 [- }. B( ~1 } y. p0 o, t .release = led_dev_release,5 {6 q- f. T1 L: @2 ~
}
( _2 M% L! o; k; M0 P# b};* C7 J0 m& G' n# ?4 L2 I+ v
5 a. a- \0 M; E# o/ K: o
static int __init led_platform_init(void)
3 E" l! g) M) ~+ y: Z. K{5 |# L! @3 F0 Z+ o
int ret;
$ I1 Q3 k" Q+ C G8 U& G8 { D#if 08 w3 D( e+ u' R6 K
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 Q, l6 j9 J$ i- q: H if (ret)
0 Q' u7 o b7 v5 q) Y! k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ N7 C6 j q! r. I! u
"%d\n", ret);
0 _- g' _' B4 B$ F4 p$ G8 C#endif e$ D- T* a: O2 K
ret = platform_device_register(&da850_evm_tl_leds_device);7 z( ~, l6 V5 a7 ~5 P3 z
if (ret)
$ N" E0 B! ?: h+ m pr_warning("Could not register som GPIO expander LEDS");
2 J0 Z' e& y0 d else
, @* R5 Q9 d4 u: n5 [; ^) r printk(KERN_INFO "LED register sucessful!\n");, U# z2 t3 W* d/ u
2 _ T7 W1 x# y6 d return ret;
! X9 s, d. H2 P& `& l: y; H8 Q}# m: S k: [! e) k' ^
* [* d6 @0 F0 d) i
static void __exit led_platform_exit(void)* Y1 G$ g$ Y8 t. m# a
{' A4 c0 K% @0 g6 A( _
platform_device_unregister(&da850_evm_tl_leds_device);
) B4 v- @$ ?7 C. D" l* T3 ]0 C+ |/ @. @
printk(KERN_INFO "LED unregister!\n");
: y2 N& E- T# M, J) j" y}- _* A7 k2 J- ]/ ^6 x
; y) X' q* N+ a, m% ]module_init(led_platform_init);
& e+ l. f, l: v3 s- e4 S6 f7 Tmodule_exit(led_platform_exit);
& C" d: {3 ^8 b$ s! t/ T- j! l+ H! z3 Q" [
MODULE_DESCRIPTION("Led platform driver");
2 {2 f9 D8 H* Q" J* N+ e( cMODULE_AUTHOR("Tronlong");
+ o6 \! O1 x5 h, S& j, VMODULE_LICENSE("GPL");
3 t6 l6 F: l; I, b
" S' r, t( O: ^6 ]6 d) g% `" v1 L |
|