|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ D% x, A' B6 m: h#include <linux/init.h>5 }0 N2 v; p. h
#include <linux/module.h>& b! i1 {3 {) {! _7 `5 S; ^, g0 r
#include <linux/kernel.h>
1 R4 {+ ^6 D- K) q* s: f! X#include <linux/types.h>* E7 e8 L! X# i
#include <linux/gpio.h>) m& [$ s( _' Q b {4 T) a) r
#include <linux/leds.h>3 }0 k: ~# Y# E/ F2 Q
#include <linux/platform_device.h>
, t* v* p& X: T$ ^ m$ k: d& ]
# t2 ~, Y( R3 g$ n4 F- n' r9 {#include <asm/mach-types.h>+ V9 m1 Z' P F f; @3 H5 Q8 Z
#include <asm/mach/arch.h>7 D4 e- _+ x- U
#include <mach/da8xx.h>
& H( k2 H6 {! ` [! J; _#include <mach/mux.h># ~. x; C5 j. z
- v9 E. @& W2 O$ q3 f7 d: {#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 S+ }' P* q; h3 V7 J#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) \, i: U8 @" ]' i#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 k6 W$ l6 A B6 C& C#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* d9 D2 Y" m" F/ Y2 T: I1 A
1 J6 S0 D' x/ y* R, l8 ]/ c/* assign the tl som board LED-GPIOs*/
) H6 B9 A! A& E3 w; tstatic const short da850_evm_tl_user_led_pins[] = {+ G8 [3 v: k* s2 ~
/* These pins are definition at <mach/mux.h> file */
}7 S0 M+ l! ~) t) w/ t% `! Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. ]5 y3 i9 _6 |( A9 S6 Y+ @ -1
$ b$ Z: o9 t0 E7 G};
+ G6 [; M: E1 Y7 ~4 |) T$ t% F% i1 D2 l+ C# d" L8 d) E
static struct gpio_led da850_evm_tl_leds[] = {
" E7 d! ~' {9 O# I. T6 l% U$ b {+ ~! G$ [" J3 q k9 ?
.active_low = 0,
( p& o5 T1 @7 _9 I3 K5 _+ I .gpio = DA850_USER_LED0,/ X2 f" A0 s' a f* c
.name = "user_led0",
" E1 J8 E' w2 A/ }1 w .default_trigger = "default-on",9 z9 Q3 U: S; N# q0 ^ h' X
},
, W" n6 {* a" u. y {
- f/ ~/ N& A9 |6 f .active_low = 0,
; A0 F- ~% p: C3 T$ { .gpio = DA850_USER_LED1,
% A6 W. K, e3 \+ I+ g; J .name = "user_led1",0 a+ D- c; R2 z _. I1 T6 L0 \
.default_trigger = "default-on",: a) | e n9 `, X
},
! D" y# B+ H; j; f {. C% K. n" G8 g1 `* e( t7 I) _
.active_low = 0,7 z! T% l0 g. }" [+ |. \* n
.gpio = DA850_USER_LED2,6 l7 }; e$ D$ N$ y0 @3 v/ C0 F
.name = "user_led2",
# u, n" y a+ t a0 z$ ? .default_trigger = "default-on",3 C4 F* O. p1 A9 `. e$ `3 l" E
},' u) D$ { x( t1 H" T$ P; y
{
! R# b3 S& t/ ]. r .active_low = 0,
" F: V& m% j8 |( X3 _. K7 f3 v. x .gpio = DA850_USER_LED3,
0 n, \8 P2 I4 u4 D .name = "user_led3",8 }* e% G2 _6 z/ }* h) U! K
.default_trigger = "default-on",
$ b- r/ m" m" O- J4 } },
9 ~& W. g0 e: J, U- x; G D};
5 \' J( k' P) n6 v: T) v: Q0 S6 p$ k8 d
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- O7 e5 S Y/ e- |! W
.leds = da850_evm_tl_leds,) Q0 V: ?4 q- I" u2 k3 \- S
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* f! ~9 t7 c4 H! b/ b};7 T% H9 v, M! Y, s& w; R$ j0 j
! \0 d5 _# Z3 h" Wstatic void led_dev_release(struct device *dev). b% Y2 D$ \ `1 [; w
{: n% o( E% H$ f% j% I# V# n- E
};
0 r2 W9 O4 L7 h5 C6 s) W' X2 a( r6 K/ e0 G
static struct platform_device da850_evm_tl_leds_device = {% m3 i1 Q5 J M" ?
.name = "leds-gpio", C; B9 a s+ m# l! ] C
.id = 1,* [/ a$ D% v+ B, L/ D) `
.dev = {( Y0 K2 D8 g9 N0 m
.platform_data = &da850_evm_tl_leds_pdata,9 @0 m9 A. ^: P$ a8 G* x0 r- V' r
.release = led_dev_release,) R# k. X+ t) o
}
% S# C% N4 K, f/ ]7 l/ R};
3 u! D4 r9 Y; \, b' E) V. U
7 _3 o$ O/ m; f; q1 D. f" Kstatic int __init led_platform_init(void)7 f/ d+ \0 f Z i
{# r" j) W3 V- c$ r& B$ k
int ret;* R. c, N; t: E* K/ [/ g2 W! v
#if 0+ }0 }0 L! L; s: Y8 m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: H* o8 H, y: q4 t/ C if (ret)5 }0 N* P* V" e/ u( T r
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 T% L/ g- x/ }
"%d\n", ret);
7 P/ y2 q, c; o* u! r/ ?4 T6 s#endif4 Z% i- t+ |4 l: l! w
ret = platform_device_register(&da850_evm_tl_leds_device);
7 e, w) K& Y3 e6 O% L0 G& j if (ret)7 H- W3 _; Z1 Y6 ~3 a
pr_warning("Could not register som GPIO expander LEDS");- h& b# c5 R! i% F
else
" f0 M" Q/ \3 l$ R printk(KERN_INFO "LED register sucessful!\n");
5 ^' p3 \; u3 q% R: V5 d" c+ ]* J7 t' R) i
return ret;% ^' O, }; V( w' C6 e/ q( U0 T, F
}
; o9 Y3 M# X( e6 `' b$ \' f$ M$ L, T0 q6 B! R
static void __exit led_platform_exit(void)
# i; _7 z O5 Z6 F* h) `5 ?{
. K5 ~9 n6 U( J O6 }" ~* G- ? platform_device_unregister(&da850_evm_tl_leds_device);+ N* c5 ^0 L! X& d+ y5 S `+ k9 y
0 K8 Y8 @0 k$ h' K& J, l3 L* H printk(KERN_INFO "LED unregister!\n");1 r" f. P+ w7 L0 O' d& G
}
4 D$ Q" u4 \7 H9 ?- S' {( X
6 {; |: `' v* |) Jmodule_init(led_platform_init);% _! Z H. S- q9 Q
module_exit(led_platform_exit);. @, A* o( z5 Q% V
4 A/ Z# F' g7 }# i% p3 _" P2 h9 }
MODULE_DESCRIPTION("Led platform driver");
0 Z+ K/ f8 d% S+ K* |. r: AMODULE_AUTHOR("Tronlong");
9 F& w1 Q% h9 w. T! FMODULE_LICENSE("GPL");
5 K: u; f M7 D# p4 Z. E
' ~( e: ~' m! _& n |
|