|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* Y$ @/ d; s$ ]& X ?#include <linux/init.h>7 |! k* @5 P- i5 X; Y7 O, i
#include <linux/module.h>
) }- C L3 l+ A; F* i#include <linux/kernel.h># K" g* l$ V G& A6 @* T' g% a
#include <linux/types.h>
3 W3 h) k9 ]4 e4 ~#include <linux/gpio.h>8 W% Y& ]- T0 _ a# q7 X
#include <linux/leds.h>
+ F7 L$ f- g. g- p& W) b0 K#include <linux/platform_device.h>- u0 x/ Q7 m7 ?% I
: A; d5 a" w2 Y7 x3 u! T#include <asm/mach-types.h>* B( Q" U/ ]7 V8 ^9 j8 A J
#include <asm/mach/arch.h>+ J2 S2 _% v; u j: m) t
#include <mach/da8xx.h>4 _0 B4 Q# X3 S
#include <mach/mux.h>
$ I& L/ s6 p3 y0 j) B# C A5 N+ Q5 n: O
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 f2 H1 Z4 d: A1 o+ ^$ Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 e6 ~& v+ J6 g# q4 _ L+ m#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" I& ^5 i% H, h4 ]) m) V% ?( D#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 {- N4 S. d$ ]4 S; L2 _1 I$ n
; {* s3 E8 I+ K( k
/* assign the tl som board LED-GPIOs*/
; M% z$ z/ A0 ?+ {- ~8 c( Ystatic const short da850_evm_tl_user_led_pins[] = {9 W' B8 f1 n! Y3 H0 Y0 N' ? ~
/* These pins are definition at <mach/mux.h> file */
" `# }5 F! d7 O7 f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' k) {0 Y. {* x% j1 ?! d -14 B! i. X( O2 v5 Y" C& a b1 R
};
" h1 k. M1 D7 R% i8 [
$ W1 C3 y( g- ] E0 |static struct gpio_led da850_evm_tl_leds[] = {
3 f( ^1 w7 T; b0 u1 i9 g {) Y2 d" h, Y1 x5 {# \' }
.active_low = 0,
* U7 t' u- I. f* W .gpio = DA850_USER_LED0,& m% Q7 v( G* T0 S) {3 _6 c
.name = "user_led0",
4 c" G# O4 ~% Q; g' m% g .default_trigger = "default-on",0 I& W: A. F7 F$ P2 D9 R9 t
},
; r2 ]( I% [9 A7 k {
' f. f! H Z: @; R3 Q1 J7 |# I: A# x( C" o .active_low = 0,* N) R7 x5 i' V% M) M
.gpio = DA850_USER_LED1,
1 N/ j7 m+ d- }: ?4 g, C& y/ k# T; E .name = "user_led1", Q, E# K5 s# x' X, }$ {
.default_trigger = "default-on",
# ~) ?3 f# V; v1 m: d0 k: g },
6 x: U# I4 I3 L- C {2 J$ t; O& v2 z3 K
.active_low = 0,- G/ D5 Z9 r# w, E& p- Q
.gpio = DA850_USER_LED2,
# N! w( |1 {( F' j" c: B% S .name = "user_led2",
1 m, U) R; h% t: B .default_trigger = "default-on",
$ Z( k, A/ Z* b; P2 f },
7 x7 x4 u) f0 x; w2 G7 R3 g; G8 @ {
& W2 a* d* s4 D. F& B( ? .active_low = 0,
# g6 V4 O! x0 k: n .gpio = DA850_USER_LED3,
* F7 Z) P$ l, P' v' W8 e. G .name = "user_led3",
& }6 Y1 N1 y$ f3 ~* a9 g& _, Z% l+ { .default_trigger = "default-on",) N! r* k }: y! T( G& K0 V% j3 S7 m
},0 K1 ~, x' q3 ~& u" r9 F. n8 J
};8 i/ q) p2 N4 y" v" r" @
8 S6 \" [% J$ e2 j$ i8 T/ G1 xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- e* F; G: S+ _& `3 j
.leds = da850_evm_tl_leds,
' {% t/ p7 w% Q k- x4 i3 p/ W .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," [! t0 P7 ~% {7 F* [7 P! t3 Q
};
- a, c+ x4 r+ d; u
: U. j' h' C( K: lstatic void led_dev_release(struct device *dev)
" Q% l/ ]; }: ]( t8 E3 i{8 _9 H4 M# m* h0 Q" ?( F$ q
};5 C; {3 P3 Y- P, {- l) ?
; K% a( {7 \9 b) C# p$ bstatic struct platform_device da850_evm_tl_leds_device = {7 N# k4 N6 z& X; h
.name = "leds-gpio",: p5 l+ V" e7 t- D5 m- y" x- v
.id = 1,, f" N/ q& [$ J U7 z7 B
.dev = {
! t! u/ z# X4 ^; u .platform_data = &da850_evm_tl_leds_pdata,; o' a" U, f' d
.release = led_dev_release,
) j9 V& G* t9 D- u8 F3 ~ }
# a$ ?# h& `' X# L# p) F; D. O};1 [9 V0 J8 r8 F4 [
% X: r O/ G U& M5 d4 ^' estatic int __init led_platform_init(void)6 a0 Y" |3 H; [- f4 x- L( Z5 a. {
{
, ^# X6 L2 }: {. V" t. X1 F int ret;) o$ B5 t& @) _; `2 a
#if 04 x* v9 W! t, l" L, h7 Q% y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 L# q- Q8 l! G K
if (ret)
) w4 U$ r+ W3 K6 Z6 S8 w5 Q& T pr_warning("da850_evm_tl_leds_init : User LED mux failed :": }4 m, o( g/ C% u/ _
"%d\n", ret);# T% X! X9 I: q1 U, J
#endif" I+ A. j$ P8 B& [
ret = platform_device_register(&da850_evm_tl_leds_device); n8 x) F; E: `+ S
if (ret)9 W2 ]: ^3 N* ?- L' w' H/ Y
pr_warning("Could not register som GPIO expander LEDS");
S5 m, ~0 H2 g o9 d. x+ f else, T* G+ P8 O; J. D# l8 a
printk(KERN_INFO "LED register sucessful!\n");0 X* {& d$ a* d. x& d9 j8 o
4 J! o! A4 W3 M4 u: b% e) Z return ret;
9 N" D" o/ r( O$ [, d' K) }) e0 u}
8 j- P& `5 J% `3 r/ }6 w) m0 V6 `% v' G: j8 D2 H: R+ V
static void __exit led_platform_exit(void)
, B& Q1 [3 B% g( A{
. H& V4 j2 ?7 I6 n platform_device_unregister(&da850_evm_tl_leds_device);; B a, A1 l7 T3 @
- }$ O: p" c0 c$ F printk(KERN_INFO "LED unregister!\n");) D m4 M9 j# ~2 ~. p+ g( A+ |
}
( U" x! H' ?6 _/ T% t9 ?- j% }+ ^7 D, z! Q$ Q9 ~
module_init(led_platform_init);1 c* b3 |) U# L
module_exit(led_platform_exit);3 G, y2 d! ]. Y* E- h
# T# }1 U- L& d' T' H# s+ Z
MODULE_DESCRIPTION("Led platform driver");
1 x; k& z& \$ t2 v. u' q. CMODULE_AUTHOR("Tronlong");
3 N' ~. C4 N- r5 T# O/ ]! eMODULE_LICENSE("GPL");: S& l- U, R6 A* M; o
& A/ N+ O1 F1 r1 y3 M- X |
|