|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, N9 e. K7 t) B: a( o2 P! K. K
#include <linux/init.h>+ [. \( u" F& D) `
#include <linux/module.h>0 g$ I; Q6 n$ q7 E/ A' T4 C
#include <linux/kernel.h>" b3 o. J& g; I7 m, a: m
#include <linux/types.h>% k$ `- I4 U/ X/ `1 l) O4 N8 q
#include <linux/gpio.h>8 ]4 O3 \. u* p- y9 g
#include <linux/leds.h>
; ^3 m3 ^+ a3 G#include <linux/platform_device.h>
. E! F* t. h1 V9 O' H) L! L( ^
3 ~/ O8 L" M& }0 R$ O#include <asm/mach-types.h>8 B/ T, i6 W. `; q5 |
#include <asm/mach/arch.h>$ l* W: X$ v$ X% ^
#include <mach/da8xx.h>' y) D6 W1 E) \& }0 b; l
#include <mach/mux.h>3 a6 B0 V5 n$ |- z( r8 ^
3 s J+ P& b: U# S! Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 \# q8 ~! r4 i6 {
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" N1 x, G/ |2 q4 T, h
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( H( U: S" T! s: X#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( ^( [" q2 M" K
& J2 V9 x% ^- f; J' S/* assign the tl som board LED-GPIOs*/
* y# o. Z- o/ @* ^static const short da850_evm_tl_user_led_pins[] = {+ _' v: G- |" ]& N
/* These pins are definition at <mach/mux.h> file */, d2 R0 } {" ]. n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," D% e4 z- ?: ^3 g5 p% N) Z- Y
-1
4 d- s/ K( w& x2 T. h};" C* E( w/ O% {6 [! j; t! g
5 k: q! p" H- m1 T' z- astatic struct gpio_led da850_evm_tl_leds[] = {
. T4 p [" X) J; X {
- X- ?0 W0 F4 `' Y; E( P7 z( a .active_low = 0,
% e7 c3 V6 \/ T: I7 g' U .gpio = DA850_USER_LED0,* Q; e7 }% {2 h$ ~$ \# r% k
.name = "user_led0",
+ T0 \& V; o$ {# m .default_trigger = "default-on",
& W1 ^ C9 \, [. ^2 c b3 r) m0 { },
% l& B$ ?2 ^0 A: p* y1 C {+ Z3 }; N8 m. p0 D) `$ z
.active_low = 0,7 a% o I! K: K2 A! g
.gpio = DA850_USER_LED1,1 v* L6 x1 R" r t1 j
.name = "user_led1",
1 m. m6 w+ ^; c8 }4 Y .default_trigger = "default-on",% f& q _6 W+ c
},' x/ ]+ f+ `$ m
{- u, C* s" X% c* o0 e4 t
.active_low = 0,
# z" ^& R; w: M, u* E .gpio = DA850_USER_LED2,, Q6 w' V( O& d* O6 D
.name = "user_led2",
0 z+ e5 p# f4 `' [- x( y3 T .default_trigger = "default-on",7 V: x( B9 d( f
},5 X, b- A4 q, Z. z4 ]
{ n& ^0 A) J- a1 M5 k) c+ t% ^ O
.active_low = 0,
t4 c# H6 E& y8 L3 `( l .gpio = DA850_USER_LED3,
6 r6 ^9 D/ T' h! H7 \& ? .name = "user_led3",6 X/ V/ u3 w7 D4 O+ Z$ F+ y( _/ u4 L
.default_trigger = "default-on",
) N0 @$ ]8 {' n b },
y# N. o7 \% c0 k& W6 E* H};" K& V* i2 o: M* c/ h
5 J( |$ v6 R. l, O7 E8 [# fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; A& I+ W. `4 B1 ~8 J+ y% i
.leds = da850_evm_tl_leds,
2 u/ n0 D" m* ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( q9 g* L4 |) y2 Q2 V1 F$ w& m
};: d3 g* v( B3 p a
% X8 n" I' q! i7 T
static void led_dev_release(struct device *dev), w7 P5 w7 J8 m2 F9 D
{
, E% W+ c% K/ [8 M! b};6 w) J, y/ y+ M; p2 v; A& w: k
. [4 U8 ^2 s( z! n; h& }4 o7 f
static struct platform_device da850_evm_tl_leds_device = {1 L* ~& ~0 R8 }7 s/ ^# K9 k- G
.name = "leds-gpio",
6 { R( S) W6 ^& I .id = 1,% W9 a: x% Y \" K
.dev = {
* o3 E7 j3 L8 G6 Z$ { .platform_data = &da850_evm_tl_leds_pdata,
2 l) w) B' C, v" @; O .release = led_dev_release,% f0 B' ?% O. q5 p, V! C
}1 q; j1 Y$ B* g0 P
};) ?: J8 O1 f+ `2 T2 V
6 s; B$ q; z, B# R) n7 [. n% `static int __init led_platform_init(void) ?- O. G7 `# T# E7 Y2 K8 i3 K* P9 }
{
# d1 |: Q; ]7 k8 R+ Z int ret;% I/ S) J3 I$ t9 L3 h( s
#if 0# Y. `# O3 M2 W
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& i k, w" F' P0 \ |+ n9 B8 e if (ret)
# J9 w* Z+ a5 a/ X! E; x pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ z. S) H: D; ]3 `2 o6 K9 v+ t
"%d\n", ret);- [$ Z! q/ D3 _5 I" j
#endif2 X) W( y# K T
ret = platform_device_register(&da850_evm_tl_leds_device);4 F' ]6 X" f1 [% t6 _" K
if (ret)4 p S5 ^" M. ]; [* [- @
pr_warning("Could not register som GPIO expander LEDS");
3 d5 |& h0 p, ~ else
3 f! v( {& e, W8 A) E- h' ^ printk(KERN_INFO "LED register sucessful!\n");' |/ A+ S8 B' R4 d3 n; s
( f) h1 h7 C( t( G2 Q ?. h
return ret;( T% h/ y* c" d7 t; W% \
}+ x4 l, U9 X* b2 j8 a8 V
: d1 \8 ?. E6 Z4 c4 m6 {
static void __exit led_platform_exit(void)
# h* {: u- `( M7 A* \) [{
) h: \ T. ~. E! N platform_device_unregister(&da850_evm_tl_leds_device);. }& T6 U+ Q' J! ^4 S% { I8 Z
# H5 W6 p3 l4 J3 ` printk(KERN_INFO "LED unregister!\n");
- L9 d2 A" H) R1 {}
; z7 |+ c! J8 b% b- s+ q+ Z* m, G2 h/ |/ Q3 T
module_init(led_platform_init);
. F0 X( G, Z; c- W! x9 S0 P9 umodule_exit(led_platform_exit);
' u" j5 `8 |1 T I1 m7 S+ ~6 o% a9 L. Z( \: U# x! e
MODULE_DESCRIPTION("Led platform driver");
& J+ Z2 @0 l# T5 l) S( x% QMODULE_AUTHOR("Tronlong");% n3 l2 u' O' C- N
MODULE_LICENSE("GPL");9 g) y- b$ M, ?. b
1 n) C! `; q" Z \- \; \! M3 w |
|