|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 z( b6 o9 l) p: t( L
#include <linux/init.h>2 A( H8 r/ I) H: J
#include <linux/module.h>* @; o g9 B* J3 m. c6 X1 f1 F
#include <linux/kernel.h>
' |! p, p) J1 o+ s# G8 c! }#include <linux/types.h>
( ~) v4 n4 B$ V& R#include <linux/gpio.h>
4 L( z( [" I: c#include <linux/leds.h>
3 a3 T% }. A2 @: Y$ _#include <linux/platform_device.h>+ V. D. l3 ^7 u; m8 w% t
: ? Y n" k# _7 W: V
#include <asm/mach-types.h>! |$ g9 N$ w! A/ B9 w& O
#include <asm/mach/arch.h># A7 q! S0 v0 ~" m& d
#include <mach/da8xx.h>
0 p8 Z$ X2 N7 K6 j#include <mach/mux.h>; c" s* F- s- O9 s8 C3 N! I4 T
( z( R" o! X. _( w2 b#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); t6 L, ]: E2 N, w7 X" B5 f
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) C4 E; z, U. q4 h7 m
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 l# o. } M2 X1 o; i7 h
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 X' M2 j& }& }8 a) x, p) e/ B) {+ K: f# R
/* assign the tl som board LED-GPIOs*/
' z! V* ?6 a9 v' J" F. Ustatic const short da850_evm_tl_user_led_pins[] = {1 `1 F" I* Y' z- J/ q
/* These pins are definition at <mach/mux.h> file */1 c4 c& V. R* z" e6 |" l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 C* \' j5 `3 @0 A9 N
-1
! W0 h3 w2 ?! R+ c9 s2 {};7 M0 q- y! t' v% i) j5 D2 Q" z
: a4 O" A3 Q5 y T9 B; Z# N; F
static struct gpio_led da850_evm_tl_leds[] = {
. y/ s3 h) r: Q y6 Y {
) b: l$ [& t1 Z9 m3 s' M/ p7 E .active_low = 0,
3 Y: w7 j- A$ V0 ?4 Z3 p .gpio = DA850_USER_LED0,- B9 C, Y! {* M: T* M h
.name = "user_led0",
5 X q+ Y: {: r* R3 \( n- \: s. e .default_trigger = "default-on",) y4 G1 j; I5 `* @
},
* g/ X; |1 O2 W0 L3 @; ~" N3 U/ K {+ G3 E: H1 X! N% j
.active_low = 0,
9 m- v V( r( u- E0 T) {0 Y .gpio = DA850_USER_LED1," t. X9 L+ T* M* j" b9 P4 i
.name = "user_led1",
" {- Z% d, N! a. w' Z/ G! U( [ .default_trigger = "default-on",- n( ~1 m' \5 ?+ v0 y
},# }3 O- G% p* i9 N- H3 w
{. u" _8 j6 T4 e) D! W5 Y4 U4 \5 |! J
.active_low = 0,) X$ U" J3 O i# L; S2 Z; d
.gpio = DA850_USER_LED2,* A) `* a9 c# U# S
.name = "user_led2",
( ~; U+ P2 g. y. g9 L .default_trigger = "default-on",
$ O! a+ R ~/ N* b },2 j t- m4 h% W4 D$ a
{8 k6 c* k! Z0 q0 Q/ x2 P, t" Q/ G; ^
.active_low = 0,8 ~0 V$ o; @! F! h- N8 _ q
.gpio = DA850_USER_LED3,! _+ W! T3 U" r# P
.name = "user_led3",
* @) q/ u3 \9 O9 s5 C$ y. \ .default_trigger = "default-on",
% {3 a' z/ [: T* h6 X },
1 S8 j- F) ]% U% k6 l};( I d+ X* \5 y }: ?9 ]& M
. |; E; b9 { w' g q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 [8 a9 h- Z; x$ A .leds = da850_evm_tl_leds,
8 d, o5 B, `1 K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 J4 ~( ], p1 B" B};
: J" Y' s( I+ ]: z$ n( @2 [
: d: i8 C; h* G5 P1 Qstatic void led_dev_release(struct device *dev)5 P4 F2 E( @: q% A" l
{9 [/ b/ F5 L9 B y2 w
};
) ]( J/ E# K: j' e, a' ~2 x4 D% _ ~1 g# o. J3 f
static struct platform_device da850_evm_tl_leds_device = {
4 E4 y/ E2 R( V/ |4 ?7 S, v .name = "leds-gpio",
4 v0 O6 ~5 U: ` .id = 1,2 g$ ]" `6 I# i' w0 V4 P# J
.dev = {, Z s0 @7 g: T# n/ t! y" ?
.platform_data = &da850_evm_tl_leds_pdata,3 k* {, U# Z. e& q3 z2 v
.release = led_dev_release,6 R' V5 i& Z& g7 I) H& {* f# o
}8 O, J6 R+ w, t
};- U4 ?" v% ]& N$ P
7 t* S2 y! x3 H; e- Z
static int __init led_platform_init(void)7 W6 K3 T& h8 w$ l2 Z) R
{# j5 y, k1 x7 r( |0 F# T
int ret;5 E# v% E/ u: u1 r. B+ q0 c2 Q: X$ L$ ~
#if 0+ G" j( j, u7 {1 n+ B& E% ~$ p U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ J9 ]( a; y. u* w( q if (ret)
% d T! ~, i" @6 e1 N+ M( z pr_warning("da850_evm_tl_leds_init : User LED mux failed :", V. o, _5 W; M; R* H* G; I
"%d\n", ret);
& u% u5 V$ H8 k0 h#endif
/ l- J% B% n0 Y2 d* Y. | ret = platform_device_register(&da850_evm_tl_leds_device);" e- }* j$ q3 _/ Y) A" l
if (ret)2 | n+ D0 E6 S" B
pr_warning("Could not register som GPIO expander LEDS");6 S+ ]( L( L6 p4 J2 F) e
else
& j4 w/ v U- ]2 a printk(KERN_INFO "LED register sucessful!\n"); @7 C( Z$ l i" d! r/ d. f
: W: o! }- V x( T* h; o' z$ X return ret;
: x, A! A3 r1 n9 P}* j; ~/ i+ b5 x9 U+ A$ E
; S! M5 y3 `. s% @8 S8 Xstatic void __exit led_platform_exit(void)1 v% P. q: s7 w+ M7 q9 W
{8 I" L% d* M. J" i/ h
platform_device_unregister(&da850_evm_tl_leds_device);
) F2 V" H8 l- }8 A1 Q& M$ a$ Y
1 c1 U& g& L2 i1 A) | U printk(KERN_INFO "LED unregister!\n");: _" V- _( e# B) I. x
}9 W# L5 {% C3 t
( |' _! `& A: ^6 Omodule_init(led_platform_init);
( G' P1 d+ n7 v8 Tmodule_exit(led_platform_exit);& g6 |7 @" P: x. s) a
9 C8 ]( d: _! T8 b% ~: B9 ]; R" JMODULE_DESCRIPTION("Led platform driver");
- E+ s9 ^* w' f: U( LMODULE_AUTHOR("Tronlong");
. ?- \3 }- J ?1 v: JMODULE_LICENSE("GPL");
9 ?6 p0 I. G2 r% |! M+ P
# x9 h) ~+ z* l7 ~/ h |
|