|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 C, h5 z3 h8 b#include <linux/init.h>
+ f) W5 K, b6 Y% A#include <linux/module.h>
% z. ?, ]4 l) i2 r* o7 G#include <linux/kernel.h>: i8 k& w/ @2 o/ K
#include <linux/types.h>, L. N; S* }5 P, X; h, V
#include <linux/gpio.h>
- l$ ^* B* c( E#include <linux/leds.h>$ `3 K6 @( }( c7 Y- B/ O
#include <linux/platform_device.h>
$ H* ]/ M [. O- d
+ m1 U3 U8 u, h m9 {/ ?#include <asm/mach-types.h># e0 e6 _0 P6 f. i! E6 Y
#include <asm/mach/arch.h>
9 u( X. ~4 E3 L" W# }#include <mach/da8xx.h>
7 c- N) e- D9 i' n#include <mach/mux.h>! }/ T. k1 n% Z% A& y5 F; J
" v$ z/ l; K$ I8 L4 o# k
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" E) p) C$ N( s' l; `; U9 y. p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* s8 A8 I8 h% N9 W" G#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 j/ V. E! ]+ a0 g
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 S0 i v% w' M) G
3 u- W/ i7 Q/ O
/* assign the tl som board LED-GPIOs*/9 s; U/ o% y7 F, E' T
static const short da850_evm_tl_user_led_pins[] = {: e8 G% E) ^1 ^ S9 r5 y
/* These pins are definition at <mach/mux.h> file */4 S: Z6 W, |' O$ r8 O
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& `4 n F( z8 w8 ?1 \! R9 }7 B7 Z -1, }3 _7 r1 T5 ~% Q0 ]. s$ e
};
, |1 W+ p1 t+ q6 }6 [) g' u5 a
1 A, l/ ?$ E5 i! @& u& ustatic struct gpio_led da850_evm_tl_leds[] = {
! c) e O0 Q# p0 t" l$ c {
1 l9 a3 K6 A3 u$ A .active_low = 0,( T1 R, \# `2 m1 V1 A/ q' s. n
.gpio = DA850_USER_LED0,
5 Z1 O( `5 J2 {- g& h .name = "user_led0",/ w% i7 C# Y o3 R7 t1 `8 _. `
.default_trigger = "default-on",
. j6 U+ J7 p' v/ }1 k3 p/ r },+ Q! n; w+ O; h9 u3 T' ~
{4 y6 C. V3 e: [& c3 t
.active_low = 0,
, P9 V( n- p+ v- H u1 S .gpio = DA850_USER_LED1,
# x! T) K( B I& A: a .name = "user_led1",
- `) z/ M" A( `, o1 j# N1 S .default_trigger = "default-on",
2 M0 Y; P- g1 K. C$ v( Q% F$ H },5 D2 W' S7 T- e
{
! y5 ~, R. k/ m0 Y .active_low = 0,! \% p1 G, E% K. {" r% _0 s
.gpio = DA850_USER_LED2,9 ]' c, v2 {7 f! }, P% Y# r
.name = "user_led2",* ^: i$ `$ q1 d% Y* x
.default_trigger = "default-on",, {' b' w7 u6 T+ M7 F, \
},7 }3 p$ v" K% [5 `) a/ i
{- b; }4 P' R3 S6 P0 A- Z
.active_low = 0,8 x' m$ c. `! y/ ^8 q2 x4 Z
.gpio = DA850_USER_LED3,0 w @+ G7 q9 F+ X
.name = "user_led3",; ~- W3 [% N/ X3 w! s' K+ G
.default_trigger = "default-on",4 x: d5 Q. I' V8 `! C5 R' e9 M
},
7 ]6 {8 p, L7 p H. k* |9 p: p: f};
% Q% r3 c: }( B2 G# Y6 C4 t4 A% e$ L5 ~# d4 O5 B
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" k) Y4 k0 M4 }% f$ e7 `6 P# @
.leds = da850_evm_tl_leds,
$ w4 I% T9 b: U: V; j0 R4 i* K- W/ ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, _4 m+ n# e* S7 S, v2 X- A3 Z};5 P; s" D# \# g ~
3 R" h: a0 p0 Sstatic void led_dev_release(struct device *dev)4 O L _+ Z' E j/ h
{# \1 e2 V: U( O& L, M8 o
};
; l: c+ j# e* V) o" y
7 k9 n/ |/ n$ f/ c7 Gstatic struct platform_device da850_evm_tl_leds_device = {4 G" W# i" Q" T) Q4 q
.name = "leds-gpio",9 c. h1 a+ d0 K; Z0 w* C
.id = 1,) g" G( B* B" ^, ?6 |; C8 u
.dev = {
2 s9 v+ g$ Y: l .platform_data = &da850_evm_tl_leds_pdata,
4 S+ u! Y- E1 ^5 P3 E4 u; D3 } .release = led_dev_release,
, f$ J5 R/ u+ L* L8 T) [ }; ?% U. \) u9 T2 A
};
4 e, ?; p5 |6 K& ~0 o9 |4 o( G, N) s6 L
static int __init led_platform_init(void)
) z/ h( _9 B' Z7 u( }6 W& O h{' i& F# f& N' G
int ret;+ o" e7 {* g/ K0 N% v2 _# J6 S! t
#if 0
4 F' e' s1 o8 c" N; E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 s0 Q9 P) }- n- L2 m3 ~2 M% i if (ret)) W% p, y/ E8 w0 G! [6 L" x6 B1 v6 A
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. r+ P4 M, |& d "%d\n", ret);
+ t! k7 ^" P. Y* c+ i' p7 P* a+ _% s#endif
n+ [ ~1 {# E9 T, F. p ret = platform_device_register(&da850_evm_tl_leds_device);4 k/ F( V+ T, t
if (ret)
3 n& ~9 M# W8 W7 p pr_warning("Could not register som GPIO expander LEDS");% O- H7 R% K- I, K! I& t
else
" B3 D0 X* I$ [ z% @ printk(KERN_INFO "LED register sucessful!\n");% o! U' `8 k& @6 L- Y8 {
, M6 Z* C; m: n8 u
return ret;- t+ A( |2 D+ B) z& d4 Y+ O, \8 O7 O
}
7 Z$ q4 m" {# [% H0 p! B
: ], a E0 Z0 y5 H. V4 l7 Hstatic void __exit led_platform_exit(void)
5 P0 N7 G3 S. @! B8 e{8 J: S' }; x( G; t* D( h
platform_device_unregister(&da850_evm_tl_leds_device);
( r* J+ e' W9 Y7 l0 V
% Y- y+ z9 F8 h- z- R! t printk(KERN_INFO "LED unregister!\n");
a' o5 s# \) h3 n}! }: l: B( d d9 ^
" b2 K- N7 |2 [, c4 |
module_init(led_platform_init);- B; W. D5 O" t: V! A* m7 J
module_exit(led_platform_exit);# a6 ]! Y: u+ Y
* z' c F5 h& tMODULE_DESCRIPTION("Led platform driver");
& H9 y" O2 M& @' T, S3 z) yMODULE_AUTHOR("Tronlong");5 h' ]8 @* H7 p( b
MODULE_LICENSE("GPL");/ m. ~0 k0 S) n1 O" a
9 E2 c" J+ @' C7 L& S6 V |
|