|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. K+ e3 ~5 A& ?( M8 |: l/ E
#include <linux/init.h>
/ ~% i) H2 `6 Z* u& H#include <linux/module.h>
6 a2 R4 _ n$ f+ ?$ X#include <linux/kernel.h>
, G0 s: r. ^2 z% o! y; B1 }* V#include <linux/types.h>( J) V+ f- @, ~8 u0 H0 d
#include <linux/gpio.h>3 }9 F. C) R# L1 Q( C8 Z
#include <linux/leds.h>3 [* @: G3 c9 n+ R s9 J9 b
#include <linux/platform_device.h> f1 D7 @2 v8 I) K: j
9 n+ h6 s9 A' K) Y8 N- z#include <asm/mach-types.h>8 W g1 a2 b" }! S4 k
#include <asm/mach/arch.h>
! Y. x u+ ]' F. ^3 L' S6 E1 }#include <mach/da8xx.h>
8 I% [+ g F' c. s#include <mach/mux.h>
0 H K) t( r0 z
! F" f- N" `' Q( D# J! F6 @, W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). d* Z& a2 O9 I0 M7 z3 [% Z9 l5 K: T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( K! {) g. C. `' p: H% t% m4 a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 N4 @- F$ g0 O" m$ m9 I7 X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 q% Q# }6 |; |$ x! G" Z) C, @: p
: h2 y0 A. X% h m
/* assign the tl som board LED-GPIOs*/% s" a- K2 n7 h8 |0 e( z# Z h2 ~
static const short da850_evm_tl_user_led_pins[] = {
2 C/ J8 p6 D( b$ O: B5 E Q0 { /* These pins are definition at <mach/mux.h> file */( a* D, m/ ?6 Y) f. Y1 K& z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ m* z. p. x+ L* |
-1
* J, a- P- X6 [};
( s- p1 M% M" @ q0 B
) [1 H$ Z9 F# S. J5 G% [7 |static struct gpio_led da850_evm_tl_leds[] = {- |" k; t. R* h' g- R/ J
{( M1 f- t- y6 J' m5 {; z
.active_low = 0,
" @* m" W% j; \0 a .gpio = DA850_USER_LED0,) |0 p y$ ]3 t" _ w* u2 Y
.name = "user_led0",, [4 J+ h4 y! o$ ^* _% O4 g* U
.default_trigger = "default-on",
6 K% j, M, k9 w1 i; `, Q" [ },9 _8 \; f! F) d6 p7 r
{% ?; z: q n& Q: i
.active_low = 0,
" I/ s% ?% B9 M .gpio = DA850_USER_LED1,
6 M3 j$ `% G. [& e3 K8 s0 Q .name = "user_led1",, X0 y; E" M; T: N* o
.default_trigger = "default-on",6 J/ }/ h8 F9 k2 W$ Y
},# k5 g/ R: E% j
{% E" M' \' d6 e9 z
.active_low = 0,8 D& H( ~1 _" J: R
.gpio = DA850_USER_LED2,5 X$ |' J T/ y
.name = "user_led2",
7 e! `9 U; J6 {" Z' v .default_trigger = "default-on",
' ?* d7 X& e. ~5 }0 P* L% r },; |2 ?7 y! X' A! K" M0 k; `
{
2 S0 N; s% Y+ K9 N2 V .active_low = 0,# p7 V( S, M# v. i9 w) D J6 p; f
.gpio = DA850_USER_LED3,
) b6 B6 Z" N$ S .name = "user_led3",* I' r- ~. t) t% _3 R5 x2 y
.default_trigger = "default-on",
" _0 e& K3 |) H9 i( { },
% f1 f' r5 z2 g! T( @};
8 ^- ^4 T+ t' N; B6 @, F2 \+ u& F# o9 n7 h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& ~1 n T# O5 R! o O# j! ] .leds = da850_evm_tl_leds,
, ~" c; {7 [, I0 r/ j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
Y6 w5 m1 S1 ]" }& \};$ i; ?" ^6 G5 J- r9 \+ M/ l
3 ~/ U4 K6 z! B- kstatic void led_dev_release(struct device *dev)
9 s B+ E" @* f; J0 M$ H. [; P{% V& y# L( L% B9 i7 m" D
};
) m# I1 r" _% [' n; q4 \" k: O* p; o+ }( u
static struct platform_device da850_evm_tl_leds_device = {
) e1 ~& }* X& Z; D- A3 ~3 {2 @ .name = "leds-gpio",
; K+ p4 d' p; o- L" U5 @( ` .id = 1,
% h" q3 O6 |3 C* x" t g4 [% C6 R- T .dev = {0 Z0 G% l( O" @2 T7 E
.platform_data = &da850_evm_tl_leds_pdata,
1 B) L+ U/ K3 F, I, p1 `5 F ? .release = led_dev_release,; B* Z( u4 i7 ^, a# ^
}
* H7 P1 Z( x. `1 w- V, T};
n7 _7 d c8 g: o+ B, Q6 c8 R( v# B4 C$ \- R* [
static int __init led_platform_init(void)
8 A, Q" M3 k6 P4 o' {{
* M, r: K: w/ q int ret;
* h T9 m) E$ v' q#if 02 n6 C, R. B6 D, D" L; R& F5 @3 E
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ d1 j5 h3 H. Z4 I3 T8 L9 x$ \$ \
if (ret)/ |3 Y! a9 E% |4 l# J
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 m" M; @; J, t: C; _: S "%d\n", ret);5 z+ s0 f0 A* j1 Y' M; }
#endif8 [5 k! `! `0 ?9 v, ^; ?
ret = platform_device_register(&da850_evm_tl_leds_device);
& `+ F6 m' K7 U6 s if (ret)) p7 m& T+ Q% f3 l2 S' z
pr_warning("Could not register som GPIO expander LEDS");8 h. a! z- L) g% h2 j
else
% h6 m8 ~7 W( L0 j5 ~4 H2 b" m& b printk(KERN_INFO "LED register sucessful!\n");
]9 ~2 H, s; a1 [
5 k% A! W! i5 i# P5 { return ret;3 ?; h3 A; y( u$ z! ]* u
}
6 |$ B8 \' p( x4 m7 F8 C7 k2 y7 `9 M9 Q
static void __exit led_platform_exit(void)
" z, u* I6 H0 m v1 I' \{. f L4 Z0 R) C
platform_device_unregister(&da850_evm_tl_leds_device);
, a! `3 C Z5 C2 |8 k0 a
8 A- S0 F! n* P! j printk(KERN_INFO "LED unregister!\n");
8 e) Y* I4 F' V' Q2 R}
_- p6 B. G' R% q
: W) p0 g4 w/ Y9 a0 smodule_init(led_platform_init);; u9 t9 ?9 D4 P/ q7 L( S0 T9 H4 |
module_exit(led_platform_exit);2 Y# r4 w: h2 H
b2 W' H* x+ {: r$ Z
MODULE_DESCRIPTION("Led platform driver");# G* ]/ K; N0 R; p& X. W; ~
MODULE_AUTHOR("Tronlong");
3 z5 z' w, e6 kMODULE_LICENSE("GPL");
: n8 g! G! q" @; Y$ O7 d: x. M- X5 L$ L0 u& P/ ]+ l
|
|