|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 s; c7 z6 _8 Y [0 Z#include <linux/init.h>9 q+ g3 w; T$ V% T, C/ T) P
#include <linux/module.h> t. b. q7 ]0 _% b5 E3 q
#include <linux/kernel.h>
/ J2 b. L/ r& B' e* A#include <linux/types.h># o: I- s' `: t& z
#include <linux/gpio.h>
, C0 H, Z1 I$ m) Z L#include <linux/leds.h>- y, A+ z% H8 F9 B9 W
#include <linux/platform_device.h>& T9 B5 Q7 B6 A9 I3 F X3 m) b# I
" N9 Q1 V! q8 [#include <asm/mach-types.h> Y$ d8 c% p; a* S* t9 f
#include <asm/mach/arch.h>0 b8 m. E4 @6 z! w& Y) [
#include <mach/da8xx.h>9 N9 D) w: |6 d b4 w8 K p
#include <mach/mux.h>9 R! j; _. w. [; {* q
: X5 B4 C( U& x#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 H3 n/ U7 b! s7 f0 q( `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 S; f% Y; V8 k
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" x6 ^) p3 e q8 i* ]#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 o* {! [$ C+ B) A; P% R+ c
3 m" k1 i& l) O6 u; B& r/* assign the tl som board LED-GPIOs*/0 U: d& I: O; t! l0 G
static const short da850_evm_tl_user_led_pins[] = {
" t$ X' F" T5 D& D /* These pins are definition at <mach/mux.h> file */, E8 N# g) T' X# ?5 ]$ |4 b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 Y: ~* y( ?' ~+ J
-1$ S5 M1 d+ s; r9 E; @. }* J
};8 }- B0 _2 S: K8 H4 j
; ]6 R! }9 t/ A! c
static struct gpio_led da850_evm_tl_leds[] = {
% s) z# ?' a' H6 I! b; n- | | {* i; ]* G( t- p6 K+ h
.active_low = 0,
4 p( |6 R e% v0 `- m; t0 A .gpio = DA850_USER_LED0,7 s5 {& a# H: n \8 O$ K1 R
.name = "user_led0",
/ Y+ Q9 Z z+ R. o' Y: S+ n .default_trigger = "default-on",0 o1 H( w0 |: `) Q7 q2 w/ }
},
& p; s3 k/ a$ ^% c S% M {' \' a7 H5 {/ b0 z* R
.active_low = 0,
! V2 r- X) i2 T0 m. W* q( C$ H' w .gpio = DA850_USER_LED1,7 [9 x0 h( q' b) m2 |+ O3 j
.name = "user_led1",/ {5 I$ g2 R2 A) O
.default_trigger = "default-on",; Y @( [" | A* b1 ^5 H
},
% z& F2 ]$ r; J' | {
5 n& l: R T1 q# [ .active_low = 0,
* p. q+ L8 I `" p/ N, W% ?3 Q .gpio = DA850_USER_LED2,
0 |* F8 o+ T% I6 W, G .name = "user_led2",
# @4 y& H! H/ l# X" a .default_trigger = "default-on",
7 c) h$ ], ^& g0 ^ },
( G# ?5 a. {6 s {& t1 [' j. F7 D8 R C$ e) }
.active_low = 0,
# B. k6 `+ C7 Y! |0 M; a .gpio = DA850_USER_LED3,
$ g% c8 Z) p8 ?0 O& W+ z- S .name = "user_led3",
" e% m* q1 \$ a2 [: A* | .default_trigger = "default-on",6 m1 {/ i1 A. c* h! y
},
7 t! M: _8 c- z. E- I% x' |};, R7 Y8 X, ?' \$ {2 c$ g
! S6 A6 `/ ]5 G$ B9 x7 K: o; [static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: I6 H* Y# T4 {$ A" ?2 o: f
.leds = da850_evm_tl_leds,: }5 l) i0 `' F# R+ ]9 `5 ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),* ^# P7 y, L. E3 ^1 L) p! d; X
};4 d" g, ?( i/ `
3 }3 Y8 S/ w, c' H% Kstatic void led_dev_release(struct device *dev)
& G. |! H$ f C7 J* D% O, y{
" d4 M z$ s- e7 X. ^& z% Y};' f5 }5 p2 Z9 P7 T9 p
; E4 ^% f( ?( s( N( g* V
static struct platform_device da850_evm_tl_leds_device = {' ^) U% u, {( m% _1 T$ j8 u
.name = "leds-gpio",
5 ?/ t e- m' W8 x( c* w# F .id = 1,
( Y/ I p d! }6 c5 k5 P .dev = {
; G, e0 H7 i) Z% T .platform_data = &da850_evm_tl_leds_pdata,* m5 F5 W0 ~( X
.release = led_dev_release,
" P. R, d, R9 i }: p1 c+ [+ Q2 l
};
e g8 u& @; l) n3 M) I( q& Q0 n1 x f, N& J% z
static int __init led_platform_init(void)
3 d8 N, \* Y) d# {6 Z{
[) T4 T0 \! J# c6 t int ret;
6 Z% X8 w. @, ]! Z' P#if 05 r1 d& n& T! O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* Q, ], b) U5 B3 E, s' M4 r! } if (ret)
0 D. b4 j1 H7 r# B, j* E pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 E: L3 P& A' a; P2 k" f) \) N "%d\n", ret);
5 j( w/ b* n8 n# a8 J1 C/ \( h/ _! N#endif+ O& ^. D9 V( @: V3 j
ret = platform_device_register(&da850_evm_tl_leds_device);
/ }) S. Z! m0 H* l" m! g0 y" { if (ret): v: j. u, ]! r+ t' m' W( F
pr_warning("Could not register som GPIO expander LEDS");8 M: I! n+ O2 a5 }: X! {
else' Z3 L3 v$ b& n$ a5 S
printk(KERN_INFO "LED register sucessful!\n");1 R o/ A ^! `7 `" r$ o3 k
) r2 \/ j( |3 O2 H v return ret;
; N/ r3 g2 O: N4 N& P9 {}
( G1 W! ]7 M# I- w, Z
* F/ Z2 E5 w2 E: p* u3 s& Y% Tstatic void __exit led_platform_exit(void)3 a" {) \" @7 V2 H& h+ P
{$ Z0 A# Y; J! j1 y
platform_device_unregister(&da850_evm_tl_leds_device);
8 g) t3 q c- w* H5 S- b
* U- k, y# b) H' P Z printk(KERN_INFO "LED unregister!\n");
5 M+ Q2 k8 V8 _- E0 c6 d) k( C9 o}' E" k7 \+ U1 {7 R2 [ K- i4 ?
) g( s0 |* N4 C8 Omodule_init(led_platform_init);
5 L6 k1 M4 n b. i1 N# rmodule_exit(led_platform_exit);7 H* Y- Q' _1 g+ b/ L6 F
: \+ b2 x% j! ?- T2 BMODULE_DESCRIPTION("Led platform driver");. r$ X! u/ n, y) h9 \ G0 ~
MODULE_AUTHOR("Tronlong");) k4 S2 @+ N8 x. K0 t: V
MODULE_LICENSE("GPL");
V) }! f9 {& b, E6 N
: ^! C( v. ?3 Q( h |
|