|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
O7 l% |% a, Q" ~#include <linux/init.h>9 g7 z- `* m# l$ E d
#include <linux/module.h>
: D4 f) ], o: g, o* }#include <linux/kernel.h>8 g- }3 p7 f# ]: X/ |
#include <linux/types.h># j& ?9 s3 M2 F, ?7 i
#include <linux/gpio.h> I- X5 i" S- X
#include <linux/leds.h>& Y! u/ }4 w5 T: z& i
#include <linux/platform_device.h>$ `' @8 H- H; @5 \/ _8 Y! G
8 Z- b% i* z" D0 c#include <asm/mach-types.h>
' `3 h# [" J& B2 c#include <asm/mach/arch.h>8 a* b7 N3 p2 o& Q% S
#include <mach/da8xx.h>2 p, O7 |) I8 B. W- V
#include <mach/mux.h>
6 H" z4 N6 u% R0 u6 H
# m! M" V9 |4 m+ r% w3 C8 b2 a#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 O- c0 Z0 D' }" B# e
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) ]( g6 R3 i4 B `, x- V. w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' B6 |& Z r+ d6 Y1 ]* P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 j$ z& {" g: J3 S. u5 s8 s
( X6 Y0 z$ i, Y1 G% I# V2 t' j% F/* assign the tl som board LED-GPIOs*/9 C1 V; ], Q' H. `
static const short da850_evm_tl_user_led_pins[] = {. V5 x I I) m2 p. o
/* These pins are definition at <mach/mux.h> file */# t( t: t2 m" B" p+ v! e
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 Q: e8 }, j7 j( b1 j
-1* {- l; K' w$ {# ~4 e% _
};
- O7 n! V* A9 c
; P2 H3 T6 H/ N3 l3 N0 L8 K& o- xstatic struct gpio_led da850_evm_tl_leds[] = {
9 K0 t J# `8 X' A) h$ k Y$ v {
: K& y/ R( E' E3 ], { .active_low = 0,
4 |: T# o' X5 c+ C9 B8 { q .gpio = DA850_USER_LED0,
' o1 m' |! b1 F) f .name = "user_led0",
; m: J# C8 R0 g0 u, G .default_trigger = "default-on",
, c/ i. v! L/ t& o- P },; a% g8 u% U& b, v3 k4 E1 ]# i
{) T/ c) ?' D0 ?- W" V( x
.active_low = 0,
2 |' j) k, L+ F1 @% P .gpio = DA850_USER_LED1,
! V6 U$ M M( f8 | .name = "user_led1",- e& l! R1 G. R" L! N* f2 l
.default_trigger = "default-on",
0 `, Y$ z( q2 z$ c$ E },
+ G% u; N% K5 o {! t! ^- a1 W+ W2 X) h
.active_low = 0,
O1 D( ^+ |# U) R( ?8 Y& d .gpio = DA850_USER_LED2,
+ f0 x* B+ T! U" c' | .name = "user_led2",9 X( }* k0 T# T7 w i! V
.default_trigger = "default-on",6 T6 t# B6 W. u, R% y6 M: l" d
},
; t4 l6 i1 |: ~$ K9 C# a1 G {
7 F+ F, Z8 K- Q' Y5 p .active_low = 0,7 m. Y) |8 U. ]7 y# s4 i. E) S0 r0 ?
.gpio = DA850_USER_LED3,0 ~( B1 t+ f# r* ~ u
.name = "user_led3",
" {; L, a; L# |0 m) k4 M .default_trigger = "default-on",5 s8 M V) a+ N4 A5 [/ D4 O
},
d+ K1 o7 G7 E4 z1 I( E};
9 p1 B7 {2 V8 Q, _5 h. j* R5 h; `# {8 k: Z0 H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! s- R. v. u3 ~ .leds = da850_evm_tl_leds," w S2 i: b8 C H/ Z* B( Q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 z2 b1 K; m" U0 e
};
$ F. v! ~& |$ p9 S; s
/ r5 f' _" Q; Z0 n* A8 Q! fstatic void led_dev_release(struct device *dev)/ z$ C1 W/ l+ l2 o F$ `
{4 o8 x* o$ A4 g" v$ t" S" V# f; v
};$ n4 {3 i+ D# M$ b; d+ N% w6 Z- {
8 O1 m& ~ n' qstatic struct platform_device da850_evm_tl_leds_device = {
+ u1 Z% `- T2 l5 k! B* ?/ i .name = "leds-gpio",: Z2 f7 l! _& ^4 d+ E( L; s
.id = 1,, U+ |3 a5 Z# q5 ?
.dev = {* a7 t/ e$ {8 J2 V
.platform_data = &da850_evm_tl_leds_pdata,- [4 F) Q3 J. W' B5 |
.release = led_dev_release,3 e6 @9 n* O0 A: T' B
}. H+ J. x/ B" ? i0 K6 ^ x0 V
};# z7 @# S( e# e [" u8 b- N# O% e
) a/ u6 A) X" E/ _1 X( l9 n8 X
static int __init led_platform_init(void)
9 C9 n7 x. g' h& ^{
3 _$ s) y) Z( { int ret;6 _; I; d! k. `( _$ z
#if 00 e$ e# |1 w1 E) u; _$ }
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 Q; `0 b/ E( ?, z$ n9 Y if (ret)
: i1 d/ A, w( I' R$ | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 ?7 m: t1 S1 S1 W- F
"%d\n", ret);- v3 v0 R% A8 a( @: M5 U
#endif
# t9 Z# z+ f# l ret = platform_device_register(&da850_evm_tl_leds_device);
8 w! i2 L* u9 ~- H' I if (ret)5 b' l: _9 a& O& }- y
pr_warning("Could not register som GPIO expander LEDS");
2 Y( _# P$ e( L3 n: `; L7 L else: z5 s, j: A# f! V; S& U6 s
printk(KERN_INFO "LED register sucessful!\n");; v' e1 l7 D+ ?! o
5 M' w4 ]2 Q G0 `% h( ^9 a
return ret;( p( K2 t7 Z$ _* F( a( @- O/ \
}8 q! r% l* Y1 b6 m, X# f
. n4 q# ?, t7 l( M
static void __exit led_platform_exit(void)
9 l; y; S5 T$ ^{4 l0 n: m% ` p4 v- g+ o: d2 w
platform_device_unregister(&da850_evm_tl_leds_device);( B: T8 Q0 \) `3 i, w
) k {. ?' r B) i* t printk(KERN_INFO "LED unregister!\n");
" j+ G+ }: W: u7 f- C2 b}7 C) v, T; s( i/ M; e) _# J
0 I; D- s- n0 K! \/ Emodule_init(led_platform_init);. T( l2 n6 Y- L b5 @ G
module_exit(led_platform_exit);
- K- ?8 e! C4 R( R& G; V& \' a! C1 z* }6 [/ h. @9 A- b1 Y
MODULE_DESCRIPTION("Led platform driver");
- B( \& Q1 w* J c4 D" xMODULE_AUTHOR("Tronlong");3 y1 K7 q0 s3 J& L0 C7 A5 e T
MODULE_LICENSE("GPL");% l3 ^) X% G8 q; ? @
& c& @ Z6 X: P5 j @. l- y
|
|