|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) _* C+ V. |3 j6 N. D ^#include <linux/init.h>
+ A; v) |! S" X2 N+ A#include <linux/module.h>
9 ?% t4 }4 G3 Z; s" J' d/ V, @#include <linux/kernel.h>: G ?3 v% z( R! V7 O
#include <linux/types.h>
9 Y- X$ j& s# ?2 J0 \( a#include <linux/gpio.h>
) y9 B" y' o$ t& Q, T$ W#include <linux/leds.h>: [: e! ~: u3 E
#include <linux/platform_device.h>
Y2 q6 U% }8 H* @6 y2 N8 n
h+ x e0 p( e#include <asm/mach-types.h>/ ? c5 H3 E- E
#include <asm/mach/arch.h>
) J9 i& u0 Y8 ^' X8 g#include <mach/da8xx.h>
4 q7 d$ ?, G8 H+ ]#include <mach/mux.h>
8 K, o0 A2 n& m+ X9 s: Z: u; x- r0 E% j) \$ O
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 Q5 b) o8 Q" j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 F% a1 {% M1 U; A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 G- @- Y1 H8 x* ^# A$ I! u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ p1 X0 R% w% j* B3 ]
5 G9 `: j8 Y; L
/* assign the tl som board LED-GPIOs*/
+ R7 c( u7 Q% Y9 e$ \9 ^- s Xstatic const short da850_evm_tl_user_led_pins[] = {: K5 j8 i" [# L# r
/* These pins are definition at <mach/mux.h> file */" p1 a6 N* L% a* n, B
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 Z P- m9 x: u. f8 @$ V! ~4 U) ^9 H -12 E6 B6 z! i% C; Z# g
};8 }1 X% ~5 t( A% r0 q0 G( F4 s
/ B( ]. ^; @' w) t! c" \4 A
static struct gpio_led da850_evm_tl_leds[] = {8 ^+ X& o8 I" }4 y/ |% b
{' R2 k. R# Y2 k9 D' o
.active_low = 0,% y9 g% z; t) Z# R6 G x
.gpio = DA850_USER_LED0,3 J0 _ X# J6 E1 a; o
.name = "user_led0",
4 s: r% o4 ^! V8 ]$ m0 g- w .default_trigger = "default-on",7 Y( Q7 r: g/ b4 L2 N5 v0 @5 o5 _
},1 y# C7 L! Q# y4 p' s7 w; x2 d
{
6 I% L; C6 z" s' t! E .active_low = 0," M+ t! K, \. {6 d
.gpio = DA850_USER_LED1,
; E% L+ K9 j, \. Z9 z, ~: _ .name = "user_led1",4 b5 r0 ~1 Z! C8 X& w! h V, S0 A
.default_trigger = "default-on",! D; z2 r) y& q" i. ?5 p
},
/ R2 Z. d7 s6 D2 w {
: ]4 L7 [5 b, D, U- [ H U7 j9 R .active_low = 0,
% @) g6 a- g0 X& v .gpio = DA850_USER_LED2,
9 o# b, U( \/ O .name = "user_led2",
3 I9 [" x W6 p9 ?! @ .default_trigger = "default-on",
7 b! u. v: G5 ]; W6 R- w },
3 K+ n0 ?; n! c+ Z9 K) @) Y/ Y {
6 i4 a3 h& M/ D% `" q .active_low = 0,+ ?7 _' \. N$ q8 s. i9 N2 a4 A$ q
.gpio = DA850_USER_LED3,& Y2 J- o/ w- F2 x) E1 v& H
.name = "user_led3",
: T7 ?7 R- |1 V7 r; G1 Y# i9 A5 u .default_trigger = "default-on",0 ~# \. f" H3 u( D0 k
},
( [; V7 q" m! X- D};; W+ p0 b- K1 l$ C0 ]& `
- R, R# Y7 V9 |. L9 m4 `- H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) g- Q0 t+ l# S7 g8 u U) t
.leds = da850_evm_tl_leds,
6 m% j4 U& T1 E; @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: b ^$ a' O4 N! c# V- T
};8 e$ Q' O2 O1 [6 b
6 }( Q/ ]3 S- m; n: |
static void led_dev_release(struct device *dev)
9 s$ c' t9 N7 ]$ m }{3 u9 t. i0 F3 z- _" h
};
$ z! H: Q" }7 g& f. ]2 y/ V
% @, g! R: `$ H! Lstatic struct platform_device da850_evm_tl_leds_device = {
9 B& z( @5 C8 v! X' V .name = "leds-gpio",
6 N& U- o6 ~, v* ]. O7 f/ h) b .id = 1,
- M7 z1 J; }% Z+ v3 w1 ^$ ?7 ]& t6 ]$ s .dev = {) j' Q' t t g
.platform_data = &da850_evm_tl_leds_pdata,
# j' Y* _* ~6 A+ [$ V .release = led_dev_release,
. U$ k5 j8 `+ ? }' w5 M& |1 X& D. h! ?' q+ g5 n" F
};2 \$ \& I* t' |1 {9 X) x: {0 [
! w& r) Q9 g% A& _5 N, Y4 }
static int __init led_platform_init(void)# m- ~; e( k: O
{2 g, _; b5 Q/ p- f4 [& m* g
int ret;
% T; ?3 O$ q; C# n& }/ j( q#if 0
" K/ A4 {/ P3 H- _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 Q1 n4 f6 C; D0 d- o) o; b) S if (ret)2 G8 J- _! W( c8 {! W; }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% }7 r4 P; I9 C8 Q
"%d\n", ret);
8 c" u( ?2 H( W. [#endif
. I( L( T$ q$ f. Z' Y3 i5 Z ret = platform_device_register(&da850_evm_tl_leds_device);! v4 ~* H1 Z/ l# N$ T, r0 a
if (ret)! E$ M- t" L! n7 V
pr_warning("Could not register som GPIO expander LEDS");
6 s2 N3 E, ^4 o5 z6 m else, C! b9 P- N! F8 N9 l$ M. w# b7 P9 V
printk(KERN_INFO "LED register sucessful!\n");
v2 b- c, G5 b# C4 B$ l& z2 [ i& m# a P8 M
return ret;" ]. {! G6 G9 t5 |
}
3 s; f, W- ^% l
& o7 R0 @ L \# p* a. X7 Sstatic void __exit led_platform_exit(void)8 N, |1 B& ]& ?* c' f) ]2 Z. v
{
9 X2 r, g# D4 x2 f7 W platform_device_unregister(&da850_evm_tl_leds_device); a5 @2 ]8 L; r0 T, |
: ?4 o9 z0 S: O7 V8 q; \ ] printk(KERN_INFO "LED unregister!\n");
0 F. @- K( i, ~3 L4 z, R3 u9 o- M) F}
5 W; [& h& x9 N7 n. E" A
1 D! V& z: ~$ ?5 {2 ]3 P' G' e. l* kmodule_init(led_platform_init);
$ I4 f" j9 h) R8 X7 H& lmodule_exit(led_platform_exit);- J* w% i8 X- p: W* l& D' |+ \: i
% H a7 T( Z% {7 E9 r/ ?MODULE_DESCRIPTION("Led platform driver");% ~( w) }' a; T/ ` i- G5 j0 n
MODULE_AUTHOR("Tronlong");# {" k( U" r2 F# I6 ?
MODULE_LICENSE("GPL");6 B/ D& M8 J. a2 R3 Z9 Q
6 k1 O5 o/ N% v. s) i
|
|