|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ H2 [* }3 i6 e/ n7 Z% [#include <linux/init.h>
8 ?* z: v# H1 H6 o#include <linux/module.h>! m- y- a% w( t. z3 S- E
#include <linux/kernel.h>
* Z; }' L. e4 H) d, d#include <linux/types.h>
% m; Y* o! T" y4 @) u#include <linux/gpio.h>' ~1 u& t9 O9 l* _
#include <linux/leds.h>
; t$ \, H* F- Q#include <linux/platform_device.h>) z' O2 K1 j$ r3 z' g, A- Z
! ]* s* a7 y9 }2 X$ Y# e4 O#include <asm/mach-types.h>8 S# Q% e* ?6 X7 v1 `& {
#include <asm/mach/arch.h>/ C' b" C5 y3 `# a9 I5 b+ e6 q) K
#include <mach/da8xx.h>5 v0 I6 e5 Q& r2 @
#include <mach/mux.h>4 r* l* m% R+ d( c( @$ T* L, f
4 Y3 R G( q$ i% U. U' F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 e/ a- E( n- w$ v# s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! H3 K# Z4 \( n l# Q; b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 A5 r" x8 u0 t2 X2 p- ^6 \4 w
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 g$ Q6 P9 V: ~+ D) I
5 k# _# t K' T8 b& j: m/* assign the tl som board LED-GPIOs*/& i, V2 x D+ H% Y( ]
static const short da850_evm_tl_user_led_pins[] = {
$ |5 F$ c, H, T: [; e; t, t7 X /* These pins are definition at <mach/mux.h> file */! B( s- Q1 L4 _5 l5 P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# Q- c! S( r( J$ i( K" |( q1 L
-1) ^) E9 O9 R3 P. g9 R9 [
};7 U0 s+ `5 y. F$ n& t
; h& J4 X$ f: x, T* P7 t7 Kstatic struct gpio_led da850_evm_tl_leds[] = {
/ o- o: S1 v- B K3 w* k0 {0 W$ I# E {7 V0 T0 E' ?/ K5 ^
.active_low = 0,1 I8 o& V3 |0 m& S4 u
.gpio = DA850_USER_LED0,3 P6 K7 r8 @- V
.name = "user_led0",
# C( M8 P6 G7 \" G8 d6 i. T+ D .default_trigger = "default-on",' U# h1 Q2 I7 B3 m1 G5 F) u) C
},
/ i9 @( k" L& S! N {
9 j+ D. k0 P5 J .active_low = 0, |3 ?2 T8 ^+ L* P# M- f
.gpio = DA850_USER_LED1,$ q- M h) T( \
.name = "user_led1",
5 Q" S. z% q) H9 l$ z .default_trigger = "default-on",) h! A p" \: B" W& E
},5 g$ T7 g" {) ~* ?( R0 O
{
: m7 b9 A, N0 G' ]/ e3 f4 _) M( a .active_low = 0,- Q4 M: I! U8 q9 H: ?
.gpio = DA850_USER_LED2,5 D. U9 P' N. P4 A4 @3 i
.name = "user_led2"," l, y7 \4 O8 M& `4 t! d
.default_trigger = "default-on",
* y: l5 \2 w" W8 e- ^ },7 C2 N3 c' c2 z+ H3 B
{
+ H) R. _" F* E# [( d+ L9 ]; z .active_low = 0,
9 m$ ^1 |; k% T Y, l1 c5 }9 X$ r .gpio = DA850_USER_LED3,
8 l( Q: ~0 `5 t* N; U; Y& `/ ? .name = "user_led3",
- h, g$ `- A. o. j: }4 R, P+ P E% | .default_trigger = "default-on",5 K( y5 K4 \2 u1 ^1 l; n# x
},* L/ a4 ]" J5 @4 ~" k8 ]2 ^
};
2 _! w5 C8 {& u1 w; O# X2 B* T2 N2 Z. x4 Y. P. {, m7 o+ s
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 O% J% `* g' } .leds = da850_evm_tl_leds,
/ K/ f/ a2 r+ g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. F/ _% u- {: g# [ Z, b+ j: t- B
};
9 K2 D% y. B. z& ]) Z- P% ]; t1 j5 ?$ h {: ^
static void led_dev_release(struct device *dev)& \( @% }; `0 j. ~1 D* D
{
' P9 {3 [8 E7 s/ I};) J6 ]" R9 r# e2 R9 R8 H5 O: U7 W# {
' S" O( v7 y7 a6 ?. ustatic struct platform_device da850_evm_tl_leds_device = {
% {, `: ^; P0 x+ l6 |. z9 P# {5 P .name = "leds-gpio",0 A& P: V' b% E" S- M
.id = 1,
7 y4 n/ @; \) n. q5 C .dev = {: I; e, x# U) s: J3 }- f
.platform_data = &da850_evm_tl_leds_pdata," B4 D+ {+ I& O
.release = led_dev_release,8 a# r+ B L m% F' S% Q& p
}, Z4 r& W, k! E2 q* k# ^% u
};9 H0 P( P& ~7 Z' g: U1 d! f; N7 W
" r% u0 Q& H; C$ q* [static int __init led_platform_init(void)
6 Z5 J. G" N' |3 M/ z7 G{ A$ b; m' U$ G% K0 A
int ret;
( N1 r X; Q/ B/ h0 a' P* H#if 06 M, h3 U3 {+ T3 I7 V# x. s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ D9 `% p; A* Q1 k( z3 u2 L if (ret)
7 o% I6 U- ^4 f: C2 | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 A2 {1 v7 v4 k: R
"%d\n", ret);
5 M/ K L3 u& N) z& R T/ _, h, p/ J#endif- d8 O0 A1 m1 `) s
ret = platform_device_register(&da850_evm_tl_leds_device);0 ]" J, p j4 p# }
if (ret)5 c+ {1 n1 N% Q4 t' Y3 R
pr_warning("Could not register som GPIO expander LEDS");- \1 K. f2 e8 N0 ?
else2 c: F! L, p9 r5 ^0 u) T
printk(KERN_INFO "LED register sucessful!\n");6 @7 n) g6 M' l+ W3 z0 W
1 {2 Z7 I H0 m$ |& W9 o! G return ret;) p6 e- D7 J! |- Q
}
; y: `' x4 E' L; L- w" M' s9 v) d j/ o
static void __exit led_platform_exit(void)
' e4 ]0 J9 U( R. h8 e{' Q* ^/ ?) v* K) D, j5 c) n
platform_device_unregister(&da850_evm_tl_leds_device);0 c H( L4 Q0 m: t0 n
% a/ a* o- ^: G3 Z: Q- {; F
printk(KERN_INFO "LED unregister!\n");% q. I' L0 X, i. n3 h) p2 I
}- w/ G) g& `9 d
: J6 `; V" M6 S7 y' Z) i" [
module_init(led_platform_init);/ m2 w. y. \( \7 _' B; W7 J
module_exit(led_platform_exit);
z$ F4 y0 `& t; i. Z# G# E( B' X" {2 P. z% G7 l. c+ e
MODULE_DESCRIPTION("Led platform driver");, I" K. D! c$ Q6 H
MODULE_AUTHOR("Tronlong");2 X. g M9 }4 m+ I7 k
MODULE_LICENSE("GPL");1 C3 ~$ K: R- m$ `+ _3 ]" I
1 t! X2 W2 b& Q/ D
|
|