|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) F4 }3 B' V: I9 G2 W, [6 D, e#include <linux/init.h>
+ u$ c8 B! c) B#include <linux/module.h>
* ~ O" r1 f: Y% [+ y#include <linux/kernel.h>+ k. r+ _, d5 c
#include <linux/types.h>
# G0 |" k; J+ f1 @ k) M#include <linux/gpio.h>
! p, b! { @: k5 k; U% g8 X5 j) B#include <linux/leds.h>
% |+ h, o' ?5 w0 r" Y4 I+ u4 T#include <linux/platform_device.h>
$ o# f0 W& F! M
5 d8 @; c1 o2 b. Z( _$ q3 H#include <asm/mach-types.h>- R7 m9 Y9 r \" \
#include <asm/mach/arch.h>+ S1 j8 ]6 c4 `6 U) b6 J2 P
#include <mach/da8xx.h>
* E! a: I, R8 p9 L5 ?& C& y! }#include <mach/mux.h>( {. }1 U4 ]' V, @- {2 S
6 p" Y) a! |: I. H$ F H: U#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 B3 e3 o( v- ?#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 R2 @7 k) x" R0 f$ ~" T+ c
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% Y W9 t& k2 `% L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% X0 J/ ~0 X h( C( v- @. E3 P7 J4 ~) @+ B4 L. ]
/* assign the tl som board LED-GPIOs*/
' G7 M9 }# S4 G! R9 K# X5 p0 Tstatic const short da850_evm_tl_user_led_pins[] = {9 a2 V0 d3 G" K# h) I
/* These pins are definition at <mach/mux.h> file */% n% E! y3 b* Q0 b w4 {9 v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 Y( q9 c9 J4 \ -1
; f* c$ `% j$ c* Z( x6 K& Q2 A& W};$ @ p) s6 C D9 h' |
. s; k( X' d/ ?7 Z9 hstatic struct gpio_led da850_evm_tl_leds[] = {
) C/ ?' Y( W* @) S {
9 w* K ]; j- y+ R- Y; @ .active_low = 0,: d3 k8 ]$ {) j; `; d
.gpio = DA850_USER_LED0,% H7 D) ~) z4 e* v* y6 {
.name = "user_led0",
+ C- k% ~# `+ a6 ^$ [ I3 Y .default_trigger = "default-on",
$ A/ R2 N2 Q1 u8 ]' v },1 `* X0 P& Y' ] f: O1 X* K
{, Y+ Z0 O) f0 J9 W. V
.active_low = 0,
' a$ s6 E7 J2 G, Z .gpio = DA850_USER_LED1,
1 j' v* _' D/ z' x, v$ _& g6 z. v6 y .name = "user_led1",9 S* a+ n' o+ ?9 j t
.default_trigger = "default-on",
' n0 G5 y: Y. y2 n$ w },
1 C$ W9 F7 c- d& p9 t) c/ D {! Q+ T* w4 A$ u' I- p0 p
.active_low = 0,% R% }, b5 r$ m+ r8 d
.gpio = DA850_USER_LED2,
1 T% g* Z5 z% M8 u" r6 J .name = "user_led2",
- H4 i4 i' W/ [1 X) B .default_trigger = "default-on",
: r4 a- A2 j- y3 o },8 |' i. M9 w+ p
{
6 |# m( J7 N) _ h& T- l .active_low = 0,1 ], q6 y% v: X1 U6 z! d$ b
.gpio = DA850_USER_LED3,& g0 b1 |5 Z/ p: O2 m
.name = "user_led3", z" x! p2 i5 f- g& s
.default_trigger = "default-on",4 }3 Z. \( K4 f0 m( e: Q' X/ O
},
# I) G- a; w' \. j0 W7 X! s};
; [( i" K2 b1 Z( j# z* C$ X. a; f3 N, b+ X% |7 n. w/ t
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* F% O7 z, C6 W: \2 I2 R- l .leds = da850_evm_tl_leds,
4 @4 ^" H0 Y4 @+ L8 ]# E3 c8 }4 x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 q/ G) |5 r/ F# \: Y
};6 D+ W, H/ P2 g5 e1 u
( ^ _# P n* ]8 Q* j0 H
static void led_dev_release(struct device *dev)
8 q3 C, o; C3 _% x' b{0 q8 k6 U, A, N6 J* B1 ~! ~
};
4 H8 w4 M2 }+ Q3 B; r9 G8 T. H0 B ?& U
static struct platform_device da850_evm_tl_leds_device = {
* C0 t% @5 b, F) r .name = "leds-gpio",
4 F0 a" [* s `# e+ z/ E6 K- A .id = 1,
/ k8 @: ~( w& y/ i, D. P .dev = {
. G P0 h! J" x) e+ O4 X .platform_data = &da850_evm_tl_leds_pdata,2 w+ z+ K8 I1 R) y
.release = led_dev_release,) I" T. t) R4 ^ ]
}( ?: H, e' p8 V* P. K9 ]
};
a4 H1 B# C- {) b5 _& ]) B7 o, k- K9 V9 r( O# Z( B
static int __init led_platform_init(void)
9 ?/ }# W7 C7 O0 F. `" ~/ @{- Q0 P S. }0 u2 H: B- |. p! {; q
int ret;; a* c7 c% e/ V
#if 0
& g/ a: H: e9 Z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 x, R. ^: S1 d8 t1 D n if (ret)
3 s0 u7 A) U% t4 N% \) `5 n pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: @1 j+ f. h: T, J "%d\n", ret);: e) h% g! N: _: i# M9 R+ R
#endif
" q8 f' L- p3 t4 }, W; \# Z9 l% R$ G0 _ ret = platform_device_register(&da850_evm_tl_leds_device);
X. j Z1 b% V- D if (ret)" r; X% v( @& j
pr_warning("Could not register som GPIO expander LEDS");& ^; b8 G2 l; h- w- G9 _4 {
else; t I' i- m( [! Z. C; e" `1 a) c
printk(KERN_INFO "LED register sucessful!\n");
% U7 {. R8 Q- f2 z# P4 Y, R$ @, D* `. {4 X
return ret;. v3 Q$ U Q, u8 E& W6 \
}
) p- U, @. q/ ^+ Y, e# i
( ?0 ]& Q- y5 mstatic void __exit led_platform_exit(void)
4 C4 [- ]$ \ E' E- c/ w9 M- ]{) }0 L. q. s$ S6 ^9 |' I$ B
platform_device_unregister(&da850_evm_tl_leds_device);( _8 m! S1 v9 x8 {2 A& P( n! z" |! m
/ k z- p! ^ J7 q4 m printk(KERN_INFO "LED unregister!\n");$ L: x" |$ Z5 D3 e
}
% r' f: H! q6 y1 L2 g1 w9 Z% C/ u
; R; R' m* X0 A8 G/ Y* d# \' Xmodule_init(led_platform_init);
0 b1 Y7 H* k; i/ f' U6 g2 t* |. }0 Jmodule_exit(led_platform_exit);
9 [5 x& d7 n6 d H4 [ N* E+ q; C6 b7 ?! \+ L1 v
MODULE_DESCRIPTION("Led platform driver");
* N( m( J8 J* ?5 Z, E" o @/ jMODULE_AUTHOR("Tronlong");1 e, ~+ ^" h* [2 s7 E
MODULE_LICENSE("GPL");2 D5 e! @ n1 \0 ?. C9 G+ Q( n
8 m' \( o3 S( ~: y" L& T |
|