|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 q; f$ V! C" W# [; S#include <linux/init.h>
. t% C; Y- c# h7 M. b8 b; X#include <linux/module.h>) O2 y! l7 Z+ m
#include <linux/kernel.h>; N5 b5 ^! R$ z) v
#include <linux/types.h>
( Q7 m8 R9 h/ a* O. ?#include <linux/gpio.h>
/ R9 N, E" X: n* I1 Q#include <linux/leds.h>3 R# a! o& P# x8 g
#include <linux/platform_device.h>
4 x0 }5 {9 G: A0 n& m
5 o7 h* J( F% r- ~( D( ~$ _1 W#include <asm/mach-types.h>
, x$ ^% A8 U$ e4 ]#include <asm/mach/arch.h>
* ^* o0 S+ ~' [/ W#include <mach/da8xx.h>* N* a# k: i4 h& r$ v
#include <mach/mux.h>
; X& S2 O3 v* Y M- {3 d t- P
. j2 g2 w" P" J9 M& r1 N#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ c& `* b: \; z4 O
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# \: @. e, O g$ t- W
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 a; W" u: i( V; F7 ?, I4 l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( D3 C! N( S) Q4 {- G
; W. U5 K8 \( q* N) e1 l/* assign the tl som board LED-GPIOs*/+ B7 O4 |: L3 K! L6 j
static const short da850_evm_tl_user_led_pins[] = {5 b+ Q# u! v2 C
/* These pins are definition at <mach/mux.h> file */# I5 `" I: F, |' l2 J# M
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! ?; Q& E: i8 z9 g9 S% N/ s, o! B -13 j4 B N% \. _/ C
};
% G8 Q& I& C1 B; j! n
C9 d: @% ~! j/ T, v8 J3 K& ?static struct gpio_led da850_evm_tl_leds[] = {+ G1 o; M8 a( t2 g
{
' j7 n4 ]- D* ]# K/ C% B .active_low = 0,
' i2 _7 N( C' X: a, M- m, k .gpio = DA850_USER_LED0,% q$ n( N' y5 W/ u% _' t$ W
.name = "user_led0",7 h: V4 i# A1 z# r& U+ K
.default_trigger = "default-on",
" N/ R) ~; U. S },; F1 ]/ S; u, A% S2 x4 Y' I
{6 G; u# Y1 p$ a
.active_low = 0,9 l9 r% G3 M+ f* y
.gpio = DA850_USER_LED1,$ k0 W5 c: z4 K+ u3 u9 w; l
.name = "user_led1",( c, z! F$ E/ G# W# @4 ~% ~& j/ v' \: k
.default_trigger = "default-on",
0 L! l" Q; s9 p2 |6 }5 v6 l },1 w4 |+ N2 h0 g% L3 m2 d4 C% W C
{
4 q3 k& v) r0 G$ c' c0 z0 R .active_low = 0,+ m b& A( {0 L2 v t
.gpio = DA850_USER_LED2,! `3 z) r/ O6 A2 R
.name = "user_led2",
7 _ ]3 l1 o# N2 ^ .default_trigger = "default-on",
7 G! P/ ?% s, V },
! b6 G1 a0 I& M% `3 X: { {
* B4 M, W+ X$ ?" B" j- ^% u( T B .active_low = 0,
' H& C& K/ o0 o .gpio = DA850_USER_LED3,
0 D" F; Y0 a8 v+ l .name = "user_led3",
( _; a4 f- C5 \; ]$ T' K .default_trigger = "default-on",5 Y! I# z' z# ~
}," u) N5 M8 Z' L# K4 U- f/ k: v- X
};
4 C* ?3 f4 V4 \9 @" Q; w) }# X3 |6 X8 r4 A4 \ v9 ~( `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" x( J+ D" h% P: o( D0 H .leds = da850_evm_tl_leds,( z$ M( N5 ]' U* N% }' O/ N
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),, |+ Y* o1 a. ?
};
9 Z6 U0 U! q: r/ h8 A# O
; b9 B) ?8 b: f9 M& Vstatic void led_dev_release(struct device *dev)7 D+ x1 \( Y, N, B( w
{
* y, w. d& T2 s! b$ G};
' F- T( X. q6 N o9 h* v
+ q9 v; O3 S {! u: u4 o/ Pstatic struct platform_device da850_evm_tl_leds_device = {
* a" a# j3 @( N y9 U .name = "leds-gpio",
3 Y+ {9 }6 i7 y .id = 1,
( K6 \' c) k2 \7 H .dev = {
; N- t! Z. Y+ c8 x9 \ .platform_data = &da850_evm_tl_leds_pdata,
' t1 {# t9 r; Z* ]$ T4 t .release = led_dev_release,
0 ? ~/ Z$ t# } }. X% S" c/ r8 |1 g! n! V! B! G
};7 \ j+ e! I9 J2 x3 y( C6 Z
9 E* U; z5 q7 H: L
static int __init led_platform_init(void). N& W4 v- t& F( ?0 _8 b
{0 u( O4 l: @3 O- _, B6 }7 `
int ret;
3 v( _- e( a3 F#if 06 P, \6 P; f: R
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 n; K( n% S4 |" @: f+ L% R
if (ret)3 n. l+ q- D; t" N' @% L
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( k! d l! Q' }. j "%d\n", ret);# S9 D, e/ s; E" o( q
#endif' P- ]: i" J' S ?. ]9 |& ]
ret = platform_device_register(&da850_evm_tl_leds_device);2 Z. J8 K* O- g+ g; Z( E5 Z8 H
if (ret)
) l- |% a5 _+ h7 S& J: y6 H$ x pr_warning("Could not register som GPIO expander LEDS");" [: g9 K5 y' U& {1 f+ h6 c; V
else( X) n3 E2 b' s6 h
printk(KERN_INFO "LED register sucessful!\n");
7 f3 [ ]0 r- T6 V! n
" x/ m) o7 |; b( p3 f- I return ret;% [" @! f( O0 d1 r' ^
}% ~% _: u6 g9 o- ?7 f K( O" Q
3 |" r2 \' e/ _$ y m4 ~* \* |7 @
static void __exit led_platform_exit(void)
6 T0 k* }" t: \) Y3 b& Y{
j) T9 o8 [7 r! C7 x! H8 o0 ? C) U platform_device_unregister(&da850_evm_tl_leds_device);5 v* m Z# d: Y. S
% W* n# j4 z, q% b' A5 H2 |/ ?3 n; `
printk(KERN_INFO "LED unregister!\n");* q+ G' i9 {8 R0 V7 X ]5 p
}% D1 [1 G% k+ q1 P1 M+ q- F- L4 W; }
1 ]2 [/ Q5 {8 A# }( i
module_init(led_platform_init);$ p8 A8 Z8 a. O% p/ h3 B: s) m
module_exit(led_platform_exit);
0 i- ~8 N" N5 z% o, `; J4 g' ?% T; _6 K
MODULE_DESCRIPTION("Led platform driver");
Q) a( l) ?4 z1 C9 y; g. d4 QMODULE_AUTHOR("Tronlong");6 a* R8 s1 y- |5 r+ Q8 x
MODULE_LICENSE("GPL");
/ U4 `+ q2 K5 z5 y# }% D- j1 a! L9 L0 Q+ U2 Y
|
|