|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 `) ]" k+ b1 r4 x2 v# Y& R! x
#include <linux/init.h>
( h. M* D( W0 H ^#include <linux/module.h>' h! ?( k3 u$ E0 y9 m& f# e
#include <linux/kernel.h>
7 U+ g+ F2 T5 `5 t+ k/ P+ t6 f#include <linux/types.h>' Q# Y/ `- M; u
#include <linux/gpio.h>6 {. R( s' I- \1 e5 x+ E) N
#include <linux/leds.h>
6 j$ V$ x1 S5 B+ X# r% [9 l: s0 a#include <linux/platform_device.h>9 D2 F- P( N* o+ R, y
+ @+ B; l% C/ L5 Z, |
#include <asm/mach-types.h>9 d6 L) k9 O. [& H
#include <asm/mach/arch.h>; k j! [% n. K9 d( I
#include <mach/da8xx.h>+ o2 C8 n4 U( p
#include <mach/mux.h>. ]! X+ u( B- U" }3 m M* w
# [! H- m- I8 c7 e7 u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* a8 P: k" @% L; K1 J$ w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( g1 T; f" Z. Y* e5 k9 z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ ?) J) Q. v0 ]. z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ j7 r3 r, f2 B" ?/ }
! u! K$ S, T% [) B2 h/* assign the tl som board LED-GPIOs*/
4 M" P8 v" U5 T l2 A( Q2 \static const short da850_evm_tl_user_led_pins[] = {
- s: q: N2 Q, T* j; ?- O /* These pins are definition at <mach/mux.h> file */0 `. W; a% x3 j6 ~+ P) z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- Q+ m# h* F7 e( g! g7 r -1
( g x* G' M3 X; k};5 `$ v% o. u* j: P
- }8 _8 ]" v: F1 C0 n
static struct gpio_led da850_evm_tl_leds[] = {8 b9 T% u& |/ f2 z* {5 q2 z* ~
{
0 R6 M4 F$ S% a4 Q, F: F; b6 q2 K3 z. Q .active_low = 0,
8 \+ G+ o) u. N .gpio = DA850_USER_LED0,
2 r- n+ o. \. e& @- [) z .name = "user_led0",2 y s9 \; t; r- M
.default_trigger = "default-on",% M$ n. z0 d6 g7 ]5 c
},
/ L' h; o3 f- L& j {$ h& w4 x3 F; T: _* [4 @! r
.active_low = 0,
( ?/ F5 O) X3 x .gpio = DA850_USER_LED1,+ n6 a1 [# W, b- B) X6 Q" J6 J' j
.name = "user_led1",
5 H4 L# O g0 L .default_trigger = "default-on",' L2 p' G# g+ K$ I
},
# K4 l( R' Q6 s" ] E6 Q8 r {
; y8 C% E9 |* j$ M! B .active_low = 0, E! E& [' t- r1 Y% `) t
.gpio = DA850_USER_LED2,
T( |" a5 j, o, D$ B. s9 T4 \0 u .name = "user_led2",4 C; S2 {# m, L C u- {
.default_trigger = "default-on",7 o5 [* H! s( ^1 s% o: |5 E/ ?' v: E
}, U! T2 ]; S# X+ n* g+ q+ _1 P
{
5 _' z" S4 |! `/ M2 R# _ .active_low = 0,
5 e9 y5 k9 V: n8 _ .gpio = DA850_USER_LED3,
* L/ N' _ \8 E% ] .name = "user_led3",
0 }) e4 f/ D: @/ B# q .default_trigger = "default-on",
: X. R; r) [3 J" a" u% v },
' W4 I: @# z$ T};/ `+ a' o% ~+ s8 f
$ c/ R1 P2 f; a6 [+ V
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 n+ x6 I% X0 y+ S
.leds = da850_evm_tl_leds,
4 G( H1 B* D& u! E: G .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 p/ _3 |2 X( I% S: j/ [
};! D! U, n- j% j4 w6 S& S: e
& V* n% ?# j% d' k1 c7 \0 K& [6 r
static void led_dev_release(struct device *dev)
7 c0 H& ^" s q+ H# X{
7 w* V8 o+ T: k j$ t( ?6 u( ?( L5 x};) t% W. ?( E2 f
) t% \/ [2 W0 V% \! b0 Q8 xstatic struct platform_device da850_evm_tl_leds_device = {5 ?( Q- ? K! `& P* v4 x# y1 `" S, ]" h
.name = "leds-gpio",* k' L# M! ^( j) }1 e
.id = 1,: k8 d& U$ D2 b! r
.dev = { R: O9 p3 z- v9 J H2 M
.platform_data = &da850_evm_tl_leds_pdata,
/ Y8 M) Q; E( s1 r8 E" _ .release = led_dev_release,; _; L) W, K' m$ w3 z% h& U
}
) J/ g( ]3 A" \4 j};9 ?5 z K2 S5 {& y- ?4 [ l" P$ k
0 U& ~4 g$ r5 z) K
static int __init led_platform_init(void)+ L0 s8 [* B& r- ~
{6 u- U0 t V0 a
int ret;" q* M- F+ y$ F: a1 y5 w" J) Q
#if 01 G9 n" S# V5 O& ~% V% {8 v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ v- J: i5 ~/ ~3 j$ r
if (ret)
1 N6 v4 @! J3 M9 S/ I pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 E4 v# T( r: R$ \# N: ?% C6 W
"%d\n", ret);* k$ I: m, X* B- o h% ^; h
#endif- x6 c2 t9 S8 a4 |3 U8 n
ret = platform_device_register(&da850_evm_tl_leds_device);& Z$ S* K" A; ?' b }
if (ret)! i' z, h) q0 X
pr_warning("Could not register som GPIO expander LEDS");6 ~& ^4 l% D4 [/ w' [3 D, K, P
else
0 p1 ^" x+ y+ @, h( ?5 A' @ printk(KERN_INFO "LED register sucessful!\n");
/ A2 B, |2 d! c- a3 E: [( b7 E
+ z0 v, J0 K w0 o2 @' u return ret;
# }9 @* [4 Y7 `8 C! ^7 D* C}& l& q" I, A, I
9 l3 e- [$ J3 a/ f' U3 \static void __exit led_platform_exit(void)
0 ~9 @6 S! T9 n* f! [# @6 Z6 L{
7 O3 o, [' v8 ?) J: E% X platform_device_unregister(&da850_evm_tl_leds_device);
5 N' a4 M$ I0 D; v$ s1 \4 M8 b5 G
2 `+ h2 A8 g. X- h5 d# m printk(KERN_INFO "LED unregister!\n");
/ W) c( a: o& k( c) Q: w/ D3 H}
) x, V6 H5 l5 j: b+ W8 W3 V
* m6 k; \ M W4 C- Z. omodule_init(led_platform_init);
$ A1 M9 }/ B7 r4 f/ Dmodule_exit(led_platform_exit);6 W. U3 x" l# O( M) r' X. U- @, ? N
& h3 R+ {, R* `. a7 j& b
MODULE_DESCRIPTION("Led platform driver");
3 O+ w- |1 j& N: t7 y5 `; DMODULE_AUTHOR("Tronlong");
- M E$ |: g- a' @MODULE_LICENSE("GPL");, j2 H* ?% D& P- K
2 G# |2 n7 H% b# }5 D. n# Y) r" a- B |
|