|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 J% i, s" h7 w: K2 \6 A; E9 o- q) y#include <linux/init.h>
& t( ]$ g, d. ^7 Q& v! n2 k9 h#include <linux/module.h>0 w% |( b# T# {& D
#include <linux/kernel.h>9 I% Y- l) z6 x _
#include <linux/types.h>
$ a7 A; r% C- | R+ i. J#include <linux/gpio.h>
; d$ o( K h: G& ]#include <linux/leds.h>
4 p7 r. j$ ?, V7 d3 E. N8 z#include <linux/platform_device.h>3 x3 J/ D5 j& ~9 R! W- g
1 z W+ b6 }2 F, t) X' G0 W#include <asm/mach-types.h> w2 ?+ V. U8 ?: K9 U
#include <asm/mach/arch.h>
, r7 C# R) H3 f4 n#include <mach/da8xx.h>
1 T- }, m8 t4 `: _8 Q#include <mach/mux.h>
" g7 v" m% G% U
7 v) a3 E# y/ K( r#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) z1 u0 W' Y) p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ g5 v, e4 R3 R0 w! Y9 j8 b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 i+ `; z0 z4 ]4 S
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* [( D4 ~9 G2 ^, x8 y5 ]7 N3 K" s/ A* L. m! `5 L
/* assign the tl som board LED-GPIOs*/$ M/ b. H( y8 B2 M
static const short da850_evm_tl_user_led_pins[] = {
4 H; `# Y6 ?# E6 Q/ x /* These pins are definition at <mach/mux.h> file */
. C) E H, K+ z# r8 b DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, I* |+ ?8 ^) F) J* }8 @5 I0 Z: C -14 n$ e# [3 [9 D* o
};! n$ i! ]6 Q: u1 D+ e$ p
3 O3 \7 [$ o+ l# E. k/ ?5 w3 g1 ^) R" G
static struct gpio_led da850_evm_tl_leds[] = {4 U4 h7 w* Q: h m7 |
{
" k& r9 E; Z" B4 [7 l .active_low = 0,
0 o& N7 o* X9 h+ Q1 Y .gpio = DA850_USER_LED0,' }5 i; u/ P/ O' p, [
.name = "user_led0",
' \) t+ X# ?9 M0 m .default_trigger = "default-on",+ j0 L4 I0 u0 Y# M% f+ A* H V
},
$ P+ |% s, r3 d* _! N: V {% P% b, V. A: C
.active_low = 0,* q/ T. c3 T! i6 H
.gpio = DA850_USER_LED1,
5 Y7 p E! U; H& G$ @" | .name = "user_led1",
( B. I! Q. b/ v8 X: B" x1 i .default_trigger = "default-on",) y( n1 n. E3 F; G0 Q
},$ F9 F9 p( b4 b( K( M
{
1 u ?1 b5 p, Z. @* A .active_low = 0,& b# E. W! J* Y5 o& V: U+ w
.gpio = DA850_USER_LED2,( K0 K" o" x' b+ _8 E* X* P$ y+ z
.name = "user_led2",5 O9 `* \ h5 g4 l* x" x
.default_trigger = "default-on",0 z' [* f% J4 I+ X
},
/ j" [8 x! q9 `" a, y8 u9 ?: T( B {( \% ]$ w: n/ T8 _
.active_low = 0,
% y' v7 V! P w* w .gpio = DA850_USER_LED3,; j$ l* E. H& W4 ]3 x5 z/ w
.name = "user_led3",
: ?5 d8 w1 n/ a# O0 t' ` .default_trigger = "default-on",+ L5 k% p; A' \2 C
},+ Y3 D! P) i* V( x
};
, _- h2 {3 t, i4 ^/ Q$ Q6 N2 l8 c7 S0 w9 B. Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ }! K& L, l0 k8 A
.leds = da850_evm_tl_leds,& R- d% B, d: ]+ u' L. V( P, V3 L
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- }4 M) w+ n) a* d
};* V& ?# D u$ i3 s6 `4 O
1 a6 Q5 ]7 w! B2 y1 B- Hstatic void led_dev_release(struct device *dev)
\ [% g" Z$ s( D7 R- A: ~{
. d1 D, F( x& k1 j) S};" _- h# G! A- z
7 A6 H2 _! k, z1 l6 g: g
static struct platform_device da850_evm_tl_leds_device = {
* h f4 I) D% x .name = "leds-gpio",7 P# B7 D- E0 }
.id = 1,. {2 G- D' N4 q9 R6 H" y* M4 I7 K
.dev = {* s& B( Z/ k( X7 P: G; ~! Z
.platform_data = &da850_evm_tl_leds_pdata,/ d6 v- g- q9 x$ l- g
.release = led_dev_release,6 V7 i# }/ p A3 E5 u! @7 @
}9 a4 D) B( J3 S6 S
};9 r0 d" a5 X5 ~( R& R- V4 Y I
$ [/ N: N) B( _
static int __init led_platform_init(void)
7 z4 I: Q$ O4 e% q{
' W& S/ Q" [# ~1 }1 z& q2 M int ret;
7 q- g3 A9 r# B" |#if 0
+ R) H. W3 x, ~. q4 ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; Q, [7 Z) U' v+ Y5 V if (ret)! _$ R9 q0 D5 R. ^. h" Q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 i0 G* j- G$ A- r' k' y
"%d\n", ret);8 X' ~; J' r8 h4 v
#endif
& j6 w5 ^9 h8 A) H% { ret = platform_device_register(&da850_evm_tl_leds_device);+ c( S8 `$ I* h$ c% x4 ~3 u2 ] @. X
if (ret)( T0 h6 ]% l) e3 S1 [
pr_warning("Could not register som GPIO expander LEDS");
9 _- i, J3 E2 |- u) ] else* z# ~$ q G! _! F- W: B
printk(KERN_INFO "LED register sucessful!\n");3 q) E S: V3 M( B8 N
& P7 E' K2 y) u' l2 E+ o return ret;
, i8 |. p) u! @5 o}) e" G* D/ Z4 o" l# s& b; d. d
! r9 u9 C* b5 ]1 Fstatic void __exit led_platform_exit(void)" b7 E( L) w3 E6 K! H
{
1 \7 I0 r" t- T platform_device_unregister(&da850_evm_tl_leds_device);: o( O) E; y3 q" |
) {* K- C7 e( m- z. O4 f3 }( v" i printk(KERN_INFO "LED unregister!\n");
' B: R& B# x+ Q* }' n! r}3 l( B7 H0 f5 @5 X' s; H
2 n1 Q$ _3 I9 p! g& |
module_init(led_platform_init);
; R; ` @, x( i& rmodule_exit(led_platform_exit);
0 |: U" f- O& G" u( | P0 A& G
9 d7 L# @2 M/ U& h* mMODULE_DESCRIPTION("Led platform driver");: @7 w6 ?( @& a1 l
MODULE_AUTHOR("Tronlong");
! ]1 Z( N# p' x) ?4 `+ ^% Q% o5 _MODULE_LICENSE("GPL");, _( e; C6 o% O$ X
9 I5 Q9 B" i# e: t
|
|