|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. O) u2 S+ a' y( d#include <linux/init.h>% }( T3 l W3 C5 D, K- ?9 G
#include <linux/module.h>4 _, p/ m. B* k. {
#include <linux/kernel.h>3 O- I8 Y( K5 u# b
#include <linux/types.h>" j7 T& o9 p2 p# p3 p
#include <linux/gpio.h>8 o. Y. _8 x. q7 U* \
#include <linux/leds.h>. ~; G' p/ X7 \' l6 }$ E
#include <linux/platform_device.h>5 c/ t- C; x4 S# R
1 @' c: y2 N% Z% p& ? n# a#include <asm/mach-types.h>, y3 B7 Y( ]; w8 [2 Q: p
#include <asm/mach/arch.h>) Q, M2 K; ]- S9 t# y2 _" v
#include <mach/da8xx.h>/ y$ R4 H( ?( H+ L* J% E5 P% N
#include <mach/mux.h>
$ n8 X; ~ u! M- w, r& ^# W# Z2 J
0 l1 h4 ^/ Y: a. T* y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); I+ d6 X- J6 K6 ]6 U1 Y$ Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) z9 U2 y6 f, w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: t! F9 v0 Y/ n( \# h+ V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ N; w& p( i: ?; z: H* M- R1 r# u6 T/ I0 |
/* assign the tl som board LED-GPIOs*/; V, j( f9 Y* C7 `/ d
static const short da850_evm_tl_user_led_pins[] = {
0 R S0 P: t% N0 ?; H( C; f3 i /* These pins are definition at <mach/mux.h> file */1 A6 {$ ]! C5 k8 F# n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 u9 l4 E$ A! o& }
-1! j& J. p$ P6 b* S
};
& G, L. F& T2 S7 O! k; }
# e0 Q3 e' q+ S! W' p0 u4 @' _static struct gpio_led da850_evm_tl_leds[] = {9 Q; z5 C4 j0 G4 ~7 p, E
{
- o9 K1 G: a5 }* a2 f .active_low = 0,; t% {) Q" u6 B" M9 G
.gpio = DA850_USER_LED0,
( S7 ]* `$ Q9 c) C8 h .name = "user_led0",6 [% h0 P, k8 [0 b9 t3 F; N0 v
.default_trigger = "default-on",0 [$ f' E) R" A* N ^
},
/ A$ y3 @& I& o0 n5 | {
. |6 T+ u# a& x8 k5 k .active_low = 0,9 V4 ?5 O! {/ I$ q
.gpio = DA850_USER_LED1,# R9 R0 ]' Y% \- R. J
.name = "user_led1",/ R) W1 N( R# @. ^
.default_trigger = "default-on",& {. N7 f/ D7 I I
},% F, m* ^9 T3 |. B- B
{
1 n1 r. X E* v# P( X# Q) S3 G7 G1 n .active_low = 0,6 w+ l" U) N: o! j
.gpio = DA850_USER_LED2,
( P2 J9 U8 k7 c6 p5 D# P+ a .name = "user_led2",1 p/ `" J* U: s5 b+ y
.default_trigger = "default-on",
5 h& n5 s7 V! W! S },% a8 `% v& ]4 Y0 [# X3 o
{
6 L( @, u# L: u: V x+ j7 U .active_low = 0,
* E* [. B* K8 N; j .gpio = DA850_USER_LED3,1 Z. o; i4 @. {+ f! e8 e& w
.name = "user_led3",. o$ O9 U* x* f @. M
.default_trigger = "default-on",7 T. m3 ?8 O; |+ F! J
}," s; B- q& z( Y- v, B% l$ l
};
: y" `' I) P% B/ c4 Y: A; e2 B
- c; D5 F! B v7 Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% ~; u# J. V3 M .leds = da850_evm_tl_leds,: j' y2 p# l- R* O& ]/ G
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% q1 S! b6 L! Y/ l- C};8 D4 D; |+ T% Z2 f6 j
% h' |# R+ j B6 h6 l9 r
static void led_dev_release(struct device *dev)/ e% m$ ^4 V( R! L
{6 z% x9 m0 B9 o$ i
};
$ v. {- A& h) ?9 I. K) n7 B7 x7 y; E% l0 i+ m
static struct platform_device da850_evm_tl_leds_device = {
7 J, M6 j% P7 b# z2 C( G8 P! p .name = "leds-gpio",, t' S2 G' b0 e8 r9 K$ n1 X) K
.id = 1,( Z9 x0 Z$ J5 V8 A. j# H+ B
.dev = {
2 ?% J7 s, Z: e' B .platform_data = &da850_evm_tl_leds_pdata,% r( c, ?' }0 [! Z7 E) y% e& q1 ?
.release = led_dev_release,/ v6 `% B8 K. @& r8 b3 K
}4 u! z7 a6 u4 m# Q! \
};( d, J0 x7 Z# B* o3 q! f
, d' @. U* B- n: \7 u X
static int __init led_platform_init(void)
2 J: X6 M( P& [" D+ B9 d{
; _9 n. A7 x, C+ K! F' } int ret;( i+ g, d. Y/ I2 o" i2 {4 X
#if 0
3 J) p6 C9 L% @& g" k6 [) m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 I9 Z$ a6 u& h! E& m if (ret)9 b3 J) o% d" f5 ^ V) @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' \* y$ ^4 }9 X f5 _
"%d\n", ret);0 o5 l" R8 J% u+ J3 {0 \) [4 q
#endif
$ Y+ e. p( @6 N: m ret = platform_device_register(&da850_evm_tl_leds_device);
& m X" ~& g' q- K: o$ d- |) t% K if (ret)
+ N& b# D# |9 s ~ pr_warning("Could not register som GPIO expander LEDS");2 e' n: X: Y. M. [
else7 `6 N7 L' ~, D ?( p
printk(KERN_INFO "LED register sucessful!\n");
5 F q/ F* y; r0 d# a$ X& R' F1 V. U. r9 [: R; }' b+ p$ ^
return ret;
1 }, O: a0 }* `- ~! m}
3 P; ^$ h8 Q' d: e6 h# ]& L! _* r* c2 o- {, M0 o# g, j1 S
static void __exit led_platform_exit(void)3 w1 r4 J% |% O
{# P: X3 y) |* n, }/ y5 y
platform_device_unregister(&da850_evm_tl_leds_device);
* D6 j+ R, s- V G M: k( {4 O5 ?4 j2 W J
printk(KERN_INFO "LED unregister!\n");3 @5 Y$ K& _2 M* X0 t
}) u% l$ T3 @& Z' W# X6 y
0 q% ^2 x; f6 j/ ^: t% v- M% z( H
module_init(led_platform_init);
; r4 r% ?( J: Gmodule_exit(led_platform_exit);, |# [ D: g' h5 A5 R/ U1 C
3 l0 C5 l% @" `/ ~
MODULE_DESCRIPTION("Led platform driver");5 i- }0 |. z% |" P% V! \! r0 W: C& n
MODULE_AUTHOR("Tronlong");
4 H! J7 P5 P- O" L; Z" a' t GMODULE_LICENSE("GPL");
: p6 W9 U1 q2 z& E l# R" ?( v& i+ Q: {& d% y
|
|