|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ Q. [9 i5 N" n! g9 S" g, I
#include <linux/init.h>
7 H! \: G7 ~0 L! N#include <linux/module.h>
( k6 \, n1 ^) D% ]#include <linux/kernel.h>
! f$ X6 N- {9 H" {2 M#include <linux/types.h>* S3 j: S' i! F$ c0 b
#include <linux/gpio.h>) V r- R* z: D" I) X9 S' o. o3 F/ |
#include <linux/leds.h># k+ V3 ~. _3 W; O* H) E
#include <linux/platform_device.h>
: ^" i0 d8 L) c9 r7 h, w# [
8 @, _0 h9 Z1 _( D- ?1 V* Q- p#include <asm/mach-types.h>
- t# P, N$ M6 `+ N: c; R#include <asm/mach/arch.h>
0 g3 ? @/ |) Z% g* }# z#include <mach/da8xx.h>! j1 h. }. p$ x( n
#include <mach/mux.h>/ H1 C0 o% _8 E0 s# z
' _0 c) E1 T) t4 a" m: X* L2 y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 d$ y9 D( k9 K" s. ?! t- s. G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 b1 U' T4 n& v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), b0 d. @: N C% C: l6 b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 M% g, @& u; i% n2 ^
1 N- C& Y, B- `6 Z' j
/* assign the tl som board LED-GPIOs*/
7 r# b Q# M5 B) ~( p# v3 \static const short da850_evm_tl_user_led_pins[] = {& U+ m3 Y9 x: y: |
/* These pins are definition at <mach/mux.h> file */9 I2 x; K9 I2 C
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 R- M" k. ]: j; D
-11 d9 X8 c9 b \8 s/ V( H+ _
};
4 h+ F3 u r- K) K h
4 z# y; V. g0 }4 sstatic struct gpio_led da850_evm_tl_leds[] = {- x" h' R1 X; u4 Z X" Q- @8 u7 b
{
9 f' q- z+ ?& v$ D! i* c0 A .active_low = 0,
* T' s+ ~ v; \1 U' v .gpio = DA850_USER_LED0,
6 Y0 _1 I9 A. ^8 ~, a1 z" L) h .name = "user_led0",8 ^+ l# e1 \, C7 K# ?4 H/ }
.default_trigger = "default-on",4 k( L6 n; m" _! w" u
}, j" O3 W* g4 \: E3 f" \- d
{6 x: q' _( H6 M. V2 k
.active_low = 0,4 Z8 j1 A5 c; J3 A% b
.gpio = DA850_USER_LED1,
4 v7 g) l6 e+ A& y+ U/ X7 l .name = "user_led1",
8 V8 \& |* _5 j6 F! J5 M( i .default_trigger = "default-on",
S/ d# a0 F' J& o+ D },& S" L( x- e* A4 R# `( e- a. |
{% s, g( j6 C" x: }. D3 S( H9 h
.active_low = 0,
& w; R6 T. r8 T4 ` .gpio = DA850_USER_LED2,
/ X: I4 X8 I J8 ^. [ .name = "user_led2",
7 a1 ], q/ d! O- {' C: z .default_trigger = "default-on", c/ M6 U7 z+ e0 [/ M3 r$ |* X w7 D
},6 s% R9 J7 y _- H' O; e
{9 X3 E& v& C9 T% O/ @# z2 a" ]0 ?* f5 `
.active_low = 0,9 b B; |4 b8 W3 q
.gpio = DA850_USER_LED3,
* H# U' `/ M I7 e7 i2 b0 F .name = "user_led3",
$ ]( l# t5 k9 L1 B) `: q0 q .default_trigger = "default-on",& s4 ]. C/ f. \6 z3 }: S# q' {
},
8 I! v/ P" }1 A' F# T" A};9 Q7 {( L1 h6 j( J) I2 d5 o
) z% o# i8 }( w+ r- K1 d5 r5 J
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 s5 z/ K9 Y C/ E" Q .leds = da850_evm_tl_leds,6 O2 ?9 ]! w z' A! F9 J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# B" {+ m; v! H% ?- v4 I' T2 Z
};! R1 d/ a, @! ?( }; \
/ U4 d1 Y# j. F* w+ K- f; E
static void led_dev_release(struct device *dev)
7 p/ e* r& Y5 L{4 d+ b! j: ]/ F' [1 a! R
};' }3 e7 N( m; X# e( S
; ^/ H8 N" P: `! z, K
static struct platform_device da850_evm_tl_leds_device = {
" m% _6 W7 q# o/ f* P8 n) T1 m( l% C .name = "leds-gpio"," T6 [/ f2 H1 U0 V( G5 j5 z9 V
.id = 1,
0 |/ H6 u7 e: L% x8 v0 C/ Z .dev = {
4 R$ [4 D" c F# L; ]' P .platform_data = &da850_evm_tl_leds_pdata,
/ Z6 f! U0 s" e$ D$ k .release = led_dev_release,
% r0 b) D" B7 s1 O; \) K3 q* m& F }3 H- j! U( {5 W) n4 k. u
};
, J% N4 q; S+ O* N2 W
6 h4 z/ H! m- q! G( {% e" rstatic int __init led_platform_init(void)
' N$ _; Q' z# ~8 m{" U; h& M2 ]" q: [- D( n" n
int ret;
% e, H& h' q: X# ^- }5 p( a4 m! w& R#if 0
4 l/ E% p1 B4 J: | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
X; x1 F/ X5 B* h+ H7 l* r3 w7 M if (ret)
3 Z8 D# O( e# K+ V pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 A' R- y/ t- f4 b( V$ Y+ p "%d\n", ret);1 H: [/ A( q# B, u! F
#endif/ @; i$ [6 v9 P) p n
ret = platform_device_register(&da850_evm_tl_leds_device);
! {; V5 G4 e" Q$ b. F* F/ f if (ret)7 d$ W4 k8 V' z8 Z! m
pr_warning("Could not register som GPIO expander LEDS");
7 k5 Q( C1 c8 V9 s" p3 p1 e N4 s1 i else9 U. s9 e4 |0 m+ y% X& S5 X
printk(KERN_INFO "LED register sucessful!\n");& ?4 s+ p& S, [/ |9 V
, u# e$ p3 L) d9 ?6 m* U% O
return ret;
, M( B5 M) T( p- \# w7 g}# s; B g- m5 }% d8 p
; [% `* Q: B! T8 I9 o' mstatic void __exit led_platform_exit(void)
3 O$ a( Z0 U0 `. R+ |' K{" g6 z, {' E8 t0 K3 G% g1 h
platform_device_unregister(&da850_evm_tl_leds_device);* e( s$ R0 w6 _' A
! ]9 ~" L/ O/ v! O printk(KERN_INFO "LED unregister!\n");
- ?( b+ C0 \; }' v4 {}- c. J) K8 w0 P: [' b1 \
0 V' F' s) W% i6 `$ s0 Imodule_init(led_platform_init);' F5 H- Q3 Z; q& \# n
module_exit(led_platform_exit);
! z- g C: Q/ W0 i ?
8 j' t* g8 a9 a* A: |' yMODULE_DESCRIPTION("Led platform driver");
. G# F9 ~ A; l: b9 t5 ZMODULE_AUTHOR("Tronlong");- `. T' w7 W" y) d
MODULE_LICENSE("GPL");6 U1 Y' Q2 ~# J3 Z3 L& ]2 G( _4 Y
+ T1 ]: q" O" {) r6 s
|
|