|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* g% }' w5 u- f" i0 c#include <linux/init.h>% X2 T! {2 k, p( U
#include <linux/module.h>" |- ~* V- K3 \6 P4 d- [& e" H" A. w
#include <linux/kernel.h>4 _7 X* L# Y# [1 x- z5 k) a
#include <linux/types.h>
' P1 r, F9 F3 C- m#include <linux/gpio.h>
" F, f A* X9 }3 @8 G. Q4 t5 C#include <linux/leds.h>
. A& {# S# M5 ~3 c5 @ C5 P#include <linux/platform_device.h>
" U, V" y! o7 @8 M* h" o. B% N% r3 h5 L, ~
#include <asm/mach-types.h>, p/ V3 ^/ L. U3 R. X
#include <asm/mach/arch.h>! ^" M- b, C. y
#include <mach/da8xx.h>
5 d. E; K$ P- q5 l* @, b% f: M6 t#include <mach/mux.h>0 Q: A0 z; n% d3 o( X( S
, T5 N2 G- W- K4 Q1 L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' \# s0 T5 P% y+ g2 n" B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. t, q2 P- r, V2 Q' E3 i- c3 ]% ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 i3 x: t' q0 ]& k#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' w9 I* ] _5 k% h1 I |4 r
' } x2 c2 u7 C k8 C w/* assign the tl som board LED-GPIOs*/( o: M \/ _6 G5 N/ Z
static const short da850_evm_tl_user_led_pins[] = {
: x" S5 V: y' { /* These pins are definition at <mach/mux.h> file */% T) Q: w9 B4 d3 W9 L0 T9 S9 }* S$ x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! v9 R# ]- W' y, ?! S/ _0 P -1( L/ Z; s4 r9 }& K, M' x
};
* T, K+ {) T! \% g" K' |* Z. `& f5 w1 y) H/ D _
static struct gpio_led da850_evm_tl_leds[] = {
( W5 U8 n9 q- m" }# }9 L7 p {$ F; V% y' t; v
.active_low = 0,
0 D. i, C; P0 I$ b5 h+ ^8 l .gpio = DA850_USER_LED0,
0 L8 _2 k1 C' v3 Q% R, K/ ] .name = "user_led0",
1 K/ B: t7 _ z2 u) X .default_trigger = "default-on",
! x u r) ~, A, z8 P0 k2 B# U' Z }," M0 \; T* Q$ R6 {- u5 l
{! E$ q; C- T. _; H: {$ l
.active_low = 0,* S0 S3 L/ b' G2 g
.gpio = DA850_USER_LED1,5 l; O! L3 n3 D6 x
.name = "user_led1",3 L6 B! N- Y3 x9 E1 X
.default_trigger = "default-on",
2 m6 i. u" G9 S4 `! H5 V },
& Q" W( L4 N% w8 [ {: z3 H, n: { F' W
.active_low = 0,7 L) D+ T1 M3 U+ H8 [ i2 _3 ^
.gpio = DA850_USER_LED2,: K$ X, K- Z5 A( [- r
.name = "user_led2",
; b$ @, p! H* y2 J. W8 z. J .default_trigger = "default-on",
) S3 t$ [7 b9 q },
. u. G4 @+ z" a9 f' C {
; J& @4 }9 I1 j( L2 j! [' ?6 x( T .active_low = 0,
8 Z5 ? v% T$ P" E( w9 X .gpio = DA850_USER_LED3,
3 F3 X) H( J% n, [ .name = "user_led3",
" R v6 `5 {5 E) w* g+ I; s; G .default_trigger = "default-on",6 M6 u A2 R% K! ~, H' ^
},$ i# U8 n* O2 {6 s' }
};( y9 k: t: S7 V' u7 e; ]! m% y
, }9 b7 j2 u2 n6 o- ~
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ f, |: O1 I& ~% e! E7 @
.leds = da850_evm_tl_leds,
% W/ x6 d5 r$ \1 }+ y: H0 `* y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) g. u. X1 ?+ v d) G};- _. r9 u/ U8 ]3 `! |4 v
9 p7 B/ `% }7 x- ?static void led_dev_release(struct device *dev)
+ }) I) I' d) f4 J{
: I& v+ Y6 ^* Z5 O" I9 p- L};
8 t4 c# p3 q# L& T, n* U- q8 K8 C I! h( H! l7 }( m
static struct platform_device da850_evm_tl_leds_device = {
/ o7 T$ b( E e1 S) [) J .name = "leds-gpio",
: B4 s4 y6 ]! Z# w .id = 1,
/ L2 p# C0 w8 P" ^" | .dev = {
! w( B, |: r" n) f) T! H' S .platform_data = &da850_evm_tl_leds_pdata,
; G# B# @1 v g4 U, [ .release = led_dev_release,9 ^. G- z5 A$ Y/ L" ^8 c, k8 i9 j
}
6 @$ `8 |" H! E8 B/ n};
, B$ t1 q" y: t/ t6 n Y5 K
, U- w$ R5 t7 l9 q; fstatic int __init led_platform_init(void)4 q* ]- D' x2 g
{
# H9 m7 {( A. Z& k; l7 x' P int ret;
6 O: L; S/ T7 f4 Y8 N- R* {5 V: x#if 0+ r% | K. L7 w. p0 ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- {1 i/ `& y! e if (ret)) g+ P* f3 G! W/ U7 z% D
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ O b; b- J" \( } "%d\n", ret);
1 u4 B$ _8 Y9 c, p1 U& G/ x M9 q/ I#endif
1 o! O5 h% \4 _4 H4 u ret = platform_device_register(&da850_evm_tl_leds_device);
- }7 T0 R& z) X% A; B' Z if (ret)
% K* I t! b) j% M4 { pr_warning("Could not register som GPIO expander LEDS");
% o" Q1 c: [8 q* s, l. d2 x else
1 _5 r6 p* |1 F printk(KERN_INFO "LED register sucessful!\n");
% p5 _) I* @+ t/ o. p% b8 f+ I0 V, T+ c9 h/ `" K6 K+ @# E
return ret;
l8 S/ D! N4 @1 X+ ~}
1 p/ n$ Z- T4 ^; c$ U
- j# g) I6 Z" P4 L O5 y* zstatic void __exit led_platform_exit(void)
3 r- g& ]% x6 ^! }{7 ]5 K/ R# o4 J! g
platform_device_unregister(&da850_evm_tl_leds_device);
# L& x3 X; K) s1 [$ p- A$ N3 N* F
printk(KERN_INFO "LED unregister!\n");
$ \) z) S6 |2 Y# j, k}* _, a1 p& Q. a' q
% J" S" C2 k. [( Fmodule_init(led_platform_init);
1 q6 E! D4 y! A: A, p+ Qmodule_exit(led_platform_exit);7 i+ }# G6 b2 m3 k7 y$ i
: S4 w6 Z+ p- iMODULE_DESCRIPTION("Led platform driver");+ t h; D. ~9 z+ {! `
MODULE_AUTHOR("Tronlong");
9 `$ A. a3 b G( c8 }MODULE_LICENSE("GPL");; Q: s& H; P$ v( i5 H
4 [# H. ?7 C9 c3 [0 c |
|