|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, R6 \9 W* V+ q( F
#include <linux/init.h>
! f0 o, ]$ i1 p#include <linux/module.h>
( b- P& F, e7 X8 {5 W. {7 Y#include <linux/kernel.h>
0 R/ I) s" t4 A#include <linux/types.h>
8 s0 Q) X* E- j+ Z4 C2 L$ i#include <linux/gpio.h>
j- \6 e0 k* E7 B D& L8 f#include <linux/leds.h>
: @1 ]* E+ R2 ~4 k9 @. i" F#include <linux/platform_device.h>
8 @4 `- J9 ^3 i& m7 J& v( O! A; I4 Y2 L0 ]
#include <asm/mach-types.h>. z" S1 m5 b: |; k( X: R: R
#include <asm/mach/arch.h>
$ D2 X0 V* M8 R) J. {7 w9 |+ r#include <mach/da8xx.h>
8 N2 c( I0 u' A2 k, O#include <mach/mux.h>
& W ?7 ?! @# K# D3 F
+ C3 N9 ~ ]2 M% P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- x4 w# E/ T3 t% g
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 N4 y& O H- z' b+ X. J8 i( y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& D7 z- n2 f; H; E' \/ ~#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 Z& o( i1 J0 h. o! \& P# `; v7 E
% l& T! ]) T( U
/* assign the tl som board LED-GPIOs*/" j ^" ~1 E5 {. n$ A" c
static const short da850_evm_tl_user_led_pins[] = {
& h' e0 A3 B, _, X- J1 I /* These pins are definition at <mach/mux.h> file */
( S) b+ F; `& H; ~4 c DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 t$ `5 `, L3 {6 ^8 ] -1
/ E! ^2 D& O7 S' w1 }};
. x3 W ]/ _ \! O7 v
! i6 J/ c% p. M! a, F r: E: {static struct gpio_led da850_evm_tl_leds[] = {3 x2 a5 t3 `# j- O0 B; P
{$ V6 }6 g) z. E z5 E
.active_low = 0,
+ D h" c+ h0 ?) R: _; I .gpio = DA850_USER_LED0,
6 E! W% J2 ^* ?' Q( Y1 ]$ P- b# g .name = "user_led0",
9 h% Q& d; c7 w9 x7 w* J% D2 q .default_trigger = "default-on",. W& X1 C6 W8 x" P9 a: x
},; |! J* @% o6 O( }3 K! C' \- j3 q+ k
{
8 W/ q- ?: `1 a8 I. x) |0 }9 s% ` .active_low = 0,
; v7 K7 C T6 X. B .gpio = DA850_USER_LED1,
: B% d5 P; R- Z7 x ?3 }6 t4 N .name = "user_led1",# [' E/ Y/ g' m2 H* o9 t
.default_trigger = "default-on",- o @$ Q4 d3 D, t6 F6 C: P
},( H6 _) I% f0 G$ T* e
{. d: Q$ o+ L1 [- D) d h
.active_low = 0,4 {; l( o) J* z9 k
.gpio = DA850_USER_LED2,1 z0 I, y( m1 Q) I( l. \! g2 L
.name = "user_led2",# n( D4 K4 f" ^5 `& N9 L$ |1 e
.default_trigger = "default-on",: i$ p0 v2 u$ p8 D. j. e
},
# \4 c8 m( K- u9 w% C" C0 W" S {
+ M) s0 ?* A2 E) \. t+ X! e' a& ]7 b' ^ .active_low = 0,
+ \8 w4 d7 T& o& R .gpio = DA850_USER_LED3,; x0 ?3 z( @- y, Y- n2 R" W! U
.name = "user_led3",
6 p* K* \( b% _2 r2 B .default_trigger = "default-on",
, y1 M5 E, I: i1 x+ ^. m },4 B" Y' H( p/ a8 u
};9 v d: o6 x$ b0 N: a' V
* |/ H$ v& } z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" P j0 U' L5 ]
.leds = da850_evm_tl_leds,9 F8 r; H4 R, {4 G, W
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# e' I% t, ?% r# P& C
};
0 v7 h' F+ Q, y) e9 A0 |/ w% X# i
1 \4 q/ w& e5 |' j& Y/ Gstatic void led_dev_release(struct device *dev)1 P1 I4 [; w3 t, @1 O0 ^
{0 [# Z1 O. C, B' g
};# }9 J/ r: Z9 S" r, @& T
/ n4 C9 V" O" ?
static struct platform_device da850_evm_tl_leds_device = {7 ?8 L, J$ V% D' }! ~
.name = "leds-gpio",) o# Z- i( F# ?' c1 |2 x+ U
.id = 1,
/ n" B4 q/ h3 `0 J3 x8 ^3 k! A& h; O .dev = {
9 N2 O( r6 s2 b0 O4 g .platform_data = &da850_evm_tl_leds_pdata,* r4 k; y4 U% E5 |0 M: @. N, c
.release = led_dev_release,% @5 t' e3 B: n! |% a
}. L* Z* S" T- p0 |* D4 B8 U
};1 o1 J% s8 ^% ^9 B: m
8 _; M- \: j$ D9 x& }. [# w
static int __init led_platform_init(void)) n9 U. m* P% [# L/ w
{; o) _1 @* g2 c: t" m7 g
int ret;
1 t' @" w/ x' q#if 0
- }) \7 o* M! ~: L$ x1 B- q' i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( \' _6 C X" n$ y0 g' J: N if (ret)
9 i+ L P0 y j2 P pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 p0 {9 Y. l9 E' C4 p
"%d\n", ret);
0 {3 |9 Y; f7 @+ @5 ]- E#endif
0 z8 a* E# G$ d8 q! h ret = platform_device_register(&da850_evm_tl_leds_device);
' h# F) d& b( _' A0 X v if (ret)& B' c) [' V: P- V, E5 ^) a4 T
pr_warning("Could not register som GPIO expander LEDS");& p$ P( b3 _' Q2 R3 y3 P
else
! K9 A7 A- p T/ r! q printk(KERN_INFO "LED register sucessful!\n");% c+ I7 \ h1 O
/ R3 v+ \8 b: t6 c# E
return ret;
9 G# m* B+ ~# e8 Q}# M6 a2 G7 ~5 ^3 x# v/ u0 G
1 p* D8 k2 W- W
static void __exit led_platform_exit(void)4 O( K- l+ l7 I% Y. W6 v; T
{
. v% s0 p4 C& e- i, t6 b6 V( l: R platform_device_unregister(&da850_evm_tl_leds_device);
$ b9 K4 g( n+ L; D# F6 V3 _& |
' Q0 v) e, r) E/ X+ T1 @ printk(KERN_INFO "LED unregister!\n");
* x' e; z- O7 S0 s2 r/ u# z}: u; ]. e3 Y5 }! I% l
: y' _2 o2 c1 h) d% x2 ?/ A! ` `module_init(led_platform_init);* v+ N! B5 R) p9 M# J* ~
module_exit(led_platform_exit);: N& @% v8 n1 i1 `. J
5 H2 i( ]0 @1 V7 k% ^1 F
MODULE_DESCRIPTION("Led platform driver");. f' u% g4 [$ s. g k
MODULE_AUTHOR("Tronlong");
9 {9 z6 w4 i( p+ Z& B! Q, _; DMODULE_LICENSE("GPL");( a1 S& y$ K; m4 D7 T; T& `
" ]' T6 U# o/ h1 ^
|
|