|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- \; [. c. q4 j3 K7 X" g3 V* d0 j#include <linux/init.h>
2 q* K& |; J9 }# g1 g#include <linux/module.h>8 j$ V4 c( S9 T9 |' T1 v
#include <linux/kernel.h>
/ }( h4 L3 _- ~5 m#include <linux/types.h>$ H4 C Q5 b% E5 L% T7 d3 U
#include <linux/gpio.h>4 C- l% d' ^, T) Q% }- p
#include <linux/leds.h>
3 q8 L6 ?* x$ x#include <linux/platform_device.h>
9 M! ~& h: j9 b- i# s8 m0 `0 m. x- l" I# }
#include <asm/mach-types.h>$ R6 z5 }3 B! f" `( Q6 g+ H$ i1 Q
#include <asm/mach/arch.h>
( h) U, N# {- r; u) q* J. b2 m0 b#include <mach/da8xx.h>
7 v) G5 Y4 [; v9 o- [( P6 M5 i7 G; R#include <mach/mux.h>0 F1 a ]) A% o$ d- W$ \/ D6 L- C
8 z- Y) v6 z) w; R3 \. O
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! r2 }* o! j1 b% J9 y- \8 j: P#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 g/ |8 ?, _" B#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ ~: ^( y6 G3 F! @0 F- `: B8 {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 _* h3 C7 F+ |: {: V; b' Z o* E* `1 A; m G( E# b
/* assign the tl som board LED-GPIOs*/# P% n+ N& A3 n! e' d" ?
static const short da850_evm_tl_user_led_pins[] = {
* l2 X8 y9 g2 s& J6 j /* These pins are definition at <mach/mux.h> file */
6 k2 ^ j# r! O( n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 m& p8 u3 I( Q, |/ W% Q -17 A2 |9 y& V7 Z* D' Y- F
};( M4 T6 A4 A7 g# M; P( |
) y0 H6 ~+ z2 M1 d" @) J7 q: tstatic struct gpio_led da850_evm_tl_leds[] = {8 d/ R8 u8 b" f. h2 c2 e
{
5 u$ W. P. y/ i$ M .active_low = 0,4 H1 U. I' u% X- n& @! g
.gpio = DA850_USER_LED0,: q; r# Q) \# i. q7 M
.name = "user_led0",
G3 f# c; t9 i9 X% q .default_trigger = "default-on",
2 I+ G+ c+ B0 _' O" k" y9 O },
9 b8 y2 k* v: J {4 \8 X& O( h% C7 y) s
.active_low = 0,
S6 E9 P3 P$ [: K .gpio = DA850_USER_LED1,3 p/ }2 B7 k4 c x9 O# f) p
.name = "user_led1",# @/ z- q. R D: R" J5 M& F
.default_trigger = "default-on",
& i0 H# S& L3 v: B: \$ F4 s& U },) |0 @4 [9 g6 u0 L# I/ q8 h, b
{: g) Q" }, P- g# ^/ U% f" l. J
.active_low = 0,
/ A U1 {/ g( D9 |% X .gpio = DA850_USER_LED2,+ {( J# L* H& |2 m5 a' H' ~
.name = "user_led2", S1 W4 F5 l. |$ x: J {
.default_trigger = "default-on",
8 J0 w# _1 N7 G/ c( T; v },+ [( k1 j2 A6 m6 P8 T7 p7 C0 g& E
{) {7 U: @2 d3 v6 A# [( l7 m
.active_low = 0,
4 v& @# |! s. A6 Z .gpio = DA850_USER_LED3,$ Y0 V0 i' [" ?2 F" {. i0 q
.name = "user_led3",
8 A3 X! x( s1 j4 A4 c9 ?- v .default_trigger = "default-on",
# \* y% H; Z3 R5 E# ^ },
; M# C% r, o; |};
# o# ?; {& D6 S2 e0 t0 L1 B. C6 U5 \- M$ i4 h; r/ \
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 n! }7 K% G A* x' V. c' Q
.leds = da850_evm_tl_leds,% |* U& H1 A3 C! T& S \/ ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," X0 h% Y5 L$ Z5 c
};( P6 j( k6 f" V9 N; P- Q2 e* H1 P$ g
8 C+ g( N) ^" Z( a i' M# }8 Fstatic void led_dev_release(struct device *dev)
# Z: P; K; j3 T+ j& j( ~3 |{
) e! n% I" S6 L4 F. D; M& G8 J' A};& ]8 f1 ~3 S9 m, y4 x" K! r
) `$ d8 L, C1 T4 p; Y+ d5 j
static struct platform_device da850_evm_tl_leds_device = {$ m1 U% @8 p& N C5 l" ~5 U/ C( h
.name = "leds-gpio",( _1 [) a( C% H& N p
.id = 1,
8 Q' u* J% h( u0 g .dev = {
$ [' B+ I; d, Y8 ?4 h9 a$ |/ b .platform_data = &da850_evm_tl_leds_pdata,. j& I1 G6 f( u( k
.release = led_dev_release,
- ^7 V1 Q$ D: ~, C5 A" \ }; G( ?8 z1 N( n* J
};0 e! n/ S$ B" @ r# k. q5 ]3 V
8 w( _( S, _4 jstatic int __init led_platform_init(void): ? a( q t* F; g
{
4 F/ I+ J/ D* N9 ?: H9 s. T int ret;3 o! X% c4 E2 r+ H1 q1 `
#if 0' [. h: ~3 T3 F
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& E$ i- J: N& S u0 Y! } if (ret); L) t+ H' \3 L& L0 Q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 C u. S' t" s0 T9 D8 l5 [ "%d\n", ret);3 n* X( Q4 b5 {
#endif
6 M4 m/ b6 {: ^5 R7 L, M( Q4 c ret = platform_device_register(&da850_evm_tl_leds_device);0 `! x" u! j/ E
if (ret)! v! E# M- z; B3 |9 N
pr_warning("Could not register som GPIO expander LEDS");% c, X4 q' c; ~- L
else
/ k% X% @" f: L: F3 i printk(KERN_INFO "LED register sucessful!\n");
6 I2 v5 }( ^1 ^+ W0 x: \# d$ w7 e1 X, K/ \7 r9 \4 J4 j
return ret;7 d- P" Z" q1 J7 m* F c; f/ A
}
# A: Y* v9 \! L: i# ~1 i' {7 z' I' j6 g* t) ~( a, p+ \1 b$ N
static void __exit led_platform_exit(void)6 `# @2 g- H0 O6 \* {
{
4 Z/ }. o1 B% S: t- I platform_device_unregister(&da850_evm_tl_leds_device);
+ v: V* [7 Q; V( @$ Q* @9 m- Q8 R( M. c. n6 K- x: [
printk(KERN_INFO "LED unregister!\n");% k% ]7 N. B) Y
}8 |) u$ o \- s% e+ [
. \5 q& G$ [0 l/ |# x; y& r; \
module_init(led_platform_init);
; x3 Q: `9 |( q, j* H: k/ G! p& k! Ymodule_exit(led_platform_exit);
, y4 q) b! V" N! _1 y3 }+ e& Z2 G7 U5 C4 T, T# C. k
MODULE_DESCRIPTION("Led platform driver");* Q8 c2 G) q% U- @" \: u" e0 k! n7 p
MODULE_AUTHOR("Tronlong");# ?, g% r+ {/ a' e
MODULE_LICENSE("GPL");5 X! w2 {. u* g" i5 T6 G
- a4 t: _% O9 n& U1 h$ n% i5 c |
|