|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. J+ Z A7 T. Q# \8 w7 m3 `+ f
#include <linux/init.h>1 I3 \+ q( \3 w* W, y/ `# a
#include <linux/module.h>% |. G3 R/ R8 K4 C# ~4 D
#include <linux/kernel.h>. y* N' D% w7 l4 }3 g
#include <linux/types.h>
2 U1 \: z5 f% K g#include <linux/gpio.h>/ a$ Y6 D- J: w, g+ n8 N
#include <linux/leds.h>
% y. S7 a+ r, v#include <linux/platform_device.h>
1 m) c2 r5 L* P" O' e
% q4 b3 i% a" o: f9 ~#include <asm/mach-types.h>
1 D4 ]$ A; ~$ ^% y#include <asm/mach/arch.h>
/ G# r' s5 Q2 x- y# M/ m/ r#include <mach/da8xx.h>5 @6 T) F: y G8 h2 F2 ]; j- b0 O) p
#include <mach/mux.h>
- y+ M5 u- v6 v L9 j3 `" y- [+ Y$ A" q$ F( I: v
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ ^- g2 f" \- y9 m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 V4 v, L' ^* |7 D4 K1 i6 }1 N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 {7 ^# r- N9 x$ b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: t9 q, x5 H, J5 U! V: g
$ r7 x1 \3 |8 ^# v; Q& X7 d/* assign the tl som board LED-GPIOs*/4 y$ ]/ p0 t8 N, m5 X- @( B
static const short da850_evm_tl_user_led_pins[] = {" K5 G) c5 q; S# a6 i8 _# c) S
/* These pins are definition at <mach/mux.h> file */
- C m; r, i4 K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( v6 K' d7 r- X
-19 l: }3 A% ?8 }) \
};
6 [) w0 N4 M4 w7 V- S2 O, ^: g$ s
static struct gpio_led da850_evm_tl_leds[] = {
5 P( [! ~4 B0 _, g1 ^+ \+ B {# V: x. y. M$ I. T
.active_low = 0,
6 n. `" `, f: g8 ~ .gpio = DA850_USER_LED0," D H( B; e8 O
.name = "user_led0",
" B" E! Z) N$ p# Y1 B1 M .default_trigger = "default-on",
: ]1 q* T* B2 f# A+ ?; d! v },
: z6 z1 w2 B6 h8 e* y {
. s c6 ?: H2 n# i0 E0 p4 ^4 e( M .active_low = 0,
* d3 {/ h. W. ^- s* X) ?: R .gpio = DA850_USER_LED1,* J+ P( y5 i7 F7 c) H* ?
.name = "user_led1",5 d# c% Z9 D8 S* D: M& C$ K
.default_trigger = "default-on",
0 o! p7 S2 i0 M) T b5 R },
2 _) @/ y) N1 y' z" p1 I {- u9 ?$ x9 Z* D# a) w- T/ f! ~
.active_low = 0,6 |+ a# B% X( P3 g4 f5 G* t" _4 w
.gpio = DA850_USER_LED2,# e7 w- A( I( }+ }" a
.name = "user_led2",: Q' @8 t" ~. r
.default_trigger = "default-on",
: S v7 H. \$ ^1 x4 c },/ m9 O' r4 b2 K8 `% b3 z" d
{
$ I6 \5 D0 ~1 E, W1 H) H" s .active_low = 0,
2 ]: W7 B3 v0 M- A( n0 G .gpio = DA850_USER_LED3,# {9 J4 X8 r$ E3 o
.name = "user_led3"," q ~6 K7 ]- q, ^/ g
.default_trigger = "default-on",- f4 ]5 _+ W5 |6 b
}, G8 m- d3 J% P% M/ n
};
7 \0 R6 S+ w7 z, N4 A/ s2 {8 Q
; B$ h \, |' g" n" [7 ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; g3 B3 X+ T; C .leds = da850_evm_tl_leds,3 F$ o! c2 {! b1 H
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ ]8 C3 L1 L0 b};
( j' T6 S! ^1 y4 K" z( }' d. n7 A. D; |" m" a4 ^
static void led_dev_release(struct device *dev)
* Y- l3 G8 M$ _% {0 Y{$ K" K3 u( L8 F6 C K
};
! x# b8 ], _7 @( y& E% Q0 D+ I9 R
static struct platform_device da850_evm_tl_leds_device = {5 d& v6 z! r/ i W0 x" Z P" B+ U
.name = "leds-gpio",
+ r" r; M9 q3 O ~, a .id = 1,
5 }5 r7 I' e, Y .dev = { t+ N8 z q7 J" ]" p! D, S: M) Q
.platform_data = &da850_evm_tl_leds_pdata,9 V0 b0 W6 }0 |) x+ L, T8 }
.release = led_dev_release,
; Q. \0 t F2 s+ \7 a- Z( b8 R. I7 n }) N) ^' g1 Q0 @ \; S5 w4 w1 J
};
% b% G- J& ^- Z- G. u! ~
% `2 V9 e f Q2 o1 lstatic int __init led_platform_init(void)# j; ^( R& M( L* B1 j* G8 t
{$ ]) k; u2 H6 N( I
int ret;
/ U! S" y: z) ]& j2 J#if 0
# V$ O" d' g# u/ u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" P% d L) c5 @2 u5 S4 j if (ret)
3 D: ?- a6 q1 J/ u pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 B6 U0 d. R7 ]" [' Q, _ "%d\n", ret);
7 H6 Z7 V4 U6 } D$ C#endif& c# |2 Q: E: t Z
ret = platform_device_register(&da850_evm_tl_leds_device);
- M2 B' r: _4 t/ N7 o* l if (ret)" w" @5 y* F( s' N3 ^4 p) j
pr_warning("Could not register som GPIO expander LEDS");
7 s+ M' Z8 h& V+ x7 E+ I else" M6 r- A* q$ [9 T1 n7 S5 d
printk(KERN_INFO "LED register sucessful!\n");
4 ^9 i {/ I! Z$ F3 D- J. H
4 c, r- k7 _* @+ {9 C( c2 R return ret;
4 w# Z. o# g& b; \. z. M, ~}0 c/ g) x* b( J* e
/ X1 M0 b6 O3 A {& `( p7 m7 H
static void __exit led_platform_exit(void)
1 r4 v6 E; Z. |( v. l. n: ?" t) w{8 H7 A% I& k# H1 q3 c
platform_device_unregister(&da850_evm_tl_leds_device);
. V, P" [. s3 d' A* ~0 n) v; l
6 j) n4 X& i0 i& T E printk(KERN_INFO "LED unregister!\n");
1 s) I8 ?" j$ D, S3 w}
- r" R' _- W5 J3 D8 Z3 p4 ?9 K$ r c: A @* S# K4 a" t
module_init(led_platform_init);1 Y/ k0 t) |' Q9 y6 V0 f5 ]
module_exit(led_platform_exit);; F3 s d4 Z" R+ G/ N, w
% J& \9 F+ G# M, C$ I$ e
MODULE_DESCRIPTION("Led platform driver");
% h) S% R, q. u' `8 [! w# ]MODULE_AUTHOR("Tronlong");, d, [/ E5 ^' O1 h( B
MODULE_LICENSE("GPL");
" s1 {6 |1 A3 l- a1 z7 x# O' D4 q
+ V" @" s+ l+ J+ W1 z" K$ ?# o |
|