|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 q! B A7 P0 `+ H8 y* n: I4 v
#include <linux/init.h>
" o G* c. I) N3 X9 ]#include <linux/module.h>
$ [* V, `* Y9 N, m; G& i0 m' o! _#include <linux/kernel.h>
# X7 c& V& {3 u+ N: @9 `#include <linux/types.h>
% P, z, K- O* x+ X s9 k% B) K' A#include <linux/gpio.h>
7 |) P3 Z* h+ P( \' b6 Y: p#include <linux/leds.h>8 d0 q; M9 L" e5 ^: K9 Q4 x; N" ?% n
#include <linux/platform_device.h>9 l/ u* d& l& Q" j, j
' ^0 G9 ^ o- q- a1 {1 P#include <asm/mach-types.h>8 B( [0 i, M7 |4 ]7 C+ V
#include <asm/mach/arch.h>; O* Y7 z1 j5 T/ n- S r' H
#include <mach/da8xx.h>' h/ e1 Q& ~7 n$ E! I: X+ ?
#include <mach/mux.h>8 g d! O* ^2 U' x* U& E
4 ~+ s) R# ?6 ^+ g' U
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 {( r W7 t w7 s% D E& j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 T9 @7 }0 u! y; s5 Q* g#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 r% `! U% J- Q) }* p- _% E
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 l8 H. Z% N3 e+ F( c4 i
( U2 o: ]& ?( r; t/* assign the tl som board LED-GPIOs*/
& n; Z- M' L' ]7 i0 }/ O& Y: Nstatic const short da850_evm_tl_user_led_pins[] = {
7 V8 ~8 B" `; _# v /* These pins are definition at <mach/mux.h> file */: D) T3 v' n! X9 I
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ [" k+ ?4 V; I2 b/ d3 f' b k& c. t- I
-1. D3 E) z7 B; ^1 K4 N
};
3 K7 E# k" N$ q6 u$ _# o* g, ` C; a/ ?8 w( X$ H
static struct gpio_led da850_evm_tl_leds[] = {
/ Q3 W7 m) L$ H3 o! x {& t* @) l1 s, |5 z& d3 Y) q
.active_low = 0,
! K5 H8 Y7 F0 o% `! ] .gpio = DA850_USER_LED0,4 j( L5 E4 \" r' G# R0 M
.name = "user_led0",
! v0 `& W8 J+ O: t .default_trigger = "default-on",
& [4 e$ |* J( I r( ]3 t% t' l },0 v; ?4 h% X. \; e6 u6 u/ S9 D
{
6 ^0 o2 f9 Q( Q .active_low = 0,/ p4 I+ W, y2 T. k- G' B
.gpio = DA850_USER_LED1,
; H3 b4 y( F3 A; ^( j" T% w6 ~ .name = "user_led1",
" B2 }% ~9 @( y/ Y( p$ |& i$ Y .default_trigger = "default-on",
$ z' g. c+ E/ j },
& l( Y7 S' c" u, L* B. e4 y' z {
' i. j# d( r$ Q6 h* r .active_low = 0,+ o8 A! c- x3 W5 J! G+ O
.gpio = DA850_USER_LED2,& w* Y L' }5 |/ U7 Y
.name = "user_led2",
4 c' p4 u& z+ J- B( H8 o .default_trigger = "default-on",, Q4 W: s6 }3 W0 }6 g
},
5 Q2 D6 R$ [9 R4 W {
- J/ C# z; `5 s/ Q, c .active_low = 0,+ w. @2 _' }* _% _( h
.gpio = DA850_USER_LED3,
. ^- b* ]3 L& B% [* Z$ ~9 a. q8 U .name = "user_led3",
3 f( S- F' T1 ^+ P) d3 Y% w$ \ .default_trigger = "default-on",
& b2 m! G- I+ B, T, c+ Q& Q },! i) T7 y, o$ s2 j
};
" |1 I# F3 A9 V' t/ T3 `% C0 U% y- b/ \2 `! a5 E' Q6 Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ i6 `+ K1 }% r .leds = da850_evm_tl_leds,
6 q# {9 r: d; ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( P; \8 | l# v6 V};
5 ?( Z$ c1 M t% _1 o8 t t: o/ m
static void led_dev_release(struct device *dev)
1 v/ E( ]& z/ m) @6 Q{
7 }# Z4 Q. g6 I+ y7 Y};7 X7 C/ [% p2 A; u- c1 j
; N! H! H- o* g8 {static struct platform_device da850_evm_tl_leds_device = {
! v5 D) }6 f% _( A% ~4 z( M .name = "leds-gpio",- O9 R& w3 G7 i, R' j5 l% Z
.id = 1,
( u. \" {6 {- K2 B8 F: S .dev = {
+ e* K9 ^/ K+ _0 m .platform_data = &da850_evm_tl_leds_pdata,* J! t; {' y( `7 ]) S# s7 c% R i
.release = led_dev_release,% C: u+ o2 W# m/ T$ K/ m& B
}
. Q* l; C6 N: P};
2 U% K' |. `& d, y- m3 F! ^$ D( f( l2 L6 r# m3 } v6 w/ `" P; {
static int __init led_platform_init(void)
R1 q' w* }, U6 k{% d" h. W! k4 d. |* y$ x+ E7 \
int ret;
2 l/ C1 s9 C# b) j7 d$ Z/ _6 O1 y#if 0$ x) ^+ E4 E- Z' H8 c
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 K! d B; [/ a
if (ret)
1 q/ F3 u1 O: C5 H$ b0 T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( ?* V) ~# C% D- _8 D "%d\n", ret);
1 r4 x% q+ ~1 S# g) F0 V" Z2 w#endif
& F$ J5 k c. j8 O1 a/ R4 Q l ret = platform_device_register(&da850_evm_tl_leds_device); b2 M/ O. r! ^ z7 W8 M1 P4 U
if (ret)
) c% B; H' U! f9 s1 T8 `, G pr_warning("Could not register som GPIO expander LEDS");8 [8 n0 z2 e5 c& j) k
else3 R5 H5 F# a, P* \
printk(KERN_INFO "LED register sucessful!\n");1 y$ g r- L6 ], J% f `
8 ^6 A" ]; m$ r+ r! r3 _ return ret;3 P8 Q% O4 y6 K# U6 X8 l+ X5 _
}
/ _0 N. N6 G/ w% p7 f. J, E+ O
0 p% b8 }. z; B8 I. ~static void __exit led_platform_exit(void)
2 o7 P& I7 l; n' I, J# N{
8 N2 t+ g( A4 c# m& L, f+ M platform_device_unregister(&da850_evm_tl_leds_device);! }0 [& a5 w& u" {/ O$ v9 a
, c# \; Q$ J4 `# C printk(KERN_INFO "LED unregister!\n");
$ s9 L) N) o, U4 i}! y) m" H" ], v" E3 Q: J+ [
5 K! R) S5 Y+ Nmodule_init(led_platform_init);
I7 h( ~6 U9 Xmodule_exit(led_platform_exit);: y; s+ k8 W2 F. a y' Y9 c. h2 Y
) d9 S( X/ V' V; k) Y% L. t, i. Y h( qMODULE_DESCRIPTION("Led platform driver");9 z( t) `6 M$ @" b
MODULE_AUTHOR("Tronlong");: I) g: C7 k1 N! b
MODULE_LICENSE("GPL");
3 M8 F3 S) M8 H' @6 K2 p0 k: i2 ?& D s! ?/ a
|
|