|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 C( R, {5 V- ~# \) r$ q. }#include <linux/init.h>
( s9 Y2 r1 Q: @#include <linux/module.h>
; T% ^. P: p* v0 r#include <linux/kernel.h>/ R: g% A$ T5 ^; v. j3 m. t% ?
#include <linux/types.h>5 y+ A" r- t# u6 Z
#include <linux/gpio.h>0 w- b+ f2 T# @5 e" g# w
#include <linux/leds.h>4 V& r/ S3 @+ v- I
#include <linux/platform_device.h>
/ Q: P; {& F) W8 S- N( |, P5 E2 y( L9 F
#include <asm/mach-types.h>$ s" u0 `) F/ x) M
#include <asm/mach/arch.h>, [1 [3 G- [+ \% B
#include <mach/da8xx.h>
+ ]) [, o7 u; r5 a#include <mach/mux.h>; U/ s; q' i2 g' Y( `. u$ o+ i
4 _- n6 I. V( }5 I; c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
x. s- R. |' r4 _6 b! u6 [' M" j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 I' R& c0 h9 A8 C* a$ o; v5 C1 C9 I/ ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; m. i- G6 _' ]# S; S; P+ c3 s#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; y5 }4 f8 L4 [' { }! z5 a$ H* W g
% I% K+ D! g0 f/* assign the tl som board LED-GPIOs*/8 U5 v* X" |- m7 z3 p' F' u" P! E
static const short da850_evm_tl_user_led_pins[] = {
3 {5 ]& Q) q$ I. K) `2 p- d /* These pins are definition at <mach/mux.h> file */, u8 @4 H% a ~+ ?8 n! B+ e
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! Z+ O5 J0 l: z* O
-14 a! v2 Z2 {) P y
};7 w9 f1 h5 k/ h& H/ j7 \, L
3 e- O# x2 U: ?& j
static struct gpio_led da850_evm_tl_leds[] = {
9 R! m& B2 e S {3 @, H! I9 N4 l8 g4 U
.active_low = 0,& Q, ^8 X, [3 u: h( B! W c
.gpio = DA850_USER_LED0,, S- Q' w \. o: j/ H
.name = "user_led0",
4 a e% A: q! A7 e3 l; p1 T .default_trigger = "default-on",
D& `$ p3 h' r },
8 ^9 A. I5 S) ^( }# Q& B7 w, b {9 m% [4 ~; H/ \6 t
.active_low = 0,: N% c" {: m8 I5 {1 s
.gpio = DA850_USER_LED1,) A) \. e( u! O7 `) z
.name = "user_led1",
6 ?" l6 ?5 }7 N; R8 L .default_trigger = "default-on",0 w: |* U, x" Q3 i3 k
},
8 [$ ] H3 n" B* u @ {
9 \1 u( L/ c8 k( S0 \ .active_low = 0,! [ m5 O* a; j# x. M# d$ Q
.gpio = DA850_USER_LED2,' g* G4 ^* B0 ~/ E* \9 X
.name = "user_led2",7 f+ P4 c0 b6 K! t! P1 l
.default_trigger = "default-on",/ x7 K+ ?2 a, _: K* ^4 C
},
+ e3 J1 ?6 i. j% G/ x; j0 p: u {* [. y, ~3 v( m1 o
.active_low = 0,
, }1 S$ N- h B .gpio = DA850_USER_LED3,$ ^. L0 [0 ?, h7 ?; k* L$ ]
.name = "user_led3",4 K5 {0 X8 q: V. K5 b* R/ l$ n5 b
.default_trigger = "default-on",# G0 a+ ?7 t3 L1 G( n! t a; Y
},
1 A) I$ k$ X( O};3 q" I. A+ W( p& |0 F9 C
% V1 w' t+ L, K) i- x, I
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 P# N8 J, I1 l. Y9 w .leds = da850_evm_tl_leds,7 D8 m& j3 h- P5 x7 J4 M
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 i. A# r+ O1 s) a};
) Z* S" X5 l' ?& a- ]- }
u" o4 x% {) I: j2 k7 r# R$ |/ Zstatic void led_dev_release(struct device *dev)+ O& F4 ?& Z1 {7 [5 w
{' m) C) b2 h5 a Z0 n
};
, f3 a" s* E% u0 T6 q- L
9 z: Q$ q9 B3 `3 a& Nstatic struct platform_device da850_evm_tl_leds_device = {# u% x/ [0 z2 T: B
.name = "leds-gpio",
& |, N& T8 K; c+ @! C .id = 1,
! W4 T# D" \% V6 T7 h7 n% P- m .dev = {- r, e9 {6 k- k1 Y5 _
.platform_data = &da850_evm_tl_leds_pdata,
# l% O0 B6 w3 s( \, O2 m0 O0 J: T .release = led_dev_release,9 b$ a5 x, y; C
}; v7 R6 J/ h; s
};9 J( r6 f' v, ?8 u" t& ?& S4 w7 p
8 N5 g3 ^- D4 p1 V8 x0 c
static int __init led_platform_init(void)
! n0 X, B8 Y; n8 k) B' h% o{. N7 b! J- S% \" G) l! r* J5 y
int ret;
- P8 R0 b7 ]+ V9 J* B5 @" b#if 0
; @. r5 \5 s. y: m, g ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 h1 ?% a5 e$ I3 m0 j
if (ret)
: M$ W2 |6 Y2 h5 d$ Q# P pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# n6 o; Z* S% z# C+ ~# g
"%d\n", ret);" F8 ?: Y3 \' U- S
#endif4 @* H1 x! H, K) g$ [5 c: ]
ret = platform_device_register(&da850_evm_tl_leds_device);" n& D/ k4 ?/ T) Z! r
if (ret)3 ~8 A# D2 P) y
pr_warning("Could not register som GPIO expander LEDS");. X! a6 a/ i) h. R
else9 P9 T* q9 G7 \) r; [; d$ A
printk(KERN_INFO "LED register sucessful!\n");
" o& d" X% J0 d; g' K
7 B; t; D2 a: b$ L8 x% u return ret;
: D3 S N4 U3 j9 ^$ g2 l; Q9 D}& j2 d2 j9 H9 w5 J
% `. v/ n/ l* p1 ?3 F9 qstatic void __exit led_platform_exit(void)
. O0 D, I* _! e9 |$ e{4 ?5 k$ g+ s0 q; S8 Q4 V; ^. O
platform_device_unregister(&da850_evm_tl_leds_device);9 k C r& i2 E& @( A1 c" p
* K% N/ i# n R' [1 p
printk(KERN_INFO "LED unregister!\n");- P: P6 b$ b& f6 U+ C8 M2 N
}
4 E4 D% X4 B* w' m% F2 r) ~4 L( ~3 {8 Q; b) ^
module_init(led_platform_init);
9 @. I; G; k7 j2 m3 z9 b. ]# jmodule_exit(led_platform_exit);
5 N; M6 s+ R4 I4 b0 g: F6 q* O- x$ H: |
MODULE_DESCRIPTION("Led platform driver");
* S: v) x6 x2 T. ?6 x& Z0 iMODULE_AUTHOR("Tronlong");
9 {" T+ o/ Q8 J! h2 sMODULE_LICENSE("GPL");
/ @: H2 i2 l8 f2 `" {2 V
' W, V6 W9 @, A2 E, s$ @9 m |
|