|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 S& \. Z' c3 N5 M8 c
#include <linux/init.h>. V C' C; G; }. B/ K" H
#include <linux/module.h>% R/ H4 r1 W$ X
#include <linux/kernel.h>2 H, |( q: A" j: ]5 {7 z
#include <linux/types.h>
" N! `5 q; K* F. n/ r# @9 z l#include <linux/gpio.h>8 W4 L) ^2 S$ e5 f( N/ D
#include <linux/leds.h>
* x1 O. {! F* m! j#include <linux/platform_device.h> w; v) \) z9 o5 E8 _/ S8 U; h
/ P8 W+ M- h8 o2 c) _& T
#include <asm/mach-types.h>* O0 T3 s; G& u2 i6 x& A m/ y& D
#include <asm/mach/arch.h>& m O6 ^) q( q; N9 t4 V4 }: }
#include <mach/da8xx.h>
3 C/ J+ A9 @$ V8 v, d/ N#include <mach/mux.h>
/ i- e- b2 n1 W$ W8 N: w0 C) h$ V+ v; l9 C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 \/ t$ F- c0 D, c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ j1 t0 _- L% _, H' M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 w4 h+ I9 z1 y2 C6 q* L6 [#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' K6 h8 c! j+ P4 i) @
: @( O+ A! b9 m/* assign the tl som board LED-GPIOs*/
* F& U. U8 }8 D0 [) I$ zstatic const short da850_evm_tl_user_led_pins[] = {
* d: a& s+ z* z# o9 F3 g /* These pins are definition at <mach/mux.h> file */
7 F: ]4 D2 @5 A0 w* X) F* t9 Y- e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( q2 X! [. n! u7 J -1% e. F/ i. u t* g% v2 f4 i- Z
};8 i. T; c4 K- |) M% N2 e. U
5 b& c: S1 A9 Y* l' D$ n& dstatic struct gpio_led da850_evm_tl_leds[] = {2 J ?' ^. M/ I; B, L5 O: s
{4 B* J8 J( R( j: c! Y# ^8 O+ E
.active_low = 0,
, h+ M3 A& J- r .gpio = DA850_USER_LED0,
7 d! m8 f. {; [ .name = "user_led0",
3 P" g4 l; W' S9 W1 B .default_trigger = "default-on",6 H' h5 y* T' a: [. l+ s0 N
},
5 [4 ~4 p; `8 q; ~; y; K) } {0 m. D7 u2 B3 c/ b0 j- Z
.active_low = 0,9 h& d( x# c6 `' _
.gpio = DA850_USER_LED1, M/ C( Z J. b( x2 U l
.name = "user_led1",: x4 v' j. \1 {: w; ~- y3 U, T% a
.default_trigger = "default-on",
# h* N' T6 F2 V7 _: _1 ^8 r. v },
" f, p# o' J9 U# J, N% S5 d {
0 n7 B8 M1 K3 G2 I .active_low = 0,
# U1 H% x% E& ?* s .gpio = DA850_USER_LED2,+ o+ z+ I# f) b) I B& `4 ]
.name = "user_led2",) |6 x+ R5 c- M
.default_trigger = "default-on",
" o8 P* O3 ~' t* @ },+ x3 r8 R+ k% M; p R3 F: ]
{% }$ F/ y4 b0 D9 |. D+ q
.active_low = 0,
0 J1 e1 l( H4 _ .gpio = DA850_USER_LED3,
' p' W1 Y$ H- F, w+ V8 `! O .name = "user_led3",
- m7 i7 w8 X3 ]/ A& [" Q/ T .default_trigger = "default-on",6 }9 J. e7 W' \9 z1 ?9 f: k" s
},
& D' l- ~# W* J* @' K0 r};
8 r! A" _0 \9 f- j3 s8 l- k
6 \' t5 k; b7 p" c* u: ?& R4 fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, b3 f! r6 R% x' J. x
.leds = da850_evm_tl_leds,
3 x* d- L' u8 S' j9 A; N* ~- F* F .num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ y5 C& Z8 Q* \! K. g$ G9 E
};8 j s7 S0 @8 R: Z7 d
+ Z @- J' J# A" G
static void led_dev_release(struct device *dev)! x9 [& b9 P. @ s2 O+ x' P' s
{
5 I& m$ p) U' ~5 h};
" v- [ {5 R9 I: Q1 m. ~3 w }9 U1 n5 R
static struct platform_device da850_evm_tl_leds_device = {6 a! O$ E! V6 i+ N
.name = "leds-gpio",
- z/ t7 G2 p* | K* i5 p% W# J .id = 1,7 k) N, o4 | c0 s
.dev = {9 N ?- S3 B1 ?8 g& W
.platform_data = &da850_evm_tl_leds_pdata,% ]" a7 E) l: e0 J
.release = led_dev_release,
- _" ~3 N6 S4 b! e }$ v7 V$ k, H# ?
};
4 H ]7 {% @ v* g+ F2 e
6 |+ {/ z6 ?; ]* A5 o( Kstatic int __init led_platform_init(void)
5 m8 Y j; A5 j" U" l. ]' e{
4 `4 h6 D& e7 G int ret;
1 T( l' X2 Y& d* H#if 05 u" G. ^$ i% C, m- J
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 p2 w" `9 ^1 W2 K3 c+ _1 ]" p if (ret)
" d, K b8 V4 W pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 T: |, v1 W0 ~* N" }4 L "%d\n", ret);) i$ ]2 V5 K( o+ j+ J4 w
#endif
2 F/ p3 J2 z* a' M9 t. z ret = platform_device_register(&da850_evm_tl_leds_device);
* ^( ]+ Q2 {" Z+ {. Q if (ret)% m/ y4 n# o8 i% y) L: g; D6 g
pr_warning("Could not register som GPIO expander LEDS");
7 Q% d& ~6 O! v6 M/ U: p- v else: T! |$ }1 z4 r
printk(KERN_INFO "LED register sucessful!\n");
% ^. ~2 I. M( G$ I% H* {- G: b7 R1 m) H# C1 y6 S6 m3 u" q( S
return ret;* p5 ]& u6 [; C$ L& D
}8 @$ m8 K( C4 j9 o) c
* }3 C; N; t; r
static void __exit led_platform_exit(void)
, c" e. y8 X6 ^/ L{
* [' Z9 m* A& O& x- M$ ~" i platform_device_unregister(&da850_evm_tl_leds_device);, ?" f$ v2 N( l" [0 l
d1 j( x9 r' M7 m3 z3 {% x3 l7 h
printk(KERN_INFO "LED unregister!\n");
* s) H1 T6 W9 h q) w7 n2 X}5 f- J( x! r/ R+ p6 R6 |
% ?) Y# L+ B- vmodule_init(led_platform_init);
$ y/ l/ p) T2 r9 dmodule_exit(led_platform_exit);% [, N3 D e. W* u& x
K1 w7 V: a. T; T4 LMODULE_DESCRIPTION("Led platform driver");7 l' n* N1 R5 O
MODULE_AUTHOR("Tronlong");# q; Q2 V# r4 R
MODULE_LICENSE("GPL");
& j. _1 b& V: a! j# x
0 B; v/ g% x+ z0 G |
|