|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 B' O: y% u) a
#include <linux/init.h>
1 U! \( N: _" J- R4 D2 y# g9 b7 u#include <linux/module.h>& U: i/ ~/ i) j
#include <linux/kernel.h>
) v- H: e$ B8 S+ ~& H#include <linux/types.h>9 |" j8 [' W7 A
#include <linux/gpio.h>8 D- }3 ]. }) N3 i" R
#include <linux/leds.h>
1 U6 g$ u1 o+ ]. Y& h' L#include <linux/platform_device.h>! \0 G4 {+ b- T2 S
1 z) ]- E8 h) _
#include <asm/mach-types.h>
) V' v. S/ A. b5 O3 K) m#include <asm/mach/arch.h>. v0 U6 R1 e0 x7 V4 D) P
#include <mach/da8xx.h>( P$ }6 X( ]" x5 D
#include <mach/mux.h>. a5 l9 F5 ^! O" Q# @
4 z- _% e: W) H#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 ^; j4 M W# X/ p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 R( o, S' ?: l4 l% o" g2 y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 ~& o5 B$ u- A#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, f: ?2 r5 o7 C- X0 g5 h, J' C$ } s0 k1 _. x8 b" h
/* assign the tl som board LED-GPIOs*/4 X2 c1 e. x: S. c. J a
static const short da850_evm_tl_user_led_pins[] = {! P% k0 T n9 u# k8 x
/* These pins are definition at <mach/mux.h> file */
# G" p! g- ^) l. t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" c! P% a) @4 L& S5 n9 O! U -1
( ] T- b2 K) o u& I( I};5 B# Z) D4 ]- H1 a+ ^# j {
3 |4 C! b7 d% ?" ^2 H; Ostatic struct gpio_led da850_evm_tl_leds[] = {
, y& q. S2 t' r* u; M1 _) F {
$ j, I5 B$ Z: L% l2 q- S .active_low = 0,
4 X. U+ F* K5 o; P .gpio = DA850_USER_LED0,
: F/ d2 L6 d- L6 o5 H .name = "user_led0",6 A/ T5 o0 _6 `
.default_trigger = "default-on",( h; v8 I7 v, X6 ~# |- V' F
},' W9 I! O% F8 b1 U( v
{
/ J. L C. @4 C; l X3 r .active_low = 0,6 Z, E' y- U7 V, b- U8 l
.gpio = DA850_USER_LED1,' n' P8 H6 Y4 B" U$ L6 `1 x1 \+ G
.name = "user_led1",8 b% b' A. Q* s; l4 R) {
.default_trigger = "default-on", G9 H9 M# z3 R, P5 ^- B2 ]7 @& l
},
- C' Q5 R2 u l0 A {! [3 H( ? u! I! M4 R1 f9 |+ ^
.active_low = 0,
* y5 Y7 r* S4 T, m2 _ .gpio = DA850_USER_LED2,
6 a7 z7 O8 F, ~" r9 }1 B .name = "user_led2",
5 I f8 ^% P1 j h .default_trigger = "default-on",
+ p9 n: ^6 X( ~: d },1 Q1 @: r9 I0 R
{
7 P j0 Y/ v( a3 I5 l* Z) m$ z. v .active_low = 0,
* U2 ]0 F4 X1 u+ e4 ~ .gpio = DA850_USER_LED3,' t; B+ h7 P+ G& q
.name = "user_led3",* j9 j" q! p) Q! X- I- m- v
.default_trigger = "default-on",
. v b2 a" J$ ?( h8 B2 j( t },
' h6 [0 G) j. ]' b- u};+ ?" b, K# ]; ~: X' _ K! R
+ m5 Q6 ^" S4 a7 v' `/ }static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& n7 K* f8 W8 M$ T .leds = da850_evm_tl_leds,$ W' b$ N' _& ~& v/ r7 `- }3 ^ v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 [) h% B- f7 |+ n @0 w: ]1 U
};: D# z8 @) s2 i# G
2 j) X& i7 P" e. n) D1 |8 F. Rstatic void led_dev_release(struct device *dev)+ x2 x! O4 V4 J0 ~
{3 \0 U, G0 A. ~
};3 l% b1 t4 f2 f: m0 E/ ?
2 T; Z# f7 r; |0 G0 w9 ?
static struct platform_device da850_evm_tl_leds_device = {( }( N$ o; y- ]; s
.name = "leds-gpio",9 i' f9 c, G5 S. g
.id = 1,' z+ I) X" {$ X5 Y: S* J# ~* o3 x
.dev = {
7 f D# `- P$ {7 _- [& U* k/ m6 f .platform_data = &da850_evm_tl_leds_pdata,. B. s- g& I. B
.release = led_dev_release,! t; }6 N4 a7 Y; F" E
}
4 K8 l1 P( J# c5 k, k# p/ X" a};
1 L9 q. _ Q8 U) S: Y3 B! D, ]5 G8 c! X' ^
static int __init led_platform_init(void)% z5 W: |: d. `- w w$ W
{; I s4 J8 b' s! [
int ret;
, C4 p7 U0 k8 J; s! G0 y#if 0# Y3 y3 \/ A& Y4 f0 R. V! [3 [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" E; ^4 E& D. A0 @3 R if (ret)& ]2 z' P) a# e' J7 D
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 G) L; S8 ~/ ?7 u, M3 { "%d\n", ret);7 H9 T4 K0 g0 y8 K* T
#endif- H! |; i: k+ c/ J: t2 r+ E
ret = platform_device_register(&da850_evm_tl_leds_device);/ f i$ Z" h: v; X6 D' V8 G' t" f- W
if (ret)4 _* G: v6 }. W- s
pr_warning("Could not register som GPIO expander LEDS");; D, P) M0 Z# U& M5 d, g! B; B
else B: l; O( [% l* g
printk(KERN_INFO "LED register sucessful!\n");
% u- e% z' P' O$ _# {1 i
! c3 D" {, i3 T4 Y0 t8 g return ret;
) ?' j' ~% j# D}3 D3 s2 X8 `0 ` q
1 |% a& t4 w8 g
static void __exit led_platform_exit(void)
. g& c4 {# V5 i. X( [{- V' ^4 c, v) E
platform_device_unregister(&da850_evm_tl_leds_device);, R/ b" |- I# Y' D6 c" c
& A- m" y; o) w5 ?7 x2 l
printk(KERN_INFO "LED unregister!\n");0 _# B: j/ e' s: l2 d, z( F7 y$ G; y
}
8 \& M( k& }; d' d: |5 o5 X; M8 L; R" r& ~
module_init(led_platform_init);" }' T7 Y) U* g& f! B; S: X9 X
module_exit(led_platform_exit);1 ?! Y1 p$ D$ `
# l) L. C/ [, u5 h0 WMODULE_DESCRIPTION("Led platform driver");) o7 M9 V" b+ H8 o" U3 q% \
MODULE_AUTHOR("Tronlong");$ Q2 h* M {. ^9 m6 {- f8 R
MODULE_LICENSE("GPL");0 X& h5 k& t4 d) I2 V% Z
" t, h6 l6 z' t! @6 }, K$ \ |
|