|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ F3 t( Y, W' L6 b
#include <linux/init.h>; l8 |. m8 D2 \8 s; p# q0 V" e
#include <linux/module.h>
& F* v$ R1 [7 ?- V. x! I% H5 q#include <linux/kernel.h>
% e, j8 f- f P; Y! l! t, }' V#include <linux/types.h>
' o- ^ s, V0 K" o#include <linux/gpio.h>5 R0 l9 M+ P4 Q5 J3 N" T8 T
#include <linux/leds.h># o2 N/ X& Q9 e, S o G
#include <linux/platform_device.h>
/ f3 D6 S9 B2 B2 e* G: |/ @ [( t/ h; q, ^, \3 I% a- Q/ y
#include <asm/mach-types.h>
! E9 q' E c8 p$ u7 k: p/ \#include <asm/mach/arch.h>" D- e" _" m; N
#include <mach/da8xx.h>
7 _: P; D1 V; b" p4 Q4 f#include <mach/mux.h>
% t9 |$ a! m# ]6 ^8 p( f+ J& J! u7 C0 p0 c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 w. q! T- P. V3 a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 R/ N# j5 p0 z9 N0 e! n- d* E- k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( E2 q( k$ X( S4 T' P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 n p1 t% S& x0 f: U) Q V) e9 Y$ N- i: b! G6 p" w/ e
/* assign the tl som board LED-GPIOs*/
1 m8 H3 E4 F6 V7 O" q& kstatic const short da850_evm_tl_user_led_pins[] = {1 b0 Z0 Y6 Q2 ~+ o( @; y
/* These pins are definition at <mach/mux.h> file */
4 O5 H* p' L( }! Q2 G DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( f' J; |% Q! \$ e; o. { B
-18 _ V4 `$ g8 ~' f
};
8 ?9 Q X& z/ ?; E7 @" |* i3 t' @. M% n
static struct gpio_led da850_evm_tl_leds[] = {1 f+ w& d( X/ b( u% y
{
/ u% x2 @3 R2 y9 w+ ^ .active_low = 0,
7 S' h6 j3 Y5 v0 w$ ^ .gpio = DA850_USER_LED0,9 M/ u$ H2 i3 e# s' B
.name = "user_led0",9 |7 x. i$ p1 o/ O0 z
.default_trigger = "default-on",
5 Q g2 G9 t8 r% p* t; O },
3 K3 q% h3 l$ b8 g7 b; X; d0 t {- R }+ u. ~; G: \7 {
.active_low = 0,
) s# s* Y( X8 y/ b3 e; J3 k; S% o .gpio = DA850_USER_LED1,
/ w6 {% s6 v. Z3 X .name = "user_led1",
, n4 y: a7 j/ I3 u, n" D .default_trigger = "default-on",. k5 T( i- \/ @5 u
},
4 m* l0 _% i1 d/ H0 e1 b% ]. C {4 N: M8 O {3 q1 _+ X5 {. t6 J
.active_low = 0,
/ A3 c8 t% i2 F4 p! d .gpio = DA850_USER_LED2,
* v) j* B% g5 X# z .name = "user_led2",
1 ]2 ?2 X4 y! Z9 ~7 z" O3 W! W" r .default_trigger = "default-on",/ Y# _+ o) q2 N2 p' [% L) Q! w
},6 d; x$ n. O6 Z( x; {
{
% U) d$ I$ }* { z5 M2 P5 Z .active_low = 0,0 I. P) ?, E* G9 `) ~& q P/ ^2 X
.gpio = DA850_USER_LED3,
" E! M8 H' \, B- `1 D .name = "user_led3",
+ P1 j l0 D- @0 x; r) y .default_trigger = "default-on",
% @' N6 i9 U) c; [ },! L0 M: ]; g$ O+ e
};
+ P5 U4 K+ G0 r
o9 k: a* h# G$ `' Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: `; d- K+ L1 J- D& ?, v; t .leds = da850_evm_tl_leds,9 v2 J$ u4 A3 H; `8 p$ Y1 E3 h
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ p: R- x" j5 K, R0 c};
5 X% ?- b' s/ p: z; C& {' U& J
" A9 q' X; C+ V1 a. I3 B! v Cstatic void led_dev_release(struct device *dev)
: Q9 L% X) U8 }+ N# c& x{( E. I# A: }/ R4 }" _
};- m, |+ e; ]2 j8 ~* y
1 b% h* _& ]2 l# ~static struct platform_device da850_evm_tl_leds_device = {; L% U! w4 Z6 {% M& B8 j
.name = "leds-gpio",1 J" t8 g, D: r4 ^4 L" g' N. t# u- d
.id = 1,
2 @+ l5 E1 D/ \( R8 J .dev = {
" h$ x6 r9 P5 [( t* X" l .platform_data = &da850_evm_tl_leds_pdata,
$ n8 G5 _4 D K6 n+ g" K$ y( m .release = led_dev_release,$ o/ }- b# x+ o: k
} j# V5 |) B: |+ |' [
};2 \9 U; z& T' V4 u, M# Z: ?* P
* f( j! v: `% k0 g
static int __init led_platform_init(void)
& }& o/ {0 K+ x' |; h{. J: V4 [6 Z4 V6 e# ?; N& `
int ret;
0 ]! @8 O; g- Z#if 0/ @9 ?" X9 [7 s6 q6 d+ v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, G6 c" F7 _! W# o% m
if (ret)
; i7 J% W" z, ]% n, |% t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, j9 Q, c9 B3 X* U "%d\n", ret);
2 h0 Z$ F; Q3 b, U#endif
1 @4 ^9 i+ e5 \! C ret = platform_device_register(&da850_evm_tl_leds_device);
: f- u- g2 m' t( h0 @ if (ret)
" C( b% O/ J* u: D; l7 k8 m pr_warning("Could not register som GPIO expander LEDS");
% |% p9 E, Z, G) o1 G else
/ z2 n4 I( D) _+ | printk(KERN_INFO "LED register sucessful!\n");+ D! z3 g4 D; d& j8 r h' @6 O
4 k; A. p. V- `! _1 M! I return ret;, p( N4 G p8 z1 d( ~- H
}
" c% w& Q3 `: K* `; N8 M Z1 z7 h. u! c9 [5 j* \+ z! c& I# \- h
static void __exit led_platform_exit(void)( t6 R/ \# l6 {. f. F6 H+ w# d
{6 J$ w, d$ H; N# e, P
platform_device_unregister(&da850_evm_tl_leds_device);/ N7 m3 F+ Q% Y: E! |
! D, u) }/ J4 u; U. F% E
printk(KERN_INFO "LED unregister!\n");( y9 \. @/ e. K# S
}* a* h' m% M- H+ o7 Q" @) r
: f2 m" b; M% K$ B2 T1 A$ c* w4 v
module_init(led_platform_init);, ~" f7 K# p: W( b4 R+ a& J
module_exit(led_platform_exit);3 L6 }: ^0 f/ l8 w4 H- {( E& x
6 u+ a- a6 a% {3 t5 g w
MODULE_DESCRIPTION("Led platform driver");: d- s2 N6 S7 m# a7 n; ?
MODULE_AUTHOR("Tronlong");2 k6 Y. X. L( B# ]" {9 S3 p
MODULE_LICENSE("GPL");
. T7 W2 L, D- ]) p# v/ I# {; t# R
7 v/ C4 ? W* E& Y5 s3 R1 K |
|