|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& u2 U, w% P f1 r" S#include <linux/init.h>
$ `- Z9 Q* G9 v) [2 @. N P! u#include <linux/module.h>4 \$ `4 e6 [, k+ P0 ^( h
#include <linux/kernel.h>
( ]" x4 c- c0 c#include <linux/types.h>" P: \+ B1 r: g" u, O
#include <linux/gpio.h>
' q6 \5 L& E7 s8 x0 i Q p' J#include <linux/leds.h>
) I5 z C# `% V2 Q$ j#include <linux/platform_device.h>
" L. }2 r9 J. {# Q2 ~1 F4 B# |! T! i. ?
#include <asm/mach-types.h>$ J2 x, D+ v( V f
#include <asm/mach/arch.h>5 T5 L4 b' [* A7 Q4 d8 D5 o
#include <mach/da8xx.h>) B# o* N6 [9 M; J: j: E. H
#include <mach/mux.h>' R( _# ?2 Y: P' B
+ R9 v% Y7 m9 I Q4 J) G4 c' \
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( Z! R0 @! K6 X \, c) ~
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 u) z5 ]# `. s7 y7 T7 m
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ e/ y+ _" W f* O! x% m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! I* a8 y9 ]- q$ f
) n6 Y9 f N+ z' g. c: x3 B/* assign the tl som board LED-GPIOs*/# b# ?6 x. p |" x6 T4 q% H, N
static const short da850_evm_tl_user_led_pins[] = {
|$ ^6 }% F% N7 O /* These pins are definition at <mach/mux.h> file */
7 b1 x1 u+ m" B+ i4 @. Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. j6 s1 }/ ]. V0 z1 N% h
-1 r9 @# y. q) k- o0 i3 t
};8 S$ R2 E; H; L4 c8 @: a5 q/ z* B
$ U! n4 m1 f; ^
static struct gpio_led da850_evm_tl_leds[] = {
U9 U. q4 B8 J9 C0 e {" v* q& w! u% |1 U/ `
.active_low = 0,
. g& ?2 d" z0 G .gpio = DA850_USER_LED0,
8 c& M5 X8 v8 ~ .name = "user_led0",* ~8 a6 O7 e6 D* Z, ^) b% O
.default_trigger = "default-on",7 m; I- Z" S9 O# C( K9 d3 Y. ~
},
/ _1 J6 D \7 x& k: V {% r7 I S [( n) S% o, L% k
.active_low = 0,3 j3 K- l+ P( _- _
.gpio = DA850_USER_LED1,
0 c9 N( [- |, L+ R" p; D* O4 T .name = "user_led1",
/ a" P, d y# ]/ t, @, B! ? .default_trigger = "default-on",
. s' H0 J5 E2 S9 i o" ? I },/ @0 R3 h: {3 G3 C3 ?
{4 }: k( N8 Z) o2 d
.active_low = 0, i" X- z, e% h, ?+ z |
.gpio = DA850_USER_LED2,8 y" y. y* S( L1 L- j
.name = "user_led2",
$ ~: E, W+ N- S" a6 h .default_trigger = "default-on",8 E; Z$ E- v' n
},' a1 {. ^- w% [2 S) ]: b+ k
{
2 X& S# A j* F0 n# } .active_low = 0,; V5 o6 B7 o7 B
.gpio = DA850_USER_LED3,5 e Y9 P: K% ]9 }' C
.name = "user_led3",5 _4 [4 V% q/ a' j5 w' K( t
.default_trigger = "default-on",
' s* R3 a$ M: x- D& W6 _. w },
( g8 N# N; Q3 P( _( o};
$ V$ T9 i# C7 X7 C$ F& L4 n* ?6 v; k; q; T# q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) H5 V! ^8 P, v8 R" H5 v
.leds = da850_evm_tl_leds,
7 `1 y0 l. F6 ~7 o! [ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 {3 n2 i% e3 t0 @6 \};! T3 @7 v V# `" K
A Y" H5 u1 s. N2 J% y% ^static void led_dev_release(struct device *dev)
4 W& z4 G+ Y5 x- u% B5 v+ G/ h{4 U6 x: p( q2 X8 Z4 P
};, F7 U: X9 a1 ~! Q$ d
6 S! D0 R& T# _$ o0 }% l
static struct platform_device da850_evm_tl_leds_device = {
0 r8 Q' ^3 i: d4 v3 v' Q4 J6 D .name = "leds-gpio",4 p! k' ^0 f& \) E; j! w
.id = 1,- ~. o- J7 e. @% N7 F
.dev = {
- M+ z" X& b% T" D0 `1 ]6 [ .platform_data = &da850_evm_tl_leds_pdata,' V. Z6 r0 r# M
.release = led_dev_release,# a ?# L( o9 e2 Q* F
}
; i6 t/ K3 C& ~};6 g/ Q$ K3 v- N8 R& G- v% G
& g m. |& n4 T* ]) Hstatic int __init led_platform_init(void). l v/ o5 n. Q Y& b* e) x' V2 K
{9 |$ L `$ X; g: f8 y5 {
int ret;) |7 o0 O# I* I" Z
#if 0
3 w0 B$ a+ M6 r& R& J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% l& d+ E$ a7 c+ O; V if (ret)
, U& j1 [, w1 t( u pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. ? T# b+ M) d+ u/ z( x# d, g/ F "%d\n", ret);/ Y! t' z' a- S3 p
#endif, ~" l9 L! W4 O
ret = platform_device_register(&da850_evm_tl_leds_device);
8 W' H$ y3 I# \$ V$ l if (ret)
5 t- N2 Q( H$ ^6 z P+ t pr_warning("Could not register som GPIO expander LEDS");
' U( _! a. k' c/ Q3 L7 x else) e' C3 e/ d; n1 `6 W1 G; Y
printk(KERN_INFO "LED register sucessful!\n");2 m3 v* E9 Z( b8 p+ Q
2 g" C7 O- w. ^8 l( h% D
return ret;$ C4 M0 i1 c( n! i4 z) H/ W
}/ G1 I/ {- U: a$ x- @! s
0 \# Z8 T) Z& ?% S, J" sstatic void __exit led_platform_exit(void)) |, L; q3 ?$ j) v( C5 ~, L1 ]% k
{9 ?+ T( a- \8 d# A: V6 D9 i
platform_device_unregister(&da850_evm_tl_leds_device);9 @- x3 h L6 {, F/ @4 E
+ S) _& U# y5 X8 {# K( ~
printk(KERN_INFO "LED unregister!\n");/ d' ]9 v' B7 x
}. t+ e- x( Y/ p# w0 v, ]
9 E- l& ^9 G! M$ z" P9 S; v/ j7 Wmodule_init(led_platform_init);% T1 Q: c- s% ]1 T0 u. K
module_exit(led_platform_exit);8 x: f# a1 h5 Q2 a+ Z' g
# N5 o a* c4 d1 w" w
MODULE_DESCRIPTION("Led platform driver");
5 ? {) Q$ \6 M7 ^, D3 p a6 xMODULE_AUTHOR("Tronlong");5 q1 Z$ o# b- Y& Z' |3 a/ b
MODULE_LICENSE("GPL");4 M0 n( v- p( L
# e B* G* X; S5 ~- d# ?4 c- `, n+ P |
|