|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ w; i* R* @7 |8 G. O
#include <linux/init.h>
# o+ i4 Q& A5 ?9 o#include <linux/module.h>: I0 N: L8 i1 [3 F5 E6 a1 u/ h
#include <linux/kernel.h>& o# p+ f" g3 u2 K* x
#include <linux/types.h>
' y, c, H& w; F) U% S#include <linux/gpio.h>
- R0 Q' H& q* Q+ a( @#include <linux/leds.h>
. h9 _8 X1 F4 t& u#include <linux/platform_device.h>
$ U; M( k8 ^+ k' V. w
. k' B% Y# |) Q; j1 P( c7 v& g#include <asm/mach-types.h>
- q, \0 B8 J9 F% Q8 F# ^9 J#include <asm/mach/arch.h>; Y( r* X$ ?/ a6 o% v! i* ?) _
#include <mach/da8xx.h># o* ~& D8 Z4 M3 p- y0 w
#include <mach/mux.h>% k% i5 D0 b$ b/ J3 \
0 H& y+ Q# B4 f6 F# ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, ]; l9 K, I7 I* H6 O# y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 h( M4 j% y! o( ~' l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); S9 a' c5 r: d1 o9 F" {( a
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 {* X5 x V% T* S. ?
: c7 B/ q# {2 g) w6 V/* assign the tl som board LED-GPIOs*/
! X0 K! Y0 [! a3 gstatic const short da850_evm_tl_user_led_pins[] = {6 \# C- j; U+ D+ n
/* These pins are definition at <mach/mux.h> file */
# b7 I4 U( H' F% ]1 r" u DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 V1 l+ W, ^( a/ X -1
2 X% S; ?/ O$ Y};2 J: H* B3 ]- F! ~2 [
6 _1 j6 u+ l- p4 fstatic struct gpio_led da850_evm_tl_leds[] = {
- E" `4 p% C0 k {: d8 q3 p+ U6 {
.active_low = 0,% L: F, @- G8 A. s
.gpio = DA850_USER_LED0,
+ m) U1 j6 U" ]8 _3 ^( ] .name = "user_led0",- h' O" o( a J& g5 N7 J
.default_trigger = "default-on",0 [3 Z7 Z& ^+ a1 @) g
},
/ M9 x6 t$ O; b+ S0 [ {
/ O; h3 n* A( j! @6 w7 ` .active_low = 0," P& B5 c% l" x. R
.gpio = DA850_USER_LED1,
) ^+ \. s9 i5 F% X. m .name = "user_led1",
1 F2 u7 C: X$ ^4 z' t .default_trigger = "default-on",! [# {/ n; {8 P2 N e
},
/ n: {3 t! \& ~* U! v {# p2 E8 d( |4 o2 l& W0 A. k
.active_low = 0,
5 x8 M: l9 Z! w7 `: k6 |( ] .gpio = DA850_USER_LED2,$ X5 {3 D3 k/ c0 H' T K7 S4 I9 Q
.name = "user_led2",2 m# q' o2 b( F; n5 ~9 e9 _
.default_trigger = "default-on",
& B3 x. S3 Z! A1 y: |* b },1 h0 T* ~2 N4 H1 `
{
/ U. ~: o% W' t. X* h4 C4 ~4 y .active_low = 0,) ?1 r9 p [+ P5 z
.gpio = DA850_USER_LED3,: a; x! y) l& Q
.name = "user_led3",/ ?( F u4 u1 [6 U/ e- q J3 J
.default_trigger = "default-on",- k# k5 p% H# v' w7 Y/ c- b
},
& p. h* Z) I1 f2 [1 ]3 B! M};. B$ l! y7 B/ s7 L; X, C/ y
1 ?: T, \4 ], P- v z6 ~% |& Jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* i( Q! x% ] i( i8 e2 V .leds = da850_evm_tl_leds,
! `8 f. a1 A" x/ \% P .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 ~. I! G8 N, O) o};
$ I2 H1 y# v4 W( A7 J( s0 g! K
0 e$ F2 X) n$ d' p. |& Jstatic void led_dev_release(struct device *dev)
8 [4 P6 M7 u3 H2 f4 y- r{
$ e9 B& ]8 I- Q};
* b2 j- D. P: B2 T/ c L7 y" _. S2 y( @; P+ y; E
static struct platform_device da850_evm_tl_leds_device = {+ q" Z0 w4 P9 w0 Z8 d! `: k
.name = "leds-gpio",2 T. h$ U6 T7 i0 f
.id = 1,
- S4 }, }- w* ] U, `) L .dev = {* \/ q( d! V# C% s5 H! `! t6 K
.platform_data = &da850_evm_tl_leds_pdata,1 L) U$ c9 p. _5 _) \' A+ X
.release = led_dev_release,/ g4 J* N9 f1 U5 ]$ h
}3 o* V6 D" d$ h& Q
};
4 `$ Y7 m2 X+ z6 A: C& B- |
# {- m7 ?$ }) w4 astatic int __init led_platform_init(void)
6 }. E/ w; \0 g& V$ v; [{6 F. ?& I, R. @; @8 i" L
int ret;
) ]' G' G( c1 d/ `6 S& _/ n#if 0: |1 v7 H5 N" n* _; v- }) I4 n
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. T3 e- f! c/ n1 r/ j- ~ if (ret)
5 x, N# [ @% @/ N. J pr_warning("da850_evm_tl_leds_init : User LED mux failed :". }/ L C9 Y( r0 W
"%d\n", ret);
( x/ E' ?) ~5 T. z g- z#endif% b; O8 e& i& H6 | X' Q( |1 `
ret = platform_device_register(&da850_evm_tl_leds_device);2 d: w( j8 C% \0 @% \" g
if (ret)- ^; O( A/ k1 P# s6 }7 {
pr_warning("Could not register som GPIO expander LEDS");
; O( o1 B/ Z W' N6 [ else* M0 [, Y2 x3 f; _6 c0 c$ U
printk(KERN_INFO "LED register sucessful!\n");3 Y0 x7 p6 c) q$ |$ V
$ D' z5 V; K2 m- f return ret;
9 ]. O3 c5 l) Y}" q5 d* D: k4 c8 Y+ Y
/ e; \1 n6 p" hstatic void __exit led_platform_exit(void)
9 N6 S; K( w$ T2 W) e{9 a6 H$ }2 M/ H9 O! ?( o) ^
platform_device_unregister(&da850_evm_tl_leds_device);3 b6 D4 m4 K' |* N9 k5 ^5 H+ k; l
5 y/ f- O, P' Y" H4 J printk(KERN_INFO "LED unregister!\n");+ I3 B6 E/ z& \* W
}& m+ Z1 d% S# S; K
9 R" n" x. [# i1 imodule_init(led_platform_init);
- T2 ~- I3 K; f6 f* xmodule_exit(led_platform_exit);
* d7 T2 w9 \9 j* J! x4 _& z
4 d( U6 }5 P( d4 K, Q V9 yMODULE_DESCRIPTION("Led platform driver");
! k% M4 |; J+ ]9 A" w cMODULE_AUTHOR("Tronlong");+ Y" V! P6 v& U/ ]( @$ u
MODULE_LICENSE("GPL");2 E# F+ H% t9 A* Q) D
; Y$ V9 s4 Y1 H, w. |8 k/ q7 k6 i
|
|