|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 p5 ^4 V) P' {+ }- n( [# O
#include <linux/init.h>% Y# ?* j" `7 V
#include <linux/module.h>
# K, w0 o1 x7 ], i#include <linux/kernel.h>
9 `. f# |" z& Z( |! n0 J3 H#include <linux/types.h>
: ~: p+ V# u6 B% c( t; \2 f#include <linux/gpio.h>
( ?1 X8 z- D0 ^# d7 |#include <linux/leds.h>
E; Z1 N; R* w0 k- n u#include <linux/platform_device.h>
8 ~) p, ^" g' {4 M, n$ B8 w6 {) f
#include <asm/mach-types.h>
6 q4 h$ x: q7 c, R# B0 \2 C) |#include <asm/mach/arch.h>7 ~, \! o. B/ e$ |% C/ T
#include <mach/da8xx.h>
2 K1 ?, G" Q2 Y* W#include <mach/mux.h>" y1 g9 `/ I h+ U5 v' u
- X6 t" b' f3 x2 W4 R2 n8 l
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ B z3 o% |% j0 W# r2 j4 n& A/ w
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 \6 Y1 t& ?, z6 i#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) \! m! ~ x' Z `0 Y+ T( j& R#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ b- |3 ~( C! y5 |: ?
6 b: }. s: n9 j2 t$ a" s/* assign the tl som board LED-GPIOs*/) D4 m0 T( Y7 g' J( M7 y
static const short da850_evm_tl_user_led_pins[] = {& w# W3 Y% t! }4 t+ H$ o
/* These pins are definition at <mach/mux.h> file */
0 F; w' U d9 C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 l5 u% l0 c- H, q2 [ {4 G- Q -1% _$ `& T) E' c. F0 @4 [# m' Z& y# o/ m
};
# i, E2 ?- s; V# H' I: D
5 z: q. ]' s# \ I0 v" jstatic struct gpio_led da850_evm_tl_leds[] = {
( A4 _+ m) {9 ~9 p6 J- S4 o5 r {
& |' g5 Q9 d6 t* R9 _ .active_low = 0,
& C1 J# C' o. t' r* s0 ^! ?$ C5 `) d .gpio = DA850_USER_LED0,
, ?: q! B1 o5 @# {0 @9 @- f& t .name = "user_led0",
4 A4 y4 h2 ]# a6 e5 b6 y .default_trigger = "default-on",
! }: n# a1 D5 {4 {1 S },
- {, N4 [$ T$ _3 n, v# {+ a5 b {
0 M" f/ L' |$ I% Y .active_low = 0,
" D) J$ `" s, a .gpio = DA850_USER_LED1,
8 d1 z- b+ |) Z! h% l9 U$ T+ y .name = "user_led1",
& L: Q% `0 T) u .default_trigger = "default-on",
$ \( C, ?6 {2 i; y; J+ o }," _" u5 {9 r7 A% ^; T2 l
{
1 g7 ~8 {9 W- q .active_low = 0,
+ }. }% D" G+ K) x5 m, \5 b .gpio = DA850_USER_LED2,3 a# R& }) T/ p- q& ~
.name = "user_led2",$ G* m) i: y; K1 J6 t
.default_trigger = "default-on",( y- Z L# G" r
},1 z3 @; j$ Z6 Z
{
5 T9 d: F# o1 h j: ^/ J; i .active_low = 0,3 P6 Y/ u! A$ v, m* s, S4 [8 f7 a
.gpio = DA850_USER_LED3,. P2 k2 j1 F) h) r! d4 P( y
.name = "user_led3",
& c8 f4 y+ X3 Y, Q9 i2 v .default_trigger = "default-on",
?# P& Y. v+ X& H$ H2 c0 ?7 e },
( R* Y# D! p5 r};
- b/ x4 I5 H6 c0 {" Y# o- }2 {4 N9 e6 B/ ^; `5 K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! e; {3 P \0 ~% o$ |1 w/ J3 T
.leds = da850_evm_tl_leds,
/ g7 C6 q. n" w6 B! R/ S. x6 i' ]. U6 p .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# P$ O/ s4 M: u: g' t};
2 E# {' i6 w7 @1 W* D8 N0 |6 J/ ]6 Z! B9 q
static void led_dev_release(struct device *dev)
/ @9 D$ P b! I' L{2 c% c2 Y( J0 z# V
};
% Q* \& A$ G M2 } W, i6 F$ O& C8 _, p$ o p; V
static struct platform_device da850_evm_tl_leds_device = {
9 d8 Q7 G$ H7 K .name = "leds-gpio",
. Q% @1 o; A1 d N1 n% ^) X .id = 1,
) d4 j2 S4 j* H; ? .dev = {
% d" e8 B. q9 Q0 m3 R .platform_data = &da850_evm_tl_leds_pdata,
, B% J" d+ W& h3 q2 ~ .release = led_dev_release,
0 F' p: x' z4 m$ p$ G, \ F }
: f5 L3 ~( X) @4 D};! _/ |/ B u, _, V1 d1 w, W0 p
( t7 Q2 S# m; ~& s+ p, z
static int __init led_platform_init(void)
; }0 j9 H" K8 \- @1 S6 O$ ?{. U1 X4 }# Q$ B" i" S
int ret;
8 c7 g; l, r/ [; A+ d& H" u, n#if 0
8 S7 A2 c5 Q. A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; Y+ A. c1 a( L4 R
if (ret)
3 p, d3 q. T, E% l0 j pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, F( R8 L' p% L! [& X6 e" M+ r' C$ R "%d\n", ret);8 @* k! w$ o7 {) @4 e' K: T
#endif
' J6 }2 `0 n: `; a! t5 `- g ret = platform_device_register(&da850_evm_tl_leds_device);. q$ t& T2 X+ E- E
if (ret)
/ g- c( y6 |$ ]" O* _$ {7 I) w pr_warning("Could not register som GPIO expander LEDS");
7 f0 P8 O6 v$ R6 d1 \: i5 \ else
! d/ e- Y h) |9 ]8 E& T% [$ P2 S printk(KERN_INFO "LED register sucessful!\n");
& W) W- O b+ V- x+ Q
$ N5 }( H" Z$ B1 i+ ^ return ret;( o6 @ u* G2 z$ [/ X) Z
} N# E2 w5 y8 G/ A8 c/ @
0 y0 G( m. M, T5 K* k1 Tstatic void __exit led_platform_exit(void)2 ]; W% C6 `/ Z1 O/ C9 o
{! q$ t2 a# Z) I8 j% O! u5 g& R9 W
platform_device_unregister(&da850_evm_tl_leds_device);# A W" L, R% Q, N
; I/ c- l% v# y0 e L2 c# @4 L
printk(KERN_INFO "LED unregister!\n");! E" p e% T9 p4 V( k
}
1 |0 p1 z- R& V
" N1 {1 w9 \8 D5 }; _1 D+ A1 ^) gmodule_init(led_platform_init);2 G. Z/ p4 I* L& {% ]! O7 }
module_exit(led_platform_exit);
0 p/ I. g$ ]) ]) O, x$ v! c( Q% L% y9 z- v2 v, m3 o
MODULE_DESCRIPTION("Led platform driver");# w l9 n+ b: V3 I1 s* S" |/ e
MODULE_AUTHOR("Tronlong");0 e; g$ t3 k( ~& i1 m
MODULE_LICENSE("GPL");+ b" @) b$ C, `
# D: Q' Y% U ? r- X |
|