|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" _# f! b6 m* r! w
#include <linux/init.h>3 z; }; z, j0 b7 o5 ` b
#include <linux/module.h>" w* Z0 i1 t% q7 m+ z( V. k
#include <linux/kernel.h>
9 _) Y( [+ W4 p I+ D3 u1 n- p( A#include <linux/types.h>- L6 h& H* a5 v+ I. _, o
#include <linux/gpio.h>
- Z$ W0 J7 V5 r! R8 ?#include <linux/leds.h>: F5 S. n# i c& O# }
#include <linux/platform_device.h>
2 p1 W; A3 u( Z; T3 ^1 R; s! w' q; O" S; Q+ Y3 A$ W/ s* p; W$ u
#include <asm/mach-types.h>: Z* C/ u3 A9 R+ N$ n8 p1 e0 k
#include <asm/mach/arch.h>
& x+ q+ c; d: r& [" o6 v#include <mach/da8xx.h>( |" l( t/ b; K. s
#include <mach/mux.h>% k. U8 l* E- Y: s4 |+ y
: B1 ~, Q; b2 \: s% H6 X! [, ~0 u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& T- e: d* v0 R6 a% A6 j- a& J/ y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 @ K- ]% B! `: Z1 e3 A, U1 `6 e& F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). ^. I9 b2 r) O9 ~% T. Y! n6 X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ S& [5 B) s; |6 {( j9 B& j
5 w% r2 ]# X$ a
/* assign the tl som board LED-GPIOs*/: K2 ]& h' w% Q8 Z
static const short da850_evm_tl_user_led_pins[] = {
* W- Q, Z) N; j& x; S* H, g /* These pins are definition at <mach/mux.h> file */
/ l3 q6 Q6 ]# m: N1 R3 S o: P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 Y: o) Y9 z# Z -10 n# x1 B8 Z8 i* ?6 @
};
* }; }& j1 t8 C( J5 l) \1 G2 Q: w6 d0 z, F: n
static struct gpio_led da850_evm_tl_leds[] = {
* {, A( t) \; W {
8 J4 w5 q. @% D* i' l3 p% i .active_low = 0,
! m1 M8 d( w. m: O6 t+ r% L .gpio = DA850_USER_LED0,' c( q7 {# I$ ?8 n
.name = "user_led0",
9 C) |" y4 Q" e, j# m .default_trigger = "default-on",
3 c5 }3 C5 t0 P$ d7 C },$ s6 P3 M9 H# v% Q \( u
{9 N! P2 {) `6 U: y8 `) O
.active_low = 0,' t8 ?$ Q+ j( B' K; y: T
.gpio = DA850_USER_LED1,: D. z8 x* _6 [, e
.name = "user_led1",
! z# {4 n3 K7 Z! L) D .default_trigger = "default-on",/ ]) x' ]* S, H: ^! A
},! m' X2 P- B- Z# b u' H* ~. V) J
{3 l, G9 k2 T0 Z4 e0 d
.active_low = 0,
3 x# `' h8 d7 B .gpio = DA850_USER_LED2,
3 c1 C% i3 {1 m9 A .name = "user_led2",8 p$ K4 v- v H! u
.default_trigger = "default-on",2 _, O. y9 ]! @) t
},; Y0 n* x- w% g# S+ @ n) [9 s
{
. @7 z3 x( z5 \: B/ N" r7 ~$ i- y .active_low = 0,* b) s* ]1 {' N
.gpio = DA850_USER_LED3,7 g% b: h0 e8 u6 _" x. T- }
.name = "user_led3",
0 ?- G; j6 s$ i) S .default_trigger = "default-on",$ v9 A# x6 I6 C" L
},- e. a; z V) Q4 y# `- J1 i
};
1 l& G2 N( C; N/ {: R/ e2 _. v6 S7 Q4 v0 {; ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 O1 B# s% p3 S% O- }# z7 c .leds = da850_evm_tl_leds,, z' y: s3 e9 ~7 R8 H! j
.num_leds = ARRAY_SIZE(da850_evm_tl_leds), o7 S4 B' i( V* Y# u
};
. X- E+ A3 Q! h1 @' C+ d4 _9 d' K+ O
( l" L! f$ d) ?- k" ]. R. lstatic void led_dev_release(struct device *dev)
# m. K' d( W$ T6 ]& ~2 r* T{
1 |$ z; H' X8 \% r* l};' Q, r9 \8 V; Q' G) A& `
! W6 ^2 F) u. \+ o4 Z, u8 G5 a) {static struct platform_device da850_evm_tl_leds_device = {
. x- F1 [" S. N. e3 ~4 _ .name = "leds-gpio",7 ~* M j/ @* K( n0 X
.id = 1,( a4 P" l4 b6 _- H$ ]4 q
.dev = {
}2 ~6 e. n/ y2 G, l .platform_data = &da850_evm_tl_leds_pdata,# [/ Y* `2 K c. {( z& M
.release = led_dev_release,
* v3 s) B* m* V! f }' Y% m1 M! ^8 _- Y! [
};
2 `) ]# C% |7 C$ s- J9 Z, e
7 E. N; x- l* B+ j0 W6 estatic int __init led_platform_init(void)
- D2 g& t; @$ ]{, i, i, P# `* d7 p! [
int ret;% w7 M/ m5 \; R
#if 02 ~: q/ u0 G% O0 O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" I. a4 c+ q; i- n8 I3 A8 P if (ret)/ u1 F% T4 {; [0 @7 l2 ~3 \" a9 j# h
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 r9 ?- M; d, ^8 R- l* J; y "%d\n", ret);
% G8 P; l% U. G' ]3 ?1 r#endif
& Z9 d: W1 L, T, O4 k) \- ] ret = platform_device_register(&da850_evm_tl_leds_device);
: z# V+ z3 o/ h" _1 N if (ret)/ }: A- j" V- V
pr_warning("Could not register som GPIO expander LEDS");7 L( x! H" o9 `+ ?6 a
else+ S$ v3 E& S. E7 n x( r( ^
printk(KERN_INFO "LED register sucessful!\n");5 k% V7 V* o# o
% V8 Z2 A- @. n7 y7 x2 b
return ret;
- I# A& ?5 P0 e& K9 M# E. R/ |}
m( N% s) d T* D- R4 S# ~5 f3 O
9 y6 k' S$ v1 q& u8 Vstatic void __exit led_platform_exit(void)
/ K: w2 _3 ~/ r& @# D- N6 E, G{
/ G; G/ O L) q: j& r: F platform_device_unregister(&da850_evm_tl_leds_device);1 S* q+ U6 ^1 J: c4 |* a
6 a- q3 p" n% V( h. Y D% X
printk(KERN_INFO "LED unregister!\n");
8 C9 E$ P8 x8 @+ K) w}& p* b: J( f9 O0 K: e
1 t* F& z: s. i* s
module_init(led_platform_init);
" s2 t8 P! S8 |* \) j* Z6 r8 tmodule_exit(led_platform_exit);$ M& J1 S s) v& I9 i s
8 i8 ]. C; ]1 y* C& U1 C+ RMODULE_DESCRIPTION("Led platform driver");3 w& R4 W( q0 t3 Y4 G3 J( E3 [
MODULE_AUTHOR("Tronlong");" Q0 b2 T+ @; a0 c2 |" p" W
MODULE_LICENSE("GPL");3 J* G: X7 w3 S# N, o
; F2 E* y. X& ?( z |
|