|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 R5 A8 k+ @( J9 i, Z0 V, `* `6 W% \
#include <linux/init.h>
$ b2 s9 y& C2 C9 F#include <linux/module.h>
& {0 `7 v4 m0 e- b1 V! g#include <linux/kernel.h>
1 p- H# s9 M, s# z6 R5 M#include <linux/types.h>
3 F% c" ^- D( W2 C% J#include <linux/gpio.h>
4 A# |" e/ N& P. v+ A) e#include <linux/leds.h>
3 a" a: x$ r& n: F. K#include <linux/platform_device.h>0 A( c" I/ g9 m. X; s
# X. Z! Y/ F8 s, W+ i3 u#include <asm/mach-types.h>
/ E8 V: d6 Z, i6 e( V#include <asm/mach/arch.h>
. x. w' c9 `1 u, \* ~" Y#include <mach/da8xx.h>8 m1 v0 o" E9 h' R
#include <mach/mux.h>3 J0 [4 c0 }' N! w# P. [$ c
7 M' I* h( w7 I) l4 F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 v6 M/ b8 j. h3 A+ S
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, q' o" V8 {. Q- r! B#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 m( N) v7 w# W7 U: F, P5 c5 L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 X4 x+ }5 x8 [) B0 P
& V# L4 n3 N1 R' U! S
/* assign the tl som board LED-GPIOs*/* A5 b' @2 N6 s5 I/ `' `
static const short da850_evm_tl_user_led_pins[] = {
4 N/ l4 U' N* C+ } /* These pins are definition at <mach/mux.h> file */
6 T5 ~4 H0 `- v DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- x$ m- P% b+ Y& _+ w* J -1/ b+ C; O4 } v5 P& s
};
, Q# H5 n5 v) K6 P0 f8 ] |7 O E
( g) d/ R$ e: bstatic struct gpio_led da850_evm_tl_leds[] = {7 i( \& s! M" o" _ b* f
{5 c/ u4 y% @+ d# p4 h; i
.active_low = 0,4 ]: r* Q9 e [. s+ C+ q w9 M7 k
.gpio = DA850_USER_LED0,/ L9 k5 g3 \3 y
.name = "user_led0",; ~2 N! @ O6 I0 ~( H% z
.default_trigger = "default-on",, v! K8 R" I: j5 M6 M
},
7 c/ C" W% ^8 `$ ` {
( t( ?$ z' }' h1 K& O9 V t .active_low = 0,& q/ D7 ~6 [& \. b
.gpio = DA850_USER_LED1,' ~7 u8 {% ]3 t* \, H
.name = "user_led1",$ ?! e+ k: l- N9 x
.default_trigger = "default-on",* e" _: g$ b; @
},
) \: r' @) b n' c5 J! H& y {7 @( n! v; w, k
.active_low = 0,
1 I7 t4 @/ A4 ~* d% J# M+ h: [ .gpio = DA850_USER_LED2,1 m& E, N. w# [6 k+ _: N2 h
.name = "user_led2",
* @; ~) P6 U$ S .default_trigger = "default-on",
9 h2 C# `- a+ z% o. M9 b },
i3 z) `" h* W1 g! Q# ]9 B& K {3 x3 S! `1 K' E' B
.active_low = 0,
2 W7 L; X0 c3 ]+ S1 L0 D& V- a .gpio = DA850_USER_LED3,$ o- D* L" D- l+ R
.name = "user_led3",
1 w2 W$ d! N1 M1 ]0 F .default_trigger = "default-on",
9 T% r/ k- b: R9 r8 @, t },
. t+ ~6 b% y" F' H) o, U" S4 r};
6 N9 g0 s+ z% Y$ ~) K- w2 p$ p* D, K2 o6 F6 {4 J3 k% U
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; E$ y: ?! A- |+ l ]
.leds = da850_evm_tl_leds,/ t0 y' i, x7 B/ s- Z! k
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; p M% j+ K' ]) `, E
};0 I$ X* s8 C L9 e5 s- a0 a0 a
Y9 L7 o' L5 }7 u9 e( A
static void led_dev_release(struct device *dev)" E" [* i+ i4 V$ S. H( I
{9 s& V8 H1 _& J5 p4 o
};
5 l8 W/ Y) y J% ?7 h
" H2 f9 W4 G' L+ Y9 J# @static struct platform_device da850_evm_tl_leds_device = {7 t+ S. U9 G0 O, D
.name = "leds-gpio",
( g6 R, Y @7 p+ ?; y7 z' L. H .id = 1,
R- n$ ?% V7 N .dev = {& M" S4 @1 L( y0 M A9 H' ?
.platform_data = &da850_evm_tl_leds_pdata,
+ e# h. Q4 t9 c4 n% w& ^ .release = led_dev_release,
, C0 S. p# T$ ?3 o7 x3 Q }
6 l' R6 c. M% i8 ~};7 [' }# U% x1 V8 J& K& A
3 Z8 ]) [& {4 tstatic int __init led_platform_init(void)7 V% k% I: I+ J' P. m
{
3 v* x, T) Q5 {8 x- U; U int ret;& t! j' d4 M2 [8 h7 {7 ^
#if 0
2 l5 f( N5 P z$ f" p ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 s0 F0 C7 v0 j# ?
if (ret)
3 u6 \0 v! f; F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 h! b8 [" h9 S3 j( ^ "%d\n", ret);7 d' q$ U% P! _/ J8 F% E1 v$ R
#endif; {. N* ~" q% `4 Z- ]- Y2 a4 m
ret = platform_device_register(&da850_evm_tl_leds_device);
- K- y1 Y I) g% U. D$ F2 }: \ if (ret)
% m$ v A6 {" a pr_warning("Could not register som GPIO expander LEDS");
& w J0 S5 ]! N ?* X' W else
/ W4 }, Z3 l* I; X printk(KERN_INFO "LED register sucessful!\n");; q5 {! n& K0 i) i
" O, Z, ^" V. f. i
return ret;
0 z' D& | N# R, H! V}
+ b2 M$ e% W& o- |! `/ ^; z1 i! Y+ Y9 B) m0 I- ~
static void __exit led_platform_exit(void)
+ n2 T, v3 E# x1 ]" U* N{; B6 t& s& G" ~* T2 ^2 Z
platform_device_unregister(&da850_evm_tl_leds_device);3 M. n0 ?: ^/ e* X# C( P& G, e/ u
6 v9 \. y0 J3 } t% `2 ]
printk(KERN_INFO "LED unregister!\n");
]! x" }! z& {% Y8 p9 h; ] |}$ F1 @' \" J# k; v u8 [
' ?& Q1 q. y+ Y& ]. B+ B4 Q
module_init(led_platform_init);+ I: r2 H. a+ r
module_exit(led_platform_exit);$ n- T6 V' k5 X9 w
7 y- Y) n7 v+ k0 }5 e. P8 D; qMODULE_DESCRIPTION("Led platform driver");
9 E/ J9 w$ ?; K+ I1 kMODULE_AUTHOR("Tronlong");! m. W% s0 X- q1 o6 Q
MODULE_LICENSE("GPL");" D' X. _7 I; s; }
# B8 c' X* J$ ~! h5 _
|
|