|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 e& G- a3 D0 F# u) D5 E: r' N#include <linux/init.h>
+ L5 o4 x: Y* g#include <linux/module.h>
/ f% l. X2 \5 s2 Q1 H; f#include <linux/kernel.h>6 }) L. P5 F! e. c- q0 o+ O5 W
#include <linux/types.h>
- \" R5 i2 z( o4 q#include <linux/gpio.h>( X! }( ^: G2 R P Z, R1 b
#include <linux/leds.h>
) W0 g1 m( s5 n. ~3 P ^#include <linux/platform_device.h>
+ u2 r. B% J" ~2 B( u4 C' p( U1 h" j
#include <asm/mach-types.h>
6 T( s1 u. t+ z; K#include <asm/mach/arch.h>6 M! J5 M6 Q) n
#include <mach/da8xx.h>0 d9 d5 {0 a$ r- B Y8 z, \' @
#include <mach/mux.h>
2 ], [* Y' D- J9 s5 }3 _
( X* [* Z: |4 D, h6 N#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 r. l* v" y% a5 `#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ n5 ~6 N: @6 y: q. I2 g: _#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 o4 W* _+ h$ n8 Y( t1 p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, }1 m2 ?/ h( ?) ^) K6 E5 \' A- w( J1 I' p. J
/* assign the tl som board LED-GPIOs*/
& Q! y0 e4 M Y7 j1 vstatic const short da850_evm_tl_user_led_pins[] = {
) f8 v. q9 e# d t* Z /* These pins are definition at <mach/mux.h> file */
: A8 k% O4 h! r% B5 j( y, M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# s$ N3 _+ P7 y% S4 u' U2 M -1- Y( A# Z6 D# b% Y, J7 a3 G3 V
};
% J) }5 B) b9 y0 e0 ]) s7 E+ |0 t( p& n" o% g" z
static struct gpio_led da850_evm_tl_leds[] = {8 N" H8 t+ i: U0 m# F% ?0 W
{
7 R) p `3 ]7 Q+ L5 ~ .active_low = 0,
; d3 G+ Y/ T3 K$ z$ Q5 s, k1 Y .gpio = DA850_USER_LED0,5 w" v5 C1 V- O: K
.name = "user_led0"," X7 I) u( M% O4 t0 T
.default_trigger = "default-on",8 O. z% U( ` Y# l2 E' v
},
! h: k5 @1 R/ x8 r* \& _3 u( Q1 Y {1 N, O# D W9 b F
.active_low = 0,
6 m0 k, N! y$ l' X9 S .gpio = DA850_USER_LED1,
0 I5 M7 a3 M9 N" o) [ .name = "user_led1",
4 A2 f& I4 X6 N .default_trigger = "default-on",
2 Z9 l7 T8 G0 ` i+ K6 K I }," ]# Y3 T1 K$ ~$ }
{
6 j, _9 w* t0 s/ r+ S7 O& E5 f .active_low = 0,
3 o, N9 ~; y' u7 ^! W' v( J .gpio = DA850_USER_LED2,( ?' b+ |# b% H6 I7 i, w7 v( ]! @
.name = "user_led2",
6 o# P- U( w* R9 W2 h& Z .default_trigger = "default-on",) |. J+ t# G. A9 }6 `
},
& ]3 ~/ f; K4 x3 O! W {
& Z9 @' V- Q2 z! g) ?3 Q .active_low = 0,
* i4 L# n! a- Z. k .gpio = DA850_USER_LED3,
# b9 e7 f% K0 _+ R+ x. M .name = "user_led3", Y) T$ U$ X( s4 I6 r z; ~6 j
.default_trigger = "default-on",; `, U, Z( I" K6 Y' _7 Y
},
( i) l6 ^' G# `7 b) I) E};- p5 ^. ?5 x* @/ ]% L7 c
$ m( j' M! u/ L' U8 |! q# t% Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' `5 Q- s) m& h7 n: A0 d .leds = da850_evm_tl_leds,2 A0 c1 W) q; M( m2 N% [
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 j# K9 X* d3 z- O
};# y, p8 x1 y5 s3 m; n4 m
- W* f% m- M: c: K8 ]/ Lstatic void led_dev_release(struct device *dev)' S7 `3 _: M ^) S8 [0 k
{
% {# I8 s- q3 T5 K% Z3 x};# |" h2 l) g4 v
4 L8 q8 q) X; N5 H: s$ a9 I/ e- {) @static struct platform_device da850_evm_tl_leds_device = {! K5 j S/ i$ Z7 |+ s
.name = "leds-gpio",, e/ h& z9 }9 \: [: z. O
.id = 1,4 I" m" C5 [6 E* z: r! H
.dev = {3 X5 d, E8 J6 T! F; g2 C$ F
.platform_data = &da850_evm_tl_leds_pdata,: k1 b5 ~) E3 k( H
.release = led_dev_release,
0 L1 P, \# g9 k }
/ R1 E1 j5 X% `6 d% p0 e# b- b};* y/ c6 m, Q) L, w2 M s6 l
" v% U; q. g. F9 h8 r* K7 A+ i
static int __init led_platform_init(void)
; a' s( J. z1 I7 u9 t. U' Z/ q{0 b; Y3 Z4 N5 a6 n
int ret;
7 C% ?% L' W- m& N3 g#if 0
' t8 c1 P' B2 ~8 ]" t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 Z3 B( O8 W! |* e% r' a+ X
if (ret)
7 `- n$ j* `: b% S1 Z' h pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 k. g. e ~' ] k: d
"%d\n", ret);
) q) d5 P) A3 p#endif
8 H2 {7 q3 H8 s' V. n$ x/ @7 @7 ] ret = platform_device_register(&da850_evm_tl_leds_device);
( o1 ~) J0 O. q if (ret)
$ ?4 S, A4 z7 b6 v* O# B$ z pr_warning("Could not register som GPIO expander LEDS");
9 \8 Q8 Y& c' C. ~0 a: e else+ \3 r i- p+ J; K1 x
printk(KERN_INFO "LED register sucessful!\n");, A3 h" u' K% |+ j9 k; S
' ]+ O7 t6 p" B% f1 m% W return ret;8 |) p7 h+ A, L$ l! ~3 l1 f o, v
}
& l* a9 E3 Y4 y* j- J( |0 Z V% C. o) w
static void __exit led_platform_exit(void)
$ |* P; R/ ~$ e5 s- d9 S. s{5 J! f P( X0 a# T
platform_device_unregister(&da850_evm_tl_leds_device);
$ Z+ a1 f6 R' E& l9 C3 b
' N% w6 A6 m) z3 O% W printk(KERN_INFO "LED unregister!\n");
$ \$ r* w" o- y. i/ v u: F}; W- ?7 g( w# \3 b/ G; Q0 k
6 h/ H1 p Z9 u6 G3 j) q. d& i* Rmodule_init(led_platform_init);/ X, g9 |5 w3 V; N: f4 D
module_exit(led_platform_exit);
% A0 R, ^$ y# p) W7 C/ z; F% l- ?* ?$ K, d
MODULE_DESCRIPTION("Led platform driver");% N8 K0 E f- B$ d2 Z, a" s& O7 n
MODULE_AUTHOR("Tronlong");3 T7 B+ U; Y- E
MODULE_LICENSE("GPL");
$ y) S( H0 z* p( ?
$ k* C8 m: {& f( ^9 n0 x |
|