|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* `( G- [+ p' @: N6 O o8 N* t% i: m#include <linux/init.h>
" X3 _0 `( x! O#include <linux/module.h>) c' w0 |" Y8 K5 Z9 y
#include <linux/kernel.h>2 k1 P3 l8 Y" H0 Z8 p- B- a4 r
#include <linux/types.h>3 U+ i! M0 {+ t& ~/ q m% d
#include <linux/gpio.h>( d6 c7 P+ y L; q1 F7 i
#include <linux/leds.h>
" _9 O& _* e9 Y+ d3 Q#include <linux/platform_device.h>, M0 f. j- E' S9 p
( }9 }1 l, E2 l0 T' ^1 B
#include <asm/mach-types.h>
2 }8 z' _0 g3 X#include <asm/mach/arch.h>
( d% M3 h8 ^2 U3 b8 n#include <mach/da8xx.h>
2 Y3 b$ x5 c5 j4 i& C, d# G- r+ [#include <mach/mux.h>
( I$ }, } \; Q
^' b8 w" a4 e3 y6 v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 `* |7 n/ n1 P; m& Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) |6 B) c' P) I/ K/ {( j2 h e6 ~0 V
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# i9 F. v$ x0 W6 y" K q$ E#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
Q5 x% h4 E. l8 n+ \+ U: `& D( r+ k
/* assign the tl som board LED-GPIOs*/
9 G% A% O4 x6 {static const short da850_evm_tl_user_led_pins[] = {" M" `5 W6 {: x! [$ w( ]
/* These pins are definition at <mach/mux.h> file */5 b/ _3 T- r+ \* p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ ]* D% H; y; \- G( F -1
- V& V! u8 s! n0 g};7 J) N' }8 u6 d
* N, y5 I5 |% a' Sstatic struct gpio_led da850_evm_tl_leds[] = {
& B5 s" V# Q3 Y: y! |3 K# X% Z8 v {
) J0 m$ K: B# X% Y+ ` .active_low = 0,- Q9 Z! q. j a" [
.gpio = DA850_USER_LED0,+ H/ N) @7 v7 J
.name = "user_led0",6 ]* R, [+ z" M
.default_trigger = "default-on",. n& `8 `9 S, ~% P% M6 x
},; F; H& J- U( Y9 Y. }
{
' n+ ]- A- o6 x* z& g$ Y* S .active_low = 0,3 p3 l) }! _) M: Y- T% p; D
.gpio = DA850_USER_LED1,+ {" j. F) v; b5 C( `
.name = "user_led1",& d( d4 `; ]8 r
.default_trigger = "default-on",
' [. `- U$ y4 ]7 D( Y0 ~3 I },
+ f. e, L; e! \( N- m) J4 k: \ {9 k$ R5 J1 R6 X Z
.active_low = 0,9 j8 y) M: A1 y% i4 R, q
.gpio = DA850_USER_LED2,' Q& Z. g: b" X' M
.name = "user_led2",: d& O& F% ?0 V
.default_trigger = "default-on",
7 K* Q0 g8 {& @' b* P7 A1 g! y },; k$ K8 T! Q7 ?1 d
{
* ~! m: U2 M9 f3 F, V; W! Z$ F .active_low = 0,: b$ R# U; l7 c" [2 \( q1 _
.gpio = DA850_USER_LED3,
3 L9 O( J6 z7 \/ Q9 s2 x/ Y .name = "user_led3",* e. W# l/ e9 C$ s9 |
.default_trigger = "default-on",
9 A. o+ v. L2 h w- i },, U; \/ ~1 N+ I) z, f1 n
};
1 u% C, x. Z- o* \
9 R- Z: z; u0 R" A" q6 F/ y' H' Astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 _, o" L$ K) i! H w
.leds = da850_evm_tl_leds,
* r# X% \6 b d, p' V" j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. A ]' M7 J( i1 `& [
};& M# Z3 q- W. ~
# v l# B" ?+ g- D, \
static void led_dev_release(struct device *dev)
0 j) L6 G3 J/ B' ]1 G7 ]* b; @{
! G6 ~# r" ?* K$ ?6 Q};; N$ N( T0 K0 x& R6 F
' h: o/ c% N# c2 |$ f2 i0 s1 qstatic struct platform_device da850_evm_tl_leds_device = {6 C9 i; G# o" v) }' @* O
.name = "leds-gpio",/ C4 @' g0 }2 o
.id = 1,+ F" s+ r6 }# B" P* ]
.dev = {
}% K7 b) `5 n) r. Y: u .platform_data = &da850_evm_tl_leds_pdata,
3 A! C' N' s v# u F .release = led_dev_release, ~7 h0 K ^9 @! R- S) s% k/ B0 A
} _' m) J! n% o- ?- n9 G, r5 Q
};* J' L3 |! O* S' S! N7 N
, c, s h" G% v/ z7 V: ?static int __init led_platform_init(void)0 }5 N+ k0 t1 @7 n
{1 S0 T5 `% ?; Y
int ret;
& n# Q4 B% @9 w2 d/ ]3 F: o( \% V6 C#if 0
) I4 U; H6 B o% w- c: e1 G ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 a4 ?2 l! D* g, d5 \4 |
if (ret)
+ g" D2 p7 h& k Q* L3 u# f pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, k4 v& T% \: B' T "%d\n", ret);
/ d" j0 N$ K" J# ?9 x W& r#endif; C. q3 \" j* | I& q
ret = platform_device_register(&da850_evm_tl_leds_device);
# r# o8 O7 \4 r" R& j: n, U* U/ k if (ret)
8 C( }: P) d( h pr_warning("Could not register som GPIO expander LEDS");
5 G8 u/ `1 }- c9 o* R8 y& h else7 E2 p4 m! `% v- t0 d: Q" Q/ r
printk(KERN_INFO "LED register sucessful!\n");# O9 P2 J* t9 p3 j) l% A
! d: c2 ?) u, ~0 a4 @* o, q return ret;3 w& O' V4 r, q7 h6 ~0 _# C- b3 D
}
3 A$ V, J8 z# J
. L0 j5 y( B; q, @' A! U/ tstatic void __exit led_platform_exit(void)
' Q. k! k: O( @ ]# x7 K1 t{
5 t. K5 ?. }# f# L& } platform_device_unregister(&da850_evm_tl_leds_device);& f- @$ x( C$ X# m# ~0 E
3 H& G6 Z" G7 e printk(KERN_INFO "LED unregister!\n");& c4 s0 y' E, R7 @# T% ^! }- C' C
}
: m( Z; F8 g' i- t! `0 M0 }
0 f4 t. P2 K8 xmodule_init(led_platform_init);9 s, t5 E$ \; F! G+ [- W
module_exit(led_platform_exit);9 C! x2 G! j* L3 X
- g6 Y/ L% e, m* JMODULE_DESCRIPTION("Led platform driver");: v P9 M8 s8 h R
MODULE_AUTHOR("Tronlong");
! e$ C+ y" H- k+ z0 H$ }" J8 ~MODULE_LICENSE("GPL");
# q: u$ W: e, y0 ]4 h1 ?' F8 P) i
8 l2 P3 o! X4 {# h |
|