|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 _6 `' D2 n3 I% Q8 _. r- d+ ?#include <linux/init.h>
: B$ E- {4 \7 M9 [#include <linux/module.h>
! f) z9 a W" i0 j#include <linux/kernel.h>
( p' M f1 O' c' T, K) m% I( x; B#include <linux/types.h>, w& k) F1 ?- L" f8 j1 L
#include <linux/gpio.h>, \& y% u: _) {
#include <linux/leds.h>
1 Z8 @! [( q6 ]4 i#include <linux/platform_device.h>! y: R2 h# F* ]
, x r7 }+ E) W) {
#include <asm/mach-types.h>) s" X( ?. ]5 ^+ E7 a. H- O2 m" j+ W
#include <asm/mach/arch.h>7 |7 k0 _0 f$ r$ _& {9 ~" g
#include <mach/da8xx.h>
3 y1 ^: [5 k4 F: ?# ] d#include <mach/mux.h>: J( O: S# x P! P2 r* k) O; d
" y( z0 v! f6 t* j% H
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* I5 z. U2 S! X1 N2 }) y( f3 I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% u: b: O% T8 P, M; P T, d3 S$ S
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 P! W1 s' L8 L; ]( g$ r$ d* L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& f6 N% i& m3 T8 ]6 {7 }
: r3 G% V9 R+ T/ E6 R8 ~
/* assign the tl som board LED-GPIOs*/2 z# L& T# j w1 o9 `" `
static const short da850_evm_tl_user_led_pins[] = {
- }# o: u4 m# C# P* ]. K0 s. i( a /* These pins are definition at <mach/mux.h> file */
. n! k2 a& g( g$ X$ ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ L8 a5 z1 n C1 W5 ^4 g( C6 j
-1: H# E% J- ^9 N3 e
};7 u6 C0 M; K1 U
Q8 W. ~1 e. X4 C: D5 astatic struct gpio_led da850_evm_tl_leds[] = {
4 p M, {7 I% ^. |' M& p {' ?% {: {1 A# }: n
.active_low = 0, j. q$ ~+ m+ Q2 R Q% `9 ?
.gpio = DA850_USER_LED0,
+ l }. v. k6 }: l' W .name = "user_led0",
* m9 [5 m( H! _) j .default_trigger = "default-on",
* T) b- U$ Q$ {6 Y2 y9 L },1 k" w+ p' `4 _2 C- t' z
{ q+ R% n, A; [3 `3 t
.active_low = 0,
5 S5 O3 ~0 D1 R A .gpio = DA850_USER_LED1,2 G, b: v* E; e% B
.name = "user_led1",, R# R2 i, E7 Y% p
.default_trigger = "default-on",
A" `3 Z$ @5 g+ g },1 q3 ~/ D: k6 D( K% J% F* y6 P
{1 f0 m. _3 K& [, I4 Q
.active_low = 0,, {, \0 r5 a0 L; x; \
.gpio = DA850_USER_LED2,, l0 b( d* ] y3 l" q0 j* J: Y
.name = "user_led2",
1 t# c) ]1 r% F .default_trigger = "default-on",
6 ~; |7 b2 V& I% Y: I },
# ~8 b; p6 l8 Y S" s% H& p5 C2 a {4 L! @: J4 n( U* c$ m& y0 _
.active_low = 0,. `( @$ |7 M6 m/ O
.gpio = DA850_USER_LED3,
* w8 L7 Y+ x4 b2 s9 J7 l+ U .name = "user_led3",
6 s w6 J9 c! |2 A .default_trigger = "default-on",0 M" Z5 M+ Y5 Z- J9 {
},
% ^9 ?" y0 X4 o! [% B, ]* y}; L" w4 v4 ]+ Q- J
/ i% J3 P. F2 A& |, e Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 E6 H7 a0 _% j+ G6 [3 l
.leds = da850_evm_tl_leds,
: O, d- j1 s0 P1 e0 o/ B9 ? .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; j( r) g8 l* i ?
};
7 W# P6 Z" X' F# d! S6 m+ J5 e# k1 J, }6 Y
static void led_dev_release(struct device *dev)
& ]! x1 K4 r# u; }{5 w6 |- U: }/ _4 |6 y; `: y
};
$ }! A3 m. ~/ ~) K
: Y5 K7 l1 N9 B' H. ]' _2 l5 ^( ostatic struct platform_device da850_evm_tl_leds_device = {: X( {. S, |3 ~* E7 S1 E2 _" [
.name = "leds-gpio",* }; T- Q' l) X- ]. ?( f
.id = 1,$ Z9 ?2 a8 p: ?9 p, h2 `7 C
.dev = {# z9 x/ n' v! z- s$ u; a' v0 M1 o
.platform_data = &da850_evm_tl_leds_pdata,6 A9 K5 q" |/ }) [6 Y
.release = led_dev_release, ?% k* g- ~" h' O% m. c/ R/ @# V+ i
}
7 t# N" Q( a' Q. w& \};. F$ r) g' T& {9 T
: G; g) l/ ^6 M7 [) ]
static int __init led_platform_init(void)
( u" n; K& }5 t$ ~" g! t8 ?! s5 i{
2 m; t, t6 N1 j, e3 N; l* e/ d int ret;
2 r {2 F) l2 l% i/ ]#if 0
M- c- Y7 u+ ^( P ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& Q- ^7 {6 {+ D# V1 C
if (ret)
[8 P( o& ?+ F4 s" b. ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :": h3 T. |% ?% r% ^+ h, \( o }
"%d\n", ret);
0 ?( u2 `' j$ d' b, w#endif- e" B! S1 }$ X) J+ q
ret = platform_device_register(&da850_evm_tl_leds_device);
! I( ?4 r/ w1 q' Y( p1 I+ q8 M7 _ if (ret)
; ?3 J9 L1 d9 N5 Z pr_warning("Could not register som GPIO expander LEDS");3 A9 i; e& n B) r
else
. j5 T E! R( {- W" L6 a! | printk(KERN_INFO "LED register sucessful!\n");
- W# _0 U. ~$ x L% ?+ `
# i8 K& Q2 d7 }1 Q8 e6 p return ret;
: }& b, b: k8 `2 M}
9 p3 l& t* T3 Z. L! D7 `* t3 n& W! I0 Y+ R7 K" j' W
static void __exit led_platform_exit(void)
# H2 A6 l1 k0 P- [{
2 }% K! n- v" a C4 q' B/ I) | platform_device_unregister(&da850_evm_tl_leds_device);
1 Z: `$ o0 }, }' u/ w5 ?: e* e- w6 w/ V7 d+ {
printk(KERN_INFO "LED unregister!\n");
2 M# R1 R8 E! K. ?7 b8 C2 U5 L0 v2 e5 E/ W}; @( k( | x0 \1 ~' d4 |
* R! K& {/ ~* _+ \* x
module_init(led_platform_init);
3 z' j& G- T/ R4 f3 p o$ qmodule_exit(led_platform_exit);
8 b6 P; b9 v- f2 ?# _3 Z, W# \: o5 ?2 _& m9 V. }% c4 k
MODULE_DESCRIPTION("Led platform driver");% l% o, X% O; Z4 X% l
MODULE_AUTHOR("Tronlong");
9 i8 O- K- I$ H6 P2 Q. u7 `MODULE_LICENSE("GPL");; T( i. D! ~( j! g
! }1 X3 S. ]3 K& H1 V" a7 X |
|