|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; `( o" h9 P" I- ]#include <linux/init.h>; H# U2 s- r: |/ Z6 k
#include <linux/module.h>
: ~1 Z# ^$ e {9 y#include <linux/kernel.h>$ n# z/ X' ]$ P% t* @- n
#include <linux/types.h>6 l" w! i' i# Z* L) o. s2 ~/ t/ P5 }
#include <linux/gpio.h>$ j, o. x5 c b$ [+ h3 |3 D
#include <linux/leds.h>) y, {4 W* d" [7 g% H/ ?
#include <linux/platform_device.h>$ m$ n: J' E- L( @9 r6 d/ t
) `2 G" ^0 {3 H# A0 N' Y: q& j. F#include <asm/mach-types.h>
& z# ]0 k0 `. S1 }/ G#include <asm/mach/arch.h>5 s" M5 ^, ^7 T2 d1 F
#include <mach/da8xx.h>
}/ a4 T, t7 f3 A! Q) A5 f#include <mach/mux.h>
0 a2 p' P& q( v9 G5 i7 h" R
; n, J# I# k$ W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 h0 ?' H% d7 K. n% N$ q+ V#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ h# J4 |2 o( ]4 I2 h9 R9 [8 M5 h& F#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 m' @% B& i2 J. p' k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* q c/ `" n% E* `- G
4 H0 {' n. z0 f$ V4 U( h' l/* assign the tl som board LED-GPIOs*/* B, Q, ]4 i! m) y. S0 z
static const short da850_evm_tl_user_led_pins[] = {5 e+ u) `4 H1 C* U
/* These pins are definition at <mach/mux.h> file */ M2 Z2 Z3 ?$ G5 G4 B$ T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 {" U0 h- @( B6 l E -17 U1 q. D9 g. q! Z, z
};
% i" l0 | f. e
: q& g* A4 F {0 tstatic struct gpio_led da850_evm_tl_leds[] = {$ [: ~3 M# x- H8 M1 J) Z
{
' _$ U4 H# j+ G: y' H' |9 \ .active_low = 0,
2 X& \ ^3 n! n) j, v8 O; o: \ .gpio = DA850_USER_LED0,; d+ K/ b) r2 Y1 U+ o2 _0 e( W1 f+ u
.name = "user_led0",
3 I* z& G' R8 `$ n# H .default_trigger = "default-on",
/ @: F, P! `) z7 Y* f },/ K: J. H5 ~4 V$ n/ C
{
* t+ d- c- A! H$ S* y .active_low = 0,/ }. m4 D ]$ u- ]9 J* `
.gpio = DA850_USER_LED1,
0 O I3 [1 U% D) D* q .name = "user_led1",
7 Z$ p) @3 y2 Z/ I+ K# X7 [/ C .default_trigger = "default-on",
J: O+ n) F+ y6 s Y* i3 D, f7 O },/ w3 V$ A( c4 C! L( l* Z, M
{
2 m2 o0 n" ?4 v .active_low = 0,
$ L, O! \% C8 Y .gpio = DA850_USER_LED2,
8 U6 X# e& A0 ]+ N4 ?1 c .name = "user_led2",
' B' P! \9 q) _ .default_trigger = "default-on", k/ ~4 s( ^4 r$ c8 X3 Z: ]
},
! C' z h& g3 [1 u3 [5 @% p0 L- A {
3 ~5 u9 ]! H& @' L .active_low = 0,
, I" [+ X! O3 C. ^ .gpio = DA850_USER_LED3,8 ]- m4 L0 Y1 ?9 F
.name = "user_led3",
/ B! k: U7 F- k4 c$ @ .default_trigger = "default-on",
( j" {* D% I% s8 M& ]4 B },7 l' G$ _" S4 G& z; ~8 x: Y$ d
};! G+ ^7 P7 O6 }/ E% o% q5 k
8 ^; G' i) W& s% f6 k) fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 E$ X# h8 y1 P$ i4 j* x& K .leds = da850_evm_tl_leds,
; {. @4 x! h, b/ o" X: w e9 T .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: w( K( ~% O: l3 ^' \# y};9 H/ o' v) F! G# ]$ x' j
- j) I+ |5 j, [5 Q* \6 {9 N! r1 d
static void led_dev_release(struct device *dev) q* m+ S) g- F% ~9 j7 S% w
{& ^3 w5 }4 |4 c/ ^4 S
};. d* s; Q# N. I
# e0 o9 {- K7 @& \$ V/ a0 lstatic struct platform_device da850_evm_tl_leds_device = {
4 J8 q5 {( [1 E .name = "leds-gpio",
0 o. H) v3 x! A' e .id = 1,
R: o! k+ h$ y. F .dev = { B# U8 O3 `" T
.platform_data = &da850_evm_tl_leds_pdata, `& ]+ y. B% \- @5 F' b4 j& n
.release = led_dev_release,
8 K3 q* }$ m. T8 ?; Q8 Z }
5 G$ N$ K$ q- y; U* S3 M, c- X4 i4 D' j};
) Q, b; y/ Y' A* H8 O6 k
$ L8 O# j5 t' l% Nstatic int __init led_platform_init(void)
* o& ~9 W9 K1 X# Y" a+ L( ]& x{
* E' h& A& _" p5 j int ret;
1 e( U' t# \6 ?5 @& G7 l4 C#if 0
* C+ U Y0 U3 F1 |* m# T* ~+ t( b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) Y1 ^3 G0 I) k$ L* K if (ret)
7 o. S% o* l5 F! Y7 I pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; s6 s: A' t) T "%d\n", ret);
7 c1 f5 p. T. l! S; q#endif
0 Q# W, |7 q+ j' E ret = platform_device_register(&da850_evm_tl_leds_device);
. F" R# Q. ^% j0 Z3 w4 u/ T5 P if (ret)
1 {* R7 M5 g; L6 u/ v& J) S pr_warning("Could not register som GPIO expander LEDS");; q1 n: o1 }9 g8 a% y
else7 y1 _! z7 g) G% Y( X
printk(KERN_INFO "LED register sucessful!\n");
( A8 ]5 W x3 |! r' J1 @! v0 j& N+ i/ ?- D( T
return ret;# f: X2 Z' x5 n3 q5 x) | T8 i1 a# i, o
}
3 v4 Q% ~$ s3 [* U, {: h# q
" W7 V; I# s8 z& n9 k6 o" Dstatic void __exit led_platform_exit(void)% A" x4 B! `) P0 S3 _$ K
{
* F& i& d0 b; I" x. X9 x" ^ platform_device_unregister(&da850_evm_tl_leds_device);
/ J5 D% y# V" f) W2 c& o$ B$ }8 M) U4 U( o! D% u# W- W- k
printk(KERN_INFO "LED unregister!\n");
; X& d* f3 o# d# I}
2 R- {- {4 L$ D+ E* B/ h
Q. w- K5 m# J8 cmodule_init(led_platform_init);/ A ^) T) B4 i- d
module_exit(led_platform_exit);8 [7 O1 R2 x- y1 _+ @
" ~+ x1 h2 l: B4 q; J0 n+ C8 Y
MODULE_DESCRIPTION("Led platform driver");# ?" \8 |9 k! p# j4 T
MODULE_AUTHOR("Tronlong");# j: A/ m! U0 v/ d4 Q
MODULE_LICENSE("GPL");; Q* q7 }6 k8 d0 O7 q" p
1 t8 S+ O' u" h) z r+ ]
|
|