|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 e6 [6 H. m% a& E0 ?7 K
#include <linux/init.h>) i7 e4 d5 D" w6 q' Y
#include <linux/module.h>
$ i d" o% T; x: D- g6 P#include <linux/kernel.h>0 b# I1 Z9 T3 R% r0 C4 h% ?
#include <linux/types.h>
b A& |% U" c5 a: b3 e#include <linux/gpio.h>8 G2 m9 b8 N; u* c; v
#include <linux/leds.h>7 P5 [1 V+ L0 q9 D* p5 f* A1 s* N( I- H
#include <linux/platform_device.h>
5 v- @2 T. m( u( {' R
; H8 C/ J2 C- p( |2 Z) X" P#include <asm/mach-types.h>
- m$ c, G' ~$ \* a#include <asm/mach/arch.h> p& h3 z, `) P
#include <mach/da8xx.h>
: ?! `, P& J8 O. z* W' L- d#include <mach/mux.h>1 }! _# Y! t7 K2 _) x# h+ |- r1 B
. I& z' g1 @7 S0 m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); d/ \4 C# _0 m1 m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 p, A7 Z" ]) _7 Z; C. r; `#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% N# D# p% l" E$ F; v- J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), M$ T: `* o5 B. m, m/ C5 m
* G3 Z- J6 M# I
/* assign the tl som board LED-GPIOs*/ f* s7 f7 T1 n# ]
static const short da850_evm_tl_user_led_pins[] = {
$ R2 K f _# p) B1 x7 Z /* These pins are definition at <mach/mux.h> file */
; m& M" U( V# a: N4 N# a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# p4 p, o! D# D% h! V: R9 w -1
- ^! m5 d1 C3 Z! x};& K3 m& [1 x- w: Y
( @2 \& S( C5 j! ^# J' ~* ?* P
static struct gpio_led da850_evm_tl_leds[] = {2 a2 N* w- S# _: y& P1 x- N: l; f
{
6 _! Q, d7 {! j9 g .active_low = 0,4 M/ C' |, v! U! T$ b
.gpio = DA850_USER_LED0,1 z+ K) n F7 n0 ]2 e
.name = "user_led0",/ s+ Y! z3 Z" [7 x2 d* W8 c
.default_trigger = "default-on",) J# T5 x' z0 y/ J2 Z* M9 J
},3 J1 ]& _# e, A8 y; |
{
. ~( M# ~ S/ v3 A; k# | .active_low = 0,
& v7 g3 ?! M. K9 H6 V .gpio = DA850_USER_LED1,2 p8 e& u0 k& Q+ T) w% T9 }( y
.name = "user_led1",
& E" H3 b, P% b) a" D9 I .default_trigger = "default-on",4 b/ e" R/ Z9 N% p7 C3 {
},
- |; X- |2 i" c/ G; ^ {
. I8 u0 B$ I0 N3 s& H, a! K* ` D .active_low = 0,
: g: r, ~* i' V6 Y5 V6 f( F9 n .gpio = DA850_USER_LED2,
; H- T- ` } u: R9 E .name = "user_led2",7 p& ^# n/ v* [( C: z
.default_trigger = "default-on",) D: ~8 I3 K* V! X' Q# i% B, S
},
G; N1 f9 Q% z q. D {
+ o9 l$ `, ?) H3 s. n7 f5 h .active_low = 0,
% }7 e/ F( `6 p/ b* c .gpio = DA850_USER_LED3,
, y) r3 E/ N* o5 l0 f9 ^; | .name = "user_led3",' R9 Y8 Q+ O5 U' u
.default_trigger = "default-on",
* Q, W( ?) m6 b# e* f7 f% D( f3 s },, |$ ]1 q# C" z9 Z" k8 v5 z4 I
};" M, H) U' f& X, d; a9 f/ T
0 Y$ Q1 B- K* k) @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 ]9 V$ p* g4 {* G .leds = da850_evm_tl_leds,
0 d V& |( M( M* e. ^$ ]3 b! P .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& [. f& s! M2 s" c};
% j1 V1 p. H ] X9 Z7 a. Q( D# V: V, @% {
static void led_dev_release(struct device *dev)
0 U1 t8 Z$ K+ k' G{
$ y" B& K9 [( r) j( l( R};
6 }* _" O+ T( @" X6 F- C+ d W. c( X U' W
static struct platform_device da850_evm_tl_leds_device = {: l9 h; T/ h' N; w( i
.name = "leds-gpio",
) C# c: A. T0 u- A .id = 1,$ T r' @) V+ C5 K2 E# Z+ j
.dev = {/ r' ^; Y4 @! I* c/ ?( o$ N8 F
.platform_data = &da850_evm_tl_leds_pdata,# A! \% S# e6 |$ b+ F1 L( `
.release = led_dev_release,4 R5 G( z5 i [5 U) \
}
5 i5 ~9 [; K- y; p3 ~) [};, g1 l0 `$ e' ]3 A
5 N2 j5 [7 \% D
static int __init led_platform_init(void)! w+ ~1 U! G. Q2 \, F
{
8 ?! c0 s# M& e2 J8 z int ret;$ P4 c9 ^" z% H
#if 0
0 N. a3 {9 {9 Z- ?- c& l+ _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 T* A5 Z% R9 Z8 `) Z6 i% v7 P$ D! \
if (ret)
- b& @" M! W5 n4 n9 Y pr_warning("da850_evm_tl_leds_init : User LED mux failed :") k5 R n; T4 j2 J! P4 u) I
"%d\n", ret);
2 P9 G. U, ?6 H4 A# g1 Q#endif: i3 k! }- R: p; a3 J9 B
ret = platform_device_register(&da850_evm_tl_leds_device);
8 V0 v+ c/ n! A0 t- P if (ret); M" T( @; q( B" g; W1 \5 v
pr_warning("Could not register som GPIO expander LEDS");
2 H7 [4 z1 k/ l0 m else
8 |* N' T0 C3 I. }' r, V printk(KERN_INFO "LED register sucessful!\n");: r" P$ \. f7 `) ^% c5 `. A
1 j/ ^& C" V; x) v1 s
return ret;/ e X9 j0 Y. u7 M
}% U, x* M/ g+ P1 l q- }% @
. v4 d9 B5 e5 y# {static void __exit led_platform_exit(void)
4 c$ m! B$ b/ ]1 m) w2 i{, E) [0 R# \0 i Y9 \9 \: q9 y
platform_device_unregister(&da850_evm_tl_leds_device);. a* K4 G5 N8 @- f$ I( L
% o" r4 _9 Y. o) A$ F printk(KERN_INFO "LED unregister!\n");
& e7 O. f% y/ G; `" l" t, {}
' g1 @% E: R2 T: [7 _% R6 f1 W
x+ C& y, [7 a3 \module_init(led_platform_init);2 {+ K. S i( b2 t# D
module_exit(led_platform_exit);
, H2 ], ? c- C+ k) c: a" s# G3 u/ b
MODULE_DESCRIPTION("Led platform driver");
# O6 |( N! ]' | \2 z7 o# {& S% zMODULE_AUTHOR("Tronlong");9 O( F& Y! D, k5 z# B6 ~$ }4 v* x
MODULE_LICENSE("GPL");' x) d' x0 S( q2 N8 B& N
2 t+ G! s; w8 d2 \ v+ w6 ^1 Q |
|