|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" s; W5 e/ k8 P7 m. b" ~
#include <linux/init.h>
. V$ k8 M, e6 w9 C! ^$ [% ?/ |#include <linux/module.h>9 a# q) M: ^9 h! \, l. C
#include <linux/kernel.h>/ @! @! o, _6 k* C- g/ S P3 {. b
#include <linux/types.h>5 ^9 ~: N! ^" q) u, ]
#include <linux/gpio.h>
T+ o( _: E; O f/ p+ f#include <linux/leds.h>: G. D+ P l @# C* r0 z$ a/ k
#include <linux/platform_device.h>
8 I& r p" i m
. @1 s0 n# ~- \; _: p6 k3 x#include <asm/mach-types.h>
4 O0 P# s$ U7 J+ a3 v- K/ m#include <asm/mach/arch.h>
& O. j. i0 \% B#include <mach/da8xx.h>
3 ?+ |% ^: @- s) j s# X; f" A' W#include <mach/mux.h>
) A% z$ }; A, P$ O
; u. h' ]* c! k6 e3 x; C# ?#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 t* S' d9 w: { x2 `: ^#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. o: G! I( g6 Q" E9 G' L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ k' a0 P+ o* l. e' W' R* G+ B
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, b* I& E" P8 _# |
4 B2 i; a5 ?5 A9 \' f* ~# S( h8 O8 Z/* assign the tl som board LED-GPIOs*/' r& a# J$ ^0 @5 w- g
static const short da850_evm_tl_user_led_pins[] = {
7 f, p" ?. g: ^3 j /* These pins are definition at <mach/mux.h> file */' u# J+ l* U A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ e7 A% q- W4 }# d/ m- r/ R- h -1
1 e1 M7 |9 P/ w+ t$ n};& s, I. A/ }! ]7 }
" B' V" s/ K( i% u5 A+ d& ustatic struct gpio_led da850_evm_tl_leds[] = {
4 u& C0 C! b1 M3 E* _2 W {6 Z- Y9 p P4 X, k5 i8 Z e: v2 S7 [( Y
.active_low = 0,
9 @( d! `6 ~" p, x .gpio = DA850_USER_LED0,2 V, |( ]% G& T$ x- M+ x6 F# F4 C
.name = "user_led0",
, ~% M; ~# H5 @0 h9 Y' k2 w .default_trigger = "default-on",, l: [, L% d" \2 o+ t4 L
},7 M6 @6 U8 P) {/ V
{
$ P) i9 `5 u6 ~ e- @" O .active_low = 0,% v' R2 D1 C, m4 Z' ^
.gpio = DA850_USER_LED1,1 W5 m: b8 |& M% O" a* W7 O
.name = "user_led1",
: A3 E d4 V, q9 ?2 S .default_trigger = "default-on",
6 e+ U* U% b# F4 o- _ },- t! X6 S4 j( A7 |! `, O. V
{& k' Z4 R" P2 T; M7 j5 l% N
.active_low = 0,
2 o8 R$ k4 D! v! B+ s, R .gpio = DA850_USER_LED2,
& l' b. t$ ~( W$ _% o1 f- | .name = "user_led2",
1 C& W$ f6 f0 Z0 |$ O f, B# i .default_trigger = "default-on",
$ l6 a% V6 N5 A k: W: C },# Y& `8 S# z- U- v
{
) f7 V. v* A; D3 X' o2 K .active_low = 0,
) _* b; ]" }* A6 W; ]; s' V .gpio = DA850_USER_LED3,/ V! }3 S% d! v4 X Z; M
.name = "user_led3",; |0 E0 k' J( ^3 D3 [
.default_trigger = "default-on",
( F, D9 a9 I! h/ o! V3 r( s },/ R$ `3 ?, T/ r& b) a2 p
};
s- K. E2 h& Y5 X+ W2 b# r" _3 k; M, o" n
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# M- v$ }4 }- x0 H+ g& u2 j& H
.leds = da850_evm_tl_leds,
' }3 a+ _2 [0 d% j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
r4 l1 |; W* O- y. r: @( f6 Z};
6 w3 l1 }) `1 {9 |/ q
; r; b# G8 H8 \4 s$ Hstatic void led_dev_release(struct device *dev)( _1 z; L) u) \) S3 Y9 j& ~; d& X
{" b1 `+ w# b+ K
};0 ]9 ]3 T1 r8 I# D' S
7 v. l0 [6 }3 d' X* V3 n
static struct platform_device da850_evm_tl_leds_device = {& D/ O' ]1 ?3 D" z. Y
.name = "leds-gpio",
: A5 w# i5 B# k& Z; o! e .id = 1,
) e/ i1 a6 B8 d) P0 c .dev = {& ?2 p9 [1 @9 H& R) V" y
.platform_data = &da850_evm_tl_leds_pdata,( P1 W) ^2 T: c4 [5 A
.release = led_dev_release,' j1 \4 G$ z' Z
}! M, F$ ^$ n* H! x$ p3 o
};
: }7 I# b! f/ p6 U4 a& l& v9 o
* E7 c+ m0 H3 I9 x: N; `" ^static int __init led_platform_init(void)
; t* l- Z8 y1 ^{+ c* P8 s7 P) w- _* h' e
int ret;
# \8 N/ z; T2 k6 t" N" @# r" i#if 09 k! Z2 b: m# i: f
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& N& M. j( a, c; u if (ret)
; J8 X9 v3 ~0 b( A4 v2 S& e5 K pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( p: l; u0 L4 `
"%d\n", ret);: J2 X8 L! g, d5 q% M# k
#endif
% d7 D. s- _7 g) q. k1 _$ s7 K ret = platform_device_register(&da850_evm_tl_leds_device);$ E8 ^4 K7 p( {" G3 N7 [% L
if (ret)
. u( `/ P: C- f Y; t) K1 C, O) p0 A pr_warning("Could not register som GPIO expander LEDS");7 c, J+ R$ f* Z+ q
else
! V% ~! X, S+ {7 B! O+ R printk(KERN_INFO "LED register sucessful!\n");7 o7 b' d4 l4 d# e7 Q
' P5 C7 ?6 i8 p- p! \& m return ret;
6 Z7 f9 D5 Q8 \9 N}
1 p6 T+ A) K0 y1 ^2 [& i5 _- S) g3 Y- [( i& Q
static void __exit led_platform_exit(void)
/ x3 X1 m' G z7 ~& K6 @; i# k- m{
3 P& B) q) {! z: s7 F$ x% F/ q platform_device_unregister(&da850_evm_tl_leds_device);/ E6 q6 o. }' m, R$ L/ n
0 b& j3 g! O0 b3 q \" k2 S4 ?: c# s
printk(KERN_INFO "LED unregister!\n");/ {! L; T; a2 F" a
}
1 c# P5 [8 C0 J2 d( w9 O# v, G' f/ P( a" H! T5 Y4 f9 _
module_init(led_platform_init);4 G; ~9 M9 d" n/ G1 T
module_exit(led_platform_exit);7 O ^+ \1 }( b8 X3 J& N1 f
9 M( Q4 G1 |" I- K) Q$ v9 {4 F
MODULE_DESCRIPTION("Led platform driver");0 z, I W+ o- [
MODULE_AUTHOR("Tronlong");" x+ n: N7 F4 k' ~0 f
MODULE_LICENSE("GPL");8 T* U6 h3 E* Z$ K. v' o% _3 l' M& T
3 X" j* O7 C+ w( b
|
|