|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. A5 F2 s5 a9 Q
#include <linux/init.h>, E' e% P8 F2 ]* ^' V. u
#include <linux/module.h>7 W8 H( A5 |4 C* `" w
#include <linux/kernel.h>
; `# V; Z' [9 E& R" d- {8 O#include <linux/types.h>! _/ J* n1 d( u4 l% q! P
#include <linux/gpio.h>$ S) k7 K9 r8 N5 B, r% C
#include <linux/leds.h>! E) R8 M7 F4 j) V/ @
#include <linux/platform_device.h>
v0 A: b a4 D' _* t* J# i4 l2 C/ g: k
#include <asm/mach-types.h>
% u3 Q$ y- Y1 {5 P* l#include <asm/mach/arch.h>
+ ]' q0 V7 s, z- ~% \#include <mach/da8xx.h>& J: R8 c& k2 U9 l8 g( c) b
#include <mach/mux.h>
1 O: q1 r# e$ X( b/ i: U/ c% i. V n( J, S/ N. D/ D7 x! A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* u3 U2 J; _# I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# S& Q! H W, N8 k3 n* T
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 g. j6 F5 X2 o: m" J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 h# x7 H1 {! m) R
# g0 v9 q6 O; Q! A% V/* assign the tl som board LED-GPIOs*/
7 e% L4 f8 V/ h% [2 y# n6 V2 Zstatic const short da850_evm_tl_user_led_pins[] = {- S/ a. N5 E& s7 b# d8 K& n
/* These pins are definition at <mach/mux.h> file */1 T* l$ h2 l- n7 L
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ m6 f$ n9 G% t% b+ w: B -1. Z. q0 ~+ A( d- ~$ P
};& R' V3 u* w8 u6 E# r/ d
+ S6 ^# F8 X3 y L, k" _) r+ Wstatic struct gpio_led da850_evm_tl_leds[] = {% g& `. u) ]# ^# u! M b' n
{
0 L7 u& v: ~. j ^ .active_low = 0,
$ a0 q+ r5 R( c: h .gpio = DA850_USER_LED0,# F. A- t# q( K/ E9 H$ ~
.name = "user_led0",' E: l+ G" @! H# P
.default_trigger = "default-on",( \# G. G2 p' X3 J( K0 k+ w
},
: y6 k4 A2 w9 h {; c6 N+ P/ G$ U. Z
.active_low = 0,. F7 |8 u1 N4 ]
.gpio = DA850_USER_LED1,9 @4 @3 }3 \+ X& d
.name = "user_led1",
7 Y# B$ B0 |; ^5 z0 W: o' o .default_trigger = "default-on",5 p! F- J) M5 m6 Y; v1 r- u2 u
},5 k# P: L5 |8 O4 X- l- W
{
9 O" h6 U9 X7 U5 O .active_low = 0,
; w" S+ H# P) Y# I& |+ Q' X .gpio = DA850_USER_LED2,
9 B( w& K2 q2 @" S. W. e4 @( ? .name = "user_led2",
+ z4 @' B4 c# g$ K3 w$ k* H7 D .default_trigger = "default-on",
$ ~/ A( v* r' J, W0 d },
1 A( J. W( h) X: _ ^! N! ^& V6 B {- D% [) \5 W$ D# e6 l6 n
.active_low = 0,5 c1 b3 G% D8 K+ N
.gpio = DA850_USER_LED3,( x* ^2 E& \: h% [
.name = "user_led3",
: f- r1 i! G/ F0 n .default_trigger = "default-on",
1 ^& n$ I) {: y },2 \7 W9 m5 \, u) X5 W+ D
};
1 C! F# ^& S/ S2 X7 `" O/ K- G
@5 _$ j& u3 xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
Z5 T$ Q i* u; b1 S7 }# i6 O7 ] .leds = da850_evm_tl_leds,6 f( p1 q8 c4 y2 i% [
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),! F$ m1 n1 W$ w8 D$ P' Z* m) v
};
1 O. I. ]" h6 l: T2 _5 O/ O; J4 J
6 l( u3 u" G- X+ Z8 G% ]! bstatic void led_dev_release(struct device *dev)& l1 O% A' V4 [5 X4 D" l4 n+ q
{
" W H; u) ~4 \2 z/ D3 w};
2 N0 M5 L2 Y5 T" p+ X3 D( ?: y% ]5 }7 b8 H. A! c w5 k
static struct platform_device da850_evm_tl_leds_device = {' g7 T, c1 I( n) T3 s0 v- B# ~6 w/ Y6 M
.name = "leds-gpio",
5 ^. Z& z- N- o( m1 y6 | .id = 1,. a6 |$ ^# Y; D, x. K% R
.dev = {
3 K7 ]! y: ? X# L8 {% Z1 d0 }+ k .platform_data = &da850_evm_tl_leds_pdata,
A! x$ U; b+ A* ~5 R. a .release = led_dev_release,
, K! G& ]) |9 O% O( j }: @" f: A# T" |0 r6 x
};2 V* {- \# ]7 A1 I
& F) ]3 j1 G2 \, i! lstatic int __init led_platform_init(void)# j( C" b' S8 h- V9 i
{$ f+ ~- m* X% @0 w
int ret;
* @& K) r" r y' J) e- K0 W0 D#if 03 S) s% I# D( e$ W K
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- d( U0 ^& T1 N# V
if (ret)
( Z4 \. ?6 |: o+ E6 _- I5 D; _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- S+ a9 ?: p( w+ ~2 w% J. s7 P4 i- \ "%d\n", ret);
/ O6 H# }$ W; P, a#endif
- J; L# b, A7 `# q) w" G9 a ret = platform_device_register(&da850_evm_tl_leds_device);
# W3 ?) d+ v" C if (ret)
& W% w3 Y* a* n pr_warning("Could not register som GPIO expander LEDS");
+ f- H6 w. V7 G else* M W+ k& G& j3 Z! A
printk(KERN_INFO "LED register sucessful!\n");. q- N; e( Q/ L, g6 j
$ X$ _% _) O3 _' L# y0 C
return ret;+ X" V) p3 X8 Y; q
}
* C0 ]5 D6 U, q8 O O/ w. [# h1 ?8 x4 u
static void __exit led_platform_exit(void)
; M- l* }/ M# i6 L" |8 G{
4 N6 Q3 r0 d/ j platform_device_unregister(&da850_evm_tl_leds_device);1 E6 q/ f3 t+ q$ R
6 M) ~; ~% Z: d
printk(KERN_INFO "LED unregister!\n");8 }4 d8 q, N7 i5 x( Y9 C
}7 X6 v4 j, E/ U3 h7 C4 S3 _8 G
X5 E( o% ~+ Y/ o d5 d
module_init(led_platform_init);6 F7 Q8 h( Q* H2 ^/ h' @
module_exit(led_platform_exit);6 w M4 Q4 O- \" g5 R
; R, W# ^! W3 q
MODULE_DESCRIPTION("Led platform driver");
- Z: z2 E, v! z# I; aMODULE_AUTHOR("Tronlong");
! Z+ i2 m7 L) O& F0 a0 `5 [5 ?MODULE_LICENSE("GPL");# P$ n Z% r+ |# u1 \
4 Q( V+ a0 v( n( O9 z( Y |
|