|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 R$ ?# L( w) N" ?#include <linux/init.h>8 [' C1 L8 J$ ?1 N: _' Y Q
#include <linux/module.h>8 S6 n" K; m4 o/ L1 ~
#include <linux/kernel.h>9 }; ~9 k& ]1 A$ a: w
#include <linux/types.h>
7 D& {; g6 d' G# R7 c4 z#include <linux/gpio.h>) ~9 n; M' V" z' n. \$ `' U: K
#include <linux/leds.h>/ V5 q. p/ F2 ^# x
#include <linux/platform_device.h>
$ a0 C5 W7 v0 k6 h( [& \& G. \2 H# ?5 [
#include <asm/mach-types.h>
3 u/ z, j9 Y9 h' k#include <asm/mach/arch.h>7 I( O$ e2 @* H% R+ _
#include <mach/da8xx.h>/ }0 ^9 g0 [& T0 ]% Q' T
#include <mach/mux.h>, ?" x% l7 }4 q8 v. [
* Y. E' y2 u. {+ f#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- Z3 v+ j- }3 j& i2 W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# t; R X. h* J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 Z/ i* i, z0 w9 R, m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" v7 V' `8 T9 c9 r* M5 ~+ B1 X' L
" Y; k7 B2 z4 g! S5 W- P/* assign the tl som board LED-GPIOs*/ J- w* j) V$ ]
static const short da850_evm_tl_user_led_pins[] = {* s1 B" A4 _* K! q; z C
/* These pins are definition at <mach/mux.h> file */+ l6 G/ m9 w1 u$ {# q3 U" p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) \" ^! M. q, Z
-1- Y0 ~1 o; g% \
};, N) i$ K3 ~( }$ H6 n( q
$ }, d% W1 T0 e4 _
static struct gpio_led da850_evm_tl_leds[] = {
- F X- v& c' l* V. S; { {+ X9 z) ^8 j9 j7 q$ T
.active_low = 0,
- o9 J9 W' T5 ?3 [0 H3 ~$ h2 J .gpio = DA850_USER_LED0,
2 ]# T3 X. G, X- V .name = "user_led0",+ L8 r+ ^. h0 Z) H; }2 x1 c+ M, B# M
.default_trigger = "default-on",
0 i& e* f6 C9 T0 a; ~ },
8 P5 Z, v4 v% }3 d6 F8 } {
7 o" A! c2 L# |! m0 `4 X .active_low = 0,/ b$ l k& C1 k! n' c3 V
.gpio = DA850_USER_LED1,& x) J! W$ e/ @! E' x; g
.name = "user_led1",
/ e5 J5 E. e* V6 k .default_trigger = "default-on",
$ ^9 L( {! x4 k& b% S% I& j& A! L },
+ U5 m- p: y G/ i/ ~7 Q {. V; O: S# {, k+ Q o
.active_low = 0,
( V$ @5 C# d' {% {- H% j9 }/ A .gpio = DA850_USER_LED2,, S; X( @! |; u) V) S; ]( c+ ] C: ?* E
.name = "user_led2",
% N9 i% a* B, W, M2 _/ D3 M+ Z9 | .default_trigger = "default-on",% j/ G4 O7 O( A0 Q: f# V
},
7 Q8 T; M: Y! R8 z# E6 y {
* t7 L8 ?& N! Y .active_low = 0,
$ V) h" V4 U/ [8 D$ O$ t .gpio = DA850_USER_LED3,
a/ p5 t- } P+ D. u' a0 D .name = "user_led3",
/ B* B$ e2 k2 @7 l1 W .default_trigger = "default-on",
; G; d5 h! |. s( @( l" b },
6 o8 U$ _1 x! K};- K+ x4 m. ?) W; T. x, t
5 K/ y) q% ~9 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ j6 r7 u5 W( l: d5 a2 C k .leds = da850_evm_tl_leds,
1 P2 q/ p/ x0 t( k1 e! ?8 a .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 }% Y' r6 D& K" ^+ h};9 l* N& p0 r$ |, e6 V
E6 J" b& Q4 V5 S2 _) x& i& k: r3 jstatic void led_dev_release(struct device *dev)( @! {6 b, m2 T
{) C, i7 d+ B+ }+ ? Q6 j
};, `& D% j! s0 T: N
! B! Q6 P) D' A4 T. G+ \! ^
static struct platform_device da850_evm_tl_leds_device = {
3 E8 |3 m5 K& g .name = "leds-gpio",3 B6 F/ Z8 T/ z" Z6 U9 n/ S2 E# @
.id = 1,
9 a# [" Q4 c5 K( b$ K .dev = {) T% k2 [6 c# d' c @ w' _
.platform_data = &da850_evm_tl_leds_pdata,- \4 N3 J! l) q" l0 P6 t5 t. E1 V
.release = led_dev_release,
! e& E0 X2 ~1 c }
* A/ v; q3 |) a6 ~3 K3 b};! U! L/ k' @5 J3 X8 {
4 w2 F; s, u4 N6 A5 n0 Y! Istatic int __init led_platform_init(void)9 f6 @9 Z$ Z2 S- i2 R4 Q
{& P+ C* y/ @8 B6 w8 V8 K
int ret;9 F. k7 m2 `7 M- c, V+ C4 h1 w2 o: B
#if 06 C- _2 W$ _! V7 j) @' T5 x
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# \7 G: r& b% V5 n3 Z6 V0 K. ^; W; M' t if (ret)
: j8 i" n8 X% N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ ?0 Z$ ]6 {! M6 C1 Q% @' f) Q1 O
"%d\n", ret);* a8 H+ r0 j$ j" }' G
#endif% ]4 t. b3 [2 x+ z/ v3 t" P6 `
ret = platform_device_register(&da850_evm_tl_leds_device);% L( L0 X5 N4 }/ t
if (ret)
) T3 s4 C8 W* }% v0 F pr_warning("Could not register som GPIO expander LEDS");4 N$ U& f- _; W+ F i% P) [
else
2 l9 \! G; G, s$ } printk(KERN_INFO "LED register sucessful!\n");
$ Q5 ?6 z, a2 I) w5 w u' O3 U( M& [
return ret;8 v$ v' o( q! @) D
}0 ?) q- S1 _( c4 y! [0 L
8 I* H0 S9 n3 W: Y5 _3 c
static void __exit led_platform_exit(void)
) Z1 _1 S/ c- b& J% A; v2 ?, q4 [. o{
6 b) t- a2 t" D+ T2 J platform_device_unregister(&da850_evm_tl_leds_device);
: _3 I) k$ P! M; H' o+ s& B
" q+ M& n( ]8 w! t" x8 H printk(KERN_INFO "LED unregister!\n");! v* j: a0 q* |4 x! C
}
& T" Z2 l n' K
4 J) k+ Z) v. t+ O0 x lmodule_init(led_platform_init);5 f+ i# n! |: h# U$ B) z
module_exit(led_platform_exit);. C+ Z; d0 A5 G$ t( J( D5 B7 Z3 j
) Y. x+ }2 l* J3 {MODULE_DESCRIPTION("Led platform driver");. t1 T1 P$ F$ A3 |
MODULE_AUTHOR("Tronlong");, e4 e3 N5 r' p, a5 R
MODULE_LICENSE("GPL");
: S$ R [( @. q, [3 U. I7 q1 t* r$ t# m: G g. E R
|
|