|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% b7 |$ J" T2 b! K7 a8 T#include <linux/init.h>8 J g+ H, h r2 m! L' T
#include <linux/module.h>4 D6 ]% l* @ w b( y8 o
#include <linux/kernel.h>/ I/ x0 T+ a2 g( q5 L. N0 E2 H
#include <linux/types.h>
: W, ]6 C% w6 E( [6 q#include <linux/gpio.h>: @/ ?% W2 ]: |$ i$ D
#include <linux/leds.h>
; S) T* x/ y& x& u7 H0 I#include <linux/platform_device.h>3 p) G& r4 O/ N4 R: j
! H& |1 ?$ b1 V4 |
#include <asm/mach-types.h>
, u) A2 k \. r#include <asm/mach/arch.h>5 j5 [" X. \# s7 Y
#include <mach/da8xx.h>, Z3 p* \, ]5 t1 R
#include <mach/mux.h>
2 B$ M# o. q( s3 I/ [8 [4 e% y3 Y4 N I# B. Z1 G' Z( o
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' C$ O8 f7 u' {# ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ _0 P( i! H' u7 R; t3 @$ H+ w: S#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 J! C( c6 q6 ?$ @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) L4 Z5 l! e$ u8 o) s. l2 ^' Q3 K% G
/* assign the tl som board LED-GPIOs*/
6 I6 W( x8 s9 g Q' r5 Kstatic const short da850_evm_tl_user_led_pins[] = {! p/ v7 D5 I# d! V. Z
/* These pins are definition at <mach/mux.h> file */: k! B* N! h! T' V; J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 F. G- P: @- R/ p
-1
5 b4 n2 m h/ y' ^2 w};, p. V' p$ u: X* C0 {# Z: {
9 p5 L' M* M8 A" Lstatic struct gpio_led da850_evm_tl_leds[] = {' p, n5 o2 Q9 B* O$ ?% a& T
{
: I0 w8 n+ U8 r: K) [) c1 j .active_low = 0,& R0 U) Y. H; v
.gpio = DA850_USER_LED0,- ?. V/ H$ |9 c" Q5 }" i
.name = "user_led0",
5 m6 K" y- {) y' C, I j u .default_trigger = "default-on",
* A2 u: R5 M+ ~( r },
, j2 d# m5 q. c {
6 E" o/ b) [9 ?; ?# T0 t0 [ .active_low = 0,
! o# ?7 P" b2 p9 a# q& K .gpio = DA850_USER_LED1,
) r+ ]3 X* ] U, `9 D' a' } .name = "user_led1",2 c$ @+ R: C" q5 S* p: F: X
.default_trigger = "default-on",
! ^$ K/ a, Q, c9 g1 T i z; b" O },
9 K0 x) A/ d! A: q6 X3 k5 ~ {0 e f% r: q) ~/ K: K. ]
.active_low = 0,; X0 e1 s9 f% h, H2 m
.gpio = DA850_USER_LED2,& f z( l6 W0 k1 R
.name = "user_led2",
, ^, A: o* t5 k- V6 ?2 E' A* I2 L .default_trigger = "default-on",7 l) P* K- p: K( Z/ W; t) t' m
},$ d; O9 |9 b9 V$ K$ j5 i# k
{% r, j/ M7 Z- q W5 V
.active_low = 0,' o5 ?$ q! R7 ^( s
.gpio = DA850_USER_LED3,3 D$ [/ z: P( p) w/ V. W$ A
.name = "user_led3",
6 w: Z% c3 ^5 e7 t0 t8 ? .default_trigger = "default-on",
$ ?2 n+ a/ j! F/ R! q },
' u& j5 v4 V6 [2 M* ]};
: G+ V! m$ ?" n4 S4 a- x% x. V0 z7 o; h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 j; v+ S5 [$ f# r
.leds = da850_evm_tl_leds,
! h/ g7 E- i3 U7 K+ f2 N .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( }* S" c0 j7 e. u1 K; _: G
};
$ ]) Z6 X9 ?% U6 ?6 Z4 J/ Z& T! s% z6 L& O
static void led_dev_release(struct device *dev)- X i" V; @8 ~- U! v* C
{" Z1 b, B. m' m! w
};
& M9 P( W" C) a; m f
' q+ i0 h+ z9 lstatic struct platform_device da850_evm_tl_leds_device = {) N/ p+ k- ]& z; l; b$ T1 \
.name = "leds-gpio",
( a9 D. c; L0 M w .id = 1,+ ~, x3 V2 B. @ f6 H
.dev = {6 m$ e z' u# k
.platform_data = &da850_evm_tl_leds_pdata," j* E& P7 l$ U, |
.release = led_dev_release,
0 w7 D7 j1 y) D, W0 j2 ]* b }
# e: p" y2 D9 b; J" k};
, s3 ~. B% f* m4 F/ B0 P" j: F- f7 i( G( q7 `
static int __init led_platform_init(void)
0 E2 p! a2 H0 Z H; P- Y) I$ w{% I$ w1 }0 D4 g# ~$ F- k* w$ N8 H
int ret;/ T8 }4 Q! f8 Z" C5 p9 l
#if 0 Q! F$ A$ M! y4 W8 K& H
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, A8 Y0 J8 f" F6 v1 T9 b if (ret)* `1 k% y; E" _( e7 ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) j+ t0 Y& C) X1 W "%d\n", ret);3 \' ~4 q1 Y3 Q$ Z
#endif
, [ [4 o4 @4 S" {2 m ret = platform_device_register(&da850_evm_tl_leds_device);( U% H+ C& ]3 f1 l" O; {2 B
if (ret)
: a: @! \& m7 ]6 A pr_warning("Could not register som GPIO expander LEDS");
2 k3 R) g* @ k3 x- r8 s f7 K9 @6 U else# F' H+ E I9 x5 R
printk(KERN_INFO "LED register sucessful!\n");2 ^- R. _) m n" A' ~
' H+ v/ H# F. ? ?, _ return ret;
* e8 w1 l+ g0 R* r @}
2 k% D. l8 M* k6 h- _
6 x6 ~9 g+ d2 qstatic void __exit led_platform_exit(void)8 J; _, i+ }6 ^
{
- H7 [. {* d7 _7 L ` K platform_device_unregister(&da850_evm_tl_leds_device);
& N/ u) g( C- k) w8 b9 [# }7 O5 k' k
printk(KERN_INFO "LED unregister!\n");
: ^9 ]* A8 R, C4 E- W0 i! r4 Q}, D- ~3 n( V) c$ k/ q3 }5 ~
/ F6 c6 [" V y! t% Y
module_init(led_platform_init);- B2 \/ V! m4 r$ L
module_exit(led_platform_exit);; }. X% w2 @* M3 {, R2 [: s
$ l v% U# C. o! |( W4 k# P- ^
MODULE_DESCRIPTION("Led platform driver");
3 k& R% [5 x% G3 \/ K2 PMODULE_AUTHOR("Tronlong");
9 {" E' W- A' ]: s; g7 KMODULE_LICENSE("GPL");
; G8 U% J, {9 \ j. b* v( ?# M9 O+ E7 o" ~: t
|
|