|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 N+ f& i1 H' Z6 J5 l#include <linux/init.h>. {0 ?( x: V+ f
#include <linux/module.h>
/ X3 L& P5 o. ^+ F; v#include <linux/kernel.h>3 d$ O$ T3 S4 n# Q
#include <linux/types.h> @( V; x1 F9 L! P$ V
#include <linux/gpio.h>: d! R# W1 n/ N; x
#include <linux/leds.h>, K$ N# i2 `' G# C+ r3 t
#include <linux/platform_device.h>4 W6 u2 i9 d( `1 y" ~8 F) m
. ]7 g, x2 p$ s#include <asm/mach-types.h>5 ~9 T. r/ Q4 g5 z1 N6 C; O
#include <asm/mach/arch.h>5 D# c0 C$ Z# g1 u4 B2 g" h* x8 x
#include <mach/da8xx.h>
' \& b3 \" }. i# n8 A! T% @7 u- N#include <mach/mux.h>
: D5 c" h) @: B' I" K8 E8 H: V( R( z3 I) _9 m& R0 B! m! u) f9 L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" ^3 _ r* }( V; Y# D; c2 Y; G
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ F. A8 I8 Z/ ~% y: n4 i- }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): G5 p, J" N4 L. Y; S( @! u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- Q/ W: `" D& J3 Z q. b- N9 _) @
6 Y2 z0 }! X% z
/* assign the tl som board LED-GPIOs*/) Z: } i$ Q$ P( h. b
static const short da850_evm_tl_user_led_pins[] = {0 b& G; r* W, s ]' Y
/* These pins are definition at <mach/mux.h> file */+ i. ]( L# `" [' N8 w+ l" c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 F' g' _" u& b! i2 t -1
5 c [, M2 O. F, i4 g! F};
9 L% x% y! r4 c$ F' j5 G; ~2 r2 y) z! G5 {5 C& l1 Z9 z* \
static struct gpio_led da850_evm_tl_leds[] = {: P8 X# [& X% B7 A0 A4 ?: X
{
- C. \6 S B8 x .active_low = 0,
1 E4 D6 e# g: T: ~6 b .gpio = DA850_USER_LED0,
1 p+ ?1 W# m9 Z, S .name = "user_led0",
: k$ D: z' ^3 u( G7 |+ a .default_trigger = "default-on",: X, Q" v; ~* F9 I
},
% b; U6 T2 L* H" e" y; e7 Z {. Q2 J' V" z% ~6 H- ]: d
.active_low = 0,
# E$ v( Q- C# E+ i4 k2 m' d .gpio = DA850_USER_LED1,
: n+ X, ]1 O. q5 U .name = "user_led1",
3 u+ t' a. W% Y: R8 n/ R .default_trigger = "default-on",% a" G/ F3 f. y9 {) n% P
},$ L2 [0 p4 [; J8 c
{/ j! v( F+ N2 ~8 W8 F! w* L( f; [
.active_low = 0,4 O3 ^1 M3 i( P
.gpio = DA850_USER_LED2,
/ _& s9 w* M- c2 j( Q) Y0 ^% Z .name = "user_led2",/ R) L/ e* _/ B& `/ D7 [; b" Q2 l
.default_trigger = "default-on",
/ T- h2 f1 X/ c: K },
) F( c8 B$ `4 W t/ o/ S: c {- D- K- [( Z9 I* Y; X& f
.active_low = 0,% Z# D5 l2 v+ z- o5 l1 ^# O% v @
.gpio = DA850_USER_LED3,' N5 F/ U# D- ]# @9 R6 `' ^# p0 Q
.name = "user_led3",
" g. h" J' I, ?2 d3 N .default_trigger = "default-on",
2 A- @# P8 G$ y },
Y% ~5 v2 ]) x- E& j+ B I};' ?0 M3 Y0 s& }- r; x( k1 w
2 y& x. e2 x% t1 N, Sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ v8 s/ W+ [" W
.leds = da850_evm_tl_leds,: _9 v7 L: K0 y6 r
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 P9 Z8 b4 v1 T2 J. _1 p- Z0 A( M
};
7 G$ w' t: |( [# a
- z% j7 ^: z# K+ lstatic void led_dev_release(struct device *dev)0 r9 W1 A3 U! P+ \$ F1 z7 p& W2 C
{
0 y1 [# }$ _ L};: }0 q* L* N, Z) Z6 T. ~
1 I$ I9 T8 J; V$ X4 {static struct platform_device da850_evm_tl_leds_device = {
, Z6 q) G. x4 [" }; N) {3 D .name = "leds-gpio",) `/ _- f. X* [5 T8 h
.id = 1,6 O7 Z+ X+ H, V6 O6 q* _8 h8 u
.dev = {; r/ x# |* D, J# m' ?# \
.platform_data = &da850_evm_tl_leds_pdata,
$ V* W* F% D" K3 { .release = led_dev_release,- d& \, T$ L; m/ A
}* V9 [0 K# k3 A; y
};1 Y7 f3 m8 ^+ y! G1 q
' D; K% @. {, }* n- c: Gstatic int __init led_platform_init(void)8 }! a0 c& u$ w: `/ t
{
; ], b: \& Q# Q. r' { z. @ int ret;
7 C2 ?1 g1 x2 A) l5 r+ A#if 0. d& x; Z0 M0 W
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); i+ [- M* @& ^" W0 _0 e' A5 u6 }
if (ret)
. C/ Y$ y3 v& Q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
R' n# A! M) c# ?% q" a "%d\n", ret);
, h" J8 U% u# a# H- \ q#endif
& m# a$ ^# h4 y6 R! [/ I7 ~% l1 V ret = platform_device_register(&da850_evm_tl_leds_device);
( c& n, n2 v: d: K6 F5 j% A if (ret)
$ B9 Y4 d: ]; N) m/ i0 U$ q pr_warning("Could not register som GPIO expander LEDS");4 v; i; d: a+ S( w4 g% x
else! s; E& j8 Y3 B; t, g/ J3 l; A2 E
printk(KERN_INFO "LED register sucessful!\n");
( X8 p5 a; c, O2 `5 ~: k% y
) @, g& v$ p. U+ R return ret;1 l5 V, e z& D2 i E
}
6 g% I* y4 O) j9 a# x3 a5 M7 ^2 _2 c) Q: @
static void __exit led_platform_exit(void)( q. S7 t+ z1 |9 s7 r
{, C9 A4 N. r, c" f; T5 s* d# v
platform_device_unregister(&da850_evm_tl_leds_device);; u9 {: i: _) @# Q5 B6 O# k
% z! C" t3 a2 R2 v printk(KERN_INFO "LED unregister!\n");
( E( c* ]$ |: J}
& c3 b W, G7 x6 j
- \5 [+ N1 Q, t, o! H; P8 Omodule_init(led_platform_init);
3 \, h" Z4 |$ G" F, [3 q, ?1 zmodule_exit(led_platform_exit);, q! n" `5 I* U0 T: `* Y
/ `8 N; J- S1 C' Y' @MODULE_DESCRIPTION("Led platform driver");
% f% _$ `# K! P1 g% [MODULE_AUTHOR("Tronlong");: Y: ]- b$ |: F3 [- ?0 z( W
MODULE_LICENSE("GPL");- @3 \' ]8 O: m. y( n8 Z
7 B: H5 [! m' m
|
|