|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 R: K% H1 ^3 |! n# Z, Y& z- C
#include <linux/init.h>& n3 c- S6 P0 U, R- D: J; w
#include <linux/module.h>
# M: P# B3 J" Q2 C, S, s#include <linux/kernel.h>+ T$ F k# }7 X7 s k6 D+ L7 \
#include <linux/types.h>
, d. k6 S' m, P) O$ p5 ?4 ^0 n#include <linux/gpio.h>
* j- x/ s& O0 P- a#include <linux/leds.h>
: K5 J D! H) T6 P7 j$ l#include <linux/platform_device.h>2 K) d, D9 E" e+ O5 v* r
6 p) M4 F7 q( h, M1 C3 }8 `#include <asm/mach-types.h>* U% Y4 r% u& C' R7 Y4 c
#include <asm/mach/arch.h>
1 F* Q5 G4 Y7 L( u' c8 J#include <mach/da8xx.h>& o+ n9 T3 p, _7 ~! u
#include <mach/mux.h>3 E, d( |& h4 ]7 _2 j) I% j" o
& ^8 |$ T0 t+ p6 I2 ^+ W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ f } p1 D3 D; W& ]
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 j ~8 E1 x! T
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 X2 h G% X6 q. t5 r: W6 i
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, M( `( Y( i5 v a9 r6 L' z; E4 X# d& K4 N- a- }
/* assign the tl som board LED-GPIOs*/7 ^8 M: e$ b6 }! _4 d
static const short da850_evm_tl_user_led_pins[] = {% I @1 V5 o1 [) G& |2 r- g7 L
/* These pins are definition at <mach/mux.h> file */
) ^8 d& L% H) b& z T; I DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 T! K- p% m. f2 X% V; e
-18 S# ?# P6 `/ I+ b; @
};, |/ q) U: _+ G9 S
8 S; Y2 X: ?9 U# a9 Rstatic struct gpio_led da850_evm_tl_leds[] = {
3 \3 E7 C1 j$ C' K2 U1 K @ {( f! A. @4 t4 @0 X& q
.active_low = 0,
7 E+ V M2 x/ H4 R, m .gpio = DA850_USER_LED0," N, d5 ^, d# A- r
.name = "user_led0",. g* W! Q4 @- @' J- |
.default_trigger = "default-on",
4 R, }' _8 J" ^0 a/ o5 W* k/ C },+ {5 m; Y9 N# W5 r7 a
{- N6 M/ ]/ p( j$ E- `; H
.active_low = 0,
; a& m$ d8 G( }" C .gpio = DA850_USER_LED1,
7 i9 J* M& c! q2 x .name = "user_led1",! k% W1 m6 w: p1 ~6 Q5 l6 |0 u) {
.default_trigger = "default-on",2 o% G' P+ Z# Z1 T
},
8 Q) c, E' G* j Z9 q {
) s/ _, l. q# ]+ C. V1 M% v' x' w6 p .active_low = 0,' I* r- r) y) [( b
.gpio = DA850_USER_LED2,2 d% K* j7 ?$ c- @' p2 y% R
.name = "user_led2",* \& a" v3 `0 X. C8 x
.default_trigger = "default-on",
2 J- o& _ X/ V% q; v7 e- J },& q' I. |9 u* Z( _( J2 v( _
{
; G* }+ V+ b0 ?& X/ m7 n .active_low = 0," g4 R2 A+ ?" }
.gpio = DA850_USER_LED3,
" b* \% a, t! q .name = "user_led3",
. p' U7 a1 ~4 t" ^ .default_trigger = "default-on",2 G/ c4 d9 }! s* B/ Y
},
: ^4 a) n: q: z# y4 X4 o( Q};
8 N5 @1 s6 h R1 [% O
" Y. U- P, }* n; E- j! cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 Z9 H7 I/ M6 s+ m8 ?! p
.leds = da850_evm_tl_leds,
- F- `3 e3 J9 h4 ^* c' { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! @" n* }! z3 y& T$ q. N% d- `& c2 }. Z};
. j2 l. I) b: c: G7 Y6 Y* \& p; r# J
static void led_dev_release(struct device *dev)
- o* I- x! b2 B% ~& U{
" ~* M" u5 c5 P( e8 Z};* o( M& F% A- b+ ^2 Y
& F( |/ [' V2 q0 ?8 k2 T6 Y
static struct platform_device da850_evm_tl_leds_device = {
& h+ v/ j, b$ K! h& r# b2 Z( v .name = "leds-gpio",
Z0 y+ Z" G5 u" T1 p .id = 1,% }9 Y! O5 r+ X( z1 V5 G1 l8 i/ l
.dev = {
5 M. o" f2 z" X) u* U. x .platform_data = &da850_evm_tl_leds_pdata,/ T- _7 w1 _8 ?7 [( L0 C# g: o
.release = led_dev_release,% r. b0 }8 a( j4 @8 B
}1 h# S" R4 J/ q- c' ^
};
( g6 J V4 }- L- {+ D% W; P) C* @( {3 k* l# m4 S
static int __init led_platform_init(void)' j% y& M2 C* b# V& Y, X
{; a. ]) ?+ x6 _" w( K; C; u( L: h
int ret;8 d2 Q, ~' o/ K' w" r
#if 06 i/ m( l" w4 \8 ^" {
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; Z# [: x. }/ e- a/ \ if (ret)6 w6 `# F L/ Y9 K: u+ [5 m& G: @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": f0 \. c* h1 A$ t
"%d\n", ret);) v ^, B% l$ n! n
#endif, y, v% w# j) o% @; @7 J
ret = platform_device_register(&da850_evm_tl_leds_device);/ R- R1 o, Z( S `/ p
if (ret)
6 ?) g1 {# X1 \) C+ X! r# O/ Z3 c/ \/ P pr_warning("Could not register som GPIO expander LEDS");4 y" y1 |4 a4 E+ u5 S% I0 i
else5 ~2 z" q. ~/ C5 E1 s9 |2 `
printk(KERN_INFO "LED register sucessful!\n");
{& Z+ Q' H* a; L* Q# c$ ~
3 r9 E% a- J$ S0 H8 @ return ret;, p1 D: Y0 w& s- G
}) R3 U( }3 d( A# G
& F/ H9 [5 e# A: L9 ?; e2 G
static void __exit led_platform_exit(void)9 t* V( J( H4 c' M8 ^
{& t3 k7 [6 `$ m2 }( b0 k2 h( [
platform_device_unregister(&da850_evm_tl_leds_device);% Q& v2 H% L2 v
' H3 O3 n4 ~ ^8 P
printk(KERN_INFO "LED unregister!\n");8 Y6 Z' b, a) N5 z3 L4 K
}' B4 D7 U/ T2 \$ Q6 u6 D4 O- E; a
- f1 }: i7 x: P* u
module_init(led_platform_init); ]8 e5 T) O# [
module_exit(led_platform_exit);" n- F$ C# ~: k: V7 p4 {) F
* a% F/ k0 C0 i$ a
MODULE_DESCRIPTION("Led platform driver");
1 T5 o+ U* X; ~MODULE_AUTHOR("Tronlong"); S1 R% g7 G" |8 z- H- F8 |
MODULE_LICENSE("GPL");0 N' F+ t4 g! R; F2 j: p1 Y6 x
7 z1 b+ E6 P% Q! Z3 E5 z |
|