|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 X. g) C- l) X0 i3 M6 f
#include <linux/init.h>- z; }+ M/ T8 p! L+ U
#include <linux/module.h>
6 Z2 a* c7 L' b1 e& D7 {0 T- {0 Z#include <linux/kernel.h>+ |% m( ?4 u* j! e# o6 }8 G
#include <linux/types.h>8 b3 X6 k' n3 M+ o& _$ l
#include <linux/gpio.h>
& q0 Q; _4 v* w6 n+ @4 ^ f% b#include <linux/leds.h>
! T; N+ Y* E/ S( f! Q#include <linux/platform_device.h>0 l$ J% x9 v. o0 Y9 I6 O3 [
$ i9 k! V: [/ W" B7 o
#include <asm/mach-types.h>3 ~! z# V; b1 b4 Q
#include <asm/mach/arch.h># H+ f1 W% P/ f
#include <mach/da8xx.h>/ w" }, n! @; N% a1 N6 ~9 @& y
#include <mach/mux.h>" w8 k1 R( E' p2 Q! f, p, j3 E
. ]$ E1 S3 V5 ^; `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% M; u, ~# e! x( E1 z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! H, q: }) I6 I) ^+ @& z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 A2 @$ p3 o/ {1 k9 Y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 c ~8 U% ]/ |& d, d# j' {1 q, B+ y9 d, X9 U
/* assign the tl som board LED-GPIOs*/# W6 t2 p- o A' o+ C A+ ^. q
static const short da850_evm_tl_user_led_pins[] = {: j; H6 H O- v0 I
/* These pins are definition at <mach/mux.h> file */
2 p' t$ P' ?! ?% M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 a8 ?1 N ]5 |. _0 W -14 g) H" l% q& o
};+ O3 a( O+ V2 c; u6 F% w+ ]" v7 S% L% `
e b! O+ L! {3 O* h3 B, a
static struct gpio_led da850_evm_tl_leds[] = {# H; R! ?$ `0 d
{
% }- S1 R6 T, l3 F! a% m6 a4 c: z& X .active_low = 0,
7 C; I d+ ?: H8 Z: @- C .gpio = DA850_USER_LED0,, f+ e! P' u7 ?; J- O
.name = "user_led0",
, N9 M1 _+ D( O- P$ m) L .default_trigger = "default-on",
" l9 P9 ^+ M; d9 |: o* k# `6 s5 a },
4 k9 ?: a5 K. P( c+ u7 z8 M/ j {
' I& n2 W! V: `9 u .active_low = 0,
8 A3 L" S0 X9 a: V- U* y .gpio = DA850_USER_LED1,
0 o( s0 f0 w C f/ u; g .name = "user_led1",
% Q/ i8 i b3 I& t2 G/ I! O# j2 Y' W .default_trigger = "default-on"," Q/ S$ y3 Z$ d3 w1 A; E
},
' o- q# e. G5 x' Q( ^' A+ R/ N0 S {2 v6 v( b4 W: [0 s3 i
.active_low = 0,: t! u* i" y+ w! q' T! {3 p- I
.gpio = DA850_USER_LED2,' ^; U+ j* O0 b
.name = "user_led2",5 z; w+ I2 f7 t4 w3 h8 g2 N" C
.default_trigger = "default-on",5 z( m- u9 x& h8 S+ o
},
' X- V: R2 x# l: W$ U P7 k6 N {9 {% Y- J: E& n! T9 i/ y
.active_low = 0,4 q4 a( n7 K. F( x) W# k
.gpio = DA850_USER_LED3,: P& o0 a) i0 {4 V0 ~6 [& U
.name = "user_led3",. B+ _1 d. q0 |
.default_trigger = "default-on",6 V& v* C& d9 |" A+ b
},1 Z( C1 w7 T& P& y" d, t4 S
};
. [& N& J: }* F$ t) {
$ d7 j) l5 G5 W, Astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 s4 Y" P! ?: H- x; k
.leds = da850_evm_tl_leds,. L% Z4 l; \# f A
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 w' z/ y ?4 n) E' x/ y& f
};
( ]/ k0 f8 u* s% `6 @% H
2 u6 v2 Y, Q0 a7 Qstatic void led_dev_release(struct device *dev)# g/ Y) @% h. }' _% v9 z7 `
{$ [6 I# s/ \1 ]5 B) X/ k
};7 v X$ v. m; {0 A+ c0 g8 J `5 X
- H: s& b4 Z7 ~' U8 Cstatic struct platform_device da850_evm_tl_leds_device = {
9 z' S9 j# b' U$ W .name = "leds-gpio",
+ ~' p8 F- o1 ?( D/ S/ _8 T/ U .id = 1,
5 \) }4 B- H: _ .dev = {
# E' k8 _* B' ] L+ u7 } .platform_data = &da850_evm_tl_leds_pdata,& U: M6 @, G1 A
.release = led_dev_release,
" h y4 w; f/ E$ i+ ]% ~# @ }
: n, m0 h7 u. p! v( c3 G6 e};) h5 x! T# J" V+ p1 @, W* D a
) p) }( q+ Y0 Z# n- N4 hstatic int __init led_platform_init(void)
: J# W N" u' b/ P! v3 E{
& N. g. R" v( g int ret;
+ l: n/ q3 r1 X N. t#if 0
6 {7 v; x7 C/ `9 ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( _: I7 v4 z1 ~$ T/ n8 C# j; R7 z. S5 i if (ret)
5 Z9 _# F! x: P4 B8 f+ A pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ g4 J) k- h. ~/ f6 ^, } "%d\n", ret);
( a3 g# c& f1 r/ A6 a9 g/ N#endif
$ @8 ^0 M8 `" U2 Z. G ret = platform_device_register(&da850_evm_tl_leds_device);
9 v: O- D8 Q/ M3 ]" K9 G if (ret)
9 z8 s+ I9 [: { pr_warning("Could not register som GPIO expander LEDS");
7 j& B& l0 _+ P- M W else
* @" J9 K% v% n7 n printk(KERN_INFO "LED register sucessful!\n");' r' f! ?2 ]/ W' Q; Z
; \4 d6 V' S' k& V6 L ~
return ret;
7 H* M7 J" X8 I9 q}! d3 w% k7 ]6 n1 ]% Y* s+ ~
9 w b6 m& }: e
static void __exit led_platform_exit(void)
# s3 j/ X `/ H: r0 ^0 l& B/ U{+ a8 _1 t8 T4 w) S. U: D9 S" p- c
platform_device_unregister(&da850_evm_tl_leds_device);& O. M4 Y' q& ?7 }4 x
( F, I8 }* B7 j7 ? printk(KERN_INFO "LED unregister!\n");4 u7 _" B3 v) h; p: A
}
4 \5 L/ o$ }/ n$ ^; i# t" Q1 L' {2 s* S+ w0 T" f' Q7 ~5 G$ R
module_init(led_platform_init); j, h8 N0 o2 z! H& P
module_exit(led_platform_exit);
4 `$ T: p6 k+ u' P _' S& e$ E
$ [) l& @& L! I) @: ZMODULE_DESCRIPTION("Led platform driver");
: _) w% j' y& N+ w! f3 uMODULE_AUTHOR("Tronlong");
& P- v/ ~" K- ^) G e! x/ ]MODULE_LICENSE("GPL");
$ @3 j9 \; O& J! {- w5 f i. P; r
# ?4 U+ x7 K8 Q7 q |
|