|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 _& {9 z- t: M5 B, q
#include <linux/init.h>) X$ A% E% `) e: ]4 K1 l
#include <linux/module.h> J/ \' o# T! F' {7 Q
#include <linux/kernel.h>
4 A Z& Y( d$ ?" E* j#include <linux/types.h>
, j3 s M. p! M+ _' S#include <linux/gpio.h>
* i9 i! p, _6 R7 |% j5 b$ b#include <linux/leds.h>7 I. z# v5 w. X3 a4 a$ `" X) d% [$ |
#include <linux/platform_device.h>
6 E6 {. ]3 V7 u4 S9 G7 T% D0 A" g$ {7 ?6 I
#include <asm/mach-types.h>8 t+ ^. _: e. m2 o9 f( q5 q
#include <asm/mach/arch.h>5 i1 g5 \ V: L. A
#include <mach/da8xx.h>+ o" H- p, @1 \( p' Z, `
#include <mach/mux.h>2 {+ n- W2 H1 j# r4 F& J
' V3 d1 d1 B9 V/ t2 d: _#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- I; N, q/ W4 D7 X W: B" ?#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 G, @5 r4 q/ ?1 x
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( E4 i& F! a) {* V1 x8 ]. _6 k#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; ~" H( H ~! w" e* |0 s1 Y. P0 O1 t0 U; w. f: v- ?8 g d" k
/* assign the tl som board LED-GPIOs*/& S& I& N. k8 k
static const short da850_evm_tl_user_led_pins[] = {
/ ^/ z* G, X1 E+ f' m /* These pins are definition at <mach/mux.h> file */
2 W8 r6 j- \: o# L" ^( r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* Z1 G: a" Y# x7 r6 G& q' c
-1
0 a& S4 P4 r8 x};
7 w# _# d( j+ c& {/ `3 P
! {; ]- l' R+ f* V' K% s3 o% Ustatic struct gpio_led da850_evm_tl_leds[] = {
9 `2 i& W) Y& y0 Q7 Z {
- f0 K j, j: a H" m% } .active_low = 0,' |7 h" z0 }! g7 ~" B" w; p
.gpio = DA850_USER_LED0,
) n6 c$ Q: Y6 D .name = "user_led0",
5 o) @" B' p7 ~3 @/ J: B .default_trigger = "default-on"," [1 S% b7 d' z/ I$ c4 @
},
: y2 U, d' ` m {
% s% b/ q) Z& w1 @1 T .active_low = 0,
; ?- Z1 e5 h; Q .gpio = DA850_USER_LED1,
$ p7 p H* q% d .name = "user_led1",( f$ J& q7 `% s* }7 ]- T) Y/ b
.default_trigger = "default-on",9 [1 a$ M6 e( J/ b: j9 E7 ~+ u( E9 v6 j
}," ^7 ?" H% p! ^5 d+ w
{
7 @7 f" a) X# Y& r) r. r .active_low = 0,1 e& S4 Z/ c. g) g
.gpio = DA850_USER_LED2,/ J9 @5 `6 c8 S- V
.name = "user_led2",
$ p! Z" y. Q) n2 Z& R/ D .default_trigger = "default-on",
S0 I" b+ G2 ]/ s; i },
+ i% ~2 v; L2 i- V {
( V/ S/ A" B" B- z& S Z .active_low = 0,7 m: P6 G% o5 _1 O2 `, q
.gpio = DA850_USER_LED3,
" I% u, j/ x1 i% E! ]0 p .name = "user_led3",! _. }: c- ~* }. P3 |; m
.default_trigger = "default-on",
2 {; |; H. V* t },
1 t. v$ W# x; ~! R};
; @" V# I9 O1 e& v! N& N" ]
' i2 n. T6 P$ Q z* S/ @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- x+ ^; S# K; T" U( S .leds = da850_evm_tl_leds,- T1 j! }+ G+ S9 `
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ \( F# R4 L' f' S" L};
0 ~( w; E3 c9 i% k! x
+ Z# Q0 u0 c5 Q |static void led_dev_release(struct device *dev)
: |: Y$ C/ l2 D{
% E* C( e2 d P; f" z( K};# K" F* U, u: A. t+ c2 t) @: {* H
1 G* {5 C4 |7 X" K" Q' b
static struct platform_device da850_evm_tl_leds_device = {; Z# D+ y1 | U1 I+ w! O: K
.name = "leds-gpio",
9 K: C! X$ |) B. ~ .id = 1,$ }; e4 m" J' m7 i1 \8 L
.dev = {7 w: t9 ]8 }2 _2 J) i9 h" G
.platform_data = &da850_evm_tl_leds_pdata,
4 D5 p0 z, B" ?+ q. W; H; D .release = led_dev_release,
, f l* j% L$ t# n }! O- [! f. T$ r' c/ d ^4 {- ?
};
4 b: `/ v* v8 t& f6 `+ B5 r0 c9 o+ Q1 H! j% [& ?
static int __init led_platform_init(void)
) N* a( q$ I2 A- d{
+ w: s8 O! T4 {9 h+ k" q+ K int ret;& j Q' s+ s5 X" T+ x8 X
#if 0
% c6 r G7 e8 T8 k ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; p, Q4 m& A, V) n7 F$ [2 {" T3 a if (ret)
& P; M! @# x9 ?& o0 a3 W, Q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' \/ I, F& i: ~' o7 n "%d\n", ret);/ I6 r; |* b, x/ P- f
#endif8 M; z' |. ~- b. q! G
ret = platform_device_register(&da850_evm_tl_leds_device);
1 h8 M* a3 c% P$ _# |* o if (ret): _: l$ S, s% v% v, U. q! \
pr_warning("Could not register som GPIO expander LEDS");, w: g, b/ ]& C& g
else8 s* X* E J# v9 s
printk(KERN_INFO "LED register sucessful!\n");
. S! V4 `, o5 o, A7 s
- g2 z+ A/ ]1 ?# Y return ret;8 E: v) o! Q8 R9 `2 `3 U2 s
}
?& L X* r' l! q6 V- S: s# x/ |+ n5 Y
static void __exit led_platform_exit(void)
$ h# j* i Z) a0 P% c$ {( e{ u3 P# L7 b" m& D, H* Y) O! p
platform_device_unregister(&da850_evm_tl_leds_device);" G4 B/ F L5 X. Z
8 M: |6 z2 T& [# M, f printk(KERN_INFO "LED unregister!\n");% n* i8 a1 z" k& B; h
}
" C* c0 [" d& F# t! o+ U
% @1 k0 M: i% l: V) J! Qmodule_init(led_platform_init);0 H& @- B8 U+ v( P9 m
module_exit(led_platform_exit);5 D) o, a/ ]- x/ w8 m6 l. h
9 v' @% }! t+ c+ P# ZMODULE_DESCRIPTION("Led platform driver");
9 N0 p6 [/ X; G+ ~7 X) vMODULE_AUTHOR("Tronlong");& }6 i5 l" K$ |
MODULE_LICENSE("GPL");
9 r2 K+ M3 U( t. k/ M% e" T. {# w: A& ~7 Z4 A
|
|