|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 [6 l2 M1 p3 z+ G* h ]9 E
#include <linux/init.h>2 T F5 |9 K6 I5 Q! M) `, c% o( H
#include <linux/module.h>0 t+ M( ~6 {! L3 P
#include <linux/kernel.h>0 }+ Y' V, T& J4 b4 s( I/ J) E
#include <linux/types.h>; e1 ~& L# t1 [ ?) I
#include <linux/gpio.h>- m! g' ^1 @. X& c/ _9 g
#include <linux/leds.h>9 X. N/ O# T E- K
#include <linux/platform_device.h>/ C9 ?" Z/ J/ ?
. G/ J0 F. m0 S( n$ Y: Y#include <asm/mach-types.h>4 w& y _) f: w j- \; j# S4 E
#include <asm/mach/arch.h>
5 s$ Q- Y% v0 B#include <mach/da8xx.h>, r9 K9 i2 W6 y5 c2 S: g
#include <mach/mux.h>. H% J( z- p2 `4 O! Q7 q5 m- w" W3 y( H
# E+ }, o3 D f; V% c; `6 @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% X! L/ ]! I" Y- @6 b1 q8 |6 d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) D8 v6 [1 d) a1 I
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% k- _& J8 H) ~7 G
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 x4 H u& }) f9 M! `4 O C: U9 A+ C, x3 c: I
/* assign the tl som board LED-GPIOs*/- X; P+ v! ^* E1 m9 z
static const short da850_evm_tl_user_led_pins[] = {
/ o8 G" A" c, j+ p" [ /* These pins are definition at <mach/mux.h> file */# Y8 e5 q2 q& }* S5 J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 L' D8 K, s( @1 _( G; I* R0 a -1% Q5 Z5 V% Z/ O$ X, D+ c
};: I& u. ?# X! ]0 V& n( g& A+ d
4 I) d5 }- `! T! H; Q3 `static struct gpio_led da850_evm_tl_leds[] = {
; g/ f. T* [$ | `- J8 f7 }( d {/ E* ^) l. V) W# G3 Q" j
.active_low = 0,
z7 h2 f& {( H" @) Q .gpio = DA850_USER_LED0,* |6 P9 [& c; k$ v
.name = "user_led0",
& U6 ~% M) l5 D+ \9 y" ^ .default_trigger = "default-on",7 n! a2 o3 Q, @* Y. s+ d
},, y. @% u7 a, K
{: g* J+ @( f3 x
.active_low = 0,7 C- z$ V; j- [
.gpio = DA850_USER_LED1,6 n ]- e& ]- }( g1 D% u% A7 E% ?
.name = "user_led1",
0 ?: K7 p1 ~) G; k; b; q .default_trigger = "default-on"," t2 s6 L# A. c) e0 v4 Z
},' \# V: V$ j, w3 _6 J# R! v
{! o9 f! p7 n/ K8 z2 `2 `7 }
.active_low = 0,! A6 Z) @1 C- l6 h; t
.gpio = DA850_USER_LED2,
4 o" F* T7 i) P B2 H .name = "user_led2",3 ] r: P/ Z2 j, X' Z' {1 q
.default_trigger = "default-on",
( X, j9 H: \% G. {3 \ },
. y( J( c7 ?8 K2 @ {0 |1 P9 H) A2 u5 t5 V
.active_low = 0,5 f+ d$ ]4 m1 K1 G+ y9 X
.gpio = DA850_USER_LED3,* q* ^' `+ Y5 `% v
.name = "user_led3",
4 K* K. w+ |+ f. S .default_trigger = "default-on",( t3 y9 A! U, E4 m! V
},
" B6 d0 [* [- h! v" I8 B3 t" o4 Q};% z& v) A% \! h8 y; a/ `: |
0 v: j( o8 N+ K& A4 \; E- kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ _3 N- s! |( x% U) B0 Y6 f .leds = da850_evm_tl_leds,2 L J" G4 S6 g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 `, E/ Q3 E( E# r1 g4 s1 B. i
};3 ]: `8 d5 y% L+ d# M: Q
( g o" ^3 |$ r @" o& I' Q* h- Nstatic void led_dev_release(struct device *dev)
7 _ v* d# u- E% r: V3 n+ M{
, z* Q& b+ ~4 F" M3 T};/ n% ?/ E; v7 l! v2 D
/ a. e& i" G4 q
static struct platform_device da850_evm_tl_leds_device = {- Y' u X2 l' M. ]1 I7 y) p# o
.name = "leds-gpio"," ~8 L0 o" Z% D' \1 {& C
.id = 1,
4 d. G8 ^2 C" p, M g .dev = {# a" }8 z* s: i# H# I1 e, ?
.platform_data = &da850_evm_tl_leds_pdata,
2 f, r( \( S9 Z8 _! x .release = led_dev_release,
+ m5 S* L0 Z @/ c8 f$ } }# t* d, b: j& O6 x, R+ ^
};) V) D9 ~- |) \/ A0 i" E
, \/ p! m. y# b& F! ?& }
static int __init led_platform_init(void)( w# V% h" ]+ ?: }5 c# }$ o
{7 v6 Z. F: @; P6 m$ p
int ret; A/ j5 [% \; J! o
#if 0
6 a1 r& f5 c2 o, l m! P2 a4 D& ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); v* F7 l" G3 g2 i3 U t
if (ret)
9 n2 T: Z$ a1 H _+ b% F8 O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* Q5 m9 x+ R% x2 X4 d "%d\n", ret);2 d B% i' }1 {6 p6 s2 ~
#endif
& q- @) `+ I H ret = platform_device_register(&da850_evm_tl_leds_device);
8 F, C, O# X' R/ S$ u" L if (ret)& Z6 L6 L" `( |) W/ r! E6 X) i; o; Z
pr_warning("Could not register som GPIO expander LEDS");, C, I' j) d# u ]
else
' G+ s9 S: ~9 H' j- ]3 T! j printk(KERN_INFO "LED register sucessful!\n");
' R' S* z" S v5 f; p
. U$ m# Z* i9 M( o8 u return ret;9 v4 M7 l/ b* r( h' H
}
9 Z' f) I! X! e$ `
3 r6 L8 @) w, r ?# Hstatic void __exit led_platform_exit(void)+ d: d: F! n+ m r. [( K8 d3 m' H
{# O$ S- F- {" u) |" w4 N0 ~! F d
platform_device_unregister(&da850_evm_tl_leds_device);8 K4 {$ l1 D/ D
3 ^9 A; [; o; L4 g. y# y. B
printk(KERN_INFO "LED unregister!\n");
# n3 f0 j: ~, [' K. ]}3 a7 _ `+ }, D+ |+ ?7 \
/ @( h# |7 {/ A$ q' l) l2 t* B" [module_init(led_platform_init);% a/ X4 ^7 j( c1 }9 b4 n
module_exit(led_platform_exit);. l: N. N$ N U' m
, e# \# _ P/ u r- G+ JMODULE_DESCRIPTION("Led platform driver");+ C. s/ j7 F$ t) K) R- G. s' h
MODULE_AUTHOR("Tronlong");
) L, [) [$ K6 Z3 J1 N! i: {MODULE_LICENSE("GPL");
: R! q# j* U1 D% W5 k+ q
2 }6 w! J: e, @$ h) P |
|