|
求大神给下面的程序做注解,请稍详细些,谢谢。: Y9 ?. Z6 [ y7 g
#include <linux/init.h>0 A! h& C: l* e# J; [
#include <linux/module.h>
5 m. U' x1 v9 ?+ X1 r#include <linux/kernel.h>! n' n1 v$ x& R& F
#include <linux/types.h>$ {5 ~. E) [9 W% b M( Y
#include <linux/gpio.h>
& S' t# N1 \6 V: r. \- s#include <linux/leds.h>
; u* _# `- a3 u% x3 f#include <linux/platform_device.h>6 C( v. B2 P. d, T V2 o
7 R% a9 ]' _& z4 S% G7 c0 `1 d8 A! M) J#include <asm/mach-types.h>
+ Q- Y8 i4 ~6 i- }#include <asm/mach/arch.h>) u9 p/ |4 r* N, K7 ~
#include <mach/da8xx.h>
1 r4 e3 |4 x6 ~; @4 A#include <mach/mux.h> Q" Y! \& h1 _& w; f8 q) l+ h. Q
0 k& ^1 [* H# ^8 R! k* |" g#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% I- d% |$ e) }7 w! w! a+ ~0 S$ [$ b
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 j) }* x/ h% ~#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 d. b& x' E7 Y, [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) L' ]4 v* V* x% Y8 v/ ^2 ^
* W5 T9 o0 Y1 m5 E0 X4 ~/* assign the tl som board LED-GPIOs*/8 N- t! R1 I! S2 X0 R/ r
static const short da850_evm_tl_user_led_pins[] = {
0 ?+ O6 K |( E6 Y /* These pins are definition at <mach/mux.h> file */0 [' K* }! k8 D' W, Y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' i2 P4 D' W/ m( H9 q- V; O
-1$ p* E6 l: _+ H, ~9 b7 ?' M
};, I T6 ?" ~1 z* Y! f( h, w
0 Y- @1 V3 R' _& F/ hstatic struct gpio_led da850_evm_tl_leds[] = {
% r2 r+ r: J( N. w# m: } {5 ]1 i3 p! I/ Z6 R2 i8 }9 G y
.active_low = 0,2 t( s2 ?5 j( d! f" l# a
.gpio = DA850_USER_LED0,
) |& s6 J+ H/ _9 j7 T .name = "user_led0",& g/ j% _: K& @
.default_trigger = "default-on",
% m+ _& x9 R3 O. d4 b },
9 c) I* P9 I6 a& I; r; V7 X# P {# o9 f; @/ F' g# a& K$ \
.active_low = 0,+ Y+ \) {) R p
.gpio = DA850_USER_LED1,- ]/ C, m, f8 |: Z9 S- m2 Q+ K
.name = "user_led1",
6 H- L+ l: h& Q5 i0 ^; o6 i5 o .default_trigger = "default-on",
; C+ Z g1 G1 V8 |) X9 a },
! O: {9 j: V) g: U# c {
* [9 F- T5 p$ c# v6 m6 P& a) H0 y .active_low = 0,5 L# w/ h* n! ]+ ^7 [& ?$ {. }) {+ {
.gpio = DA850_USER_LED2,0 m( a6 c4 R& [6 }
.name = "user_led2",
" S6 C3 v% @3 t" f+ C( e1 t .default_trigger = "default-on",
2 y6 q* y7 g% J# k* E) G G },
! K% ~, B5 W+ i4 e {
7 z( _8 e) s9 a9 F1 h .active_low = 0,7 Y7 t/ u+ L( W, o- { s* u
.gpio = DA850_USER_LED3,
; d8 B+ R0 Q! @# \4 f: w/ h8 U .name = "user_led3",
( C: @5 s' o. q: O+ s) E0 X .default_trigger = "default-on",( c# n* C7 W, p6 p( n$ ~
},: q- ^8 b9 o0 k' _5 C
};
( @8 {0 z/ f: ^( Q" T! d: p
' O2 _- L$ b7 v! rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' V' ?8 J5 R: {0 y5 k$ G
.leds = da850_evm_tl_leds,
$ r8 H) j: o7 g3 [ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 h. J a7 u# b" O m8 i};
8 ~* v: |& J/ p
" ^5 U0 X4 e6 S: O$ Ostatic void led_dev_release(struct device *dev)0 T0 f: m, g. P8 ^+ Y# }8 Y
{$ ~. ^9 y% m$ u
};" k+ Z' R# [3 O0 W2 v& w
, s0 |( X: t/ T8 t9 H* L5 lstatic struct platform_device da850_evm_tl_leds_device = {3 t7 v/ h% p% }0 P7 s7 N) v
.name = "leds-gpio",/ U" ^$ M& A/ I8 i# y ~1 q
.id = 1," Z3 v8 B$ h3 H1 e
.dev = {0 N8 d4 g) b! M) v3 t
.platform_data = &da850_evm_tl_leds_pdata,4 K4 X+ B/ e- B) Q) C
.release = led_dev_release,
5 _& [: a2 U* m. U0 p( S }
X n3 e! a5 y, _) N$ K};$ j. q" t$ j" M: ?
1 Z% Q4 q# v# F, \. Q; n k; b8 istatic int __init led_platform_init(void)
5 B: v' ], |3 y5 T. F$ G/ O{
9 O% Q& N$ l/ n int ret;
. q. c$ I9 v0 z3 g& r; B3 ^#if 0; f& X, l7 x4 ~4 v. e) f+ e
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) O: o- g; _0 i: o9 R if (ret)5 B8 W2 `* b' S3 s9 R% E! W p- Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 u, X' r2 j9 y' E7 L; N
"%d\n", ret);' |6 M7 b, K b. T$ y8 M5 v
#endif
- [! r; }, w6 o7 v0 n' o5 k0 ] ret = platform_device_register(&da850_evm_tl_leds_device);
4 ^+ C% a' T/ W if (ret)
+ P" n- P9 V6 ^0 j5 U' h6 o pr_warning("Could not register som GPIO expander LEDS");; X$ N; w0 D. z4 @
else
+ p" L) e Y- n printk(KERN_INFO "LED register sucessful!\n");3 F: N, C3 O0 C9 i& j; l
* a. p: E; ~- k% a5 J) g2 w% i" { return ret;0 s6 C7 C% s/ X7 b
}1 M* w+ p! r% Y: n# ?, \( A
/ F) J' f9 [( gstatic void __exit led_platform_exit(void)
& [7 y9 A2 S" I' S5 K' }% h: f{
9 U( G& J9 N+ t1 u+ K. X2 R" R platform_device_unregister(&da850_evm_tl_leds_device);
! p- X! O8 r$ ~) O! ~: d/ P: B2 R
* f7 h/ H3 [7 B1 f# A# H0 o; X. R printk(KERN_INFO "LED unregister!\n");
( y) n6 C: f* e7 P, O} ]) _* _- C4 Z* p
) E# }# ~0 }" Jmodule_init(led_platform_init);# J! I1 ]( x/ `1 B
module_exit(led_platform_exit);
/ Z! @; W7 ^+ a: s% p# Q" g) ^7 \
: i k8 W1 Z; d+ a7 k# DMODULE_DESCRIPTION("Led platform driver");
' G4 e; E C- s* W; _MODULE_AUTHOR("Tronlong");
) |& E3 O3 F- qMODULE_LICENSE("GPL");! Y# x: U/ u6 V3 H
) m" d c2 T2 u% F
|
|