|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 ^; E9 Y Q7 n- W
#include <linux/init.h>! P2 o+ j6 z3 _0 w& f
#include <linux/module.h>
0 S" q n0 X" L) o#include <linux/kernel.h>
# _$ v/ V& B g8 E#include <linux/types.h>+ v3 k6 J, S1 f
#include <linux/gpio.h>; k' s. b e- d& m1 ~
#include <linux/leds.h>6 `- ~$ S1 {* z6 y! _( A+ }
#include <linux/platform_device.h>
( A. n2 t/ U% O! D. [% Q/ |0 @$ D. B( P5 w- r- {
#include <asm/mach-types.h>: z- i! V- Z+ ]9 G( G, ~
#include <asm/mach/arch.h>0 f+ u. ]" `0 Y: i5 j( Y0 s/ v
#include <mach/da8xx.h># }( z) N0 e. | X
#include <mach/mux.h>' w) F9 Y( g3 i
4 A( L9 |; L+ |! `/ o. }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* w/ s; R% B. z* l j$ f
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# W1 h3 H I& W. _4 M+ ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& P% Y! [( W/ p4 S#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 h( F$ U/ i/ W5 X; ~! S3 }
. m$ W2 e2 y( t- F' M4 Z' R/* assign the tl som board LED-GPIOs*/
+ X2 d' D; e$ G6 Cstatic const short da850_evm_tl_user_led_pins[] = {& O: @( f) \$ k+ w( L) i
/* These pins are definition at <mach/mux.h> file */9 b4 {: `8 Q' Z$ k/ S( }
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- j) P8 A: ~: K3 B -1
2 W$ f0 u+ G4 M: c' V};
8 F: h [! R" z" ^
! I7 H! v: K( p- c. ?static struct gpio_led da850_evm_tl_leds[] = {
3 `0 H# v* \; m {
+ r1 O3 N* U# F R" U/ h. H .active_low = 0,
( h) `3 H: S1 B8 p' h) N .gpio = DA850_USER_LED0,6 q/ g- } g a
.name = "user_led0",4 M7 c# u2 H. U8 G5 x+ w
.default_trigger = "default-on",
# N+ h) e3 y; L) q },' A, A* \: ^0 Z9 x! j: K; _
{& n& H: Z- Q' N
.active_low = 0,7 _$ d6 [! g( O) `, }- w
.gpio = DA850_USER_LED1,
! \5 _- E u! b) k2 L) | .name = "user_led1",5 {3 @8 O9 X- e! X5 W% Q) B/ C6 m! |
.default_trigger = "default-on",) B5 g: G' b' |8 z
},2 Y! r8 r6 J; k: ^
{& t m$ ~7 ~: W6 Y5 D
.active_low = 0,1 F3 s4 J4 z+ u; w% p9 O+ E; `
.gpio = DA850_USER_LED2,
: f6 |6 @4 k2 u+ I0 b$ t$ I: l% Y .name = "user_led2",) J. X- Y* [8 y3 h& W( q
.default_trigger = "default-on",4 r V2 R' @5 i' J2 j- _
},
6 L/ M& v: ~9 I5 u/ @0 _ {( l; i( b, E& O+ B4 Q5 @0 a! Y
.active_low = 0,
( x, e* L, q- F% A1 i) P2 ^. m& L2 M .gpio = DA850_USER_LED3,
! `+ v) _0 I$ L/ f .name = "user_led3", [4 z' I: w* m
.default_trigger = "default-on",
4 s7 m+ ]: n% j; k: a/ K4 o7 q },
2 c3 T$ g2 u! z% V5 y3 P& |% q+ i};2 b3 t/ @1 p O$ e U
. q! `# D) k( [) m2 ~static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* v* V% }$ X& J- `" _: m .leds = da850_evm_tl_leds,' c/ U' z+ x6 L4 W: Y. Z) \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),, w- E/ T6 X$ ?
}; c z1 q1 l6 p* ~$ L$ O2 H! Y
# D" l! }4 w0 _- h4 N2 J y
static void led_dev_release(struct device *dev)
% v1 J' I+ o+ Z4 a, C) G{
% }; i0 e a8 e};& Q" P' ?. G1 e* P% ]3 p8 S
* {0 U; C# b5 \6 Q7 \6 b% C- p* Fstatic struct platform_device da850_evm_tl_leds_device = {
: \' l5 \$ z' L. U }9 D .name = "leds-gpio",
0 T" Q* k$ o" w9 G. @& @ .id = 1,
3 V1 |8 ~! t P .dev = {, P. {0 S- F1 |' u, x- \6 B# \
.platform_data = &da850_evm_tl_leds_pdata,* a3 F! c% B9 l" h7 G7 u1 |
.release = led_dev_release,9 R& E0 t+ w, _2 M6 x
}3 Z1 L- U5 l) S0 { N# J0 \7 V
};* s l p9 E7 I
3 O7 `5 G) B9 astatic int __init led_platform_init(void); O& I. p( N$ T% k3 U
{% A% x% {% _8 c+ z7 _( V% ?- E
int ret;0 }% T K; ~& b8 g2 U, t. b @% @
#if 0$ P n) v9 x2 ]2 K
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* Y( n) j% |6 y6 p* g( k; i8 r8 E
if (ret)' D; \8 {1 y3 [8 F9 L. h
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ @9 G* E4 e9 N
"%d\n", ret);
4 ~0 u, B2 ]# w7 J# j% l/ a5 Y2 Z. ^#endif
* J% i9 D9 H% Q" D% a! Y/ E ret = platform_device_register(&da850_evm_tl_leds_device);
, i3 Y; d9 O* `, k% \, M if (ret)6 W3 ]7 C8 M3 _/ l8 S
pr_warning("Could not register som GPIO expander LEDS");( u5 q4 z: Z i+ e6 {7 |, J! ]
else- C4 q t3 ]8 v
printk(KERN_INFO "LED register sucessful!\n");
/ O3 M1 p, o: [
u: t/ Y+ l) X return ret;
8 Z- K2 j$ ~7 e9 n+ W% p4 ?1 c1 n}6 K/ j* L; \0 g/ ?% e
9 i9 H( e% a" E# Lstatic void __exit led_platform_exit(void)+ z# }8 S8 }; l
{
' v2 D$ U ^! X' R" R* W: Q platform_device_unregister(&da850_evm_tl_leds_device);
1 i; P: i% k3 D3 y5 M% B* O0 v# e+ `! l% E6 y7 j6 p
printk(KERN_INFO "LED unregister!\n");
. p- k, c% P& A' t2 Q}
! X! V {0 ?- k; N0 ^3 _2 W
, Q9 k5 M5 j+ n5 Y, Q+ b. Ymodule_init(led_platform_init);' `- p2 F6 f _# w
module_exit(led_platform_exit);
% @' R7 p; [# G1 ^2 m$ \! j
& ~6 q3 W: T F) _. `; k+ gMODULE_DESCRIPTION("Led platform driver");
$ F2 _- o0 @+ a' qMODULE_AUTHOR("Tronlong");' A! j- q) A2 e
MODULE_LICENSE("GPL");
# ]; f: A) E" q L
0 ~' r& @- {8 S$ R |
|