|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ c1 [8 U! R @& ^' v1 p, X#include <linux/init.h>
. N7 \8 M2 ~$ Z" y p+ h/ T#include <linux/module.h>
: \" z7 P& G) C) e4 W& [#include <linux/kernel.h>
, K* f4 f! x$ z#include <linux/types.h>; X1 X/ d( D; `! X
#include <linux/gpio.h>! K- |: h' w! E# W
#include <linux/leds.h>9 a* J2 T) i: y. {
#include <linux/platform_device.h>
7 T0 A% x8 J: ]' V* c/ R9 J n$ n" U4 g
#include <asm/mach-types.h>$ O/ E4 o! g& F
#include <asm/mach/arch.h>
J$ P* g( ~5 o) S#include <mach/da8xx.h>
l0 N2 d) H9 P% T0 w#include <mach/mux.h>
% K2 q! f9 ?5 `, M' O; N1 s
0 y( {' Y# \& d" C& F* F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 W! Y4 h9 P A, X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 _/ t$ W3 T! {/ W* g/ H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 Y; e% |9 _- A) B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). h$ o' ]2 C: N) r
1 K' ^! X" Z! P5 t0 f5 X& F/* assign the tl som board LED-GPIOs*/
; E' Z$ _/ G9 s+ Z- c8 P8 `static const short da850_evm_tl_user_led_pins[] = {( r$ K) f1 j3 _! W' E0 V6 X% E* n
/* These pins are definition at <mach/mux.h> file */* Y" u" W' a2 k. O& C; q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- a: e$ |% `3 X -1. a) |7 d6 I$ u; j. n
};( B. L9 e6 c/ g7 @( c) P
$ u+ v/ U) v/ v& }! w( x2 V
static struct gpio_led da850_evm_tl_leds[] = {
7 q! ?( p. }$ a4 c( W- @ {
8 s# ]: |! d, {7 a3 e0 i .active_low = 0,3 a6 r0 j6 a4 V8 [ [8 [
.gpio = DA850_USER_LED0,2 l9 @' c' V6 V0 [& @" Y6 ~- P( h
.name = "user_led0"," [5 X# I1 I" [) P, c. \( T0 G
.default_trigger = "default-on",% N2 Q9 a2 z d2 Z& e. u& h
},
* T; R( V# } E4 T {
2 t5 A' ?8 ?* S .active_low = 0,& B* q# S# K7 T8 W
.gpio = DA850_USER_LED1,
, X+ B/ \7 S. Q+ C .name = "user_led1",
9 F* o: m. j" K# I9 b6 H3 l6 G/ R .default_trigger = "default-on",
~2 m# Q4 B, T5 `% I },
6 t. o, n- p! ~# C' [5 w {, f( N' ^# t6 b d) G- c$ @
.active_low = 0,
4 s, i6 P5 V& s0 B& `7 M! `# k! ? .gpio = DA850_USER_LED2,
; B4 f* K* N7 H0 G7 `8 x+ ? .name = "user_led2",& n5 u5 B7 R, u) y. S# b
.default_trigger = "default-on",
; e4 q4 s7 L) j7 o2 ?; a, C },
% l5 Q# `' Z; c- B+ s7 b {1 z. q2 n4 y$ ?: M5 O
.active_low = 0,5 o# Z3 z3 N& G4 a- ]
.gpio = DA850_USER_LED3,
$ z* Z7 f# r, `) I0 ^ .name = "user_led3",
0 b( G0 l/ ^9 r: _$ ] .default_trigger = "default-on",& P1 h& T b( i
},7 s, ~) ]4 |# y8 \; I. N, {; L* r
};
$ q# {" {/ c+ I+ d9 @ |
6 Q; B. I+ m8 S7 t8 \' Y: O8 L8 H7 @0 Ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ K9 Y: U+ O& D+ f2 H
.leds = da850_evm_tl_leds,/ {5 j# o. {8 t4 ]1 D
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 B8 h% _3 Q8 a1 }, \4 u @
};
* R/ g8 D! E! h1 j' y5 c
! ]" n% O8 ~5 r7 istatic void led_dev_release(struct device *dev)
! W! ?' i$ I% H" _{
9 b) Y/ m/ b7 \( T& L3 x};
/ b, Y. \+ [* S, \. a8 m: s# ~, o! Z2 d1 C7 b9 x2 r
static struct platform_device da850_evm_tl_leds_device = {. ^2 K; l6 i8 w6 T( G5 B
.name = "leds-gpio",+ W, ^, G% |4 \
.id = 1,
: X) m) S( P+ R! |" X, f: z .dev = {" q: \* C, u( m1 u# @" n( D9 k& x" d
.platform_data = &da850_evm_tl_leds_pdata,6 s4 K/ ?1 y, Z; x+ ^9 u
.release = led_dev_release,' ^; ^4 X; O& l1 L1 X8 X
}
' r9 B) b0 C- U4 t};/ [7 I* U5 c+ X# W, m
, j* p! |5 }7 R4 H S, M" Z; k
static int __init led_platform_init(void)" X5 X) X7 }. d+ S. E( P, f- d
{
8 Z% g x$ ?8 {! o/ ] int ret;6 v9 B8 `* r+ K1 o$ s: q1 f" ~* r, H
#if 0
: i; K$ C$ h7 V) [' |+ J$ a/ `. |6 Q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 s4 P9 Z: W7 g% o$ r
if (ret)
9 b, k6 [5 J! E2 ^+ Q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 u3 m2 e. \7 K) a, R. T
"%d\n", ret);2 s# p f4 {5 N( X
#endif
( P1 ?. ]& h0 D! d6 ^ ret = platform_device_register(&da850_evm_tl_leds_device);# z+ Q$ U0 `5 Y' y
if (ret)
% f b& Z; e0 @) h; l9 ` pr_warning("Could not register som GPIO expander LEDS");
8 E6 t6 }* i& ]# E else# L" ?5 Q1 k1 \, B3 Q/ H) K
printk(KERN_INFO "LED register sucessful!\n");
2 O# {( K2 ^( t& A6 W% y8 i# c. D) [+ r: p
return ret;
8 m: Q) J; I& N) r/ y% B}
1 P4 P" @$ |! J. d
) B( `7 M1 C8 A! O1 |# Astatic void __exit led_platform_exit(void)
9 p+ M( L3 ~) Q- w% f{* o( M3 r7 g8 q5 h
platform_device_unregister(&da850_evm_tl_leds_device);/ c7 G* `3 ]: `! L' a# E
1 k- {; R. B% D$ ?# h printk(KERN_INFO "LED unregister!\n");5 ]) e1 e% X. P& T# V4 R. z, N
}- | Q7 q3 {# j% W/ h9 z
( a4 n, d% s) h% j+ Q v
module_init(led_platform_init);
* d; k, _; W% j D. |module_exit(led_platform_exit);) o+ U- Z( P: [$ e5 i1 W- ]
# e9 ^, T w ]2 H! U
MODULE_DESCRIPTION("Led platform driver");
/ m% r+ V0 e' t7 Z+ e" G' yMODULE_AUTHOR("Tronlong");
% f6 y s, i3 w oMODULE_LICENSE("GPL");& G: Q5 q! B7 r2 j* W z( S1 T
+ V$ X" J$ i9 L2 G7 x% @2 l5 U |
|