|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: x [. F% y5 q* P6 \
#include <linux/init.h> c! J8 Q, a* w+ t5 h, @
#include <linux/module.h># w' p. z) i& m6 o% x/ n
#include <linux/kernel.h>, _9 L6 S1 S( H+ d. Y+ ^4 j
#include <linux/types.h>
7 x2 v, l: B: _8 A! R0 C/ F5 y8 B1 M# V#include <linux/gpio.h>
$ U/ t% A: d5 i; M, x+ |#include <linux/leds.h>
2 H5 B3 X R$ z3 `#include <linux/platform_device.h>
& {& h" S( c. K
2 J3 j5 {, b F9 }! ?/ W$ z#include <asm/mach-types.h>
0 ], h) K2 @1 l( E, U# w#include <asm/mach/arch.h>% i% j/ {, q. e# J w& U
#include <mach/da8xx.h>$ W1 ]8 E: t n
#include <mach/mux.h>
5 F- _: u# [& _9 h# j" z Y% Z1 Z$ W4 L- U S
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 c6 V/ p1 i6 ~% i9 b#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, Q h& k0 v0 C* a" u" w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( e* [" L6 y2 G& Z) J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); `% ^7 t! M. @! c3 @0 l/ z# |# y
" Z* E+ q' m$ o# U
/* assign the tl som board LED-GPIOs*/9 w! ^4 C" E$ z- m
static const short da850_evm_tl_user_led_pins[] = {( f6 c9 M& g6 A: c7 Q& ]
/* These pins are definition at <mach/mux.h> file */
" C) Y8 n: H1 i; i( T' \5 Y+ S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) ^7 j( N% Y2 n Y; N -1
7 x- w: u, S" ~) h1 B};
: c+ @: J, _# z2 X9 {5 ~5 \% K
2 \' {: p% E3 \; Z8 g/ I( f0 [static struct gpio_led da850_evm_tl_leds[] = {
* s# k0 R" V( c' M" ] {( s0 X; _. n" B2 a7 z. Q
.active_low = 0,
: @' Z$ Z) l7 F' z* n .gpio = DA850_USER_LED0,2 A3 Z p% w2 ~* y
.name = "user_led0",
0 `! Q4 c, C# U .default_trigger = "default-on",$ \, U |% p8 T! M l
},. \, s9 G. x% a5 N" G" T. R2 q0 i* U
{4 }8 M) z" q% {1 G
.active_low = 0,; J, s1 \! ~8 A
.gpio = DA850_USER_LED1,
9 O0 P) M" a% E, I# w .name = "user_led1",+ b* E6 t9 h# B: q4 c. C6 }
.default_trigger = "default-on",
- ?! k. ]' d( X# ?5 | },
" ]- W# p. ?8 x {
4 P# h% Q. c5 W) X. p2 D9 L .active_low = 0,
$ ^2 q& \; b+ c. W .gpio = DA850_USER_LED2,3 L' h2 a4 M5 c: U6 P, \/ R
.name = "user_led2",3 I5 K! T+ N9 |; j
.default_trigger = "default-on",1 y* ~- \8 D) {& W
},
; k. c6 U% N/ m+ u W- E; {' u r {
4 W9 ~& C# \/ e1 _+ B0 z% R" d# n .active_low = 0,
L! H* N+ i$ g0 X7 {0 j% o .gpio = DA850_USER_LED3,3 g0 h' ]6 }# Q/ l4 d
.name = "user_led3",
- _6 w$ j; B' b .default_trigger = "default-on",, K0 M6 J; q; n# G% i
},
- m! l$ l6 a0 a8 X};5 G8 I8 E5 o& K1 C8 v
$ o5 u" d ^1 g* C$ t; ]7 g! s6 Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* u& b3 N( u/ {$ g .leds = da850_evm_tl_leds,+ n h/ |/ P( C- ^+ l9 L. P4 }% @
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' H9 u* w+ S$ L$ p7 K0 a' S2 C
};- D @ d6 n" a
" {; Z: c. R+ w& u1 V
static void led_dev_release(struct device *dev)# W( W; I5 E4 Z( m1 v- R
{ e) K0 e. [: [3 n: m5 _, w
};
. H4 V: O' y* Y2 U' [9 `
# ?9 p8 L, Y. B+ v3 l$ e1 x8 o+ ]static struct platform_device da850_evm_tl_leds_device = {; K& ?/ w9 L W# M" s( ] H7 H- a, ?
.name = "leds-gpio",0 y3 `7 W2 g- |# F3 r/ t$ X+ T
.id = 1,% m/ v& V" d/ d/ s
.dev = {& y" Q3 y$ c8 D5 ]8 r# T' C5 z
.platform_data = &da850_evm_tl_leds_pdata,
1 W, D4 x1 [4 O' |" f* L; x) r' ` .release = led_dev_release,2 l6 W, p- \& r) R
}( k3 @' P6 N* E4 d* b
};" L$ M- K0 R% ]% U5 {) ^& t6 }: h
- W' ~+ Q* B5 O9 e0 T8 F
static int __init led_platform_init(void)8 b# X- ?7 K/ |( H% H+ l
{- w' V3 |8 k" c D% Y" Q' K
int ret;
/ u- o p, `9 F- `: k# ]#if 0
z1 ~6 K0 R/ {6 A5 Z/ {/ ~1 J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( y/ A$ Z% V) @: n. ` if (ret)
- ]* Y! S0 K8 F; S" O! p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
d% X1 W9 e/ n "%d\n", ret);
. S/ M# k: H. ]#endif4 s$ u* t! o. O3 [! \
ret = platform_device_register(&da850_evm_tl_leds_device);
: `; k1 ~. V! ^; [/ _1 R if (ret)0 f i1 {5 V; a
pr_warning("Could not register som GPIO expander LEDS");- I: k% Y% Q& }) T
else1 x5 j- Q: {: j K
printk(KERN_INFO "LED register sucessful!\n");
$ ]9 Q* b4 a f) e/ M a; \0 U4 F
# X4 g( S" p8 t$ s! c return ret;1 E+ o C. k- z) v; B
}
# V; o7 [; f/ E' ]1 ?
4 d- y" `5 P' Y- Fstatic void __exit led_platform_exit(void)
. v/ f D: c0 K( {, {# U{
6 }4 G$ c9 h* T0 q" a7 o platform_device_unregister(&da850_evm_tl_leds_device);
8 @5 A( W3 H! U/ L2 S/ p- P
/ Z# e/ m- Z: n) D( O printk(KERN_INFO "LED unregister!\n");
6 ^% _: @0 V. B' J# p$ ]% q}: c6 I# c: W% b3 e2 @( t+ p. y- i
4 n, z, `' z) w* H
module_init(led_platform_init);3 k! x- L' g2 K' B' t
module_exit(led_platform_exit);! \, d$ h+ Z) K' P, y7 z" H
" b0 c( K" ]+ T9 }) `$ {MODULE_DESCRIPTION("Led platform driver");. I/ \& N: `2 j* q- [
MODULE_AUTHOR("Tronlong");/ `3 M5 g) \* l. F3 ^. X) p
MODULE_LICENSE("GPL");( n0 z; H9 l2 g4 R5 t
! d8 s0 J" U9 x+ ^$ x |
|