|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# i" p) B+ g7 ?( j/ g0 K3 Z#include <linux/init.h>2 H8 s' W4 y! F
#include <linux/module.h>3 {. v; N6 o) h; T _( l
#include <linux/kernel.h>
/ K9 E) m# x* c4 x: y& U#include <linux/types.h>
/ p$ Q8 q3 F+ s& M( X7 m#include <linux/gpio.h>
6 [% X: q, r& S$ ]6 L3 k% q* t#include <linux/leds.h>
8 E% l3 l* c+ f+ \# r1 s, Z) C' u#include <linux/platform_device.h>
( B7 L0 u# i6 I( O; T1 A; Z$ h) k9 r0 g
#include <asm/mach-types.h>
; M, y# T d- h#include <asm/mach/arch.h>0 q$ A; F+ v Y. H- l3 U7 W! u
#include <mach/da8xx.h>3 T7 Q2 ^# X+ G; @7 Y2 M* O2 n2 D
#include <mach/mux.h>
) ?/ @/ j+ o, F& c& ^
0 i0 l; i1 S. s5 I#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ M4 `& @7 T3 a2 Y. X2 T* V#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 j: W7 E. h6 r( ? ]- A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* A& g) T& P7 `# C9 i. G! ]
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: q6 d) S# G. z2 |5 D9 T+ Q! R5 Y+ S, j e1 ~, x
/* assign the tl som board LED-GPIOs*/
: _1 `. W/ J* j$ _$ |7 y7 Vstatic const short da850_evm_tl_user_led_pins[] = {' T+ z7 ?& X% f) M+ r1 z# b: V
/* These pins are definition at <mach/mux.h> file */- @+ U' E {6 i) Z0 s
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' y% I# K( Q1 m -1
1 {; c/ q$ U. D" V& b, u};
2 J' I& S2 H8 H% {0 c$ k4 Q1 n' n1 z& B) S: Q4 \* ]3 x
static struct gpio_led da850_evm_tl_leds[] = {
, v v p8 m' U* _- b$ T8 B {
: s) Z0 n# U N Z .active_low = 0,, B/ M6 W1 b9 z
.gpio = DA850_USER_LED0,
1 m" F$ [9 Y: Y) g .name = "user_led0",
, ^# T0 r: D$ y- b$ U! @ .default_trigger = "default-on",2 y4 Y, S/ v0 H P( B$ g
},
5 ~, L! S7 p! T; u5 A, r {, n3 @, e' Q% C( y
.active_low = 0,( n j4 C. P4 K3 @3 x
.gpio = DA850_USER_LED1,* K- q `# @7 U
.name = "user_led1",
+ l; _4 \) p# j5 ] .default_trigger = "default-on",
, K0 j M( j9 g1 ] },
* u1 Z' _' y8 T {& V9 n. W, L9 Q3 q$ p" |* {
.active_low = 0,4 ]# }5 t+ V5 T0 Y1 F: k
.gpio = DA850_USER_LED2,, G4 c3 `0 Q" t5 {* x7 A; [
.name = "user_led2",
5 r) M/ s$ ^! C& B0 [3 O .default_trigger = "default-on",
4 ~9 R* Q' p: A* X+ z- p },/ x, Q) ^7 [8 E; N5 F
{) A0 i2 X! W# L
.active_low = 0,( ^8 k* a" c! R/ @" D
.gpio = DA850_USER_LED3,6 ]9 b3 V( b" A6 k
.name = "user_led3",9 [# r9 W9 i& d
.default_trigger = "default-on",
+ b! W/ s# P$ H) C5 E+ X },4 O$ F. y) }3 }
};
) V0 l ]4 B0 t) ~ T; M6 J
& ]$ r$ E' S L# Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ z% X& P2 Y0 g( ~, t* }/ u .leds = da850_evm_tl_leds,
* ]: ^0 `: [9 d" L1 A6 \5 n .num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 A4 L& @+ B; R; A: i
};
( m6 r( r" Q8 e( d& v( @$ Q- q3 L' W# u% N# }: n
static void led_dev_release(struct device *dev)
( n) N+ K1 m) `' u+ q, o+ r4 \{
0 q' [" F' K9 B! C! y};
4 S9 T7 b1 S0 I R0 D" w7 T8 M/ k9 `; |( v& v! s
static struct platform_device da850_evm_tl_leds_device = {
% S: I& N! @; a- g: M3 y .name = "leds-gpio",
9 l+ L" U+ T# `0 \ .id = 1,
' T# b" c+ _3 H0 i- t& D! j4 H- r+ | .dev = {5 O7 I. V5 p! m2 g. J/ e4 \# V
.platform_data = &da850_evm_tl_leds_pdata,
5 g4 [! U; g% t" M+ T% Q/ M .release = led_dev_release,, q3 a, ?1 ~6 z
}- R5 t. [, `0 I! n' J" D# p
};7 t5 K0 l2 g" j' G
& |! r( _2 S1 | Q9 E) h9 Fstatic int __init led_platform_init(void)
, [0 {9 N; n* T1 B9 V9 N6 S{' @( ?) f! v+ g0 \! B' C. V
int ret;
: Y' N! p- N5 f% C: c#if 0
7 I9 {( a+ A% ?4 W1 U( w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. q) v; U! U, M2 j# p) e, g! r if (ret)
! Q% t; m0 P @/ H% B pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 w I; n6 A- d) [, R3 T' Z0 t: D
"%d\n", ret);
- T+ S7 @1 ?% R5 n#endif
; |. t/ s+ b/ K9 a ret = platform_device_register(&da850_evm_tl_leds_device);, Z8 d9 {% W/ N; I; v) P3 Q8 q# ^/ P
if (ret)5 h. \$ i, v% f+ T# r
pr_warning("Could not register som GPIO expander LEDS");$ Z5 K- b* P1 \
else
6 e: r W: _4 d5 L printk(KERN_INFO "LED register sucessful!\n");
5 {7 }+ k3 d+ a+ t: ^6 m" D6 F- F) q1 f" i
return ret;
) ]3 s0 @# h) t& n' x}9 w0 p* k2 c* p
) J" `, S! M/ Y9 V" j7 b! r- Y2 g- f
static void __exit led_platform_exit(void)3 C4 K( i v5 }: F
{" W6 V! n$ F% k R( W0 {
platform_device_unregister(&da850_evm_tl_leds_device);. p/ g4 l/ w9 ? _
' c& P) M3 g1 M# P printk(KERN_INFO "LED unregister!\n");5 Z0 u& L; `: `8 u/ O
}
; T' |5 i. z- J! s! }) a
1 c7 O4 F0 s( h; t- V+ C8 f& Ymodule_init(led_platform_init);
0 w/ ?+ }& M, _$ a+ Y6 w% Amodule_exit(led_platform_exit);3 B( O. U2 F; P+ S
! M! F! j' B# }) e% g) a$ HMODULE_DESCRIPTION("Led platform driver");1 O& ]$ {3 i9 ~' F4 G" }/ | n
MODULE_AUTHOR("Tronlong");
' U; r% [8 Q/ ?MODULE_LICENSE("GPL");
7 U) k' T' V s7 ?- O+ Y5 z1 @) c6 y3 H$ G4 \2 r) ^
|
|