|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" u8 |: h8 K( S5 e* }
#include <linux/init.h>% u i. Y( P+ j& Y
#include <linux/module.h>( C% ?5 ?. w! t, I u. T! r4 m
#include <linux/kernel.h>
& @, Z4 {2 I# ^4 C$ R#include <linux/types.h>3 U& p$ Q+ d" b5 \
#include <linux/gpio.h>- h3 X- T& K4 u
#include <linux/leds.h>) ^. @) u3 p; ]
#include <linux/platform_device.h>
$ q* j% i* N4 w; D% E3 l) `% j! u4 u8 r- f% \
#include <asm/mach-types.h>
0 ^$ R% N/ ?1 V U/ t% j9 x8 n/ O$ ?#include <asm/mach/arch.h>
! P/ }- q+ p6 Q* c" ^+ i1 c; M1 p#include <mach/da8xx.h>( |9 x _) Y8 i) Y
#include <mach/mux.h>2 V, \& Q2 i5 E+ A; Y) I
5 k5 n* W8 z C6 @2 ] R% U2 f% ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 f$ }% f. Y0 j! c1 m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 ~- J7 ?& t: }/ M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& f U9 ^: I: u# F/ R' N: v, D
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) B: A; j6 z; y+ e- f
1 a$ t0 Y& a" p; N6 A/* assign the tl som board LED-GPIOs*/
4 H/ m8 s$ J- }3 Ystatic const short da850_evm_tl_user_led_pins[] = {
5 u6 T ~( ?' }: o /* These pins are definition at <mach/mux.h> file */
1 y1 z, N& _- b1 } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
A1 Z" ^, {* l0 C1 G -1
e9 U+ q3 {3 z+ `" a i( l};; o: l+ `1 T' k: Z8 m
9 x9 O# ]# U( p8 u4 p8 N$ _. T* y* a( Kstatic struct gpio_led da850_evm_tl_leds[] = {0 Q8 s' k4 |( W! ^3 \
{* f2 c! t W0 l2 j+ a# H, z7 q9 ^
.active_low = 0,
/ [, N; y' ]5 b" [4 T/ Z1 c) P, K .gpio = DA850_USER_LED0,0 ?! y5 C/ N3 G9 d+ V; [
.name = "user_led0",% Q7 q9 d. Q( V% t& t% G+ D' S
.default_trigger = "default-on"," l2 u* X' m" \! V
},
, p% x0 `/ a2 W' B: n) `# n {
" M7 w2 q& N( G- r. { J .active_low = 0,. I! D7 B1 C* q- X) B. W
.gpio = DA850_USER_LED1,
, H& _7 E% F, D, V, l) f7 k .name = "user_led1",& Q5 [% B% d& B6 x3 O
.default_trigger = "default-on",
3 N8 `7 Z7 ^- n$ j },% q/ P! u' i3 b/ j
{
* y; h* F# a5 O J# l' H .active_low = 0,# g1 ]5 G% a h; L3 v& k- H
.gpio = DA850_USER_LED2," K5 v$ q4 P# `2 j
.name = "user_led2",+ E& U }0 n- f- w
.default_trigger = "default-on",
2 r: l& W; F: L9 O4 R& [5 w, N9 q },# s* a. p8 D# s' x- b; [& V
{
0 x; X5 }% g" J- O .active_low = 0,
* Z1 W* |3 ]! ?, f: f4 v .gpio = DA850_USER_LED3,
* O0 }( ?) |6 \) m F: Q6 _5 o .name = "user_led3",
" M. G- j( f, | c .default_trigger = "default-on",
7 c' |7 Y) I& D2 z },
& B5 m/ G8 n6 s n F};# J; V8 e( l% q6 Q( H
! n5 @" q* x- o. W; A: X! @( c" i
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% F/ V) P/ P& e' @
.leds = da850_evm_tl_leds,9 `" j( Y' g9 k
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 ?% n% a8 b# _) C" \};0 {: j% d: j( V; s
: ~ `# y! ]) {3 t3 s
static void led_dev_release(struct device *dev)3 V# L+ H6 i5 b2 i6 X
{
$ n: I6 F, E g; e) b# G};
3 d/ d* l; Y c) b2 D9 Q, g+ l; e1 m" u7 S
static struct platform_device da850_evm_tl_leds_device = {
7 `0 L$ k/ q9 p, q3 B2 B2 Y .name = "leds-gpio",
; Y! b! D* b) U0 i* Q .id = 1,
8 |, T f! I+ @$ |% o6 b0 d .dev = {
# [' ]0 E) g9 T$ D .platform_data = &da850_evm_tl_leds_pdata,
5 ~7 q& D$ R- b! l8 I0 D. | .release = led_dev_release,
) N: ]$ I, o3 N }) s' @) K; L4 N" f/ i
};) [4 Z: K$ m$ q8 `3 {0 D# B/ {* M
7 |; u' I7 }. V, p# Z
static int __init led_platform_init(void). e8 n8 c% J& X0 l& ]& K- [* _: j' H
{' Q! [& O7 w0 _6 w( u6 \
int ret;
7 f( A" g: C' e* m0 ~#if 0
$ a# _0 y& N }! H- v0 i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 m" r; `2 q% `' i
if (ret)5 p( u9 V+ n8 r7 d; P j5 W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ l/ Y. c; B3 ]6 T. r
"%d\n", ret);
( T& N* j7 {) o- g#endif
8 K) S+ \' `" x! B# e3 d: {5 o# T. w ret = platform_device_register(&da850_evm_tl_leds_device);& v" P4 ]3 e% J! N/ }1 d- S7 r
if (ret)8 K, R7 A1 t1 Z9 u; Q @! b
pr_warning("Could not register som GPIO expander LEDS");
/ t% i) H0 @7 g y0 V4 @4 p else. x3 _6 ?! h& E8 [! n. i
printk(KERN_INFO "LED register sucessful!\n");
* N# K, K% r6 W# F! c9 X$ c' K) r
|( L) P, _3 F7 @/ n1 K9 z4 H return ret;
& r/ `6 X1 w: r. G. I}
e* \1 }/ \# F6 H5 k0 A3 ^" j# @+ Y& _1 k" u. k- ? S: ?3 l
static void __exit led_platform_exit(void)
8 J) s6 M2 m( |& p `{
( I( `& x8 V% a- h" n platform_device_unregister(&da850_evm_tl_leds_device);* I# c2 }. B+ U1 M- H. [2 V
5 c( p3 ~+ p0 v& u, B' R
printk(KERN_INFO "LED unregister!\n");
! m6 r. a7 _2 j}! ~5 m h" ~$ Z! c4 q
# |- ^ J `3 W, q* m
module_init(led_platform_init); h0 I) ?& _2 M
module_exit(led_platform_exit);. d* |) `8 s, Q0 N4 q$ ]
0 G: ]; D, G. j3 b9 n9 V; ^( d
MODULE_DESCRIPTION("Led platform driver");9 ?: z9 ~) b4 z: m
MODULE_AUTHOR("Tronlong");
7 F3 e$ h3 \- g( ?( _MODULE_LICENSE("GPL");
/ N/ L; p4 q' X% _
; ?3 _- G) R" i& {( x$ g% H |
|