|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 d0 m; P5 m$ K k, R
#include <linux/init.h>) z1 V. x) U% F' \8 ~. M- z e
#include <linux/module.h>
" S% d# F! S3 p5 N& R#include <linux/kernel.h># w8 u6 W! a9 t; m
#include <linux/types.h>; F ~+ q9 r% E1 c7 k; T8 f
#include <linux/gpio.h>
# a7 s8 G$ A% g4 m9 P- @" y, }#include <linux/leds.h>
# Z! |4 W) C7 _1 p8 Q#include <linux/platform_device.h># ~. |# p2 U/ t5 j) ^5 | }( J
) V j% f/ D9 v2 i1 V& U#include <asm/mach-types.h>
4 O. ~/ G" I* H3 b. l#include <asm/mach/arch.h>
2 R1 G0 x6 ? J- y: S" i7 _! P) D. F#include <mach/da8xx.h>
) e, t" f& ~' r4 }: A" M7 Y7 H#include <mach/mux.h>
7 z$ Q3 m. h% |
8 U- M( r# v' p# n! W2 J5 k7 i#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); O2 U7 P9 y$ q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ C- v* N3 T c& ^+ P* y3 S* G
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ C3 ~7 F W( d#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# Q4 j4 e0 D/ g0 ^& r8 w
6 W4 P$ j0 k, `% n% o/* assign the tl som board LED-GPIOs*/
4 W( A; G6 U9 p5 S: H; lstatic const short da850_evm_tl_user_led_pins[] = {
8 n. A- o8 f# S /* These pins are definition at <mach/mux.h> file */5 b7 R% [; f4 w% W$ ~ V
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* _: d; M+ c, [% ]3 Y! n. F; Y
-1
8 b$ ^3 U3 d7 h& [* M' e};% G5 h3 t) ~! D' O7 h- V4 {2 z
# Z1 c5 R! r" m0 Y+ q
static struct gpio_led da850_evm_tl_leds[] = {
% y, l' K1 W+ u* e0 e( i5 \ {
: s& x! Z) D7 S8 I .active_low = 0,
$ t/ x" X" I) a* r j* C) P- W5 I9 v .gpio = DA850_USER_LED0,
& D( V% L9 Q$ U# | .name = "user_led0",
% @$ ]1 b* y. |3 b; h .default_trigger = "default-on",! V5 ~& D6 W0 `, p
},
6 r1 H& s5 f) u! o {8 V& e. ]+ X: A- F3 | E& ~5 B% o) ]/ m
.active_low = 0,; t+ z/ B7 A8 n/ L
.gpio = DA850_USER_LED1,
. T4 r5 F5 |! r7 e& q% P .name = "user_led1",
4 f) Z) P3 `9 W; O0 N .default_trigger = "default-on",) z2 q7 s0 q2 |9 q0 d
},
& ~+ n( D: {4 q {
0 |4 R6 ^$ T8 H! m* i .active_low = 0,+ F$ R4 U* O/ o$ d; U
.gpio = DA850_USER_LED2,
0 q: G9 h: _" @8 i .name = "user_led2",
; A; l) D& J0 B: U5 ]: ? .default_trigger = "default-on",9 z6 u7 z$ t$ \
},
: ^+ \: u" }9 f {
/ Q. h9 q. k" w3 L E; i .active_low = 0,4 S8 e s& j2 B+ J
.gpio = DA850_USER_LED3,5 g v$ a3 g" b ^" p) |# n
.name = "user_led3",
9 e b. T8 s, ~' y4 G' I* A .default_trigger = "default-on",2 a/ b9 p/ B# x/ n1 T9 O9 p
},
* y* q Q- C: Q7 P5 s};- I4 r1 A1 M+ s4 M. F: G: I8 {
0 c& U e% E1 Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) E2 G% d- C7 y# ~- c; T9 J .leds = da850_evm_tl_leds,6 N& F$ y* E* h
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 q- F" C U, }7 @
};1 q" Z2 D* _% P |# ?6 N) X
* n1 G& \- _0 H% l' p2 gstatic void led_dev_release(struct device *dev)5 r; E3 Y6 l- P- p ?
{3 r2 q3 h9 H9 d9 n$ N1 X: `7 p
};5 m- v% E3 [0 ?$ _9 I0 K7 g
6 z$ ^/ Y% ]7 i7 O( y a4 ~
static struct platform_device da850_evm_tl_leds_device = {, B6 L/ _/ P& [
.name = "leds-gpio",
1 D9 K6 |4 `/ j3 H/ S7 r .id = 1, w6 M8 A9 U) G* A5 @9 B
.dev = {' f5 z5 Z7 }7 {7 m* ]( `) B
.platform_data = &da850_evm_tl_leds_pdata,
( b) B0 c0 [$ f0 X2 D .release = led_dev_release,
# l8 Y5 L( n. \# t7 ~ }
; E: I1 i3 L7 [( P7 ]% W};
6 U1 R: N3 r" h+ D* q- f5 V' I+ b n( i% J5 r# {( @
static int __init led_platform_init(void)
; {2 b* W# b- I _* ~$ I{! W. L# q* L# M3 V4 G$ Q
int ret;
+ j! G$ T% q g# J' [#if 0
1 v8 S+ p. X& [0 q) G( ~ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ G3 z9 P7 Q5 W9 m6 V
if (ret)
: @' C, H7 E3 Q4 S' O( \. F' l pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ y+ ? }1 ?, i& f( r4 ~
"%d\n", ret);
/ a6 D) R4 J5 J* M#endif+ R; e: g- D, J0 ?; t
ret = platform_device_register(&da850_evm_tl_leds_device);! S9 B+ D2 l8 @& [; V) o0 E* d& A) b
if (ret) D0 ?1 v3 F# D3 y4 B
pr_warning("Could not register som GPIO expander LEDS");: L: b' N/ s. u* D0 z3 |
else
$ ` X. H A' ^+ T1 h printk(KERN_INFO "LED register sucessful!\n");0 u2 u$ R4 V' X* h9 s
7 H4 l% z; ~) T0 D return ret;; j/ n* E5 }4 O6 w/ ~
}' I2 @' D. R, a- v& m H! c
A* v& n: j+ k6 C. o
static void __exit led_platform_exit(void)
+ S5 o' v2 l4 U" h2 U: c{
% q3 O( d) J2 p( O4 S platform_device_unregister(&da850_evm_tl_leds_device);
: c( @! A6 Q9 r
8 z8 a# q1 A# B4 T8 Q printk(KERN_INFO "LED unregister!\n");% R, m6 Y5 m, ~2 @1 [
}( J$ ?$ t3 C% f
4 [" Y7 T3 J. W' |3 U- h8 L% A: Dmodule_init(led_platform_init);
5 U8 ]; e, v9 V2 j" ^& V% E- Jmodule_exit(led_platform_exit);
0 c% Z8 k z/ |$ O2 g3 M
' O9 B& r; }# ]- d+ S( Q$ NMODULE_DESCRIPTION("Led platform driver");( \3 ^7 X# e6 c& _; G7 H3 ]4 E
MODULE_AUTHOR("Tronlong");
' ]) s1 d: L* }' u: mMODULE_LICENSE("GPL");! B( [: J# x, G9 A3 L' L" L5 K
& o2 v4 b6 B, K5 a; s |
|