|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 R& l' d+ A6 f$ m2 G. p& t
#include <linux/init.h>% J0 b/ c% ] o3 q) L
#include <linux/module.h>6 X) r2 e( o1 ?
#include <linux/kernel.h>
9 F; S W8 D+ z0 \#include <linux/types.h>3 Q" a& }7 D) D$ j3 P+ c
#include <linux/gpio.h>
4 t+ V% h5 ]0 v0 [3 y: k#include <linux/leds.h>
/ Q- \$ J& E4 r1 h#include <linux/platform_device.h>' y- a# P- z) H! D
7 M5 W$ `+ P8 p9 E/ t
#include <asm/mach-types.h>5 y& S' H; } Y/ j; V2 n8 H
#include <asm/mach/arch.h>1 G: c+ U" w- ?) r/ y
#include <mach/da8xx.h>1 T2 s! a1 r; G3 c0 f3 a
#include <mach/mux.h>) Y. Q' x; u+ ?; N2 Q
, d1 S, f! B6 n
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
O0 u5 v8 X3 S% ~' x, e#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 {+ q2 g- E! |
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 B: M+ v8 k& V+ w! B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! m" g0 J, y9 _
: J# g3 |; D5 B9 h: e7 y/* assign the tl som board LED-GPIOs*/1 f( P: J& P5 ?; v
static const short da850_evm_tl_user_led_pins[] = {
9 {- c x |6 {8 X+ Z/ t /* These pins are definition at <mach/mux.h> file */. y+ h+ y% N7 Y/ h* w. O% ^
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- D4 t! f7 f+ s* O4 Q# o -12 b/ n8 l/ M4 d! \- M% j% I! ^" [* B3 F
};. e* M& o( L7 F" G
4 S" x/ Y6 v4 f' q% C8 G9 |3 K: xstatic struct gpio_led da850_evm_tl_leds[] = {% H4 c, l9 p: b( ~$ j; g
{
' \. F: _1 M- T- a! [, Z1 E2 L .active_low = 0,
' b3 C( x6 B( ], W .gpio = DA850_USER_LED0,
. l2 A% _, c }3 a% ? .name = "user_led0",# A1 g, J5 b5 d* d$ k6 J, k. x: m
.default_trigger = "default-on",+ j. X& y7 [7 J9 p1 i6 L, h; q
},
# o; y2 | g, Q1 N7 R- r9 K' F {! r5 H6 ^; n) j/ F
.active_low = 0,, F- G9 _4 k2 x1 O; c
.gpio = DA850_USER_LED1,& _7 L# @( W+ Z3 H3 S5 k
.name = "user_led1",. C" V* x" h. ~
.default_trigger = "default-on",6 m- Q2 _5 y3 U' B2 u
},, d" ?6 L. C& `- V* K% l" v/ b9 R
{& r! t h2 z7 g, [
.active_low = 0,
8 E0 g' N; K0 @/ E .gpio = DA850_USER_LED2,& D1 ?, Y. G2 i8 V" Z7 L7 s
.name = "user_led2",
- P) z. c1 }" l) V# x .default_trigger = "default-on",
1 D& L" A+ v+ v* \5 o: h },
% C* W" A c: ^: u {
9 I' `2 o! g ? .active_low = 0,
5 c j% O) J$ [& b! w .gpio = DA850_USER_LED3,
- }: V6 c+ s7 A9 J8 V8 k4 g/ H) P# U .name = "user_led3",/ T) w6 j( | g* U( J* I
.default_trigger = "default-on",' N3 T' U/ d, a* H
},
7 K: R, Z% _+ @$ f% K};
, n. y8 k/ H3 B7 y- i, h' L2 n# c9 Z, M7 t1 z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 L0 a' ^, D' S% [$ S+ o2 T .leds = da850_evm_tl_leds,
9 x( Q! F4 E' S7 t: i& e .num_leds = ARRAY_SIZE(da850_evm_tl_leds), |6 g( G. ]7 B4 Z
};" q, ^& Q" r7 b
L# o, m. v5 o0 i
static void led_dev_release(struct device *dev)% A+ Z5 J6 e. i: Q1 q4 W7 r
{2 s1 @! J9 ]' ?0 x9 B T7 h
};
) W1 R3 u. P. ?, D) [! _7 e3 X' n9 i4 Z: Y
static struct platform_device da850_evm_tl_leds_device = {
; U) g/ p; i1 U/ @ .name = "leds-gpio",
) ?8 P. z8 d! T. @9 L .id = 1,6 p A; C7 f6 b- b f
.dev = {% B* ~- Z0 \$ x- G' C5 Y
.platform_data = &da850_evm_tl_leds_pdata,: q5 V. A* o6 C7 ]$ I& M$ D% V2 m/ R
.release = led_dev_release,
9 j6 Q$ Q5 k; e* H. F. ^' g }
) c# ]6 h9 x. z, M: t- Z2 f, R};
+ s# H$ W; p* Z) x0 t% f, X% n' @( f% e3 M4 E
static int __init led_platform_init(void)9 k6 J2 C6 n: r# [
{
* c/ b; l. u) [" Y int ret;1 O. m% D9 m U/ u7 v: E
#if 0
$ n" K; q! h) F& m; x$ R ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 x( x; |7 O* D/ o# s4 D; J1 b if (ret)1 w$ n5 x+ H; }" x+ U
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, I# u( x/ M' N9 o" x. h) G6 I, s "%d\n", ret);* r) s/ d" q5 a6 v) R5 r! {1 k8 w3 v
#endif/ R7 u7 k) N! d$ u
ret = platform_device_register(&da850_evm_tl_leds_device);
7 T5 T- h" M7 g' p; R. z7 l if (ret), o, v* l5 F8 G" N
pr_warning("Could not register som GPIO expander LEDS");5 J; {: @* p. p; o. ~
else! p& B/ d& b v. @6 ]. F
printk(KERN_INFO "LED register sucessful!\n");( U' b* y% A3 V6 _
, r- q* [, r1 Z' @0 u$ y2 W
return ret;, K1 z) Z# W- p5 B1 u5 Z
}" j! x4 ]5 b: Y
. u) z) G4 t8 d
static void __exit led_platform_exit(void); Y0 Z4 i4 R* J( P! O
{
$ |; b" n( P& z w2 ~7 ` platform_device_unregister(&da850_evm_tl_leds_device);
& g# a5 T, {5 o4 o: r* I6 |+ h, n# X. l2 ]/ J
printk(KERN_INFO "LED unregister!\n");- G# e% a5 W0 V9 m, E8 Q" I& X+ v5 U; P
}" w( z' P5 k( Z$ }1 T3 |% k
% i- ^8 k9 F O% ^/ t4 ^ jmodule_init(led_platform_init);1 d0 \. |( {# s; {; @: K
module_exit(led_platform_exit);
Z& x' Y& g. ~& R5 q2 P! V, F! j3 [% U' w2 }6 T
MODULE_DESCRIPTION("Led platform driver");
, F/ o% C, e8 c, b* W$ PMODULE_AUTHOR("Tronlong");
. o/ L- ^' B) o \$ H7 V8 WMODULE_LICENSE("GPL");
, v0 P5 P) Q7 H: o/ L7 A. M9 Z' d7 ? G- ?, ^( c
|
|