|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. v8 Y2 ]! B4 {8 [( N
#include <linux/init.h>$ o% t1 u+ k3 E$ Z. k
#include <linux/module.h>
) n% B" L! w# ^4 U- a/ `#include <linux/kernel.h>( s. b1 e4 j8 J4 i o% n! f
#include <linux/types.h>
w* K+ C4 D& C5 Q#include <linux/gpio.h>6 O+ ]- E+ a7 K: |
#include <linux/leds.h>
0 W: X' F: w2 M7 Z#include <linux/platform_device.h>4 e* b g8 I. V9 o' W
( t+ W' \5 I( ~: ~0 h+ Z#include <asm/mach-types.h>7 `& _$ h C5 n
#include <asm/mach/arch.h>
, u ]: B- {0 W2 I7 b* q& o#include <mach/da8xx.h>$ `& t7 Y$ h/ y6 l* V) N
#include <mach/mux.h>2 Z. r" D# P; a
0 l i3 R* Q8 l" D9 S+ N5 S; G) [
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 T- G/ C1 b( R2 v
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 k4 t4 o' S( g+ b; K; c: ?" t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) b; @: K8 x' r& t* T$ d& y$ M6 S
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 V7 u f) s9 v h2 Z- F8 o' v
! z+ f. o2 e- H, w5 F4 p" h/ K
/* assign the tl som board LED-GPIOs*/
! t. u( e3 X9 U, ystatic const short da850_evm_tl_user_led_pins[] = {
) `( z4 d+ T1 S! |* W: a& C j0 d /* These pins are definition at <mach/mux.h> file */
4 [7 d& B! V$ \% Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 T. c' ~* h5 W+ s ]4 z
-1- R6 H- q% ^5 W/ q6 e
};
$ k3 L7 l5 [$ I8 U ]2 F$ t
x' }' v' o8 f8 S+ u# P8 Y# g( Zstatic struct gpio_led da850_evm_tl_leds[] = {
6 \( H, f6 L6 `9 @6 E9 L/ ` {
j; A9 N+ V) R4 P" u .active_low = 0,4 J! c4 s- o. i: S- w
.gpio = DA850_USER_LED0,
( q# G3 h9 ]: Y( w( s .name = "user_led0",# O; d: t; f! P5 b# g Q
.default_trigger = "default-on",6 ?, ^( Z/ _2 A' @
},
. h: v1 k3 K C$ U {
" B0 X4 }7 A" d) s, e- J .active_low = 0,& |5 H6 P9 C9 y. E8 u
.gpio = DA850_USER_LED1,
* J/ M+ e: g+ O! Q3 r .name = "user_led1",
& ]: J' d! Z3 s- L# C) z. i .default_trigger = "default-on",: I, s5 w1 R" B
},; W4 W5 f+ \: _
{; k4 T1 s; X% P8 W
.active_low = 0,+ J& Z9 H1 `" [+ }+ U
.gpio = DA850_USER_LED2,
4 R/ s. p0 z4 j, ~ .name = "user_led2",0 T; _ j1 r% t( P- F; x6 d4 }2 a
.default_trigger = "default-on",+ z! G, T' \! C( u
},* x, {$ }5 Q* U1 @! z
{
( y9 Q. O9 |: ?- X8 j .active_low = 0,
8 r: c( `# W: a' ^ .gpio = DA850_USER_LED3,9 O. i$ J( i b3 O0 q3 F
.name = "user_led3",% j' U N% @8 B& M7 Z" b
.default_trigger = "default-on",
/ \! x5 o. y3 o) K1 P1 V },7 J1 O* S! O9 n% e* \: a! T* d
};
2 w7 p6 G0 T% M; g" v: b& K; E8 i- L1 Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 a: [# x3 D9 {1 x3 l0 I+ c) a; c .leds = da850_evm_tl_leds,' r8 m3 @9 Z7 ^2 u- k- _/ B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# q+ L% y; s+ L& f
};
" W! V3 N5 b* Q! n2 s. U5 ?: _2 e0 C4 S3 Q- l, ~) s/ D
static void led_dev_release(struct device *dev)
* m5 O \/ d6 i0 o{
; f! M8 H2 }& ?; K8 u};" U" ~- R$ }! T3 g9 s9 X6 Q
" i. E/ P+ ]9 w) Vstatic struct platform_device da850_evm_tl_leds_device = {
7 Z4 e6 `8 y. |9 j# Y2 \+ N9 e .name = "leds-gpio",) F3 `! J9 C# S0 X! a, V6 V
.id = 1,
$ R' m( Z# Y" @, j .dev = {) t' C1 D# s; J' D
.platform_data = &da850_evm_tl_leds_pdata,
f9 j' o! W0 s# `$ {2 k. Q .release = led_dev_release,
# W+ v* Y% E- @% z5 v3 k6 a }- S3 S+ ?9 S( U+ k
};
% q/ P) f% ~, _) y8 F
. C* @5 \6 s& a$ X+ v1 [9 Xstatic int __init led_platform_init(void)
: p7 p, z( ]6 Q) M3 U{ z! n1 w& c- X5 J2 n$ m" A9 Y8 I/ W
int ret;/ {" w: d( Z3 h
#if 0
) r" W% F7 d6 q$ S0 q* W4 S6 } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); o5 F% c! F8 x2 |1 k0 S
if (ret), \0 e D9 Y5 b
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": m# e+ A+ I+ o
"%d\n", ret);
7 a y# ^& A% W3 U$ L#endif
' a$ }' O" M. f* J ret = platform_device_register(&da850_evm_tl_leds_device);7 u. w2 N% i: r3 i
if (ret)9 @3 G3 S) W* t0 L$ } N9 p
pr_warning("Could not register som GPIO expander LEDS");4 q# O- g! }+ ]& n1 j2 n1 `
else
3 V8 L; L! O- E; A9 N8 v _4 O printk(KERN_INFO "LED register sucessful!\n");# n8 b1 j' |8 G, A _/ u
( v5 N1 X5 S' b: L' M7 h9 F
return ret;
. z- h/ S9 v) i! f% {}/ M9 }- x) e8 `6 ]9 q
. j) e; l* G" k) g N6 @6 t
static void __exit led_platform_exit(void)
) @: i6 z6 r) z{& j- h* j, k6 E& \5 \. T
platform_device_unregister(&da850_evm_tl_leds_device);
9 w" [+ x. v: I2 q6 e* h8 N
1 z1 M" i1 ?$ P' ^4 X printk(KERN_INFO "LED unregister!\n");# p! s# e- e. @; B
}; j8 i4 S1 r, k5 u: x
% Y7 b$ ~1 q# j* F3 v e$ F7 zmodule_init(led_platform_init);
& O2 q0 N7 n3 }- @3 Emodule_exit(led_platform_exit);
' |3 x& ?. p7 Z$ I; Q; t1 R; v. r
2 W: x( L/ ~9 ^7 r0 `1 V4 i: D6 {MODULE_DESCRIPTION("Led platform driver");
B# p; r' U& l e' z3 DMODULE_AUTHOR("Tronlong");+ n; K! x8 B6 H8 s1 x
MODULE_LICENSE("GPL");
$ K) M2 h9 K* u- c8 V+ C% r) |" d' o8 j- Z# G& Z% E- n6 [8 K" ~
|
|