|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. c1 n- I% b- S8 n9 j) A#include <linux/init.h>
! C, I/ q5 e; q' r, J#include <linux/module.h>( }, [; C3 N. S5 Z3 y7 P" a
#include <linux/kernel.h>! c/ X% _+ e7 b S
#include <linux/types.h>% \* J( Z& k# h4 L& Q9 A2 x
#include <linux/gpio.h>
% ~( c8 C( ?$ Y) c" ? f Z$ F+ e: w#include <linux/leds.h>
. u5 t$ F8 F i/ w% g#include <linux/platform_device.h>+ f' N6 E" B7 x0 X
. \/ v6 @6 |: o4 ^; ]' \8 {& z9 R
#include <asm/mach-types.h>* P3 F) ?* q3 ?/ o2 u
#include <asm/mach/arch.h>
) T2 i1 m7 e6 U4 y" m#include <mach/da8xx.h>
/ \9 s1 z! Q$ p#include <mach/mux.h>% z0 Y6 u/ U7 u
. R/ H' h- C6 g8 e#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& o7 |7 F7 I' `+ W$ K, c* B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 d$ t( V2 ?/ F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 ^2 m0 ?. p/ r8 ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% _. r0 g1 W4 e9 q1 b0 ^& O( h- D: |: a7 ^2 H4 N4 b3 d) Z
/* assign the tl som board LED-GPIOs*/
* T; c& g! X |2 |! X- {9 ~static const short da850_evm_tl_user_led_pins[] = {% S6 b9 M- G) S/ h
/* These pins are definition at <mach/mux.h> file */
3 W' `3 E' l2 Y; B DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, ]0 }7 E8 T' O+ f1 u- G+ R
-1( d! c% B" ?) [) j Y; N
};' }9 q% Y( P5 G1 F, [3 V1 S
4 }3 m! I( R- y& o9 [1 g7 I
static struct gpio_led da850_evm_tl_leds[] = {
6 ?: `7 j. T+ D( h: Q1 M# P1 U {/ e8 ~( r5 i. b' p( B4 ?" h. @
.active_low = 0,1 x5 ^: R5 M X) `* w; ^5 B
.gpio = DA850_USER_LED0,! i6 y6 }7 B. c7 {% F9 Z! A
.name = "user_led0",& ^* N0 z. q8 K9 F" \. U
.default_trigger = "default-on",
! y* j- R' a& Z( J },( @' v2 S h9 [
{ R T/ l" ?$ g9 S
.active_low = 0,2 j M5 M" l. J6 E ~
.gpio = DA850_USER_LED1,1 T; ^: Y2 v6 w y) t: ~& ?
.name = "user_led1",/ |! U! t* d' S
.default_trigger = "default-on",
) n& u, r5 T. w* { },
0 a4 s; s1 p4 S* {: c) O5 v {
4 `- a4 J3 i o* }$ _ .active_low = 0,
, D6 {! G' ^8 h" t' [ .gpio = DA850_USER_LED2,
: \) i4 {) j6 ]. {7 I7 Y0 r .name = "user_led2",
* v/ e! l$ i4 l0 }: N .default_trigger = "default-on",/ I3 ~' j7 c8 j" n
},) T4 r; U; e2 a! W: _7 [! S
{ V7 q( m! U% z
.active_low = 0,
5 Y; U& V! C/ g+ m6 l( u7 T9 @ .gpio = DA850_USER_LED3,6 s5 ]! [6 o$ a
.name = "user_led3",1 d4 V3 r, n) o1 u5 D0 ?( O
.default_trigger = "default-on",( r9 c+ }5 n# P; O$ ?
},- W8 F3 J' s4 X9 l$ R
};
' E0 a. y$ f E* t k5 |7 d+ n9 K2 R" h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" U3 G u3 `! s- ~' F/ D9 x2 V! a .leds = da850_evm_tl_leds,
. G1 P) X8 k s( { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; f G4 w$ o# U' T
};( y6 D+ f" m' u8 J; _
) K/ k6 R7 ?) n/ c% t( O* d
static void led_dev_release(struct device *dev)
* _# h& {. r7 i: w3 T{
6 g4 ?0 y$ O8 c$ |' L};
/ r k# ~) t) g* D
' L2 y* Q# l$ A; k& D, dstatic struct platform_device da850_evm_tl_leds_device = {
% `5 k8 S" R2 X .name = "leds-gpio",
, m" ~! [8 O9 r8 M1 ^ .id = 1,
; W( d& D2 Q! r% @6 o* d& v .dev = {) d5 b* g/ c7 x! M' B; S' D
.platform_data = &da850_evm_tl_leds_pdata,
6 Z/ i+ V5 n2 p! M# z0 ^; z. H5 l .release = led_dev_release,
) ?7 ?; e- d) [& S }: _+ v* K0 G! ]. e/ H
};/ x8 h0 U0 m# q$ o* \1 z
+ F0 p; o, w. i+ Q: u& W
static int __init led_platform_init(void)$ t# P5 W5 E( W# K$ M
{
5 I; t# I( i, U7 U5 g+ ` int ret;: z* {% I4 A! ~. F
#if 0
, C! V5 Z B* ?8 d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. a' X) H3 N+ ~2 `8 v if (ret)
- c# ^* E) F2 { pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 ?/ b" e8 X* P3 r
"%d\n", ret);8 o9 E0 K# u* h. o" ^
#endif
, Z# G* @2 |! j, S% M7 j4 M; ^3 ~ ret = platform_device_register(&da850_evm_tl_leds_device);) A2 ? ~2 n+ H6 L' m
if (ret)
9 @8 b; j( T: B1 _+ V/ d/ s3 y; F pr_warning("Could not register som GPIO expander LEDS");' X+ k( R0 D* j4 ?- i! R+ Y- j: z* q
else
. O8 [: W+ d3 p printk(KERN_INFO "LED register sucessful!\n");
4 ]% v. k) W" N3 b3 ^
: z5 d I+ \: R return ret;
, Z) ?) c6 J! O, B9 F/ J& t( N4 `}
8 Q( P+ h9 {: J6 h1 i W* T$ P2 K* `0 i* ]$ G$ s
static void __exit led_platform_exit(void): {9 P+ G6 g1 U
{- D7 E4 t% H0 q: `' l8 w; v
platform_device_unregister(&da850_evm_tl_leds_device);
& M/ |+ E" Q8 b7 b! `) ]" [, Y1 J/ }" u9 W
printk(KERN_INFO "LED unregister!\n");$ l+ |% g5 ^& y1 q
}
) N3 H8 K$ L5 ^
, V# ?& N6 r# s6 e: _module_init(led_platform_init);
$ U5 U. Y7 u E3 F/ Umodule_exit(led_platform_exit);9 a% l; |% W T5 B- _
0 q+ K9 A- v8 B1 z, A( [
MODULE_DESCRIPTION("Led platform driver");
' [+ E6 u/ Z( |' D( HMODULE_AUTHOR("Tronlong");$ C) I3 p. \# x5 C. q) M! \0 A/ U
MODULE_LICENSE("GPL");: {. Q, c% b( X" C H) m* n8 R
! \; `# U( a) M" m- g# l) P
|
|