|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 G b: m- u7 c$ U( r
#include <linux/init.h>' G3 G3 r; x U% b
#include <linux/module.h>6 v1 R/ o$ ^! b" n# t
#include <linux/kernel.h>* d3 k# y: H, Q& @4 _: o G2 [
#include <linux/types.h>, T& [% C# y) a
#include <linux/gpio.h>
1 n# T7 v, }8 T$ Z#include <linux/leds.h>/ Z) [, a/ `: Y( p
#include <linux/platform_device.h>; b2 _/ E7 o# Z
0 [3 \+ n/ V6 w2 C+ V5 h1 P5 X#include <asm/mach-types.h>
/ y- ?( `) a5 G0 G#include <asm/mach/arch.h>" ~* m) j, U; x; M( ]9 V1 L7 G
#include <mach/da8xx.h>
- f: |% j j; n) \ y' ]. o# f9 S#include <mach/mux.h>) d: C$ z& y0 b5 S4 O: j* k6 D
/ T% g7 N; ?+ Z9 ~7 k X! m+ a9 q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 Z' u$ m6 n4 y0 m: `; a5 O#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) Z/ f6 B1 o* g) M& e
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 W, k+ w" t! B% e2 z+ {$ D! p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% y" k% D' r, K4 `8 A, i- T6 z, V( |
6 Z& Y# A3 q( U% W
/* assign the tl som board LED-GPIOs*/. M8 j% l/ r3 ~" {, r4 R
static const short da850_evm_tl_user_led_pins[] = {
; M7 c$ p b* ?* H: ~/ T' { /* These pins are definition at <mach/mux.h> file */
% p! B, }9 h( k; U DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# x% H4 I! o0 C5 c1 [
-1
) W3 R8 E) M0 @- }7 A0 {8 b};
& P# i; W* X7 m7 p3 G
& r8 Q( c6 O0 N7 [9 Mstatic struct gpio_led da850_evm_tl_leds[] = {
6 L: o+ M% o+ l3 N/ d, ` { C. o; g' j( o u
.active_low = 0,
+ p* u/ {9 m/ u- d1 ]+ c( @ .gpio = DA850_USER_LED0,. t2 m1 U; c1 c! M2 P. c6 i
.name = "user_led0",7 {2 {' [$ @. k t# Y9 r# f
.default_trigger = "default-on",; U( M% D2 S$ o% c
},. ?2 _8 r6 T) X
{
& z" B' m) C6 Z2 P .active_low = 0,
: a; o! ] Y8 X& z .gpio = DA850_USER_LED1,
1 N, u, D$ ]& E- j5 j' F; f .name = "user_led1",5 L6 \. y, ^7 c! c
.default_trigger = "default-on",6 B' }/ h1 o' f- M* S4 w
},' f; |9 j; |3 q; p4 M
{
. U& g" @8 I* T1 ^* Z; a; k: w! [7 P6 A .active_low = 0,
( m5 D: }2 {8 m% V$ V/ G .gpio = DA850_USER_LED2,
) E# q- [6 F4 z: c3 @ .name = "user_led2",
/ G! C8 [, B- t9 D8 u .default_trigger = "default-on",
8 g0 i8 ?" E3 \. d+ x" S },: J* M8 C8 N/ @" X1 b- K, z6 p
{
: y& w+ z1 F7 O9 X* s& a, b3 m1 z .active_low = 0,) |3 Q* Q b( Y% ^+ \5 s0 l( U) m5 c
.gpio = DA850_USER_LED3,
+ [% P" s* R9 ~! X3 [7 t .name = "user_led3",
0 O8 i$ E D+ [1 [ .default_trigger = "default-on",
8 a! b8 o4 h7 Q3 n/ y },& N$ ~0 Y6 H; ]
};6 K, g1 k% S- S; _
# x5 X5 a2 u {, b9 K( h' dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 {2 W4 K- v. n" J' R( k' T: } .leds = da850_evm_tl_leds,
; y! b1 Y8 s" h0 H) E P .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& V& n [; y# z( k
};
% `& R- b2 n+ R+ ~( F3 ?5 W) R; z% m- y
static void led_dev_release(struct device *dev)4 c4 l$ Q. _( @3 ^8 h b
{
" M& z% k7 c7 [9 z* U};
4 X$ y% z- K j# K( j# l( @. T2 T2 t, J( g* F
static struct platform_device da850_evm_tl_leds_device = {
5 ]: j- n7 j+ F( H .name = "leds-gpio", q# |( ? z5 w# Z" a$ ?
.id = 1,* w8 u& V1 N! P
.dev = {
& x" U: C% `* H, ~ .platform_data = &da850_evm_tl_leds_pdata, x7 K( s! K6 ?2 \3 v! _
.release = led_dev_release,
3 d( H* f: G1 z3 j }. R& U. R, S j3 e G
};' q6 B( d: X) z
Q/ q8 f' t* Wstatic int __init led_platform_init(void)
% [2 r7 F) ]. h) v6 M9 b7 f6 g{
) N2 @2 Y/ ?& x4 `1 ~* ]* a int ret;0 j5 A9 E6 a |0 O! k8 ^
#if 0
, D& z. Z+ l- b5 G) Y1 w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& e2 [2 T: E1 o. g
if (ret): X1 o4 [) E0 {9 w! H
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": A$ B2 b0 z. u) }' }
"%d\n", ret);
; s5 E& v8 Y) P0 E% E#endif
" u ~9 M# K' @! s4 K _' I ret = platform_device_register(&da850_evm_tl_leds_device);
9 I" H. S; r; u" T: E1 J if (ret)
) O* W' ~0 f5 ]- H2 c* h1 H pr_warning("Could not register som GPIO expander LEDS");
4 l( n, X, `+ r1 h else
, Y$ q9 W. p: R printk(KERN_INFO "LED register sucessful!\n");
$ x4 k5 f L9 N! l2 \% }* J3 v4 p- `
- W z/ m4 X. f2 z return ret;
# z" w" M+ Y; \" X2 Z9 m}
0 J4 C# v. S9 \$ T# M2 q+ N1 Q7 ]/ @4 C4 `5 O% V' A
static void __exit led_platform_exit(void)% [5 f9 G4 A8 u
{
8 p. z" |" u+ ^, X$ ^ platform_device_unregister(&da850_evm_tl_leds_device);1 T& f2 Q: O% f4 s5 d0 N0 y5 |
% _9 s; k: d2 {# d( F, x# `, L
printk(KERN_INFO "LED unregister!\n");" I; Y8 }% O" n. I; a. F
}
; C7 P% f7 c0 T% ? P$ w2 {1 U! _: D; t3 }$ ^
module_init(led_platform_init);/ K P5 L# V# K; P1 `6 M. y- x
module_exit(led_platform_exit);
, m6 X! Y. I5 R' M- D# Z1 u, h1 {* C$ {6 E6 C6 @
MODULE_DESCRIPTION("Led platform driver"); \: A/ Y# \; j" L+ g
MODULE_AUTHOR("Tronlong");3 @) R+ }8 K* `
MODULE_LICENSE("GPL");; {; l6 C2 _% `
2 p5 _ l7 o! v5 T8 a+ j! {3 g- I
|
|