|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. h/ w& q8 l0 g#include <linux/init.h>" w" S7 T4 k7 A, L
#include <linux/module.h>5 O! P( h# F3 Q" G0 T* w% k# t
#include <linux/kernel.h>
4 f7 s/ u0 W+ p1 c- F#include <linux/types.h>
( B2 z: @- J5 O* a) {#include <linux/gpio.h>% C. x- J: l3 v
#include <linux/leds.h>. C) E1 r5 Z' Q& O; v
#include <linux/platform_device.h>
2 O: t9 K1 \$ a3 f4 e# p
* s+ ~! C! s0 `9 b* m7 |7 h7 r#include <asm/mach-types.h>
6 ^0 Z/ H, z" H$ Q$ d$ a#include <asm/mach/arch.h>' h" p0 b& N2 j* F; Q7 F
#include <mach/da8xx.h>
8 n( _7 a# W6 q* \* H# Y9 p#include <mach/mux.h>
- E! k* d" s% @! f$ l& X) c
( U3 }% i4 D* ^1 p7 m# n1 l/ K# \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( a5 x$ |+ L: R+ U3 C4 F4 Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 O$ G. M* |9 m. m `) w1 \#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! p4 Q8 v/ N! k. G, N0 H) V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 q$ O+ ?! u3 _. J8 Y0 n' [- T( T
- I* {* t' [2 r& Q* _( d
/* assign the tl som board LED-GPIOs*/
k. ?9 Q K' ~7 S% ~9 i5 n* p6 kstatic const short da850_evm_tl_user_led_pins[] = {; Q: p. P1 t L: `) l# @
/* These pins are definition at <mach/mux.h> file *// K7 J. b$ K: I4 |8 B }3 _$ m6 {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 [# A: O0 W4 z" W0 k -12 k% R! D2 L' ?' T
};3 W, M5 M) j9 T
9 W0 P6 i1 |1 C' X* n9 Z0 ]$ \static struct gpio_led da850_evm_tl_leds[] = { l1 S& @1 V9 W2 q/ O" t' }
{
g2 J0 Y/ M0 q. s- A2 a' S .active_low = 0,
& u$ r0 E3 K: R4 o .gpio = DA850_USER_LED0,; @1 W4 Q' n1 T
.name = "user_led0",: q& M% h9 [7 Z) f3 w! \
.default_trigger = "default-on",; m+ R) [# {' a
},; E, k$ T. H, d$ c, h/ R
{
( I2 v( F. d. J! O .active_low = 0,
5 r9 k- S; e1 j .gpio = DA850_USER_LED1,2 L4 M- T0 N. R4 G
.name = "user_led1",, G* p2 x! V, Y" x9 u" g
.default_trigger = "default-on",
; n$ ? U3 w1 q# A: U% t" w },
8 ~2 C5 ], y( W" l8 D {5 C" P9 Y* l, ^' K' Z7 |( s$ c% y
.active_low = 0,
1 y8 @5 N3 ~0 l, M5 H0 y .gpio = DA850_USER_LED2,9 E2 P7 b M- q+ \8 B2 E+ z0 `
.name = "user_led2",; }* F( e( T5 i3 M" G2 t: ^9 e
.default_trigger = "default-on",
+ M1 q5 P0 _% P+ _# K8 p/ c },
7 M8 ], l5 H) w, d {
) }8 j! \* _: h- I' l8 N# i, H .active_low = 0,
: z# j: g* }7 L4 w, ^3 F* x .gpio = DA850_USER_LED3,8 Y5 s( w& S# K
.name = "user_led3",
G0 Z) V3 E* i- V+ K& b2 `* K3 l .default_trigger = "default-on",
6 e/ x4 j8 t& V2 ^ M) [) f },$ h: C6 q; K! c; I
};
$ h# I- [* T( } V2 X0 p: c6 B* F" i; j4 O9 u' [$ a4 \& b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ ~8 x0 E: F' @( l
.leds = da850_evm_tl_leds,
4 ~: Q: ?& ]4 P' @: D .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ y \& `6 E1 [; k7 N& l}; k# l. g* R9 v* r# l% `
; J8 I, H6 Y r
static void led_dev_release(struct device *dev): M* N4 x3 j5 ]7 G6 k5 \
{4 |- x# \2 A; B
};
, J& h2 T3 m, J7 Z0 h4 x+ T- C5 X7 T& U; h* B
static struct platform_device da850_evm_tl_leds_device = {
) a/ r* K$ K6 @( [ .name = "leds-gpio",
$ i( n$ v" Z f2 Y .id = 1,+ \& y& G/ @$ e+ I% t% w$ K
.dev = {
: U5 Y6 S0 h$ H; \9 f3 f! Y% X; e .platform_data = &da850_evm_tl_leds_pdata,
, k0 C; f3 u7 \8 x) G. b5 Q .release = led_dev_release,& D. k- Z" @4 Z" ?9 P7 m
}
) ?2 ]0 Z2 P, d3 w};9 C# R* b3 Q; h; U, W' I
8 [% O6 Y! U' S5 A( u6 |
static int __init led_platform_init(void)' `4 }4 U. z( h: \* ?, h% ]
{8 K$ T' A1 [# [9 c
int ret;
) r/ K. Y, R7 _7 k. L4 t. b#if 00 d6 Y Q# y o- \" v9 a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ n; _8 }4 K/ M( G# ]7 C& ~ R if (ret)
6 L6 ?9 z7 v: O* x" s pr_warning("da850_evm_tl_leds_init : User LED mux failed :": z5 E- Z! H' k. j
"%d\n", ret);
) [6 u. B/ h& S, g0 x#endif& ?0 p6 U' O- t1 M) i( {3 v, [
ret = platform_device_register(&da850_evm_tl_leds_device);
4 |6 N' a( y: N6 i. [) D" Y0 Z( f if (ret)/ k9 c5 X) \2 C7 X# l
pr_warning("Could not register som GPIO expander LEDS");3 b5 ~# s2 G' H0 I
else6 Y- x& S2 o6 D5 K1 X- m4 c6 p
printk(KERN_INFO "LED register sucessful!\n");& v1 L" G) ^8 |# R _. V& a" S
3 k q5 |% Q; w% p5 Z8 g# i return ret;
1 f8 p+ P- Y4 G2 [6 C% e}0 @7 {( n9 M0 _* |' O
5 p" z' m; y1 a0 ?8 kstatic void __exit led_platform_exit(void)
8 W7 N& a# J+ K! t0 g' N' i: F{
6 M2 h' k6 R; N& F, y+ o% z2 D platform_device_unregister(&da850_evm_tl_leds_device);* }; ]2 O; _" b S* F: K
8 ]$ s0 l1 L5 \ [: V6 c5 g printk(KERN_INFO "LED unregister!\n");3 P& {3 M0 I2 g' B1 D5 p
}1 @- }$ l" O! r1 S& d. @2 T
: v, l; k9 x& m! V' S) }$ mmodule_init(led_platform_init);
: t* V- K3 D! Z2 p/ [! O* r; qmodule_exit(led_platform_exit);
4 W# t+ t, B9 [: q/ r' P( N b; e9 j
MODULE_DESCRIPTION("Led platform driver");% H( `2 @; z: S% F! x: e9 E! O
MODULE_AUTHOR("Tronlong");
% S2 H- Y, w9 B* z, N, P+ @MODULE_LICENSE("GPL");
2 x: ~0 `5 z$ d
$ k9 O! i0 E7 G3 f& Y2 R |
|