|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" C8 P) |; B" n9 e#include <linux/init.h>
4 o8 X) Y8 b: C$ \! W) }% l#include <linux/module.h>6 ?: g" ~1 k3 S& I0 D% C5 v2 `7 F' k7 ^
#include <linux/kernel.h>
# s+ l5 x( e7 D! w0 D) u#include <linux/types.h>
6 g. g) w2 z# w, @7 m" s#include <linux/gpio.h>
. ^! n: C9 e9 g9 c5 \5 \#include <linux/leds.h>, O6 R- s; r& o" C9 z: M
#include <linux/platform_device.h>2 j' c- P e. c
3 a: M5 h& H' U5 O
#include <asm/mach-types.h># z3 j$ K& s8 S' v
#include <asm/mach/arch.h>
- q+ D2 w' S {$ h2 U# V4 n; B#include <mach/da8xx.h>
6 ?/ V0 D- h2 R" d#include <mach/mux.h>
1 A% |" T2 e& B9 m0 ^! }
+ [+ c/ B6 l% D* d! h#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 R: R7 m3 L5 I7 [! a#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 B! S9 r4 ?! e: h#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 u8 W8 Y) i( N, d; ]#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# F+ i4 r- _6 U) _9 Y; a* f4 a; T1 k% z
/* assign the tl som board LED-GPIOs*/' x6 G3 R' k L' z( t
static const short da850_evm_tl_user_led_pins[] = {
/ H, ^1 k# L( P$ Q; H0 n P /* These pins are definition at <mach/mux.h> file */( g4 q1 B* J- x7 n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 Y6 O! [5 q1 e( ?
-1# H& W9 F! I `! m* j, y3 c/ z
};6 s+ n$ B8 p4 `% M0 n. b
& S8 C# b9 B* }0 D5 Bstatic struct gpio_led da850_evm_tl_leds[] = {
3 M3 j- ]! y$ y: ?7 l- Z {) U( f( e/ P, Z: l
.active_low = 0,
2 K5 Q2 j5 [& }* D .gpio = DA850_USER_LED0,
! T( g" e( O: k% U. {& ~ .name = "user_led0",0 B, m7 f0 f' X- q+ ?3 O6 I
.default_trigger = "default-on",) d- m; X6 Q8 a& V8 {
},
X+ y! f0 B B A* V1 N {
# f1 o3 g) L" i: | .active_low = 0," L8 V* n' z) ]. \
.gpio = DA850_USER_LED1,
7 _3 j* ]7 a- D2 r& F* h7 S- r .name = "user_led1",6 q( |* ], E( w; s0 w1 y
.default_trigger = "default-on",0 ~7 ]! F: A# y' C4 J9 n
},: S% k6 z: a" m
{/ D |$ Z. I1 \ b" s
.active_low = 0,, ^. L4 {9 }! \1 k j
.gpio = DA850_USER_LED2,( k) `0 n8 F3 W; N2 q% Y# i. q, D% ^) ?
.name = "user_led2",! _6 l9 G3 g; T% F) I
.default_trigger = "default-on",
5 t. ~) c& [2 O5 ~/ g1 g }," v- ]& {4 t! h# z2 H8 Y6 A
{+ c5 R% Z. o5 V) S
.active_low = 0,
3 m. M5 k; r; [4 l .gpio = DA850_USER_LED3,$ ^$ n2 h G+ Y3 p
.name = "user_led3",
1 m! j; u4 h4 \- X% `1 i h .default_trigger = "default-on"," T% v" a. r% @
},
! a* E: z) ~9 h0 Z: K" J};
$ ? ^# J. l8 T/ X8 ~
# T4 \( c: j% ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; U/ m& P7 a* D- V0 V$ s4 [- u
.leds = da850_evm_tl_leds,
- G4 k( Z' t5 i/ \8 `# b0 f .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% Z+ Z s& G" }, O# j/ J& O/ J! G
};4 k: b$ [0 T, r" z" P' |5 Z) H
, e, A% U. e( Y' r" O& l
static void led_dev_release(struct device *dev)
3 M$ {: p* A; J% S5 \{* P" x* P9 v* o0 `
};
; e6 s4 b3 d) B* N2 a+ x0 i0 r5 C! f( Y8 r+ S; o N
static struct platform_device da850_evm_tl_leds_device = {
i3 u* _5 F, F& G0 J .name = "leds-gpio",. [; i8 M3 g2 |( O4 D7 J
.id = 1,
0 C1 B2 P; a3 V1 B4 E+ f .dev = {
Q, l% F$ O( d( y4 D: a0 M6 h* H .platform_data = &da850_evm_tl_leds_pdata,
! s T R0 G/ S' a" l/ Z .release = led_dev_release,
y" P% N* i* x8 D6 j% @" ~# o# v } r' K4 h0 T3 B, e$ V/ D6 ^8 l: e
};
7 F( e$ T+ A( Y" c8 D
8 b( |- F0 \: i' @static int __init led_platform_init(void)
1 d7 t/ G% e+ a) I' U4 M4 _{
; k( D* s0 V' h int ret;
6 [6 K" z- q1 A#if 0
8 C- |7 e4 \% Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. t" Q6 h6 H9 L; \3 p" ~ if (ret)# U* k! J/ x" m$ {6 f6 ?" ?7 K. ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- \7 O; Z4 Q" v) ^5 A "%d\n", ret);- I( _/ P0 ]2 N2 I. k1 s: j- {
#endif; p( \4 x5 C1 I" O" V( c! Y
ret = platform_device_register(&da850_evm_tl_leds_device);
* K- w/ R+ V8 o' V if (ret)6 w6 P! Q( l0 W2 ]4 U/ g
pr_warning("Could not register som GPIO expander LEDS");; I* p* R: U+ y" {; o, u8 J
else
7 p8 F w9 a. } X9 d0 ~ printk(KERN_INFO "LED register sucessful!\n");
8 Y& u- l# ~% ^7 v: h( A% h2 A) y+ ]
return ret; f# m* {& w# A- }
}
& @3 L: i; z' N8 ], Y. B+ }1 Z# s- [0 E! W" i3 u9 [3 t) R
static void __exit led_platform_exit(void)
; o) }- B7 _# K' {( Y# Z! Q{" `/ c7 a& i+ E" s) ^
platform_device_unregister(&da850_evm_tl_leds_device);
" N3 r- h- w' Q# n) @
. [ o- V! N) ~0 { printk(KERN_INFO "LED unregister!\n");
5 i9 K& y& d: t A; {}
2 e$ ^: U& v: i2 b
3 j* Q, q8 E- W8 D: emodule_init(led_platform_init);: [4 B |+ D( u. Y
module_exit(led_platform_exit);
1 v# r( u9 Z. b2 X0 B& A* g+ U' y& f7 b7 o! `/ u3 p: N
MODULE_DESCRIPTION("Led platform driver");
% j) I7 N/ F! p, P# w! R, SMODULE_AUTHOR("Tronlong");$ j# a W4 k; a( T/ ~8 b# z/ n3 e Q
MODULE_LICENSE("GPL");- p% }; b! X ~) M/ o/ E. f4 p O
3 |( O5 {8 h9 a- d: r v |
|