|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: p9 F4 R; e$ j8 A6 `9 _6 _8 P0 M
#include <linux/init.h>
+ Y& t6 n3 B. `5 ~8 ?& W' i#include <linux/module.h>5 }* |0 N* @ g! f+ T% x* Y2 D
#include <linux/kernel.h>" _" s" D" w: y
#include <linux/types.h>4 X1 z9 \4 w+ b' N7 H
#include <linux/gpio.h>7 X W7 z, s* N G9 S
#include <linux/leds.h>: B$ z3 ?( A/ G0 }
#include <linux/platform_device.h>! V% U- L( s/ V! P( W; Q5 B
0 q. Z7 v3 b" O6 w' V#include <asm/mach-types.h>
4 `+ g( t7 R4 U/ l#include <asm/mach/arch.h>0 p& K; Q o2 L. r1 O
#include <mach/da8xx.h>
9 ~2 ]- ~3 u$ }5 f' V+ T#include <mach/mux.h>
1 o- R% E: r3 T5 C# w. j
' z$ F) B3 Q/ q) i" p3 j' S# [#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, j" A! b* T& B* H f ?; A. P$ T#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& p) A T6 e/ Q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- p" x% `6 @ |9 U! V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ l; O8 g% X; N3 p! U9 l# z- L2 D
6 x* R: u+ ]0 I8 m0 c
/* assign the tl som board LED-GPIOs*/
! f z5 e; z' Q0 k1 estatic const short da850_evm_tl_user_led_pins[] = {/ \ Q. |1 T5 `6 B8 |: O8 f
/* These pins are definition at <mach/mux.h> file */
! r2 H. U, ?3 O4 q7 b4 L) M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 T* {# l: J3 h& \! q! R7 U
-1+ P9 w* E6 Q5 O6 v, N- Z
};6 S; J& M8 m3 c) t. e/ _
$ s( z( B. |5 a% q0 p0 J
static struct gpio_led da850_evm_tl_leds[] = {$ y' B$ Z0 X$ w/ j1 C( a V
{
# B0 a# U3 l8 Z G6 b .active_low = 0,4 u- E- [; S- s( C
.gpio = DA850_USER_LED0,9 `# m7 S% `+ v& ]# M) G( o
.name = "user_led0",
2 M o- L& ~# C: s3 L% p. C .default_trigger = "default-on",
/ |3 i2 j4 P6 ?) e* n: @ }, E- c; u# Z, |" g- d
{7 s: h* W2 |/ ~% [9 \
.active_low = 0,
% N. O. `3 [. ]% S .gpio = DA850_USER_LED1,* x: q) b8 o6 ]6 X+ j" W Z2 z9 p
.name = "user_led1",
1 Z8 W: g; |% E$ N1 ^( \8 K2 N J .default_trigger = "default-on",# {3 P1 e+ o' ~7 N
}," v3 k9 k) b- q7 H2 V
{1 M( c5 q6 R- U% K
.active_low = 0,, D$ G3 V4 o. q5 ~1 i" w; m
.gpio = DA850_USER_LED2,% M9 @- f- _, Z
.name = "user_led2",
/ M! a3 R$ ~2 W! w9 j" [ .default_trigger = "default-on",9 l1 K1 S Y& O7 v" L0 R
},
# ?& I- ]# ]0 `5 J: p {# G0 u Q5 N, O& b. B q- E
.active_low = 0,. J) N) Q# `4 P$ `; C! ~% Y* ~
.gpio = DA850_USER_LED3,
7 k8 q# K" r1 u5 k .name = "user_led3",
# ^/ m C$ s& A0 X8 S .default_trigger = "default-on",% Z" ^8 O4 }0 _ C9 @! [
},
t4 U8 v8 y% _4 t};2 J7 d3 P* i" p* n: T# b0 T
" L" Q s1 a( [. K9 W: @1 H, G
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 C" f: b+ O$ H% a6 ] .leds = da850_evm_tl_leds,
( x) x( ]# Z$ s. g6 s+ p .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' s3 ?5 f" M- S
};
$ n) D# {7 o2 X( M
: q" k6 b' E1 [1 W* u. m: }static void led_dev_release(struct device *dev)
! I& v, k: z' ]{. h5 `( _. l: N: T, f
};2 z" C4 e. U" E
$ S E6 f3 I) q
static struct platform_device da850_evm_tl_leds_device = {! j0 H9 w$ v( d1 n6 H" p& x4 }
.name = "leds-gpio",
) i1 Z( ?5 |2 }( X3 } .id = 1,
' i$ Y# E& H1 M .dev = {+ L. l6 g g" }, J# I" w `
.platform_data = &da850_evm_tl_leds_pdata,
2 m1 ]6 E" d% o4 D .release = led_dev_release,
$ d$ b% N! ] T }+ @- c3 a. z) t1 ?
};
* R" t1 T; I) }3 H G& O: H G( k
static int __init led_platform_init(void)
# |% b) X, U* C3 H( D5 ]{2 }/ k; e# E8 \
int ret;+ {( L/ J" S( o C! X B7 N
#if 0* g9 i8 l. E; V7 [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
p' v! m+ H6 g3 {9 K8 |! q7 D if (ret)
( G1 W: T- C: c2 `# g w pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* g H5 w ^ E0 R/ G0 R; h% T: u7 X "%d\n", ret);& X% @! _0 ^" d5 j5 J. q
#endif
, l0 `. m/ \1 d. G; Q) j2 h) h8 B ret = platform_device_register(&da850_evm_tl_leds_device);8 Q8 }+ J3 c1 D3 y0 ]
if (ret), C6 Y$ H1 N9 V4 R- W2 V: q# g
pr_warning("Could not register som GPIO expander LEDS");
5 g7 |; Z4 t! K, v2 z else
: s! {. s; H4 P2 A3 ?8 @ printk(KERN_INFO "LED register sucessful!\n");/ Y9 j5 T% n2 S/ c. c* _7 }
7 J3 C5 t: p+ H. U8 ^ return ret;/ p; i" T3 S$ z) H+ e
}
% S# k+ ~9 [ x) B7 n& a& I5 E7 a; V
static void __exit led_platform_exit(void)# t F9 ~/ y, M7 w2 K, X
{; Y2 q& Y5 {7 b3 ]8 a2 ]. A5 @9 v
platform_device_unregister(&da850_evm_tl_leds_device);
5 i2 A- x" I* d N0 d
% p# u0 l) F$ N. N printk(KERN_INFO "LED unregister!\n");
- f8 y1 D! T* V k h$ j, ?2 B}8 c+ ~ `; w4 @% y. \2 v
+ q' V. q+ ]' Q' ?9 f0 Y
module_init(led_platform_init);& F& x2 i8 ~) q, v+ t @
module_exit(led_platform_exit);
* }% b! b5 S: x2 c7 g7 M2 a6 `% u! U. c! ~$ b* V
MODULE_DESCRIPTION("Led platform driver");
7 p8 I; \% B3 B4 D0 p/ t4 H# q) E! ~MODULE_AUTHOR("Tronlong");; v/ z! g3 z5 D+ l5 c a6 `, L
MODULE_LICENSE("GPL");4 G3 e; d% I1 w1 Z+ Y9 d+ c
! }5 D9 ]' G+ F/ Z4 G |
|