|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ |& N- [. {" ]9 w# J( c' l#include <linux/init.h> l1 {; U+ {4 W7 F7 s3 s& G
#include <linux/module.h>
2 p6 _8 |/ u% O5 m6 s#include <linux/kernel.h>/ ^. B" I! C' Z m! Y* M) l
#include <linux/types.h>
* y$ Y2 e8 N( Z/ d/ {5 c#include <linux/gpio.h>
/ n4 J [: y- S* x0 q; ]#include <linux/leds.h>
! @) B- i( j J* ^. h+ v#include <linux/platform_device.h># J# _/ y. z7 z) r
% ?; C! Y2 Q+ S
#include <asm/mach-types.h>
( D0 k4 W+ o- m7 D0 R# T/ h% Q#include <asm/mach/arch.h>( B, z0 x. Q. T& s% i+ b. q4 w
#include <mach/da8xx.h>7 p8 l4 n0 ?8 G# H9 L
#include <mach/mux.h>. J! G# V% U6 ?9 q/ x1 T
/ M4 V, k) T3 ^0 V6 C6 _& H
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 I2 H/ R. F5 m2 [/ N& v. N#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
T% p, n' m( Y$ e4 U4 v, Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) J! }# s( G/ V/ V1 p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' i+ i; r) D+ Y% j* h
' N* i% R1 _0 ~3 G! |. R1 W
/* assign the tl som board LED-GPIOs*/. W7 ^+ u7 K, A8 p
static const short da850_evm_tl_user_led_pins[] = {
5 P5 Z- E/ C4 A" Z7 q! z+ Z8 q0 D: f /* These pins are definition at <mach/mux.h> file */
4 k, H; I6 \( ]) y, E' V DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 A+ ]' [8 g( B9 e3 m! o3 w" v
-1
( o# S" A1 O- @) e" S# H$ w% q. D};; O$ t, }) a8 Y( A7 q" ~" E
" y o+ W8 D' L3 K* {6 R
static struct gpio_led da850_evm_tl_leds[] = {( _/ }, o" p2 ^ _) g+ |! o
{) c- v9 G7 ^3 W( [- Q
.active_low = 0,. Y. H) E( e- ~; {% v: R! Z
.gpio = DA850_USER_LED0,
& Z8 S5 Y: B; o% ~" p. g .name = "user_led0",3 y. `6 ?* [" G
.default_trigger = "default-on",
3 U6 b- \% M0 G. d; Z4 G },
( t" z: A% l- @6 T: @ {
! r: Z; d5 l, @* P .active_low = 0,
4 V* f+ A4 t6 p* | b- b i .gpio = DA850_USER_LED1,
/ @9 H- E' a* ?+ J& G" z .name = "user_led1",5 h* x [9 n# G2 D8 e* w7 i( f B
.default_trigger = "default-on",
; b: ~# ~' F! A' ~ },
q2 v5 q& k1 j {" p% |8 A& M$ ~( N4 x) x
.active_low = 0,
- S' O/ k. g1 M! M4 {2 x! g V .gpio = DA850_USER_LED2, [/ r9 h) V$ @4 `% U# l
.name = "user_led2",
9 x- A0 j/ T# x' P; F .default_trigger = "default-on",
! h/ q$ G: m* C& i },. S" ^3 |+ i* v p
{
5 z/ y+ ]/ U3 d3 z: `' ?# z .active_low = 0,
/ t1 T4 j7 Z- ]8 H, I* L# U. y .gpio = DA850_USER_LED3," C3 p: j) U7 Z3 s! V7 h
.name = "user_led3",6 m7 K% `8 [/ p- X5 @, K+ o
.default_trigger = "default-on",6 Y9 v* x: ^3 O) P9 _/ }
},7 k* k( B4 ^# M. N$ s$ L
};
& S1 v! s8 M5 o3 ], w' M
5 {1 E4 K2 T" {0 Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ ^/ d4 S& u, ^2 ~5 ?2 F
.leds = da850_evm_tl_leds,1 |4 v2 {$ |/ t2 [4 F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 g$ ]$ |) q0 T};% C5 K. `* g1 m7 ?7 e, A/ A
' |8 S2 y7 K* p0 [+ s
static void led_dev_release(struct device *dev)! E7 k0 J! l$ d8 M; Q& P, Z+ ~* t
{2 R' D. L4 k2 G, j+ h) m: c# W
};
/ S( z- H9 p, m5 B7 H' h# _$ w" j! b0 k; I; }4 @
static struct platform_device da850_evm_tl_leds_device = {
* N7 W1 ^6 S! j) B .name = "leds-gpio",
0 ]- M: L6 X) g7 Y .id = 1,
1 J# Y! y3 w- I9 v .dev = {
9 M7 m7 {% E' X, x/ p# Y .platform_data = &da850_evm_tl_leds_pdata,
. N9 k, B7 i4 |$ ]5 U" m+ i .release = led_dev_release,
3 O& E% ~, v' i1 F, a& r* J }" U8 _) [' i- `. o- J) w! H
};; S' L/ g3 [7 T4 A+ m' s
0 w/ o3 y" r" `# H* x
static int __init led_platform_init(void)8 p* y0 j5 d0 D8 w* x8 i. m
{( E8 E( C1 l# e8 f7 U$ }
int ret;
5 z. ~5 ~* K! e, _2 z* A#if 0
; A9 @6 s7 \1 ~6 J9 } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 T( a! s1 ]# x0 _& G- ~ if (ret)
- `' _) n2 n" k( r* Q9 ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 P+ T3 W, b! _- X. x+ {
"%d\n", ret);
, e$ z1 H% P5 V5 T1 d8 k#endif
4 i: d/ W/ }' J: g7 q ret = platform_device_register(&da850_evm_tl_leds_device);7 ]+ O4 M) N( l( m* T( {+ q
if (ret) k- H6 F; Z0 P7 [& z
pr_warning("Could not register som GPIO expander LEDS");
( T8 U3 u& ]2 r7 n: t2 o. N- h8 g else5 ?- |+ K& G1 N! M, r0 A- l# u9 m
printk(KERN_INFO "LED register sucessful!\n");$ J( \3 {6 [5 W, e
( D7 b# y% L. m# |% n+ }. Y return ret;. [1 p! _# h* ^- v$ ]" S
}
- C( ~; T+ H, h2 z' H, @& s' g$ W& v7 `$ h
static void __exit led_platform_exit(void)8 O0 c5 q* p* y0 c6 \* u
{% ^0 I) f+ u, m1 Q3 j t
platform_device_unregister(&da850_evm_tl_leds_device);$ \6 k% K1 U, f/ [6 d8 v7 W6 O5 x
1 H6 a5 l& H; A# I$ f% L; H- T printk(KERN_INFO "LED unregister!\n");
" S8 V4 b1 e J! U+ i3 X}
7 I% y9 k& D! M/ z) K" F3 f' M5 `% Z1 E" P
module_init(led_platform_init);
) M; q0 m' n, ^! N7 wmodule_exit(led_platform_exit);
h6 e/ J- ^8 H7 P6 x) F6 R" |3 [' I2 o
MODULE_DESCRIPTION("Led platform driver");% }. P2 c* I3 D$ z; e) [4 X
MODULE_AUTHOR("Tronlong");
$ l$ G7 K' f' {/ }+ ^7 L; tMODULE_LICENSE("GPL");3 I0 J$ L# \6 L/ B k+ l- A- n: H' s$ I
8 D4 d/ b/ @+ ~- ~
|
|