|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 ^* C9 J9 O6 l$ i$ X#include <linux/init.h>
, x% V, f! ]" ]9 }: X# `! ?; Y#include <linux/module.h>; ]! `: }% U' Z4 z8 ]! s, w8 p
#include <linux/kernel.h>4 {; n3 Q6 F( M
#include <linux/types.h>3 L' L5 Y/ k) W" q& B& e
#include <linux/gpio.h>
: _* p' e# R; X. X- }- {#include <linux/leds.h>: m/ `4 u0 L2 d2 E D$ }
#include <linux/platform_device.h>+ j$ ]' `$ j7 f/ @
4 o7 i- T( ^. ?; q3 E
#include <asm/mach-types.h>
0 N/ j) m, _$ f' `#include <asm/mach/arch.h>2 [, W0 f* b& z9 `) P, y& Q
#include <mach/da8xx.h>
% E3 f- ]* a+ B7 B9 p& |4 d% a#include <mach/mux.h>- Z F8 v4 z8 e6 s2 \, M
4 Z# ?( ?* @. d d/ I2 J
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). \* [. D( e, C7 h2 a0 R6 r6 O
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 q% Q. _9 ]9 F% p, R. d7 K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); O b. L1 E5 V0 Y5 D! W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 D7 u1 O5 Y/ h0 j% Z4 Q J
9 a5 Y! }$ l+ l) M1 F7 p/* assign the tl som board LED-GPIOs*/) }! M$ i0 Y) U
static const short da850_evm_tl_user_led_pins[] = {
2 ~ N) t" I# `' q /* These pins are definition at <mach/mux.h> file */$ A' j; M% i2 C' U& l+ J- F8 L* ^
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) Q! O8 X& W ?1 Z
-19 f6 p( E. e( H) O) N; k
};6 J' [+ L2 e" [* V% ?% Y
* y: z7 A6 E* t3 u
static struct gpio_led da850_evm_tl_leds[] = {
+ I$ X- m2 D) K1 }! B7 A5 Z' r {
! V. {9 {$ Z: ]' q9 `3 f .active_low = 0,
7 P1 X3 {" A( }, @. j7 ~( h4 C .gpio = DA850_USER_LED0,: X0 k: f4 S( Z' |6 e/ }1 |2 |2 b
.name = "user_led0",1 K3 q0 L1 g$ h' w5 ]: k3 \
.default_trigger = "default-on",; E" g# M+ w6 \& S( ~0 t* _
},5 F* u8 B6 [# t; ]9 f0 o
{
9 J% m0 W4 q f7 C# O: y .active_low = 0,- A# r" o {. U2 J
.gpio = DA850_USER_LED1," a3 Z' P7 D6 d
.name = "user_led1",
2 d/ o( `: n4 C- L) \2 o .default_trigger = "default-on",, [/ f( A9 k5 H5 _
},
% ?3 v4 j* o! G; N$ l5 M {
. {7 l* ?- V4 x4 u. P& l7 B .active_low = 0,
. ?4 E0 p' x( S3 s( e& E, A; _6 ]; w# ^ .gpio = DA850_USER_LED2,# |+ r: N/ L/ Y# R% A6 S
.name = "user_led2",
0 j$ D1 |9 e3 h$ d! v( @1 H .default_trigger = "default-on",: \& j) n5 m) L. H% J
},$ \7 u1 m# ]! A. ^
{
' `4 s5 D* d3 H7 A% u+ y9 I .active_low = 0,
) i" y: ^ p! h/ U .gpio = DA850_USER_LED3,
W+ ]" b) X8 a4 N6 t5 `( j, h Q! v .name = "user_led3",
. m! m& R+ X! Y+ J, u: R .default_trigger = "default-on",
* r W- u4 S( R" D },8 N$ n# X- _+ @. `
};
1 ?* c" d" k+ g; B$ _
* i! G! B: I- Y4 E/ Nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, {' T ?9 f7 H" R$ N# {+ U8 p" L, \7 q .leds = da850_evm_tl_leds,& _) _( X6 z4 G3 q% Z/ k# N. r: J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 T+ x1 o, k* ^/ u% _+ T2 e};- J( S- m7 Q$ C* e* w# K/ V
' K3 x4 l, C2 m# Ystatic void led_dev_release(struct device *dev)
% S, ?1 `& O; k. F, N1 v5 Y{
, ]- P& R* b: n' E, H2 x. c};0 j& J$ c! U: M+ ~, J8 }
1 D2 i6 ?3 x# q/ ?$ ^+ Lstatic struct platform_device da850_evm_tl_leds_device = {
W9 X+ d$ i! x6 M* n( ^ .name = "leds-gpio",
3 S& c0 u3 T' Q5 P8 I9 w .id = 1,
7 J$ {8 {) H+ e! T }. v7 b .dev = {
) M1 k1 i, ~" x1 G .platform_data = &da850_evm_tl_leds_pdata,7 I3 }: F$ Z- {6 i
.release = led_dev_release,
2 E0 N2 V/ j G6 ]+ R% e! M7 @3 C }& B1 v+ P/ c0 H0 z- p) |
};
% Q( g1 w0 K0 X+ ^3 U! M( q8 e: U* K! b! R
static int __init led_platform_init(void)
/ x, |# M- }' c: [" O% ~{( k) i- O: R! e8 S6 W; c" R
int ret;
5 W$ o" _' u1 X G) s- x5 A. M) T#if 0
9 V2 w& ]: Q, s ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ `4 Z% T& _4 p, ^) e: _& t5 D if (ret)
4 [" u4 @: N/ [6 x- F( ^" R% a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( z w& _- `. G: S "%d\n", ret);' a4 d5 k" X0 D3 I$ h, \8 ]
#endif
& w: ~2 k5 X% z( v/ Z ret = platform_device_register(&da850_evm_tl_leds_device);' r0 O* {' U% \# p0 d9 w
if (ret)
7 K) Z9 F6 [7 ?. J: s; o: d: V) F pr_warning("Could not register som GPIO expander LEDS");
8 q9 |; V! m% I- o7 h$ K; z$ F6 H else
5 P4 ]2 M- Y4 @ printk(KERN_INFO "LED register sucessful!\n");
I* O( k# c6 u- _; q
5 o8 @8 b3 h ] return ret;4 Y) j# z% D, q/ ?6 e5 `9 S
}
& E7 m" G/ F8 Y T$ q1 v3 i7 z
" x; N2 W8 z0 l. y! F9 Dstatic void __exit led_platform_exit(void)/ t( Y5 b5 Q( ^; W
{
5 H- w# P4 y" u6 u platform_device_unregister(&da850_evm_tl_leds_device);$ f; r# \- ]7 |9 L+ ], ]" |
) J. d' ^. L. q& t0 |1 e) Z
printk(KERN_INFO "LED unregister!\n");/ {2 i" B: P# z) i4 p3 E8 H
}
. v$ P. E/ E4 G8 N# k; X% i
0 ]3 C! t. U' q& k0 R. Tmodule_init(led_platform_init);% Q$ {: C! _" a' ?6 K+ R
module_exit(led_platform_exit);
7 t9 ?$ {7 g- [7 o, g2 ~1 p1 w/ K. ]: B* U* k- Y2 K/ |
MODULE_DESCRIPTION("Led platform driver");
3 v: M+ ^# h, T5 j8 h) ]) f; ~- t1 h$ g" {MODULE_AUTHOR("Tronlong");
" n0 k m8 X3 F% hMODULE_LICENSE("GPL");
& C/ b0 D6 |& c5 S
1 u- Z1 a j3 J0 Y9 b8 h |
|