|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, J R9 |2 d' F
#include <linux/init.h>/ z# ~6 k/ s3 ]; U3 s/ F
#include <linux/module.h> H2 _! p/ ~1 }; O5 b( X4 u1 d
#include <linux/kernel.h>
: \# h0 {( w( E% d, ^4 P( A( y7 |6 k! v#include <linux/types.h>
) ^5 z, m8 e, [#include <linux/gpio.h>6 l* Z9 W6 v0 b, y0 y0 J
#include <linux/leds.h>
7 U" o+ R- Z! A& K; i" c. g; u#include <linux/platform_device.h>
, g m' ^: j: }' V0 n! J$ q( p) n) \
#include <asm/mach-types.h>( D8 z9 r' g- m( ?3 |/ u# X
#include <asm/mach/arch.h>* O& N9 M- O& R- z- u6 P
#include <mach/da8xx.h>, |" K. s; Z7 ^: z' G8 \
#include <mach/mux.h>5 E# L* ^3 J. v7 h$ N
3 u6 Y/ `9 N5 L' \# j* a5 @5 z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): {2 S. S7 \+ o7 i& b6 P* N7 g
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 o: p7 l, U7 y6 ]/ X
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ w. s$ g' [$ s5 A& G( J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( K: l# g" M0 ^
$ l1 X) `, S6 U/* assign the tl som board LED-GPIOs*/+ H3 L, T5 o7 p3 f: i% S w
static const short da850_evm_tl_user_led_pins[] = { @: n, D8 h; }) R: _
/* These pins are definition at <mach/mux.h> file */ e/ `( ^9 e0 n0 b: t- r* g# ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ m- F0 h- P6 ?. {6 B9 A, N. _6 ]
-1
9 ^2 Z- u; o. S: l4 J" M};
( Y! L- H) |* Y4 z) I. V9 z1 O# Q# {% a r3 h
static struct gpio_led da850_evm_tl_leds[] = {; q0 Z" h" P$ l2 d$ Y0 R: Q# T
{" K0 O& W2 S! F
.active_low = 0,0 M4 q. c6 c2 h- g5 B) H2 A; b
.gpio = DA850_USER_LED0,. W) `% z, w0 x" V7 Y
.name = "user_led0",
# d* W2 B" Z4 I! h3 t4 M .default_trigger = "default-on",
4 X4 q, H. e2 u1 M7 e3 k8 a: h },
& d4 L& T b) @) ` {- V% r1 h7 @( K9 w6 K0 m
.active_low = 0,* u; i$ g% s7 W7 e0 d1 |
.gpio = DA850_USER_LED1,1 w3 t' i6 }' i* w" Q/ h
.name = "user_led1",4 H7 k# W. l6 D9 R' J, ^! ]& u
.default_trigger = "default-on",8 V8 {3 w. |( _- Q1 U
},
- T" y' [, |/ ?/ [3 @* u% |( ~ {
9 Q1 c7 e. U# ?( ` .active_low = 0,
' k7 @4 z4 ]! E0 Z( |; d! B .gpio = DA850_USER_LED2,) V+ C. t0 }. b+ w! t3 z
.name = "user_led2",
$ }8 W# H8 c. K5 H# b" @ .default_trigger = "default-on",: ], H: T( u1 K7 ]+ s+ }8 d! T
},; S/ _; [- X. j; m0 i3 C) p
{
& v. Z* {2 D- z7 g6 B: t" C .active_low = 0,1 W I. I8 @0 ^$ f: H; k0 O2 e
.gpio = DA850_USER_LED3,0 Y( ?) w$ U* a0 B/ t
.name = "user_led3",1 ?' w" v) S6 Q( t
.default_trigger = "default-on",
; i& w3 q; Y9 N },
* g& g7 M/ C( L& z3 @};4 f( [' y4 _ j
9 n9 Z& Y3 s5 P$ y$ ?) X* [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ y% A- g' F% Q9 }& D! u' } .leds = da850_evm_tl_leds,- q) Z) n0 }5 }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" h2 f" C" y5 R4 s, M};: `- U/ {; `9 m* }
+ |8 p$ a$ x! ^# G) n$ O
static void led_dev_release(struct device *dev)$ ~9 X5 ^+ f; H# w7 C" R
{6 {7 ?; X m4 U
};
" A: o: z% c- @& h1 P
$ s1 h: i2 G* m/ O+ Y! |static struct platform_device da850_evm_tl_leds_device = {; o# j, o; |1 D1 E) W9 q
.name = "leds-gpio",
2 `) e; B, e8 {' ?* ]% z/ _# g .id = 1,
* j0 x" m; Q9 w8 U( ^ .dev = {
0 }5 Y* W9 ~# Z- q6 Z6 v .platform_data = &da850_evm_tl_leds_pdata," U* ^1 ^7 l$ G: E- Q1 N
.release = led_dev_release,. |9 E7 n0 I$ n; r0 L, F1 T
}
3 S/ k* N, y f9 R2 g};
m& m1 x+ z, m7 {5 [
7 z- A: d9 K; Gstatic int __init led_platform_init(void)1 K# b( o- j5 D2 M
{0 O- s9 ?/ J& q0 `
int ret;
8 j1 i+ B. Y! q0 [#if 0( j* ]0 J+ \% l2 X0 K. ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' S" |3 f4 U8 Q if (ret)! `; D6 i! ~2 i, ^! v" \
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ H S6 f3 S0 }- N+ S
"%d\n", ret); e2 q2 w" J( ~
#endif# J4 f6 X. f$ C% Z3 H5 A9 ~9 \
ret = platform_device_register(&da850_evm_tl_leds_device);
( H# |! d0 X1 K3 ]% y3 x9 h if (ret)$ z; }' `; ~4 W, Y4 v# a; a
pr_warning("Could not register som GPIO expander LEDS");7 I$ ?" i8 t$ s* ^0 \0 g
else
- Y$ L: k6 r! H* C$ {" \ printk(KERN_INFO "LED register sucessful!\n");9 ], Y) A, S3 D; L
1 q' M( W- _! }6 I' Z
return ret;! `! ~) Y( y- y' v! l( j
}
1 {' s: g1 r' r: z% k1 u
, i; W: h5 @$ {, e( i8 x' V( c/ lstatic void __exit led_platform_exit(void)
5 E6 a6 e- [! n6 ]3 S{
1 V4 T5 Z3 j2 }% Q platform_device_unregister(&da850_evm_tl_leds_device);$ ]: v o: g2 ~; \5 J( }
5 @+ Q, e1 t0 n+ A6 W
printk(KERN_INFO "LED unregister!\n");' u$ f2 l( L& J1 |, [
}9 [% q. p! w0 M; Y) B4 V
: e# t) ^* H, b+ S9 Y# a" ?8 r
module_init(led_platform_init);6 J4 M" V$ N) K W8 H9 X) C
module_exit(led_platform_exit);
' E# p! c7 e* h' ~2 I. ~7 ~ G( E Q! X/ \; O
MODULE_DESCRIPTION("Led platform driver");
' \( Y T1 J% z: `; P! MMODULE_AUTHOR("Tronlong");7 h, t+ h& X3 x7 {# Z
MODULE_LICENSE("GPL");9 [$ t( l) e" T
2 c6 }9 o; V0 q1 r a% l) B
|
|