|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 G' `4 v3 n5 F+ C3 v
#include <linux/init.h>, m" B! ~3 J7 C7 j: d
#include <linux/module.h>, Q, l3 `- _# y, a& j
#include <linux/kernel.h>
3 O, q+ b# s4 S#include <linux/types.h>2 l, W: s5 K- Y1 p
#include <linux/gpio.h>
9 {" T/ C% _' n! ]5 r. {9 O6 }#include <linux/leds.h>
/ ^8 P% X% L1 {#include <linux/platform_device.h>* ? u, d, ]5 Y _8 e; ?
* r- Y' U4 K& j9 ~( {% y#include <asm/mach-types.h>
4 ^/ h+ J3 C: p$ @/ N#include <asm/mach/arch.h>
& }8 k9 z, T! e0 T! `" C# ^' U#include <mach/da8xx.h>
E! [% C X# P7 c, _$ D. _* T8 a8 o#include <mach/mux.h>
8 S& X' n: l' W" U' G/ X
; X; t- x$ l9 C#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; v/ @& k6 d0 Q* V1 s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 Q3 f' s4 N* F1 D
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* ~* \5 F/ ~/ z/ p3 j#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 b# q% ~" d; {6 G
3 g4 _+ I. `* a8 B5 x2 L+ M/* assign the tl som board LED-GPIOs*/8 A4 }8 K* w2 R, S/ h
static const short da850_evm_tl_user_led_pins[] = {
6 D% R9 ?& [# Z$ y$ l /* These pins are definition at <mach/mux.h> file */
) G! ^: c. T5 U/ L DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ i* s3 b% e2 g3 x! K -16 |5 n8 j2 B# s, v
};
% D0 ?6 Z1 u$ h* m V/ G- s8 ?) m# D" s4 U$ R
static struct gpio_led da850_evm_tl_leds[] = { D+ b4 n" Y+ U+ X9 B+ U# o
{1 U/ }* U) `, |9 \ [6 q
.active_low = 0,% o1 s! I) k7 Z/ n
.gpio = DA850_USER_LED0,
+ c% @" ?- r- T1 o2 u. ~ .name = "user_led0",
' U( c. b7 C/ Z) r1 y# D .default_trigger = "default-on",6 W0 M. T2 m2 K& O7 z: H6 ~9 Z# G
},8 d9 F2 {. u) E& o) p
{* w8 W, n4 a+ i* b
.active_low = 0,
. S/ ^0 j" F( ^7 N/ P* | .gpio = DA850_USER_LED1,- M* e4 n; r5 B. B+ w* _
.name = "user_led1",
1 w# f4 D6 Y1 f& D6 W* J8 ? .default_trigger = "default-on",
: M: J) v$ U+ m0 n% F0 o },
9 P2 h x/ {, l; `& g {8 X- x- A* b- z0 p
.active_low = 0,
8 D) e. J; I, b- O) q .gpio = DA850_USER_LED2,8 P7 g+ }+ `1 w# N' T
.name = "user_led2",
+ h- Y1 m& T) t# k' G5 _' T4 \- \ .default_trigger = "default-on",5 A$ f- [& \4 q: B( T) F8 j
},. l! `) R/ {0 N/ `1 Q
{
+ Y3 S7 s8 h% v' w, P6 [ .active_low = 0,7 U8 X6 r2 @6 g, {4 ]* e( W
.gpio = DA850_USER_LED3,
$ v8 W3 a* f" T% c .name = "user_led3",9 e0 |3 o' Q9 x# h% b F f" ^
.default_trigger = "default-on",9 F: m4 F; S; R2 v, F( F3 B
},
% L; u* C' }3 k, f/ `' S @};) n! |+ {8 [& J
. ]3 E/ ]0 ^$ F; B* ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" `3 y2 Y' x" l' w7 `
.leds = da850_evm_tl_leds,4 h% P' S' v$ o2 M$ L6 g# `& i
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 @0 h6 T! N5 T, V8 ? j};
R# o* E3 B6 K7 _1 W9 d: j8 M4 J, P+ j/ _
static void led_dev_release(struct device *dev)- n$ `6 n' V4 U3 n8 A
{
+ u' @ S, }! @: n$ w2 Z3 `1 j};
0 @3 n/ |$ ^/ o/ [# x
2 A' _- }; v" c8 ?5 a5 {9 qstatic struct platform_device da850_evm_tl_leds_device = {
5 r" D7 x8 S* z9 K .name = "leds-gpio",
* | P7 B+ G0 M* ~ .id = 1,
' H0 }! A4 j' c .dev = {1 w; C: N7 ]& l ~( i. D# N
.platform_data = &da850_evm_tl_leds_pdata,
% R# B$ o% D* _9 C3 W7 i3 [ .release = led_dev_release,
6 L& E/ g9 l3 x- ^ }
7 {) W$ p8 w x5 ]};- l% _& v. G9 J h
+ Q- }) C# d* K; \
static int __init led_platform_init(void)3 t; u0 p3 d1 h6 n' X; t0 X3 `
{/ t O* O& b2 D- G* K6 S
int ret;% ^% M6 ?! ]2 y
#if 0
% I8 q: B. Y8 q J% E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
k+ @/ }5 J" v7 k" B if (ret) Q0 z! |. Y! x7 C' y! j. P
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% U. u ^1 _" F' o, J "%d\n", ret);5 z! p! R1 p7 Q) N
#endif7 Q* P: \" J$ Q/ H8 y! k9 y: ~0 H- H
ret = platform_device_register(&da850_evm_tl_leds_device);
1 A( y3 H( N) l$ f if (ret)
; l; Z2 @8 C8 e- J pr_warning("Could not register som GPIO expander LEDS");$ b8 X$ f% B9 t/ I5 q, o
else
) z: i9 @3 i) } Q3 k) a+ Z printk(KERN_INFO "LED register sucessful!\n");" @) Z# A1 o- `" y$ ]
1 y5 Q$ d+ S6 r3 c( m: C return ret;
! j. M! z0 ?3 J1 |# T+ \! v}
) h7 O% B/ S ?& g2 T7 K9 x3 e" b* h1 W9 ~' M4 w
static void __exit led_platform_exit(void)
. G. x H6 q7 Y4 i{
* I! k" k {& D7 \6 j platform_device_unregister(&da850_evm_tl_leds_device);% s/ X/ _7 x3 }) z" @
3 j8 k4 `: r! m4 a& m- l
printk(KERN_INFO "LED unregister!\n");9 p( e& z. d) K+ J; e# g
}
* @& |/ ?& v$ h1 C6 k0 I! _$ S- R' v& a
module_init(led_platform_init);
& d/ n R% u& z4 U6 Hmodule_exit(led_platform_exit);
2 m( Z, x9 O; A
2 d5 G1 g; A& b V% o" nMODULE_DESCRIPTION("Led platform driver");
0 O( K9 a1 L3 y1 u" z: a) fMODULE_AUTHOR("Tronlong");
$ W* S$ V8 s) _MODULE_LICENSE("GPL");
) G9 q% G+ F3 V- N$ `! c5 c1 _0 {7 j) C" _/ j$ o( I4 \4 _+ |, Y
|
|