|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; j+ C& B8 f: _" f
#include <linux/init.h>
1 L4 {& s. c- m) k7 h#include <linux/module.h>
: n1 x+ Z5 t6 z$ w. `#include <linux/kernel.h>- F1 X; B& t+ e
#include <linux/types.h>
' v! k- ^% s) R, f1 n. }#include <linux/gpio.h>% l0 a0 W2 O/ T3 |# x r$ ?$ `
#include <linux/leds.h>5 J- d$ Q+ J9 u: R5 V* u$ [
#include <linux/platform_device.h>4 \+ O- f% D4 B9 d2 N
: L3 [7 Q- e5 a. q1 @' c
#include <asm/mach-types.h>
: b, A( r+ j) }. C d; @#include <asm/mach/arch.h>
) ^$ S+ J1 \8 u, d#include <mach/da8xx.h>
O3 k" [: E6 K6 |/ I2 d# _#include <mach/mux.h>% E }0 p/ K9 M+ {" `/ k! {
9 r: F* ?! H0 \) ^& s/ o/ _- _2 N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 }6 C3 I6 a; Y' R& w/ ?#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 A, J. { A2 m0 a% t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 @& N3 M. v1 A; J: \5 x0 k7 h
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( ]& }6 k: |% @1 ^: w/ J- Y
Q, D3 h& R4 S K8 @! d. b$ G
/* assign the tl som board LED-GPIOs*/) s& j1 d9 U: x2 t
static const short da850_evm_tl_user_led_pins[] = {
6 A A2 ~0 J9 t7 g# C$ @" r" A* J /* These pins are definition at <mach/mux.h> file */
8 ~0 Q* j2 S" Z+ ~: c DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 J: X ~* |2 N) {* ~8 D7 O6 w2 @: e/ H
-14 j& Y0 r; w& V' b4 w# M% S: W
};
; V8 f, h ~( z
" l& Z) I8 P# S6 r/ c, B+ zstatic struct gpio_led da850_evm_tl_leds[] = {# Y8 x& Q' Z$ |; R* n$ W
{, B; O8 N2 X4 \
.active_low = 0,. i+ y) C/ b) z+ p
.gpio = DA850_USER_LED0,0 C* ]* @/ j9 ~& d
.name = "user_led0",
7 ~- |8 U( H3 f. n .default_trigger = "default-on",
g* N* C0 g7 \+ M },
% g" }5 z4 o h! G& Z$ s {# N- C' v7 h/ `) m
.active_low = 0,1 S3 `' ^- v' Q% u+ S
.gpio = DA850_USER_LED1,1 }, `) D6 j i- L {8 T
.name = "user_led1",
3 L. l7 \3 W& t. x .default_trigger = "default-on",6 s5 L8 D* i1 B; Q/ k9 l
},
% u& I7 M4 t* U" N' q2 ~+ Y r {8 E [% }; ^( k1 \, T; F ~
.active_low = 0,2 d- ~+ f- M' A- ^( W2 T; |. `
.gpio = DA850_USER_LED2,
- L6 ]2 a/ w5 G# T3 G9 O, W .name = "user_led2",/ i( A* j6 ?) x/ V
.default_trigger = "default-on",
" J% D; M8 e/ k. x+ d- f },
- u: O) i0 l$ r" p% S5 s {( |$ P: ~5 s+ R- `% F( |0 R% c9 D; o
.active_low = 0,
v8 M! f; s" z( G+ z5 i' O- z .gpio = DA850_USER_LED3,+ P4 S- D/ U1 E4 q7 ^
.name = "user_led3",
( [ L7 o1 H0 k- z2 U- N .default_trigger = "default-on",
+ M- N0 ^/ |6 l! B& N },
/ B9 ` o% k& b% `- h- p; X% G) N};
$ [) o" M& n, W$ q; U. T" Q# y2 f# z; [2 E, a0 P8 j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! W U6 f) V0 k2 G3 o7 U .leds = da850_evm_tl_leds,& m% g' K) u( X9 ~: K2 C9 ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# U( e# q0 v5 s& f& u2 w' p$ a
};
/ n/ q' C% T" X+ M- E/ i& @5 F8 q- p
( k2 Y+ ]/ Z; E( I6 \static void led_dev_release(struct device *dev)9 u y, L- v: K* c! ~
{
8 _ B2 q Z5 W% d }* g/ z};
6 c' S$ C0 W, b
+ `, p1 k3 g7 E# v0 s# \! Ostatic struct platform_device da850_evm_tl_leds_device = {& C8 d/ B; g5 z9 j4 \( i
.name = "leds-gpio",
z: y" Q( r) f .id = 1,7 v2 c& M' D1 D; U8 S& F# D
.dev = {
% @/ u% y) V7 A1 ~ .platform_data = &da850_evm_tl_leds_pdata,
C7 l6 P2 D+ \# Y7 `2 h .release = led_dev_release,
9 H% e) ?# {) }' E0 K/ q( U3 V6 r; V }, {/ [* S* u, g) a/ A
};
7 ?: V! B" g" b$ ?" \6 |
( P( S$ u3 s& gstatic int __init led_platform_init(void)9 A1 z$ u0 \4 ~5 m- i4 `- Q
{8 C" \1 ^" N6 E+ r/ Z
int ret;8 T1 A* e& A& I* Q
#if 0
/ Z9 F7 Y: y6 h: m, r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 t8 j% |6 C; D3 a0 N1 ]3 T* l if (ret)
1 `2 U2 w9 \% u( t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 H' x' d) R' F) c' E8 W
"%d\n", ret);
% X u: [; Q) r8 p1 n#endif! J$ P* o: D, Z* e
ret = platform_device_register(&da850_evm_tl_leds_device);
$ [5 Q" x7 k. N8 x" U if (ret)
6 I6 A! I Q# P7 s8 V pr_warning("Could not register som GPIO expander LEDS");
8 G+ `6 V0 Z" C/ e( v else* u# \1 t: F6 u4 X+ }( Q2 n M
printk(KERN_INFO "LED register sucessful!\n");; t! Z/ v" ~! v1 z0 c3 t4 s
1 ~8 O" o' f+ e# `/ j3 I2 Y
return ret;
9 C$ _" \3 p; x. N3 K* i}0 u) |) o* w! b4 y
$ @6 u W. j1 j! a
static void __exit led_platform_exit(void)
+ w# U( q% W2 v& e9 m" ?7 F{/ u& @( e. m: Q- c5 u* G S
platform_device_unregister(&da850_evm_tl_leds_device);8 e) p2 o7 h: ]7 d8 v7 A
, {+ z/ l( Z/ d5 O, |1 c
printk(KERN_INFO "LED unregister!\n");) B0 L- y8 u/ L
}( E3 ]/ {$ v/ U6 J/ _5 U A+ g
0 k9 a* x; k. p5 P. `, }
module_init(led_platform_init);
U! u, S3 _4 C: ]1 X' i6 z: \module_exit(led_platform_exit);
& l/ N' U, D9 E
$ ~1 b. i) [0 t. I* H) F. i) \MODULE_DESCRIPTION("Led platform driver");- _; w9 `/ ?( h2 \- Y
MODULE_AUTHOR("Tronlong");
2 a' @+ f- t/ h# ^& R" M; hMODULE_LICENSE("GPL");9 f2 r4 T5 V o( w
# X7 @: V9 H4 S) H$ ` |
|