|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. i# z$ n' }% ?#include <linux/init.h>' g' I1 j2 a5 q: D) E
#include <linux/module.h>
$ f1 z2 j% c. B! u# K2 }#include <linux/kernel.h>$ y0 ^' `: E0 Q) [ [
#include <linux/types.h>
& g9 X6 B! q; t3 j# o( b0 @#include <linux/gpio.h>5 T" i! ?0 g( j6 ` D" L v7 |* Z
#include <linux/leds.h>
6 y8 _+ x$ d& C3 g- ~# j [: W3 P- Q6 q#include <linux/platform_device.h>
L- |' s. c: ?( E+ G0 f3 g$ n( y- F: v& D8 M3 O0 x
#include <asm/mach-types.h>' X6 m5 C; f7 Y, K
#include <asm/mach/arch.h>: u4 P8 p1 C$ s+ l9 x' R, Y
#include <mach/da8xx.h>
5 [" c, W0 @% ?/ K, c n' c D#include <mach/mux.h>/ F+ @ C, {' u/ z3 {
a! }. H5 D# e# n7 m4 |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: L4 w4 w: H0 t+ M7 i# _! I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% A3 O- V. B& }8 e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 H$ X7 V+ S% `3 o6 I% t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); a/ k i: `& d+ T) i
4 n8 r& V8 v) g1 C/ X, U/* assign the tl som board LED-GPIOs*/ ~ ^) C$ W" o& x" r* m
static const short da850_evm_tl_user_led_pins[] = {' G Z4 |. C6 ?( C) _
/* These pins are definition at <mach/mux.h> file */8 \0 C% [' V% J+ L5 W
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 c f/ k! M- K -1
, K& o. c. p7 y# h};' V8 j: i9 C) r0 z9 p
* X& L+ Q8 a: x/ B8 a4 r
static struct gpio_led da850_evm_tl_leds[] = {4 u/ u$ j# w2 E+ B
{
$ J j. A! p' q m3 P. f3 j) v' E7 G( _8 E .active_low = 0,* L8 k3 f2 d1 }$ F2 w
.gpio = DA850_USER_LED0,
% ~' U ?: \( v/ \. {% w6 Q: V .name = "user_led0",
! n& L2 J# a- g* L+ p1 c .default_trigger = "default-on"," G- i z$ z& W1 z& N: s; I
},# O( p5 ` e% K5 h/ a
{
! T. Y7 b3 ?1 b- D0 I! F4 U .active_low = 0,3 q6 M# _. W3 t! ]8 a2 f
.gpio = DA850_USER_LED1, u, _2 h7 {# m% o: n, [0 E
.name = "user_led1",7 [+ \( M/ ]% ?' q3 w5 x
.default_trigger = "default-on",
0 U0 q. V+ v! z, ]# a" { },' c' k4 V) O7 t( h1 ]. d+ a4 x
{
: P/ d% Z" f: C* g/ m9 R3 h .active_low = 0,
! y5 ?% Y5 ]0 w7 M, p5 p .gpio = DA850_USER_LED2,
" ^: l/ Y# `; z .name = "user_led2",& `( i9 I" ?+ ?$ g. V8 ^& f
.default_trigger = "default-on",/ ~2 q |4 G( f: q
},
8 ^# i# c5 _. L, t* Q( A {
3 p# r( |7 h, h7 M0 ^5 J7 d .active_low = 0, r3 }5 q+ l$ D i0 {$ R ]
.gpio = DA850_USER_LED3,, `. r! r4 r) A. A+ L3 w- h; X2 P
.name = "user_led3",
" `. q' `& v% p .default_trigger = "default-on",8 x/ j) A( Y2 X1 p E" V
},5 G6 u3 m" F7 u: ^/ L9 E3 |
};
) y6 Z) A E5 ^# ~+ K& r: a) A# [# v$ R" U' k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' O T" y f- J8 z3 h7 `$ J! @5 q .leds = da850_evm_tl_leds,: G% Q) z! d2 k! D; A
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& a3 ^4 r& ~2 m5 x, P};9 t9 R( Z) G4 \1 w' P
9 P. p9 z; i0 P* x3 e1 l1 J2 ~
static void led_dev_release(struct device *dev)
1 N6 C2 L& t$ Z5 s! v{# H! g6 v" r5 Q r# C$ C
};
0 y. \& A2 f+ m# P8 n" I0 j' s' q4 L9 y9 ?
static struct platform_device da850_evm_tl_leds_device = { H' X1 P( m7 E9 b0 D: c3 _
.name = "leds-gpio",
8 P; z" U6 S% E .id = 1,! z4 f8 r5 e* C4 X
.dev = {1 w; v; P9 Y- q+ c, d
.platform_data = &da850_evm_tl_leds_pdata,
9 l; O8 Z1 K. O9 q. f5 G: S0 B% ] .release = led_dev_release,2 U! K& A! Z5 O# U9 K
}* Q+ t! F: ~8 ?# f( @5 ]0 P
};
C# @1 n+ S7 a% |& A# m) g9 M9 k. b1 g$ D9 _+ ?
static int __init led_platform_init(void)' N9 u, A( b& j; G- }# `
{! W8 x$ O0 S, k$ H5 P' m
int ret;
; H3 R( u& Q: W* n5 w#if 0* w- Z5 ~1 \4 k
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' P1 h& V K; M! P
if (ret)' X4 ^& p; s3 _
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# d+ w. O; B/ n3 m+ o
"%d\n", ret);/ I' H' i6 N3 L4 `
#endif
0 `% K3 ?: e: i, b) P, v$ m: z$ F ret = platform_device_register(&da850_evm_tl_leds_device);- j% X5 d% r$ f& F5 u n
if (ret)
8 c# _9 B0 H y- H5 d! g u; A4 w pr_warning("Could not register som GPIO expander LEDS");
. M B+ i- u, y& w! D' i else
. V5 n# A; a- o, \$ k7 I printk(KERN_INFO "LED register sucessful!\n");
/ o7 k: c2 Z R: z& k: ~$ X9 l! o+ c" |/ u8 L0 X+ l$ A, k7 e$ m5 d
return ret;8 w; J: I; s1 R6 P' |$ x
}& }1 D) ]' ~" f- |8 }; l
" e8 O3 s V# ^' W# p: {7 M
static void __exit led_platform_exit(void)- Q9 b% R, L: a9 Y0 ?0 o
{
- i% `. E- s7 k platform_device_unregister(&da850_evm_tl_leds_device);" X6 N f! ]- U% x$ d2 S' c
! ~# ^( t: D4 G' @
printk(KERN_INFO "LED unregister!\n");0 y% |3 T5 `$ @" p @
}' X! q0 a7 F- v. @8 A- \+ C2 O
3 f+ Q2 @! F/ z0 A/ C
module_init(led_platform_init);0 f% L* Z* U. y4 S8 _- }9 ?) S
module_exit(led_platform_exit);
* d+ {4 A) d0 X* S* L5 b
7 f2 f1 l' O% ~3 {" gMODULE_DESCRIPTION("Led platform driver");
* O' Q+ \ f3 I% y! {) |9 ~/ s7 DMODULE_AUTHOR("Tronlong");
$ D+ S Y; g' d: y2 J5 j6 }MODULE_LICENSE("GPL");
7 s& `8 k* t) F4 c8 S9 L/ m; }! o9 W/ }' A
|
|