|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 {, P% U; q- ~#include <linux/init.h>- Q1 f: }5 P% i7 t, {' u4 {6 i
#include <linux/module.h>( ^' s4 v( l8 N( r. ~. |
#include <linux/kernel.h> N l/ j' M! K, L
#include <linux/types.h>! B' x8 T& Z: S+ n" N2 L
#include <linux/gpio.h>. L/ t! _- E; G. g" C8 y
#include <linux/leds.h>
8 w7 [# M6 Y2 b' m#include <linux/platform_device.h>( ^' R! A5 [9 B* s. a- H
$ a! r. Z" ~7 E4 w
#include <asm/mach-types.h>0 {8 W1 a0 h9 h6 \' h
#include <asm/mach/arch.h>
% T: G# [. Z2 u# v; o#include <mach/da8xx.h>! F O6 V8 R* r" |
#include <mach/mux.h>9 I+ R; c5 O- t0 f
# G" h& a; F a. F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- S4 Z, d* P5 l- z* E0 i
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- l. [* A: z2 L( p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ ^! f% A2 Z/ A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): o, Z( _, O! e
, j4 n4 f# H) g) b/ M8 K: n! z/* assign the tl som board LED-GPIOs*/" K7 `' J+ F8 V' t8 u
static const short da850_evm_tl_user_led_pins[] = {
& i6 f* e" i+ w, g% o /* These pins are definition at <mach/mux.h> file */& I% n1 i! j0 l/ j7 |7 X
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ _0 c! @4 @' a' {# o
-10 h% F0 Y0 A- f- _
};: H$ ~$ ^1 t) Y
# i' I) K+ v& j- b, o/ o1 Z6 o! q" A
static struct gpio_led da850_evm_tl_leds[] = {0 x' E: Z( K5 W- T' @
{+ N' A1 D3 n @, ^, }
.active_low = 0,( v8 H2 R' v' x. [8 j
.gpio = DA850_USER_LED0,# Q6 Q6 A( C* v
.name = "user_led0",# L [- U/ U- W6 w+ l1 ~, b; ~$ i
.default_trigger = "default-on",
- @. w3 [6 s! D+ [4 u- u },# B7 i0 ^+ k4 S5 s) M, {
{
) N) N3 a$ |% N5 j: j% {# @ .active_low = 0,; c n! \# U8 H* q
.gpio = DA850_USER_LED1,
, a" d0 [* r) N0 T .name = "user_led1",. {) N2 k' v3 G! _9 X2 a( x* B" w
.default_trigger = "default-on",6 D* N* w) ]2 n0 @* a
},
1 D* b1 w, C n. B6 F! [2 a { S4 c9 Y8 {8 J0 R
.active_low = 0, E' n$ v- T6 C
.gpio = DA850_USER_LED2,
- I+ g7 u- O( l1 L% S: @ .name = "user_led2",
$ N/ W3 e: q+ }4 l .default_trigger = "default-on",; {/ M; o" [/ e# \% \- r
},# b* f S i2 u9 V
{& ]( }$ _0 z1 G% N8 `0 ~
.active_low = 0,- }# G5 v+ P! { |
.gpio = DA850_USER_LED3,
$ `5 r% i/ O5 u9 X .name = "user_led3",
) Y! b/ x9 e1 h4 @3 C .default_trigger = "default-on",( T! ?9 \9 i+ [* o( t
},
9 r5 r4 ~0 D4 A4 J};
+ S8 e8 g/ a2 I
+ x' {9 L: h$ N0 e" @- _6 {# lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- C! }4 X# t+ }- b, v. Z2 V .leds = da850_evm_tl_leds,, P6 g+ ]$ p( }+ ?; Y1 `
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' `' d. l$ i* S4 q# C1 L9 b};
: N1 N! f" @3 V! ^5 d3 U: M0 {6 q( f9 |: K+ w* Y9 t
static void led_dev_release(struct device *dev)8 j* c* n, A+ X, a+ L
{
/ u0 `5 n v p3 D};
1 K0 s) t+ H4 S* H c$ ?& N/ L% q4 e8 Z u3 S6 H3 h b
static struct platform_device da850_evm_tl_leds_device = {; \ y3 Z9 B( `$ W
.name = "leds-gpio",
9 W3 E* o5 r( t: X1 K. x# Z .id = 1,
2 h$ p( Z" j6 c1 o .dev = {
( p+ J1 _% N0 W6 S* K, A9 d- { .platform_data = &da850_evm_tl_leds_pdata,
9 Q; {% [9 k( q .release = led_dev_release,
; f9 B* A8 o) I v7 ` }
: h! }% Q! `% I! O1 F/ i- l& X};
8 t- r! E0 S+ V* z* f
5 {4 f: Q. ]; I p' {- }static int __init led_platform_init(void); Z/ S1 F$ R2 n: _/ N0 ~; s, b
{1 I) E; k( L5 f6 N" y$ v" L
int ret;
{$ U/ g& o' [#if 0
0 k1 P! M$ L& ~- ^ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 S3 o9 j' a) E/ ]) P if (ret)% E) p6 Q* r& E9 F
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# k# F% F# b L* w
"%d\n", ret);
4 ~. |* q8 C3 c8 ]' M#endif
8 w$ J0 M" p/ g* e, m9 S* L ret = platform_device_register(&da850_evm_tl_leds_device);
6 I/ |( H# y- I if (ret)
2 N) R! S' q6 E pr_warning("Could not register som GPIO expander LEDS");6 U* U) N A* a. y+ ` }; K
else5 W. k7 ^0 @% }" I
printk(KERN_INFO "LED register sucessful!\n");
/ @5 w; @1 Q' r( e
1 p; N c, r8 C6 f return ret;
- ?/ V. }3 ?: Z}
* f1 f/ w1 j- c* ?' d: Y$ [7 R. S. i. t% {1 F2 R% o/ G
static void __exit led_platform_exit(void)* x( ~+ E: V# g3 y3 _3 W
{
+ S7 y6 [" r" a9 [7 [5 v9 o5 _! Z platform_device_unregister(&da850_evm_tl_leds_device);
$ Y& D" u! f* \9 P/ J$ B7 O* ?( \' S
printk(KERN_INFO "LED unregister!\n");& y1 f; {2 v) A) k. B, |4 h
}* B7 F& {' N* r" S- z) \' @
( k( y! u& K- y; _$ s# _$ jmodule_init(led_platform_init);
$ @" x- L, ^$ F+ ^module_exit(led_platform_exit);
( \* f4 a" F- O! A* `7 C$ F0 g* J# J3 V: k1 W
MODULE_DESCRIPTION("Led platform driver");4 ?; [& y u# y$ K5 l9 s, s s
MODULE_AUTHOR("Tronlong");
7 r/ Q9 {6 D# G& B5 q9 V5 T: t( UMODULE_LICENSE("GPL");
9 ^) U( d* P* W* J
0 \" k8 K* x( p. ]4 c/ q) ~ |
|