|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; R* g0 J; ^0 z( g l2 D% L
#include <linux/init.h>7 l. w8 i; B4 k! c
#include <linux/module.h>
. S2 s4 }; e! J3 f/ P7 C#include <linux/kernel.h>; [8 t# t# T% z V) `
#include <linux/types.h>8 Q1 T; X s" ] k
#include <linux/gpio.h>, R. _2 k5 g7 x- Z
#include <linux/leds.h>
' N9 @+ n$ S5 P, ]2 g- n#include <linux/platform_device.h>+ O! H8 ^1 ^; X
* W6 u* V, \: g+ x: X#include <asm/mach-types.h>
K" T+ m# d4 _# z- w/ ?6 w#include <asm/mach/arch.h>0 o/ [' _, |6 w- m: M6 J, `6 Z
#include <mach/da8xx.h>7 U( G3 W& n* x$ K
#include <mach/mux.h>7 s7 D* R7 ^* W- m
; j- `1 `. n2 }+ e, m2 g#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; o' I6 H6 ]" Z+ o' P5 S- j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( n! W& m7 N4 j' j1 |#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) s4 R" ]. E; u f' }#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. y- z4 s) k) D% V9 J7 M2 s
! ^1 j$ M9 m' X! o* ]! g/* assign the tl som board LED-GPIOs*/
/ g0 k& d1 v3 y3 sstatic const short da850_evm_tl_user_led_pins[] = {9 K2 a5 o O$ g4 n
/* These pins are definition at <mach/mux.h> file */3 r/ P' ?2 N6 r( Q/ G( I7 S' O
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 N" O* J. l& S+ @ a4 c! [
-1
2 q) q H4 i. s j& k" a};, r$ b: R: ]4 E' W
' I2 X& y+ R& S# }6 a2 i9 J
static struct gpio_led da850_evm_tl_leds[] = {
' g; f l/ K+ F D4 q+ C: {" H {
# q' t9 p6 g4 P8 y* w .active_low = 0,6 l9 ~6 j) r: d- G# m
.gpio = DA850_USER_LED0,
. Y( s* F, y) d& _" m& x6 k C .name = "user_led0",9 O, \- ]+ u- c
.default_trigger = "default-on",
: u7 L3 D5 Z. ~' y+ Q },
, G) R" k2 E0 Y* w/ V6 L { t; z8 e3 c& ]- y' y6 Y- I C3 k! N
.active_low = 0,
! Y1 w; M( U) J0 C* a5 c* z3 I$ { .gpio = DA850_USER_LED1,
' x8 h s0 _1 `3 e .name = "user_led1",4 V5 @1 y( w# N% y
.default_trigger = "default-on",7 v/ m& Z* x) n6 e
},
3 G' U; i- }0 I0 ~; [7 W; Q0 V0 \ {% m. I- Q: M# G' h, A
.active_low = 0,7 ~! e6 [4 H& E2 k- p) A2 m
.gpio = DA850_USER_LED2,4 V( j5 f) Q: M* q. n0 t
.name = "user_led2",
2 \0 H, D# V& m/ b) a" r+ K/ {% y .default_trigger = "default-on",) Q" f& N) ^- e; w' Z
},$ R- G3 I+ \# {1 w
{
* w5 Z" {* T6 L; v" W .active_low = 0,+ R7 x5 X1 D' G4 a( Y6 S
.gpio = DA850_USER_LED3,
+ ?" C" z& L! m/ k! n ]9 a' ` .name = "user_led3",
i/ v0 i& Y; A .default_trigger = "default-on",' g P7 [; n. w/ D; J4 ^+ u3 q* L
},# h7 f7 m) w9 K. v
};
4 }+ Z% A3 l9 N* y- U, @
9 C3 a# V3 N* y8 e* f4 F qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; N: j' k" P4 J .leds = da850_evm_tl_leds,
9 ^7 {1 I. ^; j$ B! ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 ]9 u: n( W. c- A2 Y: Z
};: [! ?5 L& o8 k2 \- T; |
5 O" E8 Z. a2 i0 Z; F" s! Rstatic void led_dev_release(struct device *dev)
6 x4 G! D; i2 ?: S% N9 ~5 j{; ~" ]7 ]4 J( d
};4 g- T: {6 d3 q. e# k5 ~
! }4 N. o( L% c/ _5 f. Y+ Wstatic struct platform_device da850_evm_tl_leds_device = {
9 ?; p/ V0 d& O5 w! d! r .name = "leds-gpio",
0 C1 R4 N) b4 w! T4 `4 I .id = 1,
0 S% l% x: p4 U& D% L8 D/ p7 Q% l .dev = {7 L$ \/ }8 ]& b1 R
.platform_data = &da850_evm_tl_leds_pdata,
4 K% _) r ?: m5 }. q .release = led_dev_release,) ^8 q. m' p* B
}
& g5 z4 q4 o7 `4 R( f};
% _2 e0 h& l0 \ j, g( w4 ], c2 V0 u) e4 p
static int __init led_platform_init(void)* I1 ~ B: |! ^; `
{
& Z" |4 g9 b% d1 m& x9 \ int ret;8 n9 u4 \: m Q" C9 ^7 D0 m
#if 0
/ p/ S& S4 d/ ^ W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! x- J% @/ U! K/ U! L" m
if (ret)' ? p4 [, P }9 I, {9 z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* ^" u* b) O: m) p5 [' F "%d\n", ret);8 `: r1 q( T) }; }4 n5 Y
#endif* l1 @6 o, ?& A& h% U
ret = platform_device_register(&da850_evm_tl_leds_device);: T2 z3 q$ l* ?/ y0 L7 F- D
if (ret)
! Y g/ z9 ]2 h9 [# G9 l pr_warning("Could not register som GPIO expander LEDS");
3 g- D% \/ ~5 @+ k; B else2 Y" C: }# _ Q9 b0 e
printk(KERN_INFO "LED register sucessful!\n");
$ e f- P" @/ M6 Z3 K
1 E! V! T& L: Z- H9 Z( `0 P return ret;
) d: }- l3 y1 z. p5 @. w" o; L}0 R# ?( q9 o! B M& Z
1 N) k1 A! T* L! z5 x; Z* d1 Z* E- `$ jstatic void __exit led_platform_exit(void)
. q4 A, M% [1 d( P5 P{5 d# P2 X" n9 F! c9 N/ o
platform_device_unregister(&da850_evm_tl_leds_device);
; d9 ?+ F: k% r8 I* a- @# q' B" a+ J: W; B) J, c2 u
printk(KERN_INFO "LED unregister!\n");, Z- H1 \2 c7 \
}
. ?" ]% |$ A9 p* G$ B8 `$ @/ e$ ?. q5 \/ |
module_init(led_platform_init);
) x8 o& L! P5 X* emodule_exit(led_platform_exit);' r3 N' C( o' ?* a+ F/ j7 p
( T6 F# L- J( ]: u. v2 X
MODULE_DESCRIPTION("Led platform driver");
$ @; O1 m- a: gMODULE_AUTHOR("Tronlong");! ?" x, J3 r7 @8 W7 \9 z; O
MODULE_LICENSE("GPL");
. S& U" Z. a* _+ {5 F3 v* f# Z+ J
( Y( ?, K% j+ z1 T( x |
|