|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ Q/ l0 P" [6 r1 ?. K
#include <linux/init.h>
; I/ h( b3 W. v( Q. T! z#include <linux/module.h>
% B$ `$ K A) d1 u! A" ~3 b#include <linux/kernel.h>
6 _( J' `# |$ Z#include <linux/types.h>
0 ~( F) \1 V/ k4 g#include <linux/gpio.h>, _2 p' o, K( j9 C+ C8 S) D
#include <linux/leds.h>) J% v$ C0 J, m6 r& v7 q
#include <linux/platform_device.h>
; L9 A. ^- t2 _) W4 Q: x; o* D+ N0 F) D& Z# E4 ?% I4 }
#include <asm/mach-types.h>
* R4 I; `% e% R2 m9 [ ]8 x#include <asm/mach/arch.h>3 s# d4 I% N! ]6 O: @/ D3 O
#include <mach/da8xx.h>
3 z& ?: P2 ~7 x/ l#include <mach/mux.h>3 j$ A2 E: N, |$ j
' ]% {$ ~0 `: L* [( E& l2 a7 S
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
q* C4 M) R! N1 E/ ]) y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% r9 u5 v+ |/ b4 O" [#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), ?8 e0 V& L& F- W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- N/ p* K- u# z/ Z7 i+ X
. a/ H( |" ]0 @" J9 q/* assign the tl som board LED-GPIOs*// r( M+ |4 G& l- c6 y2 W
static const short da850_evm_tl_user_led_pins[] = {8 N$ g3 L2 o% d! @$ ^+ X
/* These pins are definition at <mach/mux.h> file */' v4 [& y2 F! t
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) c& v) z9 B# A0 T- ] -1
' h" c9 j- j% i9 ?7 m7 V1 @};
) G; O8 T, l2 K @& m& S3 E6 J9 C7 l* o& z; g9 l
static struct gpio_led da850_evm_tl_leds[] = {
/ R q$ G6 E x/ G5 k! {3 f {9 f {% Q6 F9 i6 ~: ~
.active_low = 0,
6 ]' X! N- X2 j) E: X .gpio = DA850_USER_LED0,$ q1 \+ Q( n( R: \7 Y
.name = "user_led0",; } _3 ?9 c7 P: J8 [9 h7 Z' x6 h
.default_trigger = "default-on",9 Q; `4 u4 e* u% S
},
l1 K- a: x$ Z2 L) F {1 K. w* }2 \- s, s
.active_low = 0,
4 F2 `9 e3 w1 z. u; V3 T/ r .gpio = DA850_USER_LED1,
' t, C* N, b/ X1 ]2 ?* Y .name = "user_led1",8 f+ f9 m3 |! W9 b/ ^# F9 u
.default_trigger = "default-on", i. F9 o8 B$ z
},( ]8 D& O2 ]' Q
{; x% M+ H; v. W4 o5 }
.active_low = 0,
1 f- X7 W" I: } Q9 `; F .gpio = DA850_USER_LED2,
5 w5 j' [8 q) t2 q1 | .name = "user_led2",
$ Z: u1 d5 ~9 Y4 Z: P# |: |$ x, v .default_trigger = "default-on",/ f. g, x" R( q+ F5 Q& R* p! o
},6 _2 d& E1 y) \+ L5 P" r9 r
{
' Y& ?9 ]. E9 B/ n$ r/ K/ _ .active_low = 0,9 s1 M% L& { V. P/ y
.gpio = DA850_USER_LED3,
4 R, W. `+ `/ o% L2 h .name = "user_led3",
9 y; V$ z* y) L8 ~0 S) |5 p .default_trigger = "default-on",
5 Q7 w7 ]; p, z D },
# U( V- y( y( V7 F; g};
( }( ^* U, D' \! i6 Y; o
& c" S# E! _9 y. p: i) wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
R; S4 `4 W; G' w& v, y .leds = da850_evm_tl_leds,
. E5 {4 C4 o/ ~1 q% f- j+ v, ? .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, R9 a+ z+ R& d5 q8 b) ^% }8 V
};
/ l* X8 g1 L- M$ k5 R
6 H& k# S( Q, F# t) T+ ystatic void led_dev_release(struct device *dev)' a- B" p* [1 O* w; s7 I6 k1 g
{# q% |$ G; W0 j3 ^& M
};; C: C; W: U& ?) w* z2 [
( w9 {' ]" o+ k' |4 m/ Z+ z
static struct platform_device da850_evm_tl_leds_device = {5 V9 C2 U c% Z- R% h/ T7 Y
.name = "leds-gpio"," L6 T4 l! k7 C; a a+ a
.id = 1,
1 s- |# }8 l3 w+ u .dev = {( H: k6 b; W/ [$ C
.platform_data = &da850_evm_tl_leds_pdata,, ?0 _) y' W+ D H
.release = led_dev_release,+ i! f" q0 @( p$ J _
}- n: {0 j# \% S
};# T! N k3 o9 w. q$ w' ?
; b h; i; A3 M: @9 h
static int __init led_platform_init(void)
# M+ o9 m* P. a" U% M{! u$ R. a3 e9 }1 f: ]
int ret;
; l' {% P1 b4 k! }4 U: S0 x M#if 0
U- z5 \& Y* p0 Q3 }+ h) U* Q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: H1 [ c. c" `; J& y4 m3 F
if (ret)
% o: V8 @# B# |, P6 f pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 H c1 O( j! e+ d( q "%d\n", ret);
, x7 f4 P! x" C; j#endif
3 @$ I- D* z4 O u ret = platform_device_register(&da850_evm_tl_leds_device);- M% d+ ]- Z) }6 i* J) `% d
if (ret)2 m! M4 m/ L) N. j
pr_warning("Could not register som GPIO expander LEDS");
) i9 \3 ?6 d- k" M0 A else
% @( A9 f0 E& Q* ] printk(KERN_INFO "LED register sucessful!\n");
; q; }) t+ n! x; v" `5 n4 f: E/ y9 J! P% o" b3 A* N L
return ret;
# C2 W! v8 h9 { ^% T, t}
* I4 Q9 v4 p6 K: d
" J; A' N" L; Xstatic void __exit led_platform_exit(void)
# @3 t, |' j5 J3 U8 d{
6 P% Q U$ l2 v$ u. f2 l$ ? q6 c platform_device_unregister(&da850_evm_tl_leds_device);+ J# o# v; j, z8 Z6 p5 v! W
9 g6 j$ C; j+ J" Y% s5 m4 W0 w! Q7 ~7 B
printk(KERN_INFO "LED unregister!\n");
( R2 i6 F9 M2 P0 R- c+ a$ r}: h3 K. v$ O; t4 P* x
6 b% f( [. }0 t$ B
module_init(led_platform_init);6 z' ]5 N1 I+ g9 ?" @6 v7 m" J
module_exit(led_platform_exit);5 v' W& j% d; {8 S; W: D% l5 o
* t4 r( D" j) @6 \ Y( Q* @MODULE_DESCRIPTION("Led platform driver");
. p. i) a/ h4 H0 L6 J; T. XMODULE_AUTHOR("Tronlong");/ y- Z7 l' x! B. D) [. R
MODULE_LICENSE("GPL");
! X" d0 U+ s, R( i9 T- Y2 W* c! D! }8 Z* {2 _* _8 E2 }. k
|
|