|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 I c9 E/ Z5 g4 F- V6 K; O* R
#include <linux/init.h>
/ r7 K3 J r( \' z% o# r#include <linux/module.h>
) a t2 h1 E/ ?3 Q#include <linux/kernel.h>% k$ w, r9 u3 P; s7 @2 w" P
#include <linux/types.h>9 I: U* e$ a Y
#include <linux/gpio.h>/ L7 s8 m7 Q. [% g' u3 l
#include <linux/leds.h>9 l, | A0 Y, C
#include <linux/platform_device.h>
+ H7 ?) S1 H7 K+ [
, A+ ?- l2 k; |' z* } ]+ ~2 j8 @#include <asm/mach-types.h>4 C- _% T& t( r* y$ m6 n
#include <asm/mach/arch.h>
; f) S7 L& `( y, x; D/ f1 t#include <mach/da8xx.h>3 E8 F7 d i3 O4 O/ M
#include <mach/mux.h>
: `+ X, v3 @" Y6 R" z6 Z G4 o Q( l0 D9 y M5 @
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" t! K) x7 r- e# j6 D#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- G, W' ]' X8 d9 x$ M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 u1 A# \/ D# v; D, L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 }1 Y- G) U$ Z' V/ i( `3 {
. Z+ c: u# A. g8 K5 M/* assign the tl som board LED-GPIOs*/: f1 W" ^- c7 q, n' Q
static const short da850_evm_tl_user_led_pins[] = {
`& I3 q" i7 e /* These pins are definition at <mach/mux.h> file */" y/ e8 B; i0 h# R) F* q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 L% Y" o/ b5 m -1
" M4 Z5 s/ C+ D! p4 \3 J1 n};
1 @( M- G; D5 j
/ c! h, y+ }. w! C( F$ x6 {static struct gpio_led da850_evm_tl_leds[] = {
$ z- b- D2 w* A$ c" Q {3 K& `9 R; t. s3 Y8 Y6 k
.active_low = 0,
6 y, b6 E4 h$ Z" j .gpio = DA850_USER_LED0,
' Y% @. f/ V6 k .name = "user_led0",
. i. A# r# S6 R' t: y3 W .default_trigger = "default-on",+ I1 A# [' a2 Q. Q
},
* _ L8 R: s7 O A+ F& u {
5 f/ O2 r+ H5 `1 l .active_low = 0,
: g0 K) q& b% q( L& D% g4 G .gpio = DA850_USER_LED1,6 \3 t5 L. i& A6 F3 `7 _3 m
.name = "user_led1",, T1 T( w h1 Z. X% }* R: K
.default_trigger = "default-on",
- ~( V/ K, B0 F9 Q% O% X( e },
2 O' l+ ^. M! P3 r5 r7 G$ A2 F9 N {7 `$ K4 X7 O+ {% Z0 o. ~ y) F) `
.active_low = 0,
; m% p4 k B8 z3 o& }; U6 k .gpio = DA850_USER_LED2,
& u1 m7 C1 ]) w) U .name = "user_led2",
) D& ~/ B8 P7 y) N+ v+ I6 T .default_trigger = "default-on",2 N( m! A3 I" f0 b8 ^5 V& e; |! T- w
},. C$ o1 e/ t) s* X/ c$ W; m
{
+ p& J. z. f3 @% T7 X* D. f* O .active_low = 0,4 u. h+ u2 z% A1 U2 k! r
.gpio = DA850_USER_LED3,
% g- f" t1 M7 [) w/ F" W2 O .name = "user_led3",' Z9 e! V: R2 A' c1 ?
.default_trigger = "default-on",
3 s! R: A- L$ Q) t/ s },
+ R/ b2 D/ {. i5 |1 l};8 }. ?) f# j: ?; c9 {8 p6 T
% F+ S- I+ F6 `: F0 Bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; K1 @( l2 C8 }$ A7 I8 P( R .leds = da850_evm_tl_leds,
9 Q! G2 u% _1 g% C: H9 T .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 J# f+ }7 F' _& T};; O% O5 Q0 d2 F; b; ?
1 _+ B0 ^0 l8 x% e, G K$ O. h" `* v3 G6 [static void led_dev_release(struct device *dev)
; k% @. K% K9 @0 v3 m# t+ a{& |- k4 O+ f* } w+ a
}; E, b% ~: F2 A( p& p
, E1 |- \" n. P5 m
static struct platform_device da850_evm_tl_leds_device = {' }1 @, V! B# d7 { O2 \
.name = "leds-gpio",
/ v, R4 Q3 U% J6 d$ P5 S; R .id = 1,
3 C/ t; [* I) j2 j .dev = {, w D9 K" d8 v5 s
.platform_data = &da850_evm_tl_leds_pdata,
% B) D6 o; I* z .release = led_dev_release,' c1 q' I2 J0 T/ K! u$ N
}
0 q! K/ T& g. B( O/ H; ~};6 y) A, | K, ~% U! B
b- E+ J8 s, s" A) P _5 _- {7 I
static int __init led_platform_init(void)
0 j) x6 V: D7 K: X( ^{- B2 E6 ?( j& B8 ~: p, n
int ret;4 c5 G% J5 b$ h. s
#if 0
' v) l, c- t0 N* A) q, h ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* F% o1 o- M- D$ K7 ]8 q
if (ret)
0 r7 t: F$ h- ?9 m pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% P6 u, V4 ^/ g+ r5 B "%d\n", ret);* i0 U K5 D3 ~* J. x, }2 Y B" F% H
#endif
9 _* d8 c. N; F7 _. L ret = platform_device_register(&da850_evm_tl_leds_device);
; [+ v: i! h5 Y7 E; [/ y if (ret)
5 q) h! Y; b2 r% ]2 \& |* K pr_warning("Could not register som GPIO expander LEDS");% Z. M3 E+ l8 n; H' v
else" X. F" {; d3 C8 E# _. h7 A
printk(KERN_INFO "LED register sucessful!\n");
5 o( {5 G3 Z9 n4 f5 ]; ~8 K3 w( z
R& e2 M0 u' u return ret;8 `- E& t p- C% J! B) O
}
, }0 S' ~$ z; P: z& J( j; b, W+ ^( u _! Y& `. {1 o7 i7 ~; ~* r
static void __exit led_platform_exit(void)& Y$ Y' K# v9 a4 b
{
' q4 P" B+ u, b/ F8 b platform_device_unregister(&da850_evm_tl_leds_device);
8 w8 ]: J* p; _1 q+ Q$ |% {, v' _4 ?6 n5 D$ q. H* d" u* _
printk(KERN_INFO "LED unregister!\n");
0 {7 ?7 w8 x* O0 r$ |- g k}. O' u4 ~9 t2 Y# Z6 b
. }. F( y1 G' G- {9 m
module_init(led_platform_init);
$ u; J! P. P: |* s* _+ T& B" G* mmodule_exit(led_platform_exit);* ?& x# x$ i3 r( m; F
- M' j* W8 X4 Y: w: W
MODULE_DESCRIPTION("Led platform driver");
$ s' b4 s8 @5 B6 ~! [MODULE_AUTHOR("Tronlong");; ]! n: i7 V0 B
MODULE_LICENSE("GPL");4 b% \' E- g5 y% F- a) y
* p5 i$ a* c, Q7 l3 V |
|