|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( C2 f4 Y* H! o6 @7 W2 n8 A8 e
#include <linux/init.h>* F- @ v: M( D; Q+ W/ [
#include <linux/module.h>
( a' U. O8 i& u$ Q/ O5 I4 K0 f#include <linux/kernel.h>
8 q# n+ A( R/ n6 [7 p#include <linux/types.h>4 n( c! a) [, {9 G) S) E
#include <linux/gpio.h>
+ W8 y+ y7 c; F& P#include <linux/leds.h>" X4 I m/ ]# v* M5 @$ r. F
#include <linux/platform_device.h>; a0 b: W7 @0 l" R* {& j: x$ s
P5 m3 p! x$ H
#include <asm/mach-types.h>% N1 U! g4 Y# \8 S& C# @) l/ ]. C
#include <asm/mach/arch.h>
, A# ?1 v* i9 z3 a# i6 j7 [#include <mach/da8xx.h>
4 {" g- F a1 x, x. }) y#include <mach/mux.h>
, C4 m/ S; g0 v' ]2 R$ s- N f- X- G4 W( A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 o2 w% b0 }8 ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). s2 m9 w; b+ v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 k8 o) _2 g/ a- d7 e#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 V4 d3 k; }9 N- c# `
* u) F1 S0 t X/* assign the tl som board LED-GPIOs*/2 v; u2 a6 Q% j/ Z) |8 I( f
static const short da850_evm_tl_user_led_pins[] = {
! M3 l+ }3 p: n+ }9 b( p! a: Z /* These pins are definition at <mach/mux.h> file */4 D; U7 A9 @$ E0 E, ]7 G- ~$ [
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ p8 a) t& U3 }* v7 W4 o
-1
2 g1 b+ n- I( s' W8 M* K};
2 O) r' \+ e, u" d
" F5 _2 Y# r' N) S5 }$ ]$ B7 Xstatic struct gpio_led da850_evm_tl_leds[] = {4 G( j$ r3 f; V) b H
{* X, T9 k. }6 p/ s
.active_low = 0,3 B4 n; x8 R* p' d' t! p' n% t
.gpio = DA850_USER_LED0,! H' R5 G! l) R2 B# u9 m. n5 g' d
.name = "user_led0",
) x! p+ w7 A q1 U: x; c .default_trigger = "default-on",
9 q& i( o8 Y4 v9 f! O$ z. {( Q7 F },: }5 t+ U6 ?/ z& X) z* M! @' w* K; `
{
k3 R7 E1 f/ z% [8 g8 g% v4 e. i .active_low = 0,
2 O( S4 Q3 u/ P1 b& V2 g9 I .gpio = DA850_USER_LED1,4 o% X8 g" |! l- ~0 R
.name = "user_led1",
+ q( c; i0 I, I, M1 e; B .default_trigger = "default-on",
- O8 [* }1 P8 S6 `9 f },7 n0 {) m) t& ?' V, Z, L
{
+ X$ P: s0 w. ]* w .active_low = 0,
$ d! U' O/ l( j, l( H: z+ G) C .gpio = DA850_USER_LED2,
1 ?; o! g6 |! H! _ .name = "user_led2",
8 @+ u5 c& C( s9 W8 r' Y .default_trigger = "default-on",
) s- e; A2 x* Y4 T" E },7 g$ v6 W! Q7 @; l9 J- {: D$ n
{+ _0 _0 G0 R* t/ h% M X
.active_low = 0,
- W- D' f" J; k9 [, \5 d .gpio = DA850_USER_LED3,
# {, d1 e, C4 k( R, k# m3 M* f .name = "user_led3",' j+ Y) P3 P7 j6 K# ]
.default_trigger = "default-on",1 H! J2 i/ C! e4 X
}," {% ~, U8 L/ E7 Q8 y! @# J% u' ~
};
: _; F* g h9 h8 P! M3 t; z/ b1 f9 C# i
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 x# `7 K# H) `* X .leds = da850_evm_tl_leds,0 P/ [' x4 i$ l/ h }# n9 y( F9 j5 u
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& h# D$ M) C! H- w};% A8 z2 M2 \8 ^3 Y" Q7 Y
8 v* t, [+ {1 X0 V& ?' y, {& Astatic void led_dev_release(struct device *dev)2 e$ u+ p/ b2 H5 o; V0 W* @+ A
{& I2 |, K% r8 g6 Z+ D
};
. M" r! s6 v5 m
- k/ \- |" ~$ tstatic struct platform_device da850_evm_tl_leds_device = {
/ J5 G1 j6 [: e .name = "leds-gpio", `! W3 n: H) I, Q9 V4 o9 f+ D6 q
.id = 1,& D0 G' f- e1 `- `. k
.dev = {
% d$ {7 a0 n$ T% L) r o1 M) n .platform_data = &da850_evm_tl_leds_pdata,1 ^0 I& j' e0 Z H' Q
.release = led_dev_release,9 u" W, S) W5 }) E6 T* D
}
6 Z5 T( c; {" j- @0 d' g I};
% ~8 F; G* E9 ^+ t/ j! h9 Q# E6 U7 W, _: k) ]- `
static int __init led_platform_init(void)
8 u# I4 _7 n$ |& N{' E8 ^2 ~8 o/ N( A5 D, S; |
int ret;: ~$ V( y' z6 Q y
#if 0
2 I# H& J! O5 A! _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" K( ]4 L6 O: N& a
if (ret)2 R) U; R2 f& N# a- A! r! d/ [
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ \. J: L7 O6 f/ w
"%d\n", ret);$ h6 Y- F, r, q' ]7 y- d
#endif
7 e0 U" A f) E) I9 W1 x: x ret = platform_device_register(&da850_evm_tl_leds_device);
Q" A0 j6 ?; C3 e if (ret), N, T+ V, ]2 x" o
pr_warning("Could not register som GPIO expander LEDS");
7 Q) y# `4 B" M3 N& Z. ~( { X7 _( n else
% J& {# c# t& @ printk(KERN_INFO "LED register sucessful!\n");4 O! z" b& F$ _ r( t \
. S. V5 X9 j# c Y9 _" Q2 O return ret;5 V4 ?# @- g1 q( x4 Z0 C7 U
}
4 @$ }7 m7 x& L# [% |( f- y. [7 d$ s6 c
static void __exit led_platform_exit(void)& M' h1 B" h; q+ F& R
{2 U' O, n+ l# Y1 o8 k T
platform_device_unregister(&da850_evm_tl_leds_device);
& X6 l3 [. p1 ?2 O( C1 G; u$ Q4 \& s; A( C1 W! J! C3 m5 Q
printk(KERN_INFO "LED unregister!\n");2 d T3 m/ Z, T7 m* b; e8 E4 O9 P0 k6 w
}1 @4 U/ N. j5 x# V! U& J( i8 N7 S
* p" Z$ ^3 K4 C' X$ e4 o! bmodule_init(led_platform_init);
- S% J. w) r3 g) }+ ^' [& Pmodule_exit(led_platform_exit);: c2 z3 {8 I! y7 E* q
l3 `9 k$ j$ I, z. X% f4 XMODULE_DESCRIPTION("Led platform driver");* N: ^1 \$ u( b0 ~
MODULE_AUTHOR("Tronlong");
7 Z% A4 v! f/ uMODULE_LICENSE("GPL");- E) N, w3 a# Z2 V' p3 N0 X; }
8 K! ?0 g( Y2 z5 `# @) R
|
|