|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ [7 k, ^2 ^2 f" d4 y' F0 S#include <linux/init.h>8 G$ X2 `( J7 r
#include <linux/module.h>* \) z& q' B2 y8 h
#include <linux/kernel.h>
* C8 `5 ?$ F2 w#include <linux/types.h>
) |! P! ~0 z6 x) a- Q# V#include <linux/gpio.h>& T8 W- f$ \, r/ \0 v& K3 B; h: p
#include <linux/leds.h>/ N/ H) Y0 s; g* P
#include <linux/platform_device.h>
v3 h* E: w; @# v5 w& [4 A, E* z0 v5 a4 ^) l R
#include <asm/mach-types.h>9 h- d! J: A7 x- r2 _5 D# x" k
#include <asm/mach/arch.h>4 m5 N! `7 U, Q+ n1 ~! }7 r' ^
#include <mach/da8xx.h>
3 _; G2 \$ m; x% u: m#include <mach/mux.h>$ q- X W& i: }9 q7 Y3 l4 U/ n
2 B% O! |* u/ v+ R/ t \0 \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 u+ S9 ~. j- S! ^1 H6 T: P8 ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ l3 K6 q; s* _$ d2 q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, Q) V7 G( R! {. t+ |2 A | @#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). x! A8 U3 R! @% F& Z* @
6 a/ A) H9 l+ @1 |
/* assign the tl som board LED-GPIOs*/
0 W- g3 X+ `0 x* F0 Pstatic const short da850_evm_tl_user_led_pins[] = {! K% v; j& G; i- }3 q; o3 j
/* These pins are definition at <mach/mux.h> file */( X2 M& v: O) V: u) ?$ e0 P, S
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! k- C% Y! J8 t0 u& b" E
-1
: @& b: ~/ ?+ a7 l" a) q2 |% r) S: G$ N};
" e1 c( K5 {! v: q" E& B+ F2 [+ I5 h
static struct gpio_led da850_evm_tl_leds[] = { Z; s: g8 B" I; m
{2 }: X1 L! Z6 F: @9 ^2 @
.active_low = 0,
l% u' P6 g P$ p# h- b .gpio = DA850_USER_LED0,
- f/ J# J2 \+ Q( i .name = "user_led0",
+ T6 h" R2 c" Q+ X .default_trigger = "default-on",- y6 d4 ~0 S+ ?% A' V
},5 B- z, c# `8 M4 X5 M, Z- ]
{
1 w4 u) @. V3 E" ^ .active_low = 0,
8 n) y- ^0 D& @) ^: | .gpio = DA850_USER_LED1,7 v9 v: } B, Y! X3 g' Z
.name = "user_led1",
1 E& ]& N- F" }4 } .default_trigger = "default-on",9 ?; v l& N- c. G% d5 [
},
. c/ Y: d, ~# R4 Z) h0 t) D {
. T0 N; b: n4 G, h+ Y .active_low = 0,
7 }/ a; w8 V; S/ T4 `& M .gpio = DA850_USER_LED2, t; E, Q* c( W( j
.name = "user_led2",6 I* b9 U! L; Y8 w$ }& G
.default_trigger = "default-on",. I& ?# z: T9 l$ E0 ], w
},$ ]1 R6 ?3 j, o' e; i0 c T
{7 g6 n& j0 F$ X$ i+ Y
.active_low = 0,$ {0 n- B% ]% j: u
.gpio = DA850_USER_LED3,
! E/ b& T0 p1 i7 Q$ d; }( y .name = "user_led3",! }0 ~! J3 A( `
.default_trigger = "default-on",
1 @: q! I5 D+ \ },* ]* N9 j; H( x% q
};' L8 t# B: f( t9 b6 B1 `' g8 m
$ D Y! N! z/ ]% L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ f" r7 D0 i# i7 v# Z* ? .leds = da850_evm_tl_leds,
x7 y2 u* K1 w( b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 r$ s+ }) O" |' g: n
};$ A* @$ K$ V1 r. B
. l& a2 K; n& J; _static void led_dev_release(struct device *dev)
x' r" A7 }7 z. T, |" M{
" y7 n) q' o, b3 i. p/ H. m9 y}; R6 {' n& [3 @) c7 U
& U H6 i6 N& f- Q1 x# P/ Astatic struct platform_device da850_evm_tl_leds_device = {9 V% L/ x0 t: p) R; A b$ L
.name = "leds-gpio",* @+ R# D, x9 K* g+ I3 u
.id = 1,
: G% a. `/ o7 C .dev = {/ B; B$ M$ I+ w
.platform_data = &da850_evm_tl_leds_pdata,
3 ~5 r8 G; @ ^" C/ W6 U .release = led_dev_release,9 I* G( D) r; F& h$ ^' p* M
}
0 d+ h7 g$ o' D# R% O};
0 t# c; h9 t( G* `& u" O1 `9 r& [% g# {$ m. i/ `
static int __init led_platform_init(void)/ I2 ^ ?3 t; _" r! k& N
{6 z R" ?8 p8 C6 _' t
int ret;
. X, _1 H% [# F* s- N$ v) I$ E#if 0( u) h! K7 d6 g6 f8 g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. f/ k1 Z8 c- n
if (ret), U& ~, I. q3 y$ b3 V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 }" d4 N' B+ d* _: T6 r4 h' e
"%d\n", ret);0 K* I) S( m/ X& |) K% H5 V8 M* T
#endif6 L' F0 V4 L4 M& W# g' c
ret = platform_device_register(&da850_evm_tl_leds_device);
2 C# U* L' z# X" l5 {( Z if (ret)
& t/ q# N, R) z- J* _ pr_warning("Could not register som GPIO expander LEDS");
. Z9 H' Q$ H" ~4 w' G6 O0 V else
2 x5 m% R: J0 M% g printk(KERN_INFO "LED register sucessful!\n");5 G9 R8 @4 G5 J
/ a( M/ I8 Q. d. X% Z$ r* d$ t
return ret;
& x. B6 B, e1 p6 U+ V7 i}
- u" f) C6 b7 B. R o; l9 f' y
. A& t# d: ]; {# D1 Lstatic void __exit led_platform_exit(void)% b" S( j& O0 l4 @* o v! u5 {( @
{% H2 q. H- }: G, Y o m
platform_device_unregister(&da850_evm_tl_leds_device);
* e. U! U# M0 {; q( J/ S& u" L$ X8 k% a0 ?4 a9 }
printk(KERN_INFO "LED unregister!\n");
. e; X) v* t/ b% |% @) ?. L) o}0 R' h. B! K8 l
/ B( g% ?+ a8 v- {/ m* _& ]) f/ \module_init(led_platform_init);
8 y1 A$ r; `. D* b. W# \7 r7 Amodule_exit(led_platform_exit);
, g1 Q; K! O. k9 A* z. i" i6 t! A7 t
MODULE_DESCRIPTION("Led platform driver");. N' }+ e& t K
MODULE_AUTHOR("Tronlong");5 O ^3 C2 i' \
MODULE_LICENSE("GPL");/ A6 v% ^! e B* R7 [
& Z$ L1 q: {& R0 _ |
|