|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ p1 D% u L$ J
#include <linux/init.h>7 M8 ^9 d* Y1 L3 \
#include <linux/module.h>
& u/ H3 _+ V; c1 ~& p# j% s9 s#include <linux/kernel.h>- V* e) P p' J+ t; }* N( h
#include <linux/types.h>% l/ V5 }' i7 o
#include <linux/gpio.h>
: m+ _ n; O6 L0 G, h1 I: }7 c#include <linux/leds.h>& r, k1 e# s6 N
#include <linux/platform_device.h>$ }( ~: }& ~$ v9 a7 ^' Q% y0 y
* `! F2 ]% o; e7 I4 z2 @#include <asm/mach-types.h>& w) w# @1 i, D2 S. i# L+ P- R* g
#include <asm/mach/arch.h>" e. `" E% c2 F! ]
#include <mach/da8xx.h>
, F2 N3 i( v, ^; g. k' P' j#include <mach/mux.h>( o% I+ z" S9 E7 x
; j! |2 w# O5 k4 W0 M# j% j
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 Q* s( ?- _% t0 i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 u- h$ }. H3 F+ I' Y$ T t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 q3 w4 v. ]3 k6 ]1 q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 F6 R; `$ N4 C U
% `* f9 W$ ?+ C0 J/* assign the tl som board LED-GPIOs*/4 g+ a \2 J6 E; h3 m% a- d
static const short da850_evm_tl_user_led_pins[] = {- g! k( v- F3 B1 r. O( L" C( k& X
/* These pins are definition at <mach/mux.h> file */' Q4 a9 w! `1 w: L. Z# \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, C7 H/ T( O% e* z -1) f5 {) ^4 p+ z% ~) j9 _, I* ]
};
6 |+ Y; z# Z9 K# Q+ P7 j
' Y+ |1 Q7 |* u- q: A2 zstatic struct gpio_led da850_evm_tl_leds[] = {0 g, X0 u9 Y5 g* X2 J, M: B
{; Y9 R/ s1 t5 Z( L* \
.active_low = 0,! T5 A/ |" O1 a! \# V
.gpio = DA850_USER_LED0,) U( u. E9 q! @4 F
.name = "user_led0",! j6 Q$ W/ P5 F- K$ G& I5 m4 A
.default_trigger = "default-on",
- ?5 K0 B! g' B# r },
?: {* M! ?) a( W( V0 ` {
P1 w. f( U. ?0 ~ .active_low = 0,7 O& ^' G5 E7 W2 N+ x" X: F
.gpio = DA850_USER_LED1,0 Z* V) g# |+ @' e4 X$ E
.name = "user_led1",
4 [( W4 Q/ p$ R% B/ m4 T0 P .default_trigger = "default-on",+ s) t9 U5 j$ q: j
},; _/ A& B, ]( @7 e' q" e6 j
{% x" Y, V' c' E7 l: a# |
.active_low = 0,- z& {. @% B# B" F
.gpio = DA850_USER_LED2,; d" y; n. \% V) j6 }. ~
.name = "user_led2",
, R0 Z# ^. A. e. W2 [) R .default_trigger = "default-on",
$ V4 R o2 k& z3 O5 w! _$ A },, @! E3 j; g4 d6 G: v3 A
{* i- U) M1 H Z2 c" T7 p
.active_low = 0,
1 v- _6 u/ Z: Y' I .gpio = DA850_USER_LED3,
9 P: V. F* s. ^' X0 h .name = "user_led3",
1 R2 F' S# ]* t' _ .default_trigger = "default-on",
* m- k) n: m# k7 ^ },
" T% f2 p8 d) ?};
K. I; b, a9 f3 }9 ~- e) ?) z3 X+ u. Y4 S; _' e( c# a/ L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, M. ~2 X/ j& k- g" ~ a
.leds = da850_evm_tl_leds,' I2 v3 i* J9 g) W
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ s2 u7 S! u3 G J/ t+ Q
};
0 V8 d8 R+ f3 [ R0 V! ~2 p0 i+ m0 V4 {' u! o
static void led_dev_release(struct device *dev)
2 f# k1 X; S8 e D0 z$ s- b{9 a1 M# `3 \6 ~9 X2 i0 ^6 x: U
};( F1 B( c4 q- q4 E
7 n8 W% ^$ Q" d, A
static struct platform_device da850_evm_tl_leds_device = {+ h* l% c7 g2 m7 |3 I
.name = "leds-gpio"," ]! Z) p, ~( p, s
.id = 1,4 X( ^1 u( P K; I- J, d
.dev = {
' l- A6 [8 s9 j .platform_data = &da850_evm_tl_leds_pdata,4 Y0 x- D& u! |( q5 @8 w
.release = led_dev_release,( ~$ q3 Q9 M n; b: O3 h
}- C$ p" D+ @) D, ]# |$ ^9 p5 R
};' X6 {/ S+ E3 O* U! O
r# e8 h1 L3 d' ? q+ |
static int __init led_platform_init(void)4 D7 C! v* d" K$ k0 c4 @
{
( B- O- ^7 r9 u1 b int ret;# Q9 }; t) g6 q, D1 q* n
#if 0, K9 M/ @6 Z9 V: d9 e
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- _5 R, S& {% D' w if (ret)
: o9 j( J7 q1 `( H* I; Q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 |+ S, b8 v& u9 O# K/ H, R1 |
"%d\n", ret);- m& `8 z1 D" ^5 ?# L" `
#endif
) r1 {1 k) ?2 e6 v ret = platform_device_register(&da850_evm_tl_leds_device);
3 m7 l! c. g! x- H if (ret)( o! e1 X+ l* n$ l
pr_warning("Could not register som GPIO expander LEDS");
) h0 @* a4 @9 [6 s2 c' B else
! B& \/ M7 c2 ]# Q printk(KERN_INFO "LED register sucessful!\n");( x9 K& l. v/ D+ w' W6 E& M9 R
- W9 ], g$ D: t) G! I! e. ^& f return ret;
d- c) K% v, t* e, Z) f5 I}
- \6 {1 U3 U3 k8 b
1 y% V) m7 T4 N8 i5 qstatic void __exit led_platform_exit(void) C2 q" J. w1 n# V# ` v0 V
{
$ H9 o5 d' o5 t$ }/ ] platform_device_unregister(&da850_evm_tl_leds_device); _. v! l& m; {" Q# {
& @! F2 i+ L- O( l+ }$ v! g! O
printk(KERN_INFO "LED unregister!\n");
7 w% u/ d/ L" u: X1 Z6 n6 ~+ G}
" q! X- ]% V7 M$ G" s3 G. f! q( v2 P A3 W* W9 {8 f, U
module_init(led_platform_init);
( a: A- l; }6 I6 P1 a( Qmodule_exit(led_platform_exit);
& Z# V' H! [3 Y; q2 h5 k0 N) D! R5 j; F
MODULE_DESCRIPTION("Led platform driver");
5 V* ^: U/ N9 f+ nMODULE_AUTHOR("Tronlong");4 l% f! a/ ^* c; F
MODULE_LICENSE("GPL");1 i! Q3 Q8 l9 P- J0 l3 E
3 R& Q* s3 r6 P& R
|
|