|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, w$ C$ P+ L* g) O/ ?9 s#include <linux/init.h>
+ g" _1 k6 [# _% p#include <linux/module.h>
" @" P9 y/ f* O8 t1 B$ e3 f#include <linux/kernel.h>
2 M% ]( G1 L5 |/ A) Q5 q1 m+ v$ j#include <linux/types.h>$ e- h6 F9 J# c
#include <linux/gpio.h>
" f0 g; R% ^0 M# {) P2 P7 C#include <linux/leds.h>
- j9 n: {6 x( L# v/ W6 X4 L#include <linux/platform_device.h>2 U9 o% d# h6 m* `( f4 t" }" R3 W y
; D3 k- k% G' g# s
#include <asm/mach-types.h>
7 _5 ]# _1 q, ~. `! Q#include <asm/mach/arch.h>; b! R2 j0 H. t1 f- ^3 f! \6 E' @
#include <mach/da8xx.h>" }2 y# ]4 W, `7 ]
#include <mach/mux.h>* \& j1 D0 E: ?, u5 @1 {2 V- r
2 }4 y. Z$ @; S" E& m j# H#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( @4 z. V: V/ n) g7 N1 b6 r/ f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- n- J% B2 A3 z3 I7 l* m
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- V- ?- b# E ?) r) |$ b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! w8 d2 L& O1 g+ Q! L! L4 _# \$ [* R
( ^% F$ P5 _# }1 r, F6 e+ @
/* assign the tl som board LED-GPIOs*/
5 _; P# J p. f6 I H- X# Xstatic const short da850_evm_tl_user_led_pins[] = {3 _4 M& k3 j4 i
/* These pins are definition at <mach/mux.h> file */
! Y6 T$ u3 e1 i# v, g DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 J7 I8 x* j- I2 Y) x6 K/ ]
-1/ B L% F, d" i( r! C
};; \9 `- I% w9 O4 J5 Q" }
4 y; _7 b) y$ S" {static struct gpio_led da850_evm_tl_leds[] = {/ Q/ q9 q1 Y$ E9 t- k1 p, Z
{* n0 I* |: A' n+ v- U( h5 N
.active_low = 0,4 A+ ^! V7 V, I
.gpio = DA850_USER_LED0,, v9 @* l0 Z1 M
.name = "user_led0",
+ ^) |1 n0 r w2 [3 T& Z .default_trigger = "default-on",
1 q* ]% _' d, ^# z },
' Y" I, x9 z, u, Y6 U+ {7 q. q {/ D+ Q3 [* I$ n% y
.active_low = 0,0 z8 ]2 c2 m L) J# [
.gpio = DA850_USER_LED1,
% E( c/ c* r+ m4 K b .name = "user_led1",1 S- K, E# m7 k7 [* B: W# J
.default_trigger = "default-on",; z v/ R. l- G" A5 e) u
},
* w4 @# z! ]6 m; r! Z+ H {1 j+ u* t5 p. j% L
.active_low = 0,# |( c* u1 { Y7 ~
.gpio = DA850_USER_LED2,5 j, o) @7 h; b3 `0 A, F/ \
.name = "user_led2",: p5 T5 V; c- |8 k1 H9 Q3 U
.default_trigger = "default-on",5 n+ E. ~+ K b4 k* q
},0 c" |+ S7 ]% l) {( F- c' r
{" F& e2 x! F) S: `1 I. x: R0 K
.active_low = 0," U& J# d E( i& V$ G# J$ e
.gpio = DA850_USER_LED3,% ]+ T7 t* S! w0 J- W# |
.name = "user_led3"," h& x+ u) a0 O! P
.default_trigger = "default-on",! k$ L+ o! W3 P! `2 ]; ?- g
},$ f9 I* H) N' {% W4 \. B- |# F- C
};- |7 {' m4 |: ~% ]% u) c ^
& r6 L0 T, t3 R" @) `4 L0 o- J% A' Jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% v T8 w2 p0 m0 } C9 e .leds = da850_evm_tl_leds,3 ?2 V; R# \ [9 h( _8 _
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' @$ {# r, P8 t! _, X8 D7 x};# M2 G3 U- G2 T
% f3 t1 q r1 ^" Y. k2 A) bstatic void led_dev_release(struct device *dev)0 g; R& L$ z+ b1 }9 x$ j- C' X
{7 z. ~) S; L5 L! g8 z2 @
};% b5 D0 f* B& @7 t7 ], w4 ~* F8 q
0 A+ v7 P, b7 b3 L$ R" M
static struct platform_device da850_evm_tl_leds_device = {( a$ {# Z$ o' M, Y: _; B0 e
.name = "leds-gpio",
+ ^0 B5 u0 ^4 ~* }" |- }& f .id = 1,
8 e- y& B* i, y% \" i) s .dev = {
; F, g7 L9 u: K9 H+ S! F+ L .platform_data = &da850_evm_tl_leds_pdata,
$ e. N9 e# D* T+ u& {9 m1 w .release = led_dev_release,! u3 p& Z0 L9 t ]7 m
}4 l' t3 R" l+ j) ^1 @
};
* [) {; ]2 l( J2 f: ]' \+ c- F7 @ e7 g6 R
static int __init led_platform_init(void)" ~+ F. u, y1 |, j( ^* R: y& O
{
1 d* }% ?) [2 c2 r int ret;" |- e1 W4 c4 h. R4 u! A" U5 g+ N
#if 0
( l% W& [: C' n% h ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- x4 k3 I1 n/ u* f+ @+ O% _" X) P if (ret)2 B( c* X |% |
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 h Y/ ?, x" q$ }; Q. v5 W; g
"%d\n", ret);' ]2 j2 m8 p5 C
#endif
% E1 R! @2 V- v ret = platform_device_register(&da850_evm_tl_leds_device);7 A; U* p1 _$ I7 X
if (ret)
" q5 e4 ?+ b# p+ C! n- n pr_warning("Could not register som GPIO expander LEDS");
- j1 ^1 L( l) W' G0 x# C else# L6 q f$ y, K+ ~5 r: e
printk(KERN_INFO "LED register sucessful!\n");5 L; ~' m6 j; [$ s# \1 S ~
$ K; T t" I0 r# E3 u return ret;" y7 z* T, F, m8 R$ i0 E
}
_1 R1 F) {+ ?1 T" ~% i, ^( {, c1 G& K
4 U- K/ u: [) j9 M+ c8 E. L: Estatic void __exit led_platform_exit(void)
. d" r' O; t: _7 E& t6 C{9 c" L: D7 l, R; B( [
platform_device_unregister(&da850_evm_tl_leds_device);$ w& @5 `! k5 X- Y/ a+ c
+ R5 e, P4 A/ G7 J9 d
printk(KERN_INFO "LED unregister!\n");
5 y% e$ x/ q* d) M) Q}
0 ~8 L0 S% t# r% k2 r. n
6 `1 o2 l4 x4 pmodule_init(led_platform_init);
4 m4 u9 g5 X9 I9 nmodule_exit(led_platform_exit);7 t R( `" Z h! O+ Q2 i
) w% u8 k( Q* H: uMODULE_DESCRIPTION("Led platform driver");& W5 J; g' R, n8 v
MODULE_AUTHOR("Tronlong");
* c1 u T0 R8 {* `& {MODULE_LICENSE("GPL");
+ r; R9 J$ }" g3 i# W8 Z" f, L1 P- y; N) h, f! R x+ M
|
|