|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! o& w, ?# q3 k! ^#include <linux/init.h>
0 I" C- U" M, z#include <linux/module.h>) I7 S4 M% i: L8 Y
#include <linux/kernel.h>
) |4 s* r, X$ i7 M1 `% x) O#include <linux/types.h>
D7 K! B" z+ ^7 E$ L; {#include <linux/gpio.h>
* d, a9 f4 D! z; s#include <linux/leds.h>
" o* U/ \# }( r, \# ~; b4 D6 [' I. C#include <linux/platform_device.h>
7 ^' v% w. x" {* c0 M6 ?! A1 l* S8 \) y5 b- t# a9 r% p, D
#include <asm/mach-types.h>4 |. X A0 E! n( o+ c( K$ e$ }
#include <asm/mach/arch.h>
! l Z# y* A: Y5 k+ C) P7 i#include <mach/da8xx.h>) m# t: c* Y) u4 B
#include <mach/mux.h>
1 Y: T, R/ o* a* s9 X c9 K& E* I1 w
/ w$ A, c5 h9 e, e& p/ P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 m2 o! X# z. B/ _7 @
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 @- n J6 Q' Q9 W2 I) c1 d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! T7 i9 A* N; x" V, _2 `" Q$ }6 w#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
g1 b* h W7 E. f* l, o6 b& r: ]7 s$ j, q
/* assign the tl som board LED-GPIOs*/
. h; Z9 J5 T: c* `static const short da850_evm_tl_user_led_pins[] = {6 D8 E, g( M0 u; l
/* These pins are definition at <mach/mux.h> file */
& d0 E# P. ]% A" M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 }2 O0 |0 _1 m/ ^$ w
-1
% }3 C7 ^% ^/ N& ~, L" k! c) O: c};# Q) [& { k5 S
8 } S. n9 S( P( K5 c+ C# c2 ^static struct gpio_led da850_evm_tl_leds[] = {" }% t5 c) P- m+ E3 w$ Y
{, M% O/ _4 T3 T5 E* G- j
.active_low = 0,
. y& z& F9 J! M% _2 |4 b! Z .gpio = DA850_USER_LED0,
9 I9 \2 u' w0 E+ A3 ~ .name = "user_led0",/ J( Z0 B. ?7 {, b# p
.default_trigger = "default-on",+ ~* u" V0 n5 s0 i; [3 s
},
* _. f4 A' B8 b) m {
( s2 T6 [3 l+ G" S& O4 P .active_low = 0,1 f2 Y$ x* o$ N1 n
.gpio = DA850_USER_LED1,9 {' n6 ^! h( K" _* e1 B" m
.name = "user_led1",
2 V+ \7 g7 F) A .default_trigger = "default-on",
# j1 z& g; Z% e9 M },
+ \! T% [+ ^. U8 s {! N9 t+ T* I% B6 S
.active_low = 0,7 t; O( }* _& @# z
.gpio = DA850_USER_LED2,8 r; g5 g* N) I8 m% U
.name = "user_led2",( t" G5 o: s: ?5 g* k
.default_trigger = "default-on",$ H7 b* W% ?) N9 Z
},
3 R) g$ D; `2 g0 _ {5 x9 H: g$ L. l
.active_low = 0,6 e+ R' l6 Y# \
.gpio = DA850_USER_LED3,
5 f0 _$ R q- H9 | .name = "user_led3",
. A& u" @1 i* } .default_trigger = "default-on",- p0 K+ {+ h8 _8 m2 ~, [$ w9 u
},
6 B% H( Z q, `2 n};
. Y, w3 t j! d$ a$ u M, W( O7 T2 ~
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, u$ p% O' f' V# ~! ?6 x
.leds = da850_evm_tl_leds,7 L$ u5 [. s' G
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- J- W2 e W' z6 P0 L2 ]
};' h! L; q3 \4 P- l7 o
4 v! Z; x7 T7 ?
static void led_dev_release(struct device *dev)
* {" J2 z4 V7 y/ V3 n( `; ~3 Z6 b{
- T3 o$ I2 s* X! S& ?};
* Y4 G- p1 j0 F' k- B$ @7 ~% E6 ^4 y' M2 P3 w9 a
static struct platform_device da850_evm_tl_leds_device = {
: u4 k; X# ~, y3 b0 Z# B .name = "leds-gpio",
! l, S2 s- n5 ]! k2 Q( h/ y1 O: r .id = 1,: F, G- F' Q: ~( X4 o8 u
.dev = {
! l/ Y3 P; ?/ |; z- c .platform_data = &da850_evm_tl_leds_pdata,! J( y% Q# x( _
.release = led_dev_release,$ u+ w8 b: J4 W- b$ ]% P
}7 Y# u" a+ B/ j6 G( Q4 B& U
};5 s& }! B; R/ O
( z3 X- j' D. A
static int __init led_platform_init(void)
1 R) Q' ]0 Z$ l{
& E Z% c+ t6 q, a3 X int ret;
, F- b9 T- }- `; M$ _#if 0" A" C4 C1 l( q5 Q. c2 ]) i: f( |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 o' o( h& Q" k3 h if (ret)
2 I! ~; m/ e w! |2 d6 C5 J+ M pr_warning("da850_evm_tl_leds_init : User LED mux failed :") ?* M' d8 M- y V
"%d\n", ret);
! w( J- O% R! v% G/ V0 G2 L- L#endif9 T( H# j. r; u# u
ret = platform_device_register(&da850_evm_tl_leds_device);
& R$ y% q9 W% S0 s; E. L if (ret)
( [) \" n; F2 W8 ~$ r4 X pr_warning("Could not register som GPIO expander LEDS");/ a* P, K9 Z. C9 A! V
else
- P+ w+ ?- e6 a, Q0 k4 i- k printk(KERN_INFO "LED register sucessful!\n");, L* i- a& Z4 H2 K( _! n' I
8 K5 m$ C* G& y8 e/ w5 v
return ret;
0 m6 B+ s; g8 ?" T- O" v}' ?& ]9 h$ X7 s/ f* P- j
6 Z- g7 ^1 J, y" q+ T* I0 \
static void __exit led_platform_exit(void): M$ J' S1 M% ]; f* M! M& }
{
3 J% U) k- q$ a+ l platform_device_unregister(&da850_evm_tl_leds_device);
) Q9 v3 ?, o+ h- f- [+ M" E* ^9 F+ g! p' Q+ Q
printk(KERN_INFO "LED unregister!\n");$ f+ T# [) P+ o) y4 \
}
2 w O" [! G9 C4 B! D% }) o; D% T3 K+ n9 M
module_init(led_platform_init);
/ J- t8 I, ]0 Y( O, y$ i4 P$ L3 Emodule_exit(led_platform_exit);/ y+ a% Z5 @" k" z7 Y. U
2 Q( V- V! ]: i B. S8 @/ x- j% s
MODULE_DESCRIPTION("Led platform driver");
: _+ Z3 Y" D$ d# U8 z9 W4 {MODULE_AUTHOR("Tronlong");/ a* ?6 d9 \. @% `1 Y
MODULE_LICENSE("GPL");
, b; W" D5 i. D8 \1 ]. P: Y, F: X, Q: }" M+ U+ `" f
|
|