|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" D: j. t/ Q4 j/ c& c: Q#include <linux/init.h>+ M2 V6 E& j1 i* X% i
#include <linux/module.h>
* [ Y3 E. \( M#include <linux/kernel.h>
6 k8 z2 w0 c+ q: D( U8 v L#include <linux/types.h>
! b/ x7 c. K8 g* s#include <linux/gpio.h>
7 a q6 Z8 Y3 t s0 f+ D1 }/ |1 ?#include <linux/leds.h>$ _; _5 B3 |' ?5 R2 M: j
#include <linux/platform_device.h>
. i) \( [1 r5 Z" ~# a/ M, V. G9 f9 G
#include <asm/mach-types.h>
9 l% t& ?% P+ v; X! v6 G" N7 m2 S#include <asm/mach/arch.h>2 g! D! w% l/ q# s: ~- \3 f
#include <mach/da8xx.h>
7 |1 Y4 M: T& @#include <mach/mux.h>2 E; J) i! ^9 K5 N% P* S! [
( u: V8 f" e2 g) ^2 v+ G#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 m- w% ?& h' E) u) [2 [! m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 u8 I9 N$ y" m7 V" I; }2 l4 j#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! k2 J4 \4 G; [8 \& f! `5 O4 C#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 ~1 K ]' e% ~" d* b9 U) b! y; ]" j' M) ~3 H$ ?! I! m0 c0 O1 N
/* assign the tl som board LED-GPIOs*/+ x; h# E" R: \$ j7 X
static const short da850_evm_tl_user_led_pins[] = {
) A! z1 g9 P9 d/ o, w /* These pins are definition at <mach/mux.h> file */
$ f, T( W$ W( @8 Z' h1 Z& S) u3 p' v4 q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 d3 t# w. v: C& `5 F: o5 | -1
" M" f3 d6 m) D0 j8 v* w5 j};, d7 _9 p& X) G2 r7 X
6 e+ f* l- B2 I/ M4 v5 M, N1 V' Ystatic struct gpio_led da850_evm_tl_leds[] = {
4 V. ]2 e' e: r& @3 D {
' t% M8 x- x+ M# p9 W' c# {6 z .active_low = 0,
# @+ c5 W7 J. C .gpio = DA850_USER_LED0,+ C9 c' X- H" k$ u, L9 h! y
.name = "user_led0",
) d% K' J: L& p; L; t) v .default_trigger = "default-on",. h* y$ |4 \! P0 r/ @
},
?) i6 e9 e" d) v7 X {' F! O0 z& k: L" d" B4 l
.active_low = 0,# y: y5 I' T& ?& J0 V8 J3 K. ^
.gpio = DA850_USER_LED1,
( {& V, O& S( F7 c .name = "user_led1",6 w3 C2 P9 ?) _& m8 M$ ^; q
.default_trigger = "default-on",
9 h+ t6 i2 @4 _! M: j },% y7 g- m9 O: v: h+ S+ W
{- t( m* v5 P! c' F1 I$ G6 P8 ^
.active_low = 0,) p1 n: `" [0 N: D* V
.gpio = DA850_USER_LED2,7 u' R9 k, }# T: J" y4 X: q
.name = "user_led2",6 U- k( S/ @* i& U
.default_trigger = "default-on",
6 n+ Q4 H! k& q% O( \1 V# l },) J+ e" v/ t9 S+ |+ U5 N
{
/ x: M% _+ T: U- L% y: p. W' P .active_low = 0,! w3 T2 f8 m3 j. o/ f
.gpio = DA850_USER_LED3,
( x+ Z& N/ B; x' u3 b .name = "user_led3",, K% `7 s, [6 z& z4 S5 H" d, L
.default_trigger = "default-on",
, T( b% {! ?* o5 \3 @& z3 L },3 u' J2 |! C) |+ X( O
};2 d7 P7 Y2 t7 C/ _& l; F$ p
R1 h$ _) i2 I8 ~1 Dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" ~& @$ l# |/ j6 ^, i+ X .leds = da850_evm_tl_leds,
0 r& m: a: ^: ?2 U9 V/ S3 S .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* Y" O# n* }& f$ ~/ ^# F};
+ ~ W9 {) t6 F: ?' k2 ^# d
, \4 k- ^+ _/ l+ Dstatic void led_dev_release(struct device *dev)
3 m7 O8 _( K( J: c; L2 E{1 j2 I# |* b1 ^9 ?- I# O1 Q$ z: _8 s
};! l# k' F, t& g _9 |+ ^5 J
* S& \" i! w% B' N0 `+ ~( T6 A; B7 Nstatic struct platform_device da850_evm_tl_leds_device = {
$ y) }7 h4 a$ X; g( L% J! ]3 A .name = "leds-gpio",
7 M9 C; E* I/ O) F9 A% s* h6 ^ .id = 1,
! i, B) O4 L0 }; \ .dev = {
' x- l* d3 q2 ]* u; M7 ~ .platform_data = &da850_evm_tl_leds_pdata,
8 C- \6 i! E' L3 q5 r .release = led_dev_release,& p1 F0 f' t+ a- J, U- J1 w
}4 S) l% [7 }" @; J! ~7 P
};' v8 r' e, ~$ x/ O
& M) ~2 y% ?5 y
static int __init led_platform_init(void)
& y4 @, F" S' }" r% @' E5 M3 a, t{
1 U9 ^& H# Y7 F. e int ret; k$ r e$ c$ H# w9 ^
#if 0
4 K4 j# e) T: \ D+ F% G3 \ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 P* j9 w6 q/ Y8 S* V, }) k% C
if (ret)
, q4 B. y. N0 H9 I5 e% B pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% _+ ^9 Z- e- X6 ? "%d\n", ret);
O& S# h6 X5 ?& s& y#endif
( q$ g, h8 l, N; y ret = platform_device_register(&da850_evm_tl_leds_device);
6 i2 e+ E9 V M: M if (ret)
6 y- H. p) s# S9 {) L pr_warning("Could not register som GPIO expander LEDS");0 \: T: I, f9 f2 u; D
else' [4 @+ s3 a5 z3 V4 h0 w: K
printk(KERN_INFO "LED register sucessful!\n");
0 `/ V' P, q4 C8 Q1 s- S8 n
3 S$ Z# R/ O @+ `0 Q5 q return ret;! f }: f$ R( Z6 b% b: u) _) c
}
( `1 Y+ N- O4 s+ K: l, e" r! e. @2 {+ O% l; n0 S9 x
static void __exit led_platform_exit(void)
; d- ~- F5 B. Q4 ^, C{
6 {, p4 Y8 \% {$ b3 ~ platform_device_unregister(&da850_evm_tl_leds_device);
' s; q' C# r9 M" I( o
: z, e9 T# j4 d0 p' @ printk(KERN_INFO "LED unregister!\n");
' X( j0 [4 X- f$ C4 o- N$ R}1 \; e- Y! k% ^1 C- R
: a$ o( ?7 o x& f. E- I: Gmodule_init(led_platform_init);
1 ]1 l2 W; k4 T; Y7 @- c2 wmodule_exit(led_platform_exit);( x- {0 a) u) R* o) w: i% @
d* {$ u; N8 P q9 d: l
MODULE_DESCRIPTION("Led platform driver");
$ K ^; N! G, W0 f _MODULE_AUTHOR("Tronlong"); L6 ?3 R- N0 @0 _/ y
MODULE_LICENSE("GPL");6 ]1 A( S- t/ U( }2 |( ]
1 y" v0 [! q; U5 t) F8 J |
|