|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 l- m1 q8 g( N l: D% g
#include <linux/init.h>
! S9 \$ C! b& b3 A# l% l5 Y! v#include <linux/module.h>4 i8 B) O) x4 ~" j- V6 r) b N9 N/ {0 c
#include <linux/kernel.h>; _! h3 O' F; c6 V% u1 v2 h% ~
#include <linux/types.h>
( ~4 p p h' J+ v' V#include <linux/gpio.h>3 V$ j0 d! ^! Q# R6 q& P
#include <linux/leds.h>' X5 R- c: h5 T& Z
#include <linux/platform_device.h>
: s" A. X k3 ~# @
8 l" T/ K. T* x" X4 `! A( l; s#include <asm/mach-types.h>! Y& b1 W' e* y5 q( d+ w2 B
#include <asm/mach/arch.h>% }7 m2 i* v! }0 L; k \6 B0 N9 B
#include <mach/da8xx.h>
/ H+ s Q2 R; H. ~2 c. T- q#include <mach/mux.h>
) i8 v i& N- v/ g: s5 z$ `' _+ l- L0 h# I" Y% z: a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), }. j6 q. _* R" [% ?' [
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: Q& M K2 K9 j5 C' G& F#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 t9 k8 j) N i h2 f
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( J$ [- D3 O0 L# R7 f7 y+ R8 ]* i$ `7 |8 j( t( C1 D6 I. W, x8 r3 a
/* assign the tl som board LED-GPIOs*/
$ I) I" t7 d1 n% h$ O% ], kstatic const short da850_evm_tl_user_led_pins[] = {
7 {: [+ N6 Y, | /* These pins are definition at <mach/mux.h> file */
8 |. J( Q+ b7 r' l9 I# D3 u( c DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. J* ]/ { v+ ` -1
, {5 j2 Q2 C0 V};( r9 {! b. Q8 L M, D# q- X
! N) U, c7 {8 H% x w) pstatic struct gpio_led da850_evm_tl_leds[] = {
0 L( r. b5 f- b {
. |% |' Q2 I! A7 A .active_low = 0,
' G, C2 {' H; V, k& c/ l+ z .gpio = DA850_USER_LED0,4 o# P G/ `8 l9 [$ d' E- O
.name = "user_led0",6 H0 b# }6 Q3 S. Z5 {4 Q: Y
.default_trigger = "default-on",2 [# v. z) Z) h! o6 k' D7 u; g& m
},
2 ^3 h% L: {4 U/ T- a4 _ {
& M0 s# Y. `& F- Y) [) B2 O% x .active_low = 0,: l% E/ n2 d8 o4 {$ C% U; x
.gpio = DA850_USER_LED1,8 @$ l7 `! S; W7 D x! m
.name = "user_led1",+ M8 k, C- ~* v' o- [7 {- R% p
.default_trigger = "default-on",
0 v( i. m2 u6 i% V, F; q7 z: l },
?# ~! T7 d7 m: T {% q D8 c |* w {$ W b6 f6 l9 {; ?
.active_low = 0,
1 r6 u8 ?- T5 ^& |9 t! S4 f# ?4 \$ s .gpio = DA850_USER_LED2,
5 o2 T! }" J& i+ K9 A .name = "user_led2",( u6 f- ]; P+ P) t z4 [0 @
.default_trigger = "default-on",
% d" L0 [% o- l9 }: t },
& n9 U& K% }# B. x. t+ z S: _ {
8 `- G$ e( J* J9 w .active_low = 0,
1 d9 [- n* q/ F3 X. c) z. n: R1 ^5 { .gpio = DA850_USER_LED3,
( ^# c/ U2 p! X7 f$ r5 r .name = "user_led3",% `- n. H' D! e, |2 N
.default_trigger = "default-on",& P- ~6 H2 z# i: f- I1 \" ?
},$ g5 R3 j- F3 H
};/ i' [2 H5 q! e- l
, @" z+ r. D2 Q* P; x+ f( M. qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! p% F" n$ {# J, H+ P .leds = da850_evm_tl_leds,
; m/ Y: Y) B8 l% a .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 X, ~$ H) I2 s8 b' g. F};
+ @) f* B5 I- ~) A/ |+ u" e8 @! g
static void led_dev_release(struct device *dev)
! C' o, L+ L( ~; c1 V{, s" \' H( G( r' T \9 N
};3 Q5 \2 U. I5 T2 }. `
1 i* {- u; E' g6 ?: Z# E `static struct platform_device da850_evm_tl_leds_device = {0 d: M# x4 s k! K% o F/ k
.name = "leds-gpio",
& P1 L1 T: B- z .id = 1,
! g. v! y" y% ]" c" d .dev = {
' W2 S# R% s" e& _+ `/ c; B .platform_data = &da850_evm_tl_leds_pdata,/ `& ]& |# Y6 S _
.release = led_dev_release,
8 [$ J$ V* `' n7 n# g" D( Z }
- D* _3 g; y& q; j3 [8 O};% {6 J$ ~% S* v9 E
0 q3 e) s' H/ x1 A- B% W! Rstatic int __init led_platform_init(void)
* {0 i7 [# n- J/ X ]( [& r{9 Z6 Y# x/ T) \9 U6 \% x
int ret;& X2 D2 n5 W+ |- L" @
#if 0: [" G9 {& Q0 S9 F: e* n; U g, r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 t8 b0 c0 K7 h
if (ret)2 A5 Z. v2 j- H3 \7 o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ p }& A1 c# O- D+ y
"%d\n", ret);
2 h7 O1 @, T, _5 I3 O( J Z" c. }+ S" S#endif% J, O) Y/ ]) c4 {) k3 h$ z
ret = platform_device_register(&da850_evm_tl_leds_device);' K1 ?! D2 b/ r1 k8 { R
if (ret)8 i8 U, k8 e) \6 y' j8 V
pr_warning("Could not register som GPIO expander LEDS");
3 q. N# ?" M; c( u$ G6 [. q; s else
6 O& u' d: C& n printk(KERN_INFO "LED register sucessful!\n");
l& X0 F$ l1 c/ t
1 o3 C) ]4 r: C' t: q return ret;
) ^. ~/ }# K, D+ w8 F" u( S& I% v9 L}4 L" \6 A/ r7 }3 }7 Q
) O# u: [; _- V3 ~8 q
static void __exit led_platform_exit(void)$ O" |+ \ N. n8 c
{. c# ]: I# Q: Y* i5 u* K, y8 d/ \- x- Q& V
platform_device_unregister(&da850_evm_tl_leds_device);
6 s& v% _: m* r- X3 @& ?: L: J6 F+ a ]4 |# K o! G, k
printk(KERN_INFO "LED unregister!\n");7 d+ f4 P4 ^" h
}
; N& H4 @9 D9 d" L. t4 B3 t$ p9 `# m8 Q+ k- A1 W7 {
module_init(led_platform_init);9 B! z% K6 Y4 e+ I5 ]! _
module_exit(led_platform_exit);( X7 \# V7 \3 U) a
/ d( n; i% h9 }
MODULE_DESCRIPTION("Led platform driver");
* y5 f. `; w/ j& [8 A" B( FMODULE_AUTHOR("Tronlong");/ W- W6 u0 p3 I8 j3 P
MODULE_LICENSE("GPL");8 Q& d8 l1 Q2 F
3 Y3 J8 `% M0 g1 L) X2 p$ b |
|