|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 |+ ]/ H6 q) |! [/ d3 j# L#include <linux/init.h>7 O/ I7 v) D" M# K5 y& M
#include <linux/module.h>: w* J+ [" `( Q1 i! k
#include <linux/kernel.h>' }* d3 F5 {' D7 p: ] g2 N
#include <linux/types.h>9 Z# U& i1 G; t9 H) q
#include <linux/gpio.h>
9 l3 @' z; m7 ~- w: B& Y#include <linux/leds.h> C% m7 E0 F$ T9 @( Q; M
#include <linux/platform_device.h>
( g9 [! v }# ?* h) y
; W8 j) p) Y: f8 R% B; w- o#include <asm/mach-types.h>" G+ I+ J" K# J4 W- [; {3 {* ?
#include <asm/mach/arch.h>: h2 r n* f S" T# r# O0 t/ U
#include <mach/da8xx.h>
8 V* j0 i0 I# W8 d3 `#include <mach/mux.h>
* X/ Z& A9 @: y4 f
, J* R2 V3 S2 S2 f' s6 g5 k; E#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
~7 S* }) J2 i, l9 s7 t#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). h7 U+ H7 m& G3 l0 u" `' L
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; L( [1 W' j# H5 t2 I3 V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) o% O/ M7 k7 ?$ ^' }$ U$ i4 a* F
0 l3 n* t1 \5 { w# ~/* assign the tl som board LED-GPIOs*/6 f. m" c: v; v
static const short da850_evm_tl_user_led_pins[] = {
: K5 a/ ?: Z0 G/ T /* These pins are definition at <mach/mux.h> file */
1 @) X/ B0 n! Y$ z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ \9 }* ~" X$ I: M# M2 R
-1$ j m, e9 @- k1 |7 b5 {1 G7 j9 u
};
8 F6 z k1 ?/ @) S. k; ]" R: s" `1 K' i M& `7 M0 G
static struct gpio_led da850_evm_tl_leds[] = {- c& f! D) e5 J6 g+ r' z9 [6 c0 d
{
( P) @ t% Q' X' q6 i5 ]- w' B .active_low = 0,
; r% G: J2 S4 F2 b0 Z# Z5 z .gpio = DA850_USER_LED0,
, S" A5 o2 m! c; [5 j* w .name = "user_led0",3 S0 l9 G5 m8 [
.default_trigger = "default-on",3 r& X, u. n2 z( S% {
},
/ E1 l9 L) `' m& v3 ` ^, a {, ?- J0 }) Y( i( Q2 \
.active_low = 0,! y' B% _+ P- [5 V
.gpio = DA850_USER_LED1,% ^3 j# ?6 o) y w
.name = "user_led1",1 M* V! f2 t! c
.default_trigger = "default-on",* f$ j! S6 M G A( r
},9 [9 s8 b9 v: p* o9 F
{+ W* M% F! z$ p; U# w; k
.active_low = 0,
* L8 Q/ v3 v* v$ ` .gpio = DA850_USER_LED2,
) J* @; x5 u) ]! }4 q% w6 e .name = "user_led2",5 U* ? M; {0 b) U9 X
.default_trigger = "default-on",
2 W, j* r! v- a' u },7 d7 l- G5 i# [8 [5 M, z
{. P/ X2 K; R; e
.active_low = 0,
. Z+ i* B& k j C2 Y) C .gpio = DA850_USER_LED3,
" L9 S" H2 V3 e3 S' z7 O .name = "user_led3",! ]4 p2 r; |8 V3 G
.default_trigger = "default-on",7 D% N! [5 F) V$ {
},
9 X3 S0 Z3 M; a# m, b7 E# d};
, `# W0 ]: F7 j' ?( a1 G- {0 K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 k7 H" v2 ^5 I. d( d3 u .leds = da850_evm_tl_leds,
+ I/ D, S: Q( G! h* z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 r1 a. Q+ P; Y2 G/ x: q7 G
};
; a# h( a) V7 a/ t# \
+ f* m/ e, @% J; G+ y% lstatic void led_dev_release(struct device *dev)
. F: W, ]$ E) |. s6 \{
! T# m0 ~7 z& f) u7 l+ P* q};
% m- W% Y9 J7 h; s* j: s# O) B+ u |8 c4 H8 L& }2 i( j
static struct platform_device da850_evm_tl_leds_device = {2 `5 g) f$ V7 S; p! I
.name = "leds-gpio",
$ n( ^. U3 y/ o- r( X5 ^, F9 j l .id = 1,$ w; A1 `) d3 s) }/ Y
.dev = {3 F% N/ q3 p) F8 o+ l
.platform_data = &da850_evm_tl_leds_pdata, ^+ B0 G9 |( m# C' j. a3 D& _
.release = led_dev_release,. F* A( O' ?: T5 W7 _; B
}
0 B# C! L) m, s, O5 ~0 `};. X& {9 Q2 c0 O5 L ?( J# v( D
4 H" G4 M) L( F
static int __init led_platform_init(void)* e: v2 D$ o# L; @: z
{
3 [- `+ W$ h; W! z2 G" ~' v, s+ M int ret;
/ ]( x. d/ d2 k#if 0
3 o$ b2 h; |7 ^/ e ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. h4 y# b' x* _* S% E% b if (ret)
% F0 N) O5 V. ^2 O! r9 L/ Z' Q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& y0 x$ {3 L) `% R) {( C
"%d\n", ret);8 a6 p: d8 s8 G* T4 O+ Y
#endif
6 f+ c1 j" N) a3 l' U/ z- _7 P ret = platform_device_register(&da850_evm_tl_leds_device);$ ?9 @* ]5 u9 I4 l3 i: j
if (ret)! G3 g% V+ m2 C, a! f7 i* m
pr_warning("Could not register som GPIO expander LEDS"); W" Y- k8 W* q: M' ^% c0 K
else- Y/ ~3 A0 J7 g0 i/ X
printk(KERN_INFO "LED register sucessful!\n");
) E* d, ~- o1 u! h2 \$ d
& D/ G5 S3 V$ k, U9 e return ret;
! z; h, P& M3 s$ q5 M" L! `}
& H! w2 Q( A; K( n2 v, h, Z1 ^& J3 v# ]5 |+ _& f
static void __exit led_platform_exit(void)
) g9 G. U% S6 X Z{
/ E' L7 Z) U0 G' f: s platform_device_unregister(&da850_evm_tl_leds_device);
1 v1 o4 a$ B5 t& D
: u+ }( [( a% G& s2 P) `: l; S- k printk(KERN_INFO "LED unregister!\n");6 U% k5 Q5 z7 D* H8 D
}* Y3 f0 w) R5 K! K9 a9 W
$ U$ f; e8 h* ?" M% N- t7 p" }
module_init(led_platform_init);, B5 O7 r% s' B* H5 B2 d4 X) W+ F C
module_exit(led_platform_exit);2 ?& e& y' P# C; p6 ^4 {
/ m' y1 I1 J; k* p$ B& d! p7 F _
MODULE_DESCRIPTION("Led platform driver");
0 e# }7 e3 \' @6 hMODULE_AUTHOR("Tronlong");
$ h, O( C# G. n9 q* H# O7 _MODULE_LICENSE("GPL");
+ h& s( N8 L7 n' a0 G
& M% E, L% x0 c2 }" c |
|