|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! L2 J) G0 Y9 E5 I1 N#include <linux/init.h>
; W g$ t3 Q: o#include <linux/module.h>1 E8 o! m1 l2 k& d
#include <linux/kernel.h>+ v) { Q( p# G1 d
#include <linux/types.h>
) _7 C/ F1 T4 O1 [0 o#include <linux/gpio.h>! e. a+ y% ~# {3 K2 v
#include <linux/leds.h>+ q w& v: L' T' \
#include <linux/platform_device.h>
! p* t1 K' N h3 i5 R
p" w2 w, W9 {, _#include <asm/mach-types.h>
! t/ W' h" o& N2 j: }, O#include <asm/mach/arch.h>
, V7 s$ |6 n! X, C$ X* j#include <mach/da8xx.h>
$ s ^% g2 P3 n, l6 O$ n#include <mach/mux.h>! u( N" [2 H" }9 x2 V1 J
+ p5 E; \' u0 R* M2 b( D* E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): P* ?, D; V/ f7 O+ g& J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 m3 c' M8 R( z$ R7 W' U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( }! k$ Z9 w/ y' A5 ]& D' Z2 d#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ A0 C0 V; E Q& Z
8 H; q& D1 z4 b. ~3 r4 r [* f
/* assign the tl som board LED-GPIOs*/
; q; J* v/ j8 c! }, Qstatic const short da850_evm_tl_user_led_pins[] = {
" U% o' m; d; J- b0 _( v- g# t /* These pins are definition at <mach/mux.h> file */' H& j f9 x* Z/ n/ h! J7 E9 p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 T/ ~- s# n0 Q& u1 B7 Q -1. @7 j' o& ?2 Q; N; c) o
};
- h1 T& T( {3 b w* @7 C$ P9 i4 m2 y
static struct gpio_led da850_evm_tl_leds[] = {
, J+ F. R. d$ x& R- z' [ {
g9 o$ f! G* ?, N$ | .active_low = 0,
7 q0 E+ }$ _) D; m .gpio = DA850_USER_LED0,
' M1 S- P% k2 j6 T, h .name = "user_led0",
& J9 @: p' W; P* W .default_trigger = "default-on",
7 S+ w3 Q0 |7 R+ r$ h },6 o* @; q/ m _: U
{: ?' m I; s+ R# n! I/ g
.active_low = 0,
( E j9 ~- F* v& z) t9 B7 F .gpio = DA850_USER_LED1,1 p6 G& @' }, U9 b
.name = "user_led1",* g* @* i; {4 Z0 Z% P$ C% k5 R+ n4 Z r
.default_trigger = "default-on",
, U# y0 }' G. ^0 J) o0 q! X A },* f* J. N- Y) C3 o' p! l" r9 x
{+ |2 k, q. o6 ~: U5 l
.active_low = 0,3 H: }+ C+ }& l& \
.gpio = DA850_USER_LED2,5 A# T E6 f+ \0 G. [
.name = "user_led2",6 d$ R1 X8 I5 H9 H6 }6 \
.default_trigger = "default-on",
. r9 `& n S# X% y- ]# I2 D },3 J2 M0 w u- z {
{
: C$ l/ H+ w- T! V" _; `- Y .active_low = 0,
3 N1 Y8 r8 \% [# l9 }7 z/ q$ u .gpio = DA850_USER_LED3,) u2 a& g6 J, u& R+ P
.name = "user_led3",
- D) F5 a9 L Q .default_trigger = "default-on"," d# f) `# m( l( u: A) Z9 U& _
},( u9 a: |. F+ S
};$ W" u* n) }( O5 m- N, r! X
4 y1 Y5 c) T. \( P( O
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; f# u2 L/ S" Y: _ Q
.leds = da850_evm_tl_leds,1 C+ ]$ N/ K6 M7 L$ F! m5 d6 F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 T( t1 d, E' d( h. b, M; w
};
9 s. k! `' P8 i" \4 W
( E$ \ a: j! J% E$ estatic void led_dev_release(struct device *dev)( Z5 d& O1 w/ D1 G! ?
{+ ~# R; c$ E" j% {; ]' t) a
};
# k+ m1 u& A3 B+ _! i. R
6 w4 P# Q C2 N- T" Rstatic struct platform_device da850_evm_tl_leds_device = {; [) t; T- H" j" F$ U
.name = "leds-gpio",! B# c F2 g/ W- v6 T7 W
.id = 1,5 V1 P7 P# Z: {. ^
.dev = {0 V( q: Y$ u* S2 R9 ]0 n4 S* C
.platform_data = &da850_evm_tl_leds_pdata,0 f/ f) a) W& Y" J7 x# g( w) s* p( w
.release = led_dev_release,% R4 Z/ B. s" P& u" d$ w4 g
}
5 E( w2 n6 G6 p# m$ u, R7 ]' e9 ^6 Y};
* ^ G" I0 f$ b# w& X& r( F4 E% W
static int __init led_platform_init(void)# }8 T6 T2 Z. d9 w1 X- r8 _
{* B* I/ i6 w3 D; r0 V3 x
int ret;- I* r* b% H& U" B
#if 0- t. X' o( p5 k, N2 t. B+ W2 N# u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( S/ a9 @7 Q* q2 y0 o$ Y
if (ret)
! k l( w# f: _) Q3 e8 W pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% v/ b8 j; n+ q* d1 \$ c* F4 L
"%d\n", ret);3 E+ T; A4 K9 @" {0 q
#endif
, Y! n' q) [5 g3 ^& @+ R1 W. I ret = platform_device_register(&da850_evm_tl_leds_device);
7 O* S% A* n( w+ @" F0 |4 H; c if (ret)" X' y8 ~0 d! k- T6 C
pr_warning("Could not register som GPIO expander LEDS");* x1 v) l5 p( l/ T/ A
else
0 z4 P! E) z$ r& `1 w$ m- m printk(KERN_INFO "LED register sucessful!\n"); [6 n" \, M# R0 h. e
6 f; v7 e+ ]% Y
return ret;- g$ f( u8 _% \# `. \
}1 |6 I3 {; x3 T1 b' {
8 X6 p# a7 _8 ]. Q* }: ?static void __exit led_platform_exit(void)
3 k2 }$ G$ e+ f7 m) O{
3 O# Y* l7 X$ Q0 m# o/ ^ platform_device_unregister(&da850_evm_tl_leds_device);& m2 c( G- n2 R
$ A4 T: ?5 C) R# v8 x1 ? printk(KERN_INFO "LED unregister!\n");
# b% w# I# h. c: A s}
- F( u3 X b) b: t! ~4 f c2 L( E8 p0 w
module_init(led_platform_init);7 l4 X* a0 z9 ^$ p2 O% [+ |
module_exit(led_platform_exit);+ w2 `& d" q3 E! {) e+ y% O
- C6 t6 W- `2 f$ P' P) n$ j
MODULE_DESCRIPTION("Led platform driver");
4 p/ L( P# C2 D& u$ iMODULE_AUTHOR("Tronlong");
9 A' t( ` r5 ]MODULE_LICENSE("GPL");
# |1 g7 Z9 t: T7 I
# L7 M7 ?/ q: j4 H& g0 q |
|