|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: f" I1 b5 @8 m' l2 R+ W
#include <linux/init.h>
, |& R5 O# X0 |& l- T#include <linux/module.h>0 g* `. B& J. a
#include <linux/kernel.h>3 u# ~& s `& e8 @
#include <linux/types.h>. E" H! v$ E4 [1 k+ M4 U/ K: m
#include <linux/gpio.h>4 W- q, ?6 a7 ]& q* } }
#include <linux/leds.h>
2 i* L9 m8 ~2 A/ r#include <linux/platform_device.h>9 _# V6 B7 n- K9 S T; @
" L' G* P9 z: O8 U* g0 X; M% g#include <asm/mach-types.h>
+ U7 D, y5 ~7 w) B" D#include <asm/mach/arch.h>2 |% X. y8 W6 R8 Z* ]
#include <mach/da8xx.h>: P, @, d$ k9 _5 c' @3 v
#include <mach/mux.h>+ d, M& d8 D6 i) t! w
i; g3 v- `4 [8 H4 W8 @+ w2 P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 e* H: }3 y- I& j
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 K1 y" f7 j2 h* @3 _2 g#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 y$ U8 a B/ F, N#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 ?# t' _8 V8 j0 i5 i; N
$ y" b6 S& @8 j& ^( W' c$ W R
/* assign the tl som board LED-GPIOs*/* t1 _! g+ b& Q+ P& R+ ^+ l7 Z
static const short da850_evm_tl_user_led_pins[] = {, B- Z& H! T, V0 P
/* These pins are definition at <mach/mux.h> file */
& K7 s0 C, @' L+ s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% _3 V2 \+ }2 O- x( t+ _# p -13 ]( m5 g4 j9 Q! h7 c* D0 `$ e% U
};$ c- E# k# y5 \/ w9 s0 e* e0 T
6 R5 n2 i5 ^6 Y" U' h* S
static struct gpio_led da850_evm_tl_leds[] = {
[+ m' V8 X- U5 r" O {4 R8 F% ]/ u+ q' B
.active_low = 0,
7 B7 _: Q* K1 C1 R+ u! b .gpio = DA850_USER_LED0,, P& E' m, s5 B5 l" s3 Q& x
.name = "user_led0",
* m2 Q% a. H) h8 J .default_trigger = "default-on",
! s% b. I- a, c) f: o! ^ },9 S- r0 B. p- \- ^! P
{
; f* C T: c& ^5 W+ r9 f, q .active_low = 0,
; F: d( L6 g. ]8 ~+ D, I .gpio = DA850_USER_LED1,
2 v3 |' M% W0 J- l4 h4 z6 f8 { .name = "user_led1",6 Z6 g1 z% l- P; ?: x) @& `
.default_trigger = "default-on",8 J! G1 j. C; k
},
$ l3 [# F3 p& x$ H0 v5 _ {
! f: p6 R; a7 A8 b% j" W8 t .active_low = 0,2 ]* H g. l$ m; @( |! F
.gpio = DA850_USER_LED2,
" ]% \" d: t0 m; i& V3 Z .name = "user_led2", }; a& t" A& H1 w, x
.default_trigger = "default-on",8 l n& b. v8 W7 t
},
9 g7 a. ~" V8 _( a. { {
: q9 f' y# p8 ~: U- y6 K W$ c3 N .active_low = 0,
( Y2 n8 [8 P9 E5 B .gpio = DA850_USER_LED3,# @; ]" |* ?' L' N8 i" M
.name = "user_led3",
$ N) p: o3 G$ i d$ Z .default_trigger = "default-on",1 ]) X7 q1 R9 R( G
},! K. G4 D7 `; v1 V7 [3 b, O; g9 m6 p
};
5 U; b/ y% [; k2 }3 e. D, P9 V9 N) ?, P
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) D I5 E+ U9 F5 p" I% W .leds = da850_evm_tl_leds,
! F7 g8 x; \8 K" t* k; x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# `% k+ X' Q9 A( q8 }. j4 b" h};
9 G7 T# ?( j1 P2 n9 P2 V1 i" u5 L- q( G8 T* d _! [. P
static void led_dev_release(struct device *dev)
1 J( k4 x4 `! e% s* i, o% ?{6 s0 \6 u$ L7 p2 s
};1 M d: m | r+ j% Y- u
) m' _# l: \3 e( q
static struct platform_device da850_evm_tl_leds_device = {4 `, A7 z* u, Z3 T# w B5 L. K& B
.name = "leds-gpio",3 C8 V6 e" N# {, [
.id = 1,
' L- }0 z7 T% Y .dev = {/ C0 `+ ~0 ^& T$ m
.platform_data = &da850_evm_tl_leds_pdata,% g A2 c5 L4 a- i
.release = led_dev_release,1 i( p$ E& M' L3 p1 q& `+ w, U
}1 t3 X k4 N; q C
};
* x2 j9 E- ?* L3 Q9 ~: Z9 L/ j3 O/ ]# V6 Q
static int __init led_platform_init(void)
( p; F3 O0 V" t$ J/ ^{
" G$ v% x% {$ e, E& b7 x, Z& w- G int ret;" X. A# W( o7 {; S- s, Y0 ^
#if 02 r: b: x" j& |; N! X7 ]
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); N1 g; L0 P8 @: m# G: C$ g
if (ret)
% }8 e: l8 w% X$ R; B2 `$ d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 Y& a6 G* m8 _+ K
"%d\n", ret); x# |# w3 o0 H: ?8 W9 |
#endif
W8 Q9 S: P- ? ret = platform_device_register(&da850_evm_tl_leds_device);
P0 e4 T) @9 L, P O7 j if (ret)' I% r' w+ G: G& D. H7 O0 y
pr_warning("Could not register som GPIO expander LEDS");" R1 W. r$ V3 Q7 S
else
2 g8 Q+ _; e% j) k! ~; @ printk(KERN_INFO "LED register sucessful!\n");
6 v/ ] r) `7 w0 Z. ?0 |/ I4 K7 B, z4 t0 E2 [& c2 G. ^
return ret;7 e, u# V5 h! {; |; u; i: [4 o* D* i
}0 `1 N6 c- V1 G' l- a3 u9 u
% d3 O: O! w# q9 a+ ]) }! O$ xstatic void __exit led_platform_exit(void)
) k* F8 g' H: c) S{
3 o& ]5 ]5 I. u1 P! L' ~0 d platform_device_unregister(&da850_evm_tl_leds_device);# u- P5 M) o. E# W7 m. b
# K' t( x$ j4 t- w2 g
printk(KERN_INFO "LED unregister!\n");
3 e3 y2 y9 E1 g% G& w, o}2 D4 w8 e( \9 u1 S( c6 B
V$ X$ R" o5 O" v# v6 wmodule_init(led_platform_init);4 | x/ V* G2 y& B+ F
module_exit(led_platform_exit);
8 g" I+ w* G% o$ ^: U3 y$ T5 D
$ @0 S" H3 H/ }+ p* S! EMODULE_DESCRIPTION("Led platform driver");
8 L( z) R$ E$ TMODULE_AUTHOR("Tronlong");
" Y% k% g2 s+ i( o0 L6 kMODULE_LICENSE("GPL");
! C6 {) k2 y( n I( N
3 z; A4 F. p9 J5 J2 M/ c2 B6 V |
|