|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 C0 J* Y, d( N0 v( ^) p#include <linux/init.h>( |0 d0 N! D% I% q$ Y% Y! g! K! z
#include <linux/module.h>8 |' ~& s, D2 k
#include <linux/kernel.h>% w( l0 \0 u: T
#include <linux/types.h>1 ^! b1 x6 s& o6 V9 }" n. H* d$ s
#include <linux/gpio.h>4 J6 j7 t) D+ X1 ]/ u1 p
#include <linux/leds.h> _9 d" A: I3 T; P
#include <linux/platform_device.h>
& u! {3 @0 n4 Y6 e& U [% ^! Z9 K" N8 l4 t% V, g. Z" F
#include <asm/mach-types.h># n/ `$ ^3 J8 I
#include <asm/mach/arch.h>
, @/ q, w: [0 `& v" i+ }#include <mach/da8xx.h>
! `. L4 Z" a. Z/ v# I4 W$ O/ x#include <mach/mux.h>
: b N K7 G% a; m/ B* _; {: c2 o L% M, M$ M2 ?) u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ A8 m& Z& l, N2 d$ R9 k
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: f& u- g) x6 v G#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- x7 L0 z; {" N7 y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 V% `! R- S6 H$ y- L
$ [& A5 g( J' ]
/* assign the tl som board LED-GPIOs*/0 h/ R7 x9 D3 Q. g8 s
static const short da850_evm_tl_user_led_pins[] = {
6 u8 g7 f: o$ H6 @9 O9 b /* These pins are definition at <mach/mux.h> file */
, }" ~% V: R5 C# @2 ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, S8 g5 o7 ~1 r0 t" g/ O4 V( E
-1
9 `' o, H# U( H( b};4 H8 R3 X5 U* E/ k7 E
) `/ D/ p& \# Astatic struct gpio_led da850_evm_tl_leds[] = {
) x, h4 P+ X9 g; |3 p3 ` {# V4 J% K+ {, `/ |
.active_low = 0,) y: A, S8 [" U
.gpio = DA850_USER_LED0,
# B$ h$ _5 C- `5 r .name = "user_led0",
- U' K6 c6 p* A" o- j% _8 F5 I .default_trigger = "default-on",
' }7 _) O" m8 X+ S C },9 F2 i9 v5 U) C2 u/ h
{! r* q7 P: f, t$ Z0 \) F& ?
.active_low = 0,+ E0 p1 Z5 o X* L
.gpio = DA850_USER_LED1,* r5 _( g: z) K* k" |1 j9 z e
.name = "user_led1",
" k0 t' L' W) d6 d; y, a .default_trigger = "default-on",
$ v" w8 X( i( Q: t8 T+ z8 A },
- W# t6 n' `" B [5 ~! g {
5 ^' z" \ j; \5 u: L3 Z$ } .active_low = 0,2 ]2 g, F% }0 m3 i) o2 [. m' p; Z
.gpio = DA850_USER_LED2,, ^% N/ W( n7 K! Q4 D( d* a
.name = "user_led2",8 n- I0 L# i U/ m8 j
.default_trigger = "default-on",
& u- B: E% ]2 N },4 i1 k0 m$ v: L* m3 E
{3 T# r" E. e' V, a$ }& t
.active_low = 0,# j- x1 q; O# P( w. c
.gpio = DA850_USER_LED3,+ w5 S! i( _2 G* T
.name = "user_led3",
4 H! g' l. j3 K$ [2 |: Y% Q, r. o .default_trigger = "default-on",
0 a( r+ c5 i1 K& q },+ s3 I# ^/ L+ c0 R0 c! N2 o
};
6 p, k6 y+ m6 i0 g, K8 ~7 J9 W, v# a4 G
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 w0 B& \. s0 D, d3 o
.leds = da850_evm_tl_leds,3 {- M6 Y2 [3 T! ?, t" l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 i6 r; N2 v* @* o" K/ ?7 n
};
2 Q3 G$ ~' c }! f# L2 |
3 a) `& w |* a6 g" h& gstatic void led_dev_release(struct device *dev)8 z* ~4 f9 k4 u6 D
{
- _9 m9 Q5 }; K( F& G' }};" M$ }4 X6 z% \
3 k% k9 N o7 `3 d. }9 Cstatic struct platform_device da850_evm_tl_leds_device = {2 y$ B/ j/ b; Y9 p7 n k8 r
.name = "leds-gpio",
+ J6 X- Y3 [. v4 v! s7 t- J( o/ h3 m) T# C .id = 1,
: I! V5 ~, G, O& n6 G: l .dev = {) A0 q$ R3 @7 r- i0 C" S4 C9 [% D# d
.platform_data = &da850_evm_tl_leds_pdata,
% i0 y& O9 \$ P7 v .release = led_dev_release,. _8 F/ I Q o7 J
}+ x( ~* x, A; R$ Z
};' X0 _% B* r/ ~( z3 w2 J. J$ f V
" L; n: N) E7 G' t9 e
static int __init led_platform_init(void)
' _8 H( N4 @7 k; x) m" v( u% Y{; ?% s& P5 u0 t
int ret;
) A3 `- N0 y" r7 G5 X: f0 A+ `& e#if 0; Q# k4 w" D7 z1 e9 W& V" V
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ `* _' _( Z+ H$ a if (ret)4 _2 R4 d4 P: } ?! k
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 \/ e9 o: E$ ~( F# W. I3 x" t "%d\n", ret);
6 j$ C( \+ Q) m7 L: e8 n#endif2 t3 [1 @6 G9 M( [, {9 s
ret = platform_device_register(&da850_evm_tl_leds_device);
" }8 l+ l7 i* I if (ret)
' j2 m1 F S$ ~0 L* `, H pr_warning("Could not register som GPIO expander LEDS");
* c2 n0 Q2 B+ r; L) b' a else
3 |$ P) E! p+ M4 y, { printk(KERN_INFO "LED register sucessful!\n");- `! b0 }' T# e. E1 G% c, x
: G& ^6 G! F" z, H2 \
return ret;
% z5 b8 U6 u, K4 i, e: M: s}
$ a! C9 M- ~' Y) g6 \ N
3 j# v. e- G) K' D! A: Y% g0 Gstatic void __exit led_platform_exit(void)
* F* j7 J/ _! e% Q7 w{1 d( N; s% B, S7 G9 |# |+ ^! d
platform_device_unregister(&da850_evm_tl_leds_device);% [" o7 o8 b/ m6 ]. V
" a2 z1 s- C- _# h' @1 V- F printk(KERN_INFO "LED unregister!\n");0 q1 J8 M. ~0 J4 r4 u# L
}
) G9 d* W, B9 i, a6 L+ g! q/ E9 `+ N; U% Q5 x% d2 |% Y
module_init(led_platform_init);, D' T% r f/ Y; x5 @) v
module_exit(led_platform_exit);
9 C+ j8 Q9 k3 }
# ]; L& r/ {- s* v& UMODULE_DESCRIPTION("Led platform driver");7 y2 B+ y$ x4 a
MODULE_AUTHOR("Tronlong");
" w4 Q L& r3 i# x7 v) j! bMODULE_LICENSE("GPL");
]# X& F; [$ k/ H5 y; z7 h
& ~* I2 q# k4 L4 B& u' j; Q8 Q |
|