|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 |2 M# s( r( i) c( r
#include <linux/init.h>
/ {' V1 T3 p% v! V#include <linux/module.h>' H5 n3 t) l, d9 t2 l5 L7 j& A, X
#include <linux/kernel.h>- \2 z3 C% r5 T. P& y9 x
#include <linux/types.h># n. |5 p6 [6 o1 s$ b5 U
#include <linux/gpio.h>1 I: h2 D! M8 o# o4 V: l
#include <linux/leds.h>& e G4 j4 \$ y' k D
#include <linux/platform_device.h>
7 g: e9 e# y5 M( j2 x& V7 a U: F6 T4 c
#include <asm/mach-types.h>
; x' ^8 [# J) P5 q, h5 J1 q#include <asm/mach/arch.h>7 a- G/ Q& \- F
#include <mach/da8xx.h>6 ]; r6 v; h% l; D4 [4 x) S! H
#include <mach/mux.h>
) D; F z3 [/ t( s
" b7 Z) ?8 M0 b7 ^ R+ `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 r0 i+ v, k+ c# C n# L7 Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) |" f% ?2 B# \" C
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% H5 D7 T; Z: ?& Z+ u) e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) ?1 [) |3 X. w
3 ?! O4 x8 K7 i t# E* E+ h/* assign the tl som board LED-GPIOs*/! Q, J% z- A2 x! l
static const short da850_evm_tl_user_led_pins[] = {7 `3 G1 g, w2 Y+ _. u, \8 H$ M A
/* These pins are definition at <mach/mux.h> file */% d! b7 ` q3 q1 z2 Q p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& L: d) b( { I+ |% V8 p; v3 j -1
$ i7 k) o2 O0 \. Q};6 y! k9 w; F% x1 a( S
/ q: M' P" z6 c8 d. J/ ]( G, J
static struct gpio_led da850_evm_tl_leds[] = {! Z% H3 d; B8 C' Z: p) z
{
. M/ M% g. |: d8 [- e0 x2 u) y .active_low = 0,
( A/ X+ E1 Q- ]3 q; S, X- D .gpio = DA850_USER_LED0,; W$ o3 b( t, |0 b" i8 p0 p* D
.name = "user_led0",; _" G' D1 b* {9 [9 ~0 _
.default_trigger = "default-on",3 m+ d9 d2 n! ?' d, v5 f
},
6 F+ n# Q3 z& @9 U; q7 l: A h/ o {- ~! _ Q p8 j) I, ?, b3 }1 f
.active_low = 0,8 {" C* v* B7 i
.gpio = DA850_USER_LED1,! J5 [2 f* j& L& p& k+ c
.name = "user_led1",; e, H) {- A3 u# ?. @( x
.default_trigger = "default-on",
) H6 b+ G& ^0 o/ Y* v },, z, d+ P( Z1 [4 V6 o
{3 e1 l5 X9 F# T5 @( d3 Y2 c
.active_low = 0,
& q8 k+ W, Z7 ^4 \ .gpio = DA850_USER_LED2,! q, f0 f1 M( u7 m7 [' P" V9 U
.name = "user_led2",/ S" e! \+ q v1 s
.default_trigger = "default-on",5 n3 H$ e; T( W* R2 H
},
, Q# D# Q8 m. Q% B* W {
% f% ~2 O$ f! r) [) M2 V .active_low = 0,
, N1 O \. \& Q3 q .gpio = DA850_USER_LED3,6 T0 o9 }" ?# x# x) c) Z. S- d0 b
.name = "user_led3",: W, {: j5 X M; ]7 b' O
.default_trigger = "default-on",& r! n5 ^4 A, ^( _! |: M
},
' w* N( Y; o5 F! ]7 _};
& p" A/ X; K) v m F* c" ^- P/ S5 w( q9 `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# F! e2 E/ z1 {
.leds = da850_evm_tl_leds,7 Q; w H4 l. E$ K6 B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- y1 F1 h% h+ r& c4 O};2 Z) r: N9 x: Y$ C' ?6 e. p) U
0 W2 S' G+ X4 c/ ?, k
static void led_dev_release(struct device *dev); ~( ^0 H5 ?" k8 [3 M( W; w$ ~' s
{
$ a: F/ C: T6 Q5 ]0 f) n _( \$ U# O};
! X' s1 A6 b* F \" U. z5 G$ ]; G0 T) G# x- G( v" E+ p2 K
static struct platform_device da850_evm_tl_leds_device = {
2 |, [- j+ g5 C# |1 x$ }$ q; p! W .name = "leds-gpio",
) K, Y* F' }- E* G .id = 1,
, d/ `* ] p. S .dev = {; \$ `) Y2 n& D* g( O# O, i8 q
.platform_data = &da850_evm_tl_leds_pdata,- e1 j% T% b( ?. f: T% {
.release = led_dev_release,
/ q" l% P9 f3 e6 a: n [" C }
! h7 V, ]7 J6 r. x2 l- \};
) D# j4 j6 \8 ?0 i" A5 s- F
9 M+ K- Q% g+ ]5 S: l/ qstatic int __init led_platform_init(void)
7 d3 Y! g) r5 _ Q2 v; l{* o5 \/ e" F+ ~# d8 g/ K
int ret;# `+ {, u) Y2 W) W8 g# ^# t+ u1 ^
#if 0" ^/ Z, V B2 l% _1 T" ?4 Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" W3 k& C+ [5 m. n+ g8 S$ J
if (ret)
- K# Q' T9 k+ o; g ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# k _3 V0 s, B "%d\n", ret);
2 t5 F' h" h& i7 m, ~#endif
: {, W( @( X3 y& N ret = platform_device_register(&da850_evm_tl_leds_device);+ b8 j7 ?0 x2 P! K2 o% t' G
if (ret)6 m5 P# U7 f# e- d5 \8 Z
pr_warning("Could not register som GPIO expander LEDS");
5 @9 R3 @, H w else/ R. }" U; e6 p& ]9 W) I$ u( a
printk(KERN_INFO "LED register sucessful!\n");
& ?' u* T4 }( I% P
4 [8 r! v$ x }3 v2 k4 k return ret;
: z* i f" E- }1 r( ]9 e" @}+ m* q& L4 B. V1 v5 T( q
4 _7 S9 K- p/ P* l0 f+ i6 R
static void __exit led_platform_exit(void)
/ _; N$ E2 U @{1 t8 R# s5 ?3 P5 x
platform_device_unregister(&da850_evm_tl_leds_device);
+ D% m# q" e! ^* b# v3 H R7 e4 C& q2 s: M8 ?& M
printk(KERN_INFO "LED unregister!\n");) v- l$ d- B. h5 F' b
}$ Q6 U$ R# Q- N) S- S: R( t/ V
; t8 I( j9 P2 U4 a% X' `: j6 m$ W
module_init(led_platform_init);: ~- N1 }6 y5 Q3 v
module_exit(led_platform_exit);# c i' F: Y, e
3 H3 J& i% [% F' M" B6 [. z$ EMODULE_DESCRIPTION("Led platform driver");5 X' m, @8 ]* h1 Y" O6 t! E) F
MODULE_AUTHOR("Tronlong");9 s ^& X- h+ Z
MODULE_LICENSE("GPL");
$ p% G8 r+ v1 ^5 _. c: ~7 d3 M# V+ b3 Y; U
|
|