|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 W' k8 G/ M$ t2 c#include <linux/init.h>* ^& Y2 P$ F3 I
#include <linux/module.h>+ T. b# g; x& `8 X* Q# V1 |- P
#include <linux/kernel.h>
3 d. {/ ^2 `$ z) _) I2 W* j#include <linux/types.h>8 Y/ O1 k; V. H" L T8 a
#include <linux/gpio.h>: x' o& e/ W0 T6 Z# B- ^0 x" x
#include <linux/leds.h>
& O6 ~8 q+ O M, `/ i' u#include <linux/platform_device.h>% A1 _4 ?; _' a* E3 V
1 f8 h4 b+ M+ ~- J. J( C) O! ^, l#include <asm/mach-types.h>
' C' R# L) o' A. n. _#include <asm/mach/arch.h>5 n" y" d- Q/ Y* X8 C- Z- ?& O
#include <mach/da8xx.h>
5 o" H4 ?" T* G J% b#include <mach/mux.h>
/ ], I. L1 x/ a
* ]4 ^+ }! |, n1 }1 |4 v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) [9 n) y. x: Q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 y1 ^5 {. q" E& w6 u' P) B
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ c# T: ]9 ^" w' Z Z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: }! J0 j* F% K- T
9 h7 m0 O, @5 {/* assign the tl som board LED-GPIOs*/& c4 f& X+ a r6 @" q0 {
static const short da850_evm_tl_user_led_pins[] = {
, h$ |1 \& A3 b6 H9 u( ^- Y3 M& W /* These pins are definition at <mach/mux.h> file */
9 ?* \4 r1 g5 x0 y+ e# T DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ x2 ~8 S4 o$ l X -12 K% ?& n+ A" u% a3 f
};. d/ Y7 K8 s2 q; Y
( {4 s1 k3 e6 E+ k0 G1 \7 q* ~static struct gpio_led da850_evm_tl_leds[] = {% e5 N' V; c* e: ~
{4 z2 g8 x5 ^, o; ^8 Z; c
.active_low = 0,
$ e* C, O6 [4 C7 {, d3 W. q .gpio = DA850_USER_LED0,
N# \2 b$ g* u( b0 z0 x .name = "user_led0",) s: @1 W- G! X- e8 w. j6 [$ x
.default_trigger = "default-on",* h7 M4 R8 l$ r6 P( v v6 o$ {
},& `. S/ s0 p0 _% \( J7 l
{) N* x$ E0 \& i2 p" Q
.active_low = 0,
+ a2 x1 O) @6 a! V& L6 \; N/ S .gpio = DA850_USER_LED1,
$ x( M5 L. x) H; n" N" U .name = "user_led1",' J3 H+ u1 s d2 C. M0 \
.default_trigger = "default-on",8 c/ ~( ^- `+ R; O- f6 J0 W& V
},
. o% ^! r+ l9 Y6 o& u2 R; ~! M {2 w4 L+ X( l d/ s& }6 ^
.active_low = 0,
8 a7 X$ `' B1 ` .gpio = DA850_USER_LED2,
7 e) K' z7 K7 P .name = "user_led2",
/ O+ t7 w: j/ i- a .default_trigger = "default-on",( {2 U4 h- `, F0 E
}, m' f# b* K( g9 I' v
{2 D# G' A: ^" N( S. y6 T
.active_low = 0,
6 R% P6 @0 H. F5 p* T* `% X' U .gpio = DA850_USER_LED3,% o( `$ q- Y' C0 s+ V) U {
.name = "user_led3",- `0 S. y4 v6 w( {: B7 v
.default_trigger = "default-on",7 _ h+ B2 q$ Z! U
},' I4 t2 L; O% s, S, t
};6 R; C: I3 s% g# u4 ]
: k' T, r* r v1 {' `& u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 } y. B5 ^3 y; j2 p
.leds = da850_evm_tl_leds,
7 j- _! F0 ]# z7 ^0 S0 k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 y6 T% _; F! b+ x- p, V) D' Y
};" e+ l9 O# m- H6 @) p
+ ^9 f9 w8 V) C* R
static void led_dev_release(struct device *dev)
. O' d' w+ {+ W" H) s{* y y' V1 j* E9 ^; S t: t
};% a# T& I" \0 A6 \7 K8 o
+ t4 M9 g* i0 a+ D+ w
static struct platform_device da850_evm_tl_leds_device = {+ _6 C$ Y: y9 }9 I8 M% h
.name = "leds-gpio",7 E. L; E7 q# z- C
.id = 1,. ]+ i4 b+ s- Y9 F; p5 x9 l: m1 {2 w' ~' p
.dev = {6 @( C2 a6 n( F. H. d6 t3 f* {7 c
.platform_data = &da850_evm_tl_leds_pdata,
2 ^( u* @" }- N. u( s) u+ l) q .release = led_dev_release,
C9 \0 d4 [* S! U% Y0 P$ B }
( ?1 a7 T) |1 @+ \1 N};, f! s' n( t# I/ L0 e
5 `' o$ x, H0 O% T% R: t, Ystatic int __init led_platform_init(void)
: d$ R( C" J6 V' `3 A{8 f4 a- t: C1 I4 d, b$ l
int ret;% M! l6 \% Z D' y5 X* }6 [
#if 0
. o# ?7 I+ ^' U# A8 t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) L! i- Z3 ^; S if (ret)
& L3 V% `5 N8 a/ v/ n# E9 D pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' R8 D1 V2 P8 H( ~( `
"%d\n", ret);
$ o t* h9 U& K! q$ |! w#endif' e9 Q) R2 ?0 q/ ~6 Z6 Q( A. E
ret = platform_device_register(&da850_evm_tl_leds_device); s- l8 B: j q
if (ret)
; ~& W7 S, Z: X- W* m pr_warning("Could not register som GPIO expander LEDS");
2 n9 I" l( O' ?8 r' N else+ t; `. o3 J7 X6 i
printk(KERN_INFO "LED register sucessful!\n");
9 F: h+ c# n O) D3 i, @) Y/ o& s. g* q- N
return ret;
( Z$ H7 }% N& j: ]9 q}, @! T0 l8 x& w ]4 A9 q2 H
( w1 Y; `1 u% {$ ?: x) `8 y( @
static void __exit led_platform_exit(void)
1 B4 I* _3 }* P/ j$ h7 c{
6 U2 }$ a3 j' R' g! L platform_device_unregister(&da850_evm_tl_leds_device);
- _: o4 y4 w2 D9 y
! s: J, W/ w J% s/ I- U printk(KERN_INFO "LED unregister!\n");1 K( F" V: `& }7 \: @
}4 G3 s3 h$ W3 J# y' `4 Y
- X& ^7 V2 o: S& C) D+ i& Y
module_init(led_platform_init);
7 n% X/ @+ S! E2 ^: a3 kmodule_exit(led_platform_exit);* { L6 N: a: G' L- E
S0 a+ t p* y4 A5 n, g; r# ^
MODULE_DESCRIPTION("Led platform driver");5 `+ s7 \( I& I# u' d2 _2 f2 R
MODULE_AUTHOR("Tronlong");
- v; h3 T/ w( v' l$ n) MMODULE_LICENSE("GPL");
" O6 Z, Y- ?; ?& j
& d8 j9 T! e3 Y" w( m# A |
|