|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' s6 r" t3 _7 t( i/ Z- l) f#include <linux/init.h>
! K. e9 v5 K6 |0 L2 ^' I#include <linux/module.h>
3 ?" I. F6 m2 c0 s#include <linux/kernel.h>
/ a% p0 g4 J! p a) f8 K; A( B#include <linux/types.h>
3 K" J0 O3 h. b" J# h#include <linux/gpio.h>) ?1 X g, [) {3 z/ x
#include <linux/leds.h># V G. D, m6 K, @% e
#include <linux/platform_device.h>. }$ ]. X) n7 l; C
5 p' X8 j' x* [2 E
#include <asm/mach-types.h>
- z. Z* g1 h z' r) w9 m#include <asm/mach/arch.h>% C' t( q( I6 `0 N' D
#include <mach/da8xx.h>' e0 C+ L% \3 U3 c
#include <mach/mux.h># o' Z/ V6 G+ L3 l0 T
) \ a$ R# L) Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& E3 g/ @- d8 ~7 W- p, x" _6 K% M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
a/ N( n9 A1 l( u* y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 \. w }( n8 p) M2 t9 c8 B: m5 J9 X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 A3 Q; ~/ ^- B$ u% P* k \; N/ V/ x: x' p
/* assign the tl som board LED-GPIOs*/
! |1 i# j4 m, x4 }' |static const short da850_evm_tl_user_led_pins[] = {/ j6 S# Q: M5 _
/* These pins are definition at <mach/mux.h> file */
2 c2 V- q, m$ ?) N) Z$ g& ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( [" u. h/ `% S- r' }' f" N ]0 |' d
-1
4 z" x' w& A- x: c};
8 P3 r( C! b8 r5 Z7 w
3 i9 k, P0 Q! Xstatic struct gpio_led da850_evm_tl_leds[] = {
( D# O3 v2 G5 |9 l% o. {+ u {/ E' g+ m- g( J' D2 Q# c$ [
.active_low = 0,
, p' ?0 q D6 R6 y T+ t .gpio = DA850_USER_LED0,
. O g$ i5 q% l1 u. d& e' ~; v .name = "user_led0",& _1 h8 W8 p" O4 {
.default_trigger = "default-on",
' s' S k# d' \1 @3 \. y },1 h; l& W7 ?. M- @2 c
{
$ Z; ]2 B# K0 e- @ .active_low = 0,8 ^6 t; {: C0 h0 r. n# e' }+ G
.gpio = DA850_USER_LED1,& j: j7 k) u- t$ J
.name = "user_led1",
* z& N' J5 Q- t .default_trigger = "default-on",0 c9 N5 ~4 h9 W e4 C
},* c; M+ n( \: j0 y2 s' x
{; x8 h* o, ^! x1 K
.active_low = 0,2 ~% r4 O, Y/ D
.gpio = DA850_USER_LED2,
$ b5 a; S1 X F% P! r! @1 ] .name = "user_led2",
' b; O1 h7 K7 s% I7 x/ i) b .default_trigger = "default-on",( n' e1 u2 j+ ?7 c9 l/ r8 F0 C
},9 `( ^% z4 X$ G; x
{# ?% `4 e3 z# Q
.active_low = 0,2 {# B9 j6 ^/ M
.gpio = DA850_USER_LED3,' ]9 ~7 |) {. [1 t! n
.name = "user_led3",
z+ L5 a8 I4 |# V% | .default_trigger = "default-on",5 Q# Q! r1 I1 i# f: ~5 ~' p3 o: X
},! [6 F. w3 L2 p* G
};, [& y" G, r. [. b& Q- V' ~
' V! p4 @. x5 f0 Z; d' @
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" {4 c3 b: t+ m P' B( [2 e) C1 U .leds = da850_evm_tl_leds,
7 y4 ^; g' b1 k- n- A( m6 P .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, b: ]1 P- y/ S' f};
$ q4 l* s* f L2 x: s% U+ I$ R
0 t2 K& ]. |& _3 pstatic void led_dev_release(struct device *dev)9 {/ z8 T1 x$ b+ c/ C: @) o2 b
{
% r1 y- o( `% v};
) Y2 c; W& v2 \: T% V* b7 Y$ Y3 V# n) T9 i. @+ B/ t
static struct platform_device da850_evm_tl_leds_device = {
6 `) X( x3 \9 s2 N1 F .name = "leds-gpio",
* y9 a9 {$ y5 F1 x( Q' P .id = 1,
1 U- o! v2 b7 X: g5 q4 l .dev = {7 b% `2 q. ^) m. T6 U k
.platform_data = &da850_evm_tl_leds_pdata,
% E& C+ A2 X! p1 [6 x2 d+ _& [ .release = led_dev_release,1 P$ R/ g9 f4 X- {/ \9 h' H
}6 `' r+ |1 Y' m- t0 @
};
; X1 I8 P: F: |; H
- K3 V+ U0 ^' L3 h; Fstatic int __init led_platform_init(void)8 h2 m+ i# X+ c+ z$ q+ @: j
{6 d9 e4 W- k9 R& t5 n
int ret;
* ]* n: N* s0 @3 O" a5 H! ?#if 0
8 K+ Y& h8 u& P) | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ N6 U% ?" P) ?
if (ret)
2 C' j* N* p o pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 @& Q+ i8 _1 e "%d\n", ret);2 q* ^# b9 m* o1 l
#endif( k' }* A1 M( B6 ] K3 q9 O
ret = platform_device_register(&da850_evm_tl_leds_device);
) R8 a P( u" o; r if (ret)
$ D- p: ^6 |2 B* v1 ^; X. M0 ] pr_warning("Could not register som GPIO expander LEDS");5 X4 n, H* ~$ O8 \0 R* v8 u
else
5 W& L) Z0 n$ Y# W+ t printk(KERN_INFO "LED register sucessful!\n");
/ p4 M s2 J# k1 o4 N1 L5 z3 W* e
return ret;
0 N) G" K) i& q- ?}) \1 t: \# e8 D# H" Y
% N. n3 K: n, G9 l0 vstatic void __exit led_platform_exit(void)" s: g/ g# J$ O( ?- W
{
, A, @( Y1 V6 G2 t4 O: a platform_device_unregister(&da850_evm_tl_leds_device);
- Q1 r0 x' d9 s, H& Q# _# w7 B, u& }- k
printk(KERN_INFO "LED unregister!\n");
, g A. j7 E8 E S( A" V! [; ~: b}( j C+ d: ~: d) Z d# c" M
9 q, H1 r: Q/ d& d2 W" `& X
module_init(led_platform_init);
- ^" }' c5 v% smodule_exit(led_platform_exit);
6 r {0 k& E) D d& V0 e
# B4 d3 q9 M& l7 YMODULE_DESCRIPTION("Led platform driver");' ]) e6 l$ ]4 v# w6 |, G* a
MODULE_AUTHOR("Tronlong");) Z& f' J; @4 O9 R/ v8 ]* S
MODULE_LICENSE("GPL");6 u: S7 ~7 J4 F
7 u. q/ x) D l* p c5 K |
|