|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 B8 i/ r) W$ X% ^#include <linux/init.h>
* V9 l9 N& c" z$ Q% Z6 k; b#include <linux/module.h>
7 z0 o/ B$ ?" T#include <linux/kernel.h>* R" @* u' L: U4 U% d# C1 q
#include <linux/types.h>3 D+ s+ @; @+ D. G
#include <linux/gpio.h>$ V& W0 q1 f' j3 T% e
#include <linux/leds.h>
( f& L: s# X" Z1 ~# s#include <linux/platform_device.h>
6 [ L2 N1 X, b; Q: [- X3 m+ d) I' }- o# i
#include <asm/mach-types.h>
* Z( c N) G* y" ~* e, i#include <asm/mach/arch.h>! j1 g9 N X' J3 ~2 {2 D. l8 x
#include <mach/da8xx.h>0 R8 K X V- o6 V/ Q+ Q
#include <mach/mux.h>( f7 V4 P' Y' j) r$ l$ P. i+ I
: x# D: H. l; e! q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 b$ V% } m l& X* |
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 b7 g) o6 {0 @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ B' F0 I4 j7 q. X2 Z- l
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 T* D) `/ [% ^8 K, s, {: y4 A0 D8 m) V, n5 Q0 r7 n
/* assign the tl som board LED-GPIOs*/+ i( h% G' j/ Q
static const short da850_evm_tl_user_led_pins[] = {! `' u$ W9 q& I1 s
/* These pins are definition at <mach/mux.h> file */* M0 q$ Z7 E) Q+ @1 g) d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- \# s8 e o% b1 P4 b& Q/ W
-1
; S; o6 s) R% Y- V9 r1 Z};1 I, i: G8 b3 p8 R" _+ o* T
2 ~& K/ M/ S8 d; {2 }' h9 ?
static struct gpio_led da850_evm_tl_leds[] = {" y1 Z, ^4 Z" i* a* K n/ k
{4 C Z. s# {+ T8 b/ r( |% _
.active_low = 0,. Q2 | A4 N* d
.gpio = DA850_USER_LED0,$ V. l! T% L+ V+ B6 V! _% M4 i
.name = "user_led0",) b( e1 S, U ~; `5 L2 \
.default_trigger = "default-on",) Y; I. X( \# g$ z
},9 G1 m0 y0 d1 `3 C
{
" a L8 {9 m: V" F+ [ k8 `7 J .active_low = 0, x$ B( C( q+ E9 v
.gpio = DA850_USER_LED1,5 W* r) P3 E- I" b/ O+ c) a: I
.name = "user_led1",( f# I/ K) @$ Q- b" p# R, N0 X
.default_trigger = "default-on",* U6 L" G' Z+ y/ \# t, e/ @
},) A# H' @; s# Y0 d& c/ C1 ]" Y
{
$ w+ b3 r+ F4 k .active_low = 0,5 b0 [, _$ f+ \5 c0 c0 U" n
.gpio = DA850_USER_LED2,
T) }, f7 o$ k* W) M .name = "user_led2",
5 _9 Z1 E9 n% v( s" G .default_trigger = "default-on",( o$ x( @9 }) O9 M
},- \7 U7 E) b8 E. q9 R- m3 b
{
2 l$ I U' k8 z7 A. P! P2 _+ a% X% _ .active_low = 0,
' A* ^8 V. q/ v4 T% j+ h" U .gpio = DA850_USER_LED3,
5 m( H) `1 G( h' V2 B) ` .name = "user_led3",
) ^( O) F- s* H8 C .default_trigger = "default-on",; _$ v8 O0 l4 W
},2 ] z/ X8 W4 @. A/ K+ f: G: C
};0 m+ u4 }1 J" c- h: i. B
) I+ w# {4 i# H! Q2 B: h6 {" E. g
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 G5 V4 m @' z$ Q7 V .leds = da850_evm_tl_leds, b5 P7 a" ]) P1 M8 Y: M
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, \) J2 \, \5 v; f6 Z' S- R" p};6 i3 @4 P( a" i4 l F; A
4 o, F$ H9 {+ i; _static void led_dev_release(struct device *dev)
- G5 e' ~( H: |; b+ T/ a: W, x# P{# P ]! i' G/ T9 ?/ v( M0 |
};) K ^- q; i) N* p! |& {
# [+ I; C9 p7 |! M. z O
static struct platform_device da850_evm_tl_leds_device = {
. ?; l, \4 g: Z .name = "leds-gpio",
) X$ B7 d3 j) s- N" f* W .id = 1,
( e; I4 ?- d; v .dev = {6 w- Q! m4 O, l& [ C6 U9 E$ J
.platform_data = &da850_evm_tl_leds_pdata," l; M4 s4 @1 _, Z
.release = led_dev_release,
w1 K+ m& d8 x6 O/ r' Q }
* C/ k g G# O* Y" |& o};
8 y+ ~' M/ a! ^' Q( l) a& f; D1 d% L0 A0 N. ]( k. r8 s
static int __init led_platform_init(void)
# c$ m8 O5 l+ I% f{
# l0 {& G! v( |; Q, c) g int ret;2 p7 y. L8 F+ A
#if 0! K: `0 m- M3 T. i# |2 d7 y0 \
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 K8 m! E, ^) e8 L; M `$ W. \; D if (ret): [& A9 v6 k. A6 c- y* U
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 i" b; y6 V% `, r1 I6 f4 s
"%d\n", ret);% \' Z% p+ G& {7 T7 e
#endif
* m- w( h3 B6 ^# @7 o3 W ret = platform_device_register(&da850_evm_tl_leds_device);' {3 u8 C/ x! R4 l5 i, V+ O
if (ret)
( y$ {# Y5 P8 U5 v6 x3 I3 J pr_warning("Could not register som GPIO expander LEDS");
. V! K0 l- A" ] else
( ~/ i- k* u0 q' K" p. z printk(KERN_INFO "LED register sucessful!\n");: F) v3 y1 }! w- n2 V
) {! n' A' O# n v9 _6 { return ret;8 Y# S c8 j, o6 E- f
}
1 |* R, w+ S! p) w( S! Z5 v, u) q
4 o7 G1 B% a4 ?# n; estatic void __exit led_platform_exit(void)
) }$ e: Z A2 ~0 Q1 g- V! Z{+ q( g/ [# v8 q2 o5 } A. k4 g' [
platform_device_unregister(&da850_evm_tl_leds_device);8 ?' H% l, l% {2 V1 F( ~( K: [- b+ A
6 o5 u. w# W% A. E+ f! z7 s
printk(KERN_INFO "LED unregister!\n");
1 |) q- i6 ~0 y}
. d- F# _0 }" o1 \1 K
2 b: u' Z: [) @module_init(led_platform_init);( l7 B- f' Z2 j2 `. X. Y2 o
module_exit(led_platform_exit);7 f) L% @ H& |0 Q6 o3 V& H/ D" V
6 k+ K9 }. k7 ?; {% {# l& TMODULE_DESCRIPTION("Led platform driver");
$ E$ `, v, H. j* \5 \6 ~& D( SMODULE_AUTHOR("Tronlong");8 W. ^- }/ Q ~& c$ h
MODULE_LICENSE("GPL");; h) |5 ~" x s' k* ]
" _4 U: ]6 ? m# A) q, U |
|