|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% Q+ c3 V. J; \
#include <linux/init.h>3 v+ `1 T) q+ f+ {$ [$ Y5 e7 t
#include <linux/module.h>4 V8 D' d$ ^1 n2 a1 Q P
#include <linux/kernel.h>/ O+ z( G- s: h5 E2 g2 {1 _
#include <linux/types.h>1 J" {; t8 L/ j5 T$ X
#include <linux/gpio.h>
1 i! E: {' I' A! H! W2 f7 B#include <linux/leds.h>
4 Q% R1 ^/ T/ u#include <linux/platform_device.h>* p& r3 p0 _ ~5 o% |
" P/ Y& `$ q+ Y0 b4 c
#include <asm/mach-types.h>7 N! `9 t6 n. S4 A/ F% k- x
#include <asm/mach/arch.h>6 C8 o5 V- u1 ?& ` ?
#include <mach/da8xx.h>) h9 \- _) }) K
#include <mach/mux.h>
7 J& r2 ]) F! ?/ f' }# c0 t
- n0 ^4 e& J0 S/ x8 D7 z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% \, t! l' x" [0 o) B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ K a* e! F0 t1 x; [#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! i& o6 _5 A9 C x. p, l/ F4 }# K, i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ v3 o8 q4 p# A. j+ T8 r: G D4 _. W! y2 U0 k+ U
/* assign the tl som board LED-GPIOs*/! s3 w# H: B8 u
static const short da850_evm_tl_user_led_pins[] = {7 ~+ ^. n3 r% ^& Q3 a8 P* U
/* These pins are definition at <mach/mux.h> file */
' Z; m$ q* i) u& j9 S f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," y) r7 e/ ^% x3 j+ C* J* C% K
-1
& g l* m9 B& }% v% U: R};
R' t% t# R8 N1 X7 ]$ P3 P, P1 b/ R- O- w4 p% c
static struct gpio_led da850_evm_tl_leds[] = {( s1 u- {0 N( e) u
{
, h0 y4 D; t7 j. V# s% u3 y .active_low = 0,: B+ w; n# Y1 X% E7 L: ^0 y: J7 |* R
.gpio = DA850_USER_LED0,
% r$ v' F8 b# Q: B$ `% r5 H .name = "user_led0",
3 F @8 W# G% z! B .default_trigger = "default-on",
# U9 b# v" `6 J7 f0 M8 X5 r },
8 u) O+ _- q" X, s9 S* }/ Y& | {
/ B; t" t5 U7 M4 m# e) s .active_low = 0,
. o3 g% _* l* X% C- @0 x A9 @- } .gpio = DA850_USER_LED1,* P h7 Z: c2 l; U: q+ q
.name = "user_led1", o6 R$ u' x* |7 h8 X. V
.default_trigger = "default-on",
/ x$ F( j* m: F2 E9 i: I4 ] },8 h) h" Y& J6 R
{# J/ |( u. h, n: C) c! u
.active_low = 0,7 ^0 o" W- \" b, H0 A
.gpio = DA850_USER_LED2,4 j! E1 c. h9 S T/ x, K
.name = "user_led2",
A6 t! a7 k0 d2 X; m; W+ R& M .default_trigger = "default-on",# L8 Q+ h {/ y1 [; \6 B
},4 r% Y; T6 @5 M5 [0 ], G
{
$ `! z* U! R5 a y# `# } .active_low = 0,/ ]( M+ Y! B9 n% ?: h; J
.gpio = DA850_USER_LED3,
; m- J4 S& j& \! {% ]: t5 [( a .name = "user_led3",
& d, N2 C! s8 B( h+ M .default_trigger = "default-on",
" x; m9 m6 ^6 G! `. Y },
# ?9 h* D t; L/ ?5 Y};+ {1 Z& K4 R G
% f1 r, ^# ]: R" ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( t7 B! H4 L! L' L- q2 n3 r .leds = da850_evm_tl_leds,
`; B( R4 {# g6 V .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," ?# I: c9 ]+ L! o2 i/ Y, l, M
};
, s: m9 j, ~0 ?5 L3 Q) h2 |1 l0 D. R& k
: ]: X) p5 D! I! {' A: Zstatic void led_dev_release(struct device *dev)6 `: e2 J6 [7 x6 o3 j2 @$ T
{: e# L( y0 D! g6 H4 X1 ]. G" ^
};% o0 m1 m+ J# G* @
. @8 d8 m5 Z" H( v; m# D& ^static struct platform_device da850_evm_tl_leds_device = {
, r6 a2 l3 o$ o \/ h .name = "leds-gpio",+ [1 f$ X9 b- q& @5 H8 {3 c
.id = 1,
1 |+ ^ d& _4 s7 O% M .dev = {
9 r0 D0 l% R! I# \5 s J& y, a .platform_data = &da850_evm_tl_leds_pdata,
- i% b1 M3 b5 d& o/ [ \ .release = led_dev_release,
! U V& l& l/ D' _; z0 \ }0 ] ^, r' l! g( L/ A( M9 o3 n
};
7 H% D9 k; n% D7 `# |% U8 a
" t2 k5 G. m, U0 k% O" Gstatic int __init led_platform_init(void)4 l0 r- K6 }# U6 b e' m
{
0 `. x# E% i) S& |% G7 M+ f int ret;2 g1 p9 T3 Z$ m! P: O$ u' M" ~) A
#if 0$ C2 ~1 W, D* Y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 Y k- i9 M# h% u N2 d
if (ret)% g/ d$ V3 _+ {& V, A- e N/ L
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ e: p1 o! v% x6 N( h
"%d\n", ret);
! W6 L9 |! O% c: r% y3 R#endif0 L0 H$ r/ L4 F& \8 M
ret = platform_device_register(&da850_evm_tl_leds_device);
8 e7 X+ E9 W# m; o if (ret)
2 e* U3 |1 T2 G/ F& T: N8 G$ g6 i pr_warning("Could not register som GPIO expander LEDS");/ @1 d2 C, L3 F7 k$ r
else
# M3 w8 Z! h8 } printk(KERN_INFO "LED register sucessful!\n");
& |. [8 Q# y2 m) N$ K/ a+ ~1 {2 e: B v, ?. O
return ret;
9 m: N- r. i4 k( ^7 Z}7 C H4 R. T' \( e( X, L: b
0 E, E9 E- J2 G& @7 s6 W1 W" tstatic void __exit led_platform_exit(void)
9 j& C' G. P7 n' Q{- B6 m( y8 r. r* o
platform_device_unregister(&da850_evm_tl_leds_device);
. A% D6 B1 \2 H+ O# N# C7 ]
; E9 @/ g3 U% [, M7 i printk(KERN_INFO "LED unregister!\n");7 v: S) N' L& W3 h; P8 e( c' }6 C
}
1 i1 @& }" U2 ~) ], O" q: q4 K* ^
" b* `6 I0 U4 L1 ?3 z$ l' O1 i5 Cmodule_init(led_platform_init);
! q+ r# M! g* W6 h# fmodule_exit(led_platform_exit);
# n* _, O. F5 @, B- I2 g
, o) U$ M. v$ r: G. ZMODULE_DESCRIPTION("Led platform driver");4 ?+ d6 s8 I% W1 D: B
MODULE_AUTHOR("Tronlong");
% s. F& `/ Y9 ^. sMODULE_LICENSE("GPL");# [. S: m9 I/ J. `9 }
1 x, b& x: M7 Z5 r; c& T
|
|