|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; }& d/ a3 e j0 z#include <linux/init.h>8 S1 Z. c: q4 ~, t1 S
#include <linux/module.h>. _7 V. W$ ?5 u$ F$ N
#include <linux/kernel.h>! f5 ` @/ U4 {( |5 I/ j
#include <linux/types.h>
# L; N8 Z6 H. v#include <linux/gpio.h>" _, p; [1 O8 J/ E! i
#include <linux/leds.h> l5 N! `7 R+ S& y( J* W" {
#include <linux/platform_device.h>1 m+ {' K( v1 @- ?' Y% |
: h' `1 [5 ~$ F#include <asm/mach-types.h>
! i9 m" |& ^+ h#include <asm/mach/arch.h>5 B; {: G% T, k# z) G
#include <mach/da8xx.h>
7 G& R) p/ L. a#include <mach/mux.h>
' v, f. X6 _* c. L% W& @$ X3 K0 I8 K; t" g( t+ e) L7 r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 M/ D: l! \$ Y" Q0 H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: _9 t3 O: R8 y1 ?/ [#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 L, a# C5 u3 J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ ?+ F' J! o0 Q: p' r0 M2 ~0 _
& W1 i, N1 ~% F! l% ]; x8 P: [
/* assign the tl som board LED-GPIOs*/4 h1 Y% J* V8 q. H. Y! @
static const short da850_evm_tl_user_led_pins[] = {& i! a P& h9 |5 k9 X/ q W
/* These pins are definition at <mach/mux.h> file */
# a; C7 y5 U' U- d! e5 H( n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 Q9 \- [' V( F! c+ Z* ?
-17 L' z1 }5 k. r8 u, `; ~
};
+ w+ L S1 l' c1 ~! h/ n
Q3 {( ^* o7 R, c, a' ]) tstatic struct gpio_led da850_evm_tl_leds[] = {& O- L' [- v' _9 h$ [
{
1 X" o( h+ w" k% U4 y# E9 d" Q .active_low = 0,0 C! y9 C. D* ~5 O4 v1 L
.gpio = DA850_USER_LED0,% p# H, e- w, e. o' T9 o, L
.name = "user_led0",
% c7 v- ?7 [0 a u .default_trigger = "default-on",. t$ }$ d0 v9 k1 G
},
6 I! B! C% Q2 h8 @( Z {& e6 n8 ~+ v: Y. {
.active_low = 0,8 W* J6 ?# ^( x) |3 d, y
.gpio = DA850_USER_LED1,
, N+ Y+ O- b: m .name = "user_led1",
3 H4 V% B; l4 ~. o/ k* z5 i .default_trigger = "default-on",* i/ {6 u% u( R, s
},
* u$ i4 j& }) }% Q i$ i% a {* u% U/ L4 P3 \; U3 ]6 J
.active_low = 0,
# s$ r1 g; T0 c% R# d$ }) F .gpio = DA850_USER_LED2,
, J; z& e: F9 l/ M. v/ }$ J( j .name = "user_led2",
* j7 g2 m& G" H- R .default_trigger = "default-on",2 N( R$ ~/ R5 u: O1 O
},7 w7 y, {5 w4 i/ s0 v: {6 M9 t' e
{
( S0 t& w; n7 m .active_low = 0,
: c/ l% h _# h6 {4 I .gpio = DA850_USER_LED3,6 V, i; ^# s% K' U
.name = "user_led3"," E! O0 ~7 D1 ~
.default_trigger = "default-on",
& x6 V" X7 j/ K },
5 k; m5 f- h5 @% F# p};
% }3 S1 W6 }/ p7 S$ _# W5 _5 D" f: d. @4 m4 B7 G4 T5 V7 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 T+ ?4 Z! I7 `* U" J# |+ c .leds = da850_evm_tl_leds,( A+ g; I0 y+ a
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; F$ R5 \, O3 B
};6 i2 v4 H1 E2 m/ J( ]
6 ]3 f% w; Z- T# G! C9 L' N5 e! dstatic void led_dev_release(struct device *dev)
/ f6 ~$ }* }( y: I0 E7 [( S{
4 a' n/ `0 {& k K};% d3 A; ~/ ]: @. D6 O# J6 h
* R" k i, l# _( `
static struct platform_device da850_evm_tl_leds_device = {! p) a! _% C# ]* t$ P6 \6 [" b
.name = "leds-gpio",! i$ X% j' t7 _% Y- Y: h4 M" e" ?
.id = 1,
( s: E2 ] l1 Z3 a _ .dev = {
9 D3 a" e ?4 C+ J- g7 ~7 l( f .platform_data = &da850_evm_tl_leds_pdata,
! N+ s1 F$ V# s: Q+ s, A) n .release = led_dev_release,% ^: q) @' v. j& b
}! d1 a( R% V7 t, j$ ~
};$ q( K2 B" d/ `2 }' s2 V) b% v
! l: o, R+ z/ B2 Sstatic int __init led_platform_init(void)" ?# \4 R3 l3 J5 C+ M5 ~3 O# G
{
6 T# K* x+ T8 z d3 w \; s! [0 h' p int ret;
) c% p' B, x* n#if 0, `. G! @; a/ |* V- [8 S4 n
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; p( f8 v* [% ^: L
if (ret)
' o; H5 X1 D8 M/ E" a4 z! f+ ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( ]$ I6 r/ s J5 b3 t "%d\n", ret);
6 k4 @, q& D0 U8 v2 E#endif# w. A4 n2 C% C
ret = platform_device_register(&da850_evm_tl_leds_device);
8 W5 l2 _& |' c) h( B( x. D if (ret)
. W) M& [/ m2 Y+ N! S- I pr_warning("Could not register som GPIO expander LEDS");
f+ Y0 L7 A% y4 t5 [$ w, z/ C6 V else
. G, _+ a0 e" R, D printk(KERN_INFO "LED register sucessful!\n");8 A+ j# Y1 _3 @ d, R7 V
/ v9 b' a" K, c' C# P1 J" l5 C" X
return ret;
( s; o5 N9 U6 J$ o0 T}; X, I' }9 c2 G/ ]: B' |6 r* I
7 ~ ^* e9 o! t+ t! r) [; Y
static void __exit led_platform_exit(void), B! k# L1 q" T: w/ D6 C/ ]
{
+ h: Q) J6 _8 F1 Y platform_device_unregister(&da850_evm_tl_leds_device);
! G( A8 C0 p6 d; M' A! y G _5 g8 N: v8 A) L( k
printk(KERN_INFO "LED unregister!\n");
. W2 y) @1 |+ o. p* G}& d" C# T, p& _: G5 X
6 D! R9 ~) `9 _" F3 ?( q6 G1 Y0 Nmodule_init(led_platform_init);
; p. f' C* t1 Lmodule_exit(led_platform_exit);
2 |6 r' l+ e1 s; L/ ^1 Z+ \& y& R$ L+ n* x! [
MODULE_DESCRIPTION("Led platform driver");
6 D; O7 o- D( W7 o# y. DMODULE_AUTHOR("Tronlong");
$ v9 @* p# u* {: x/ hMODULE_LICENSE("GPL");; h& M$ Q# V2 c0 n7 E/ \6 u
8 C. ?8 V( X9 }9 _) ^
|
|