|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 T4 {# e4 o( ^! U
#include <linux/init.h>
) }9 M2 W/ g& d+ e0 L4 k#include <linux/module.h>0 L8 j0 y# p' O$ V
#include <linux/kernel.h>' a" m# o0 z- l
#include <linux/types.h>7 M2 ^+ H: T- p# X* d) y. H. ]
#include <linux/gpio.h>3 Y' p6 Q3 D) A$ U4 m6 ^
#include <linux/leds.h>
C9 v' X7 x3 C! @0 ^( h+ U#include <linux/platform_device.h>
/ R$ N* U* Q9 W+ {, c1 Z% t9 P! T9 A8 ?: \" X5 W
#include <asm/mach-types.h>5 ?# h8 @9 p! H2 z8 C# n
#include <asm/mach/arch.h>
8 q, e5 e0 A' P! E1 m#include <mach/da8xx.h>4 K: f( w; W$ Z# m' i& J
#include <mach/mux.h>
6 T* K/ g+ \" {% O1 W
) K- h& B6 {, d9 z' l9 S#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 M8 d1 G& w1 F( f+ ~) t#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; r( F, ^7 |; A$ Z' f#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( K+ A% U ^5 V1 z0 p#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* Q8 ^4 m! B, v% i" x: v; a. [2 t) ~
/* assign the tl som board LED-GPIOs*/
% R* U" X7 U: O! a" H5 Ustatic const short da850_evm_tl_user_led_pins[] = {
2 B' z1 o5 S( \; C* _- R1 D) p% i8 s /* These pins are definition at <mach/mux.h> file */8 I* S0 b* P5 }0 w" E, N6 e4 ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 h2 L: \# x+ h1 L0 V" K# A -16 k0 w5 j& T# R, ^
};
& @' a* t5 m# C& S! z2 }, c% E8 H( V
static struct gpio_led da850_evm_tl_leds[] = {
/ V- p! C4 |) H" w; O6 C' X% O {& ]1 E9 F: ]# o/ r
.active_low = 0," ^# F9 I* ^) ?2 b
.gpio = DA850_USER_LED0,% a7 G! K7 y7 `3 m8 b. C( L2 C- k) h
.name = "user_led0",
9 V# u8 D- g0 C2 K3 o .default_trigger = "default-on",# l. o. m) n% @9 d4 L+ z
},
/ L- I' i+ }9 P6 Y1 y% s% |8 ~5 p {4 m r( p' }3 ]! y
.active_low = 0,5 q. z3 i/ z% d( v& U+ j
.gpio = DA850_USER_LED1,
3 l: v( T7 Q p# v' w6 c" Q5 }- ] .name = "user_led1",& C9 j1 ?! O7 A
.default_trigger = "default-on",
8 G5 l }9 v U# t" A8 @ },# {+ a3 `9 h, t) Q' |3 k) S4 I4 [
{
% c; q$ f! B \ .active_low = 0,3 D3 R3 K* T( p g* q
.gpio = DA850_USER_LED2,
- R: ^& C3 h% V7 L, Y/ J- d' D# Q .name = "user_led2",0 A2 L1 B8 W6 l* T! }+ W
.default_trigger = "default-on",
# Q: v' ~: i7 @2 g3 E5 _" T },4 z' {9 D5 ^4 m8 P X* k
{
6 P; E9 J0 p% A; Q& Y' m9 R .active_low = 0,' [8 s) U! q2 p- S
.gpio = DA850_USER_LED3,7 ]. R1 s2 A( Y- E0 |8 i2 }9 r P
.name = "user_led3",
- K, f3 e( J) F Y/ t% i .default_trigger = "default-on",3 F; X8 L' F$ F8 u# z' O
}," ~: e: `# _: E& e7 ~: c9 G; p
};
8 f% f; P$ r: B+ f J( O" d6 E/ d$ \7 a* \6 o; k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: o' \) A7 u! J1 v7 N
.leds = da850_evm_tl_leds,' w G/ L. _$ A* E
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),* s' h8 A/ h, T0 f! I. z7 h, T1 c
};" I0 H' _3 H; M" c+ I$ y/ Z2 T# M
% z. T0 y G* i+ n% r6 X
static void led_dev_release(struct device *dev)! X, |. ^7 R1 r" ]$ ?
{
/ B1 W: E# n) V1 c9 Z: Z2 C4 \};
; D0 }' M& U2 F2 n5 R, W" h5 s4 T( ?& l* J9 I
static struct platform_device da850_evm_tl_leds_device = {
& @% T0 p3 G" X$ k, @ .name = "leds-gpio",5 e+ Q, |9 {1 {6 ?' Z1 O4 h3 n
.id = 1,
4 A+ B! e/ Q) ?9 @1 h& n; o .dev = {+ j* | q, `8 a) h: n1 [
.platform_data = &da850_evm_tl_leds_pdata,
2 L$ o2 y9 v# @3 V) e! c# I* U .release = led_dev_release,
$ p. r4 J" U: y+ r% h/ ]8 G7 E* N }$ k# d% r0 X! t% e
}; u' P) `& A* N6 _ ~3 j9 m
+ _( c6 f6 h& v) B
static int __init led_platform_init(void)
2 r; [! c7 s1 |; w( R{! w) j& O3 p3 y+ p+ Q
int ret;
1 ]3 L- }4 R# s#if 0
* J. t. }4 O/ i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 z* P9 L7 X9 a# p& ?; a1 B if (ret)
, Z4 r; S% c. q8 e pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! I/ A8 w% a/ C# @% a# f "%d\n", ret);
% k1 @" m2 B! S( `) o#endif! x& h5 f A6 x9 {: m: c
ret = platform_device_register(&da850_evm_tl_leds_device);; n1 A# Q+ Y4 w
if (ret)
7 c; e! u6 [6 E! G. G/ x pr_warning("Could not register som GPIO expander LEDS");$ g. V# l# R w/ W! @* S6 T- l
else
2 p, v0 Z. @( R8 G& Z8 h printk(KERN_INFO "LED register sucessful!\n");. p7 U" a! ~% G( p4 _! @
7 R4 y' } E$ ]) F, O$ j
return ret;
' K$ _: a+ s, G. \. f& S}
; w0 Q# I/ X2 ^9 C
' u3 X0 E/ H$ ^# I* v" }. E! vstatic void __exit led_platform_exit(void)! G0 w O* _6 M9 e, ~$ o
{' O8 \8 |3 b& q
platform_device_unregister(&da850_evm_tl_leds_device);8 f& L: q( @( R: e; c* O
. X- l7 v3 t& a9 _ a printk(KERN_INFO "LED unregister!\n");3 Z1 a! |4 a4 N, n8 q3 \+ u, G
}
! f/ P8 m, @7 q' p8 d2 }
8 }& o. T$ R% t; i' f8 R# rmodule_init(led_platform_init);6 Z5 x" N% t: H1 o& u4 @8 W7 `4 B; z
module_exit(led_platform_exit);
0 E5 f) t' p* Q0 M7 ^/ O( }$ i9 {+ ?3 T3 ?/ Y% L9 i
MODULE_DESCRIPTION("Led platform driver");
1 u H& c) z5 x$ @! @MODULE_AUTHOR("Tronlong");
- C* F- N2 R+ H. T! v' rMODULE_LICENSE("GPL");
f! X k) j6 y6 G; U4 t# K3 n g, n3 o6 [
|
|