|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 j" N) `( ^0 f2 Q1 D#include <linux/init.h>
3 ~- j3 K2 k9 v. Y% s* {#include <linux/module.h>
3 p, E4 a3 O: \ [/ P5 }$ a#include <linux/kernel.h>
' J: Z$ k. K1 S( S7 l+ C# v% u4 ~#include <linux/types.h>! @; J9 K: S2 e
#include <linux/gpio.h>: Y* S( |* x9 w# W; U
#include <linux/leds.h>/ G: f3 n: D* p
#include <linux/platform_device.h>! L, P0 j+ ]1 M
5 f7 J0 o6 h+ r4 u9 v! b. H! T2 l
#include <asm/mach-types.h>) J g/ t, `9 o. _% w# s# _
#include <asm/mach/arch.h>
( y) l( v1 w: ~; Q/ N) D- @6 s#include <mach/da8xx.h>
! Q8 ^, W B W }. a& k) ~1 b#include <mach/mux.h>: z0 ]; u# o! W, @
8 C! n; c3 W8 ]; M( e( \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 y7 l" _& e, ]* J6 S3 q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" \' ^4 i: K# s! `5 g. o#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 L& G6 n( ]$ i5 F8 P4 \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ F( B9 o) F0 e4 S* k3 J5 e( `1 H" c0 n+ n$ I
/* assign the tl som board LED-GPIOs*/ B/ T. P( D& g" C8 y! T& |1 q" R
static const short da850_evm_tl_user_led_pins[] = {- v2 y* v3 D: \5 b
/* These pins are definition at <mach/mux.h> file */
7 @5 j9 j$ m( N, I; o, I& t2 l! m DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 t8 j) v2 `; h -1
# F4 [ W) I/ m& g& `% n};2 }% K- x6 q( m6 {" g
# Z! C5 q" G* j5 e- t1 Zstatic struct gpio_led da850_evm_tl_leds[] = {; m7 j% {2 A: m3 Y! L3 _
{2 x" U5 r/ O v2 ?/ E0 Y
.active_low = 0,& H: b- P9 s, h" s+ ]/ a/ z
.gpio = DA850_USER_LED0,
: q- V1 K5 u8 x# [ .name = "user_led0",% a- W4 N% s9 v3 ]+ U0 G
.default_trigger = "default-on",
% M& u% ^. I& l% x: e },+ F% r Q/ Q! u, ~2 A2 o
{
- R6 B2 h1 F* f" }$ e+ V .active_low = 0," t+ c! [) Q5 ]9 N+ f3 a
.gpio = DA850_USER_LED1,8 f3 g5 h$ w' y+ ~2 |
.name = "user_led1",, u. P# b1 Z+ C0 b; L* R; D
.default_trigger = "default-on",
) p. w! e4 R5 G8 P1 ?; U },
2 c2 m- y0 e1 b4 v: ?) i {
* n% H& P/ P, J7 J .active_low = 0,
7 J8 w" E2 z8 r6 `% _, ~, d& A .gpio = DA850_USER_LED2,* d. }) n( A% H7 \8 u/ L
.name = "user_led2",6 F, T4 f4 M* Y* V8 U
.default_trigger = "default-on",
7 T) \! K7 ]# G: u },
: `- Q& q# J& ~3 T {' k% u6 A2 Z5 ]4 {2 M2 U9 W) H
.active_low = 0,
/ L1 b7 H) t2 d) j .gpio = DA850_USER_LED3,
* x7 G7 q0 h) r& A7 T" X .name = "user_led3",7 g5 L( g: x# I" s# K6 P' w2 O
.default_trigger = "default-on",# |+ z; x# a/ h% j$ k/ |9 B1 ?
},6 g& G/ m& X) |$ U, i. g9 Z7 ^
};
' t3 s9 G: |" w0 H7 w$ S7 ^! t" B- s
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ a5 [9 G C3 i6 b .leds = da850_evm_tl_leds,$ K4 O2 i+ G5 s% A9 g* u, m
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ L4 B) W4 a7 L
};1 ~$ ? [$ h6 D' N* _' Q! Y" s+ ]' t
& b7 M. L2 a9 n: W) Jstatic void led_dev_release(struct device *dev)
- V$ r1 ^" `5 }" K u8 R$ u{
6 k, a R6 d8 Y* Y( |};
( i% H% ~ i, T0 C5 W6 C: a$ m$ f7 o7 `4 x, T- X, m* G4 `! D& _; d
static struct platform_device da850_evm_tl_leds_device = {
0 m5 O/ V3 P$ G( P+ d .name = "leds-gpio",
; l& x' e- c2 ] .id = 1,
# R: o. e. G% z: c$ b9 B: O .dev = {7 o! x( Y( ~- P
.platform_data = &da850_evm_tl_leds_pdata,
7 @; @' e. |$ c2 H% F, Z- R .release = led_dev_release,
: ~+ |. O6 r9 d# k& h }- B( |4 J# E$ E, A. f9 c6 M
};
: j% G% K: N9 |. z# L* ~
1 }# k; ?4 i; i6 e1 t' jstatic int __init led_platform_init(void)! z. _# J7 v/ B& n% r- g4 R; z
{6 f# c5 U, y) D. P% u% D
int ret;, c3 j- C* t$ d; {2 b9 S* o
#if 0( l" y& Q- G6 k# x
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, x" _0 i; J1 |$ H! h4 T
if (ret)
) l+ W k8 v" U: a# N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# d2 \) U, j" i8 ]6 H; x' P3 J "%d\n", ret);
6 N: y4 L% t9 @2 {: w#endif
2 M9 I! L+ E# \ j, @' J v ret = platform_device_register(&da850_evm_tl_leds_device);
9 r* L8 X: a3 A7 x; m5 L! g$ O if (ret)9 e3 E6 I5 ]% y0 S
pr_warning("Could not register som GPIO expander LEDS");
, k0 w& O* H4 t8 J3 ?/ | else
L- s4 f8 V4 Z- q# e) s5 A printk(KERN_INFO "LED register sucessful!\n");
- y r8 Y" q8 { J; k
. G6 |) _' J+ [) C/ {: G2 c return ret;- [* y4 A- [* {- z5 v8 U( n% ^
}. a3 i: C! o$ v! C
8 k, U0 s/ |1 d9 P
static void __exit led_platform_exit(void)) O3 Y3 Z9 x' A7 R1 w7 C+ O
{
& c! F" a4 P4 E5 K+ @ platform_device_unregister(&da850_evm_tl_leds_device);5 G9 A8 h# B5 Z
$ H7 t2 j$ F3 y& A0 N+ E
printk(KERN_INFO "LED unregister!\n");
$ p$ g0 {$ J1 p5 Q5 y- F0 w9 ~" _}
* Q; G/ q6 d4 z- q" l s+ u
3 l n, u2 x- U9 |6 tmodule_init(led_platform_init);
e2 a. t% `* ~5 T/ Xmodule_exit(led_platform_exit);# [& _0 K' d. E; ~' [5 |
5 `+ ]$ O; l2 L$ C! }( h% a7 x
MODULE_DESCRIPTION("Led platform driver");, c' ~1 } [" Y! P, F% L, D
MODULE_AUTHOR("Tronlong");
. F2 h0 |3 A; UMODULE_LICENSE("GPL");& K" f7 G" n5 |3 A7 D, J' S1 C
0 W7 G ?+ b& \6 b% m7 i3 `
|
|