|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 I$ i4 a) E6 Z9 y( X
#include <linux/init.h>+ }8 k4 u3 }7 K% d2 q% D
#include <linux/module.h>
/ [2 w9 S; c' a& J3 a9 P! C: H#include <linux/kernel.h>
8 g, |4 e3 k4 S" G! N% R/ o#include <linux/types.h>4 P+ m& t1 U! H1 X" W; i
#include <linux/gpio.h>
/ D9 y* c; c8 j4 `( K( C5 y! d#include <linux/leds.h>& O' B8 u& i1 C2 e0 m. \& N
#include <linux/platform_device.h>
) ?% W& k; D& H$ M! W
5 z7 ~. k* M1 b6 t, @( N1 j* W#include <asm/mach-types.h>
* }' r, P, M2 V- c#include <asm/mach/arch.h>
& x8 L# H1 }, Y/ O8 R#include <mach/da8xx.h>- v o/ w: j( X( Z5 @0 P& }
#include <mach/mux.h>
; P& b- b3 {) D% Z0 B
6 d, @2 e9 }- B#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! H+ Z) I& V+ G9 |#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); | a0 e& f( o5 b) ^! f
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 |5 | G3 c% t# w5 s
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) T0 i( `6 x0 l5 ]- a
0 P. p8 b- e9 R
/* assign the tl som board LED-GPIOs*/. s4 x7 h1 |- `9 Y/ s" m8 p
static const short da850_evm_tl_user_led_pins[] = {
; j3 }- k4 H" y3 X /* These pins are definition at <mach/mux.h> file */
0 T% Y- |: A) T' ~# T DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 s) Q a# S+ n1 O% o
-1
+ x& ?: V: S9 J};/ O" X6 V o# O4 |2 ]- B/ Y
" }+ o/ }. }8 ^, h, Y9 ^* T
static struct gpio_led da850_evm_tl_leds[] = {
3 a+ Z9 ~8 `% [! ` {
2 u6 A8 Z' b. y9 e .active_low = 0,
% S& L9 R/ N7 b2 l2 Z& V .gpio = DA850_USER_LED0, S6 P% ~' I: V5 j- i& S
.name = "user_led0",
# @8 p+ d- S, Z3 T# P- T .default_trigger = "default-on",
) E' _- v9 U; @+ K1 F1 j },
4 Q o( D1 m+ b0 R4 a {: c9 l7 Y, l7 C' ]. P1 y/ d
.active_low = 0,
, y) ~% L; C" }) ]- Z3 X .gpio = DA850_USER_LED1,# A- P9 g8 y/ O
.name = "user_led1",- s4 s4 G' N3 `9 O$ D
.default_trigger = "default-on",
8 M* t, s; E1 I |9 o6 S },5 r# C. t- h1 K- @) E3 V
{ j* q6 v( j7 j" K7 |
.active_low = 0,
- J6 I: x% O# B( d. v2 N6 T9 l; i .gpio = DA850_USER_LED2,
- @# x, n: P( J: B1 z" V .name = "user_led2",! n2 U% M+ |9 M. {) x T
.default_trigger = "default-on",5 z& }) F! d9 b& H* v! T. O
},
% g) X% n3 X& e- M- K2 D& |. E {
' l) w# Q Z/ D" b2 o .active_low = 0,
! _9 q: C O6 T. t# t7 _& K$ Z .gpio = DA850_USER_LED3,2 |+ s4 P& Q7 I E
.name = "user_led3",2 w( N3 n4 V& X, a# D9 H7 D
.default_trigger = "default-on",2 j7 [# f$ u+ `9 j) D, `
},' u2 @) C* Q' n P1 x
};
! ]; x w# r% o. \! b+ x
5 H- Z3 r7 L1 O: w; O4 ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
e" w& n- c a. g .leds = da850_evm_tl_leds,
: J+ E$ M; R" t: a .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 J/ _/ n0 [9 w' w3 ]/ l3 W. I' Y4 W
};( a( t. z& o- ]! u
( p3 i& F j( |$ T3 Mstatic void led_dev_release(struct device *dev)
% F; R( u: Y" e: H& K{9 m- X* v' d% L1 @- a/ i! t; ?
};
! v k( [5 j5 _' D' O* a5 U b6 d; n, Z/ d/ l; Z) S# }
static struct platform_device da850_evm_tl_leds_device = {
% P Q: B/ ]9 c .name = "leds-gpio",1 i& L3 Y. O$ g8 y% Q B
.id = 1,
% R$ v) N" s3 Q4 B) U3 O { .dev = {
0 p5 B' B' I: h0 \. ^2 H; X .platform_data = &da850_evm_tl_leds_pdata,
) [3 l7 {1 G4 G( y .release = led_dev_release,
: s4 A5 I& G3 r) Q% @" U; r7 T+ B7 _ }
% H# \0 {, x1 r0 W- F' \& T};1 a3 a B: E3 l( L, G2 @
! _$ M: c( j8 h
static int __init led_platform_init(void); V, n; f ^ z8 X1 G
{/ K6 e3 [* q! b B% @; Q
int ret;
: v5 `/ y9 k; q' P/ q#if 0
5 d x7 ?! ^0 i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 N" R6 r8 r5 O+ p, C4 s
if (ret)5 {7 c+ o, j, ~4 R1 E9 X- y) _
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": s. f \$ @# Q
"%d\n", ret);2 x9 J6 u7 h0 |; W) |
#endif
5 |2 h1 x, r- X. p ret = platform_device_register(&da850_evm_tl_leds_device);
( `# k" c% O& e* Z* e if (ret)5 o1 S1 Q. _% t* G1 r% o
pr_warning("Could not register som GPIO expander LEDS");6 T5 G+ |2 c0 U4 H
else
( n: H. v7 V( }" N" l' I printk(KERN_INFO "LED register sucessful!\n");8 Y. s& v% E. L/ b4 w+ @
, G$ Y1 @0 K1 b9 Z8 i1 i return ret;5 P3 \/ Y! w1 A4 Y' j
}
) M e6 e% R8 i8 ]( `% T( _; D9 H4 X& u
static void __exit led_platform_exit(void)
' Q5 H! m; |% D{
% B5 X7 X( l1 ?0 H7 ` platform_device_unregister(&da850_evm_tl_leds_device);
4 ~: @5 h+ F. k @, f# ?# y+ d& `8 q" F
printk(KERN_INFO "LED unregister!\n");
7 _/ T0 E) z+ y+ X1 S- |% {}
( \$ s( H& R! p, k( v" w: m+ |( X6 `" l% s8 K& Q" v5 g& Z
module_init(led_platform_init);6 ?$ Z" ], q( O7 H& E$ Y" ]5 M+ M
module_exit(led_platform_exit); ]2 M* Z1 C2 }4 |; W6 E, ^( Z8 h
. `, @7 i7 P" V9 Y( }
MODULE_DESCRIPTION("Led platform driver");
7 O) T- x7 Y) |' w- K% m+ e" vMODULE_AUTHOR("Tronlong");
. l: _& D! r/ I$ r6 G' LMODULE_LICENSE("GPL");
9 f0 z/ E, z! ]0 R+ g. b& e% a! I
: A. b, u3 p8 \. V |
|