|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# E2 a9 P" T$ T
#include <linux/init.h>
0 a. n( g9 c8 E5 h) w& ], y#include <linux/module.h> c% e! }' E- q( M, i& G B
#include <linux/kernel.h>, w8 j; ]# \- }
#include <linux/types.h>0 `* i( Y+ [7 }
#include <linux/gpio.h>$ n# A4 j( w* ~' |3 V% P
#include <linux/leds.h>/ ?! F6 m8 \2 {5 @( A1 k
#include <linux/platform_device.h>
+ t+ X! i( V7 q. r9 _9 R7 u4 C8 \6 L) ]
#include <asm/mach-types.h># D1 Q$ J& S$ I O, X, `0 p
#include <asm/mach/arch.h>+ N' T2 |3 t3 L4 v2 ~( m
#include <mach/da8xx.h>) x) O, R8 P& A% A
#include <mach/mux.h>. m5 F/ T! [% i# j
( n3 ~1 F8 S {. v" u/ t+ |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 _* l9 V( p) t) \( `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 g, ^# f8 k( D/ f5 t9 x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 I$ A4 |! V2 \8 l+ D/ L* e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% S! d0 \# w% s9 e" X
) h& a* {- P0 m+ ^2 _& ]/ E9 @# Q/* assign the tl som board LED-GPIOs*/
* b4 p: o/ s( Z( V$ bstatic const short da850_evm_tl_user_led_pins[] = {
) }8 Z4 {4 v; i" |$ f* x$ H; T /* These pins are definition at <mach/mux.h> file */
2 }; c2 ^4 a6 W) K' v& q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% v7 E" h5 P3 Y# d' v# A
-13 h x8 D; x( D8 Q
};) _8 \/ X% X# y. l8 e
6 I z f) h v; u# r) y" astatic struct gpio_led da850_evm_tl_leds[] = {
9 U9 z! U* j/ r7 _ {
1 u1 i X1 v& {7 Y' s .active_low = 0,$ u( X% M) h7 Q/ z
.gpio = DA850_USER_LED0,' k1 ~! [1 H" {) S6 c- X
.name = "user_led0",
- l. X! ?% i O* _. c0 S1 K .default_trigger = "default-on",
9 j2 b! {0 j V) m$ j },4 p0 O: m9 W% ?% V) H
{0 C% e5 V r5 F6 g
.active_low = 0,6 n' k$ {1 E3 N1 {& F& b
.gpio = DA850_USER_LED1,
" h: z3 A' O6 i9 b A* L9 h# p% B" i .name = "user_led1"," l( `9 t1 `# M" Z! a
.default_trigger = "default-on",: A. c# x+ U# J# q3 e1 b# m. U
},9 X! C8 t [* _: ~# ` X' T- K
{
b3 n8 X; r N .active_low = 0,6 l. V! ]1 x: M8 z3 B0 p
.gpio = DA850_USER_LED2,' Z7 l0 Q) }7 f R& ]( d& F
.name = "user_led2",
6 N' [; x3 A% e* d .default_trigger = "default-on",
/ b- ^2 K0 H. n. ^6 E. j) O( J5 o. o7 Y },
& [# c3 Q; j7 F6 u% [ {! n" A! A3 c n0 ?3 _, n' c
.active_low = 0,
* w3 ]) l, v* g .gpio = DA850_USER_LED3,$ u8 Q* g7 U* _
.name = "user_led3",0 i6 G$ l6 X1 ^0 m6 }
.default_trigger = "default-on",
% }. m; {: h8 d' d4 Q },
; H4 A: d, Y8 h$ l4 X};, V {% t- {* G8 X: a
% N# Z$ D# g: Y" b2 K4 z# xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 k, n, L1 C! ]9 o' e
.leds = da850_evm_tl_leds,
* f# i, i+ ]* J! H0 W/ i .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 s( H g& R5 h- i7 c6 i};) \( A# t" g: a- p& m6 @! b
' v3 B2 M% G- o6 Z3 E; T
static void led_dev_release(struct device *dev)% F9 `% z8 C& y, w+ G, ^. W! l
{" L2 M- Y% e( N; A+ i% Q Q' y1 t
};- f3 {, e* `% \2 Z5 M7 h
; N6 Z% D7 ]5 S1 w( k8 x3 y
static struct platform_device da850_evm_tl_leds_device = {- v* G m* Y1 h5 ~" Y# h
.name = "leds-gpio",
% E: Z W7 l6 r .id = 1,
5 \( U/ Q. h, `8 h/ G, ^$ Z }0 Z .dev = {
% ~6 f$ R8 m% u- i. B6 V .platform_data = &da850_evm_tl_leds_pdata,
( p/ `- _1 z3 u3 {5 ? .release = led_dev_release,
! e7 T4 `# g; p6 A$ F2 p }4 f2 X! m+ ]% b) J
};
) F) V+ v9 G6 U5 ~& {- B8 q7 Y- u0 Z9 I4 s3 e$ t0 @
static int __init led_platform_init(void). Q+ J4 v4 @. ? k8 q
{4 n4 @ ?0 n2 z& p) J
int ret;9 f- I3 ?$ M9 M* z' t. X
#if 0' X! @0 R/ z7 ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); K4 {6 k# e* N
if (ret). e* Z5 }4 V4 |/ G# d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 I3 q) F5 R; Q r* c "%d\n", ret);! `- j, m, V( a: n. b. @) ?. T1 P
#endif
5 Y2 K0 g1 s' [! u ret = platform_device_register(&da850_evm_tl_leds_device);
D* S, y, R F$ Z5 X% Z8 g if (ret)5 L) p9 J5 h1 h5 B
pr_warning("Could not register som GPIO expander LEDS");, X: M& A' O# M) u
else
( X) ?1 b& v: B8 I0 X1 D* H8 r+ t$ Q printk(KERN_INFO "LED register sucessful!\n");
1 w* S5 ?1 w/ n8 H( Q! K
. |* L+ w; D2 d$ K, h: w( G/ U return ret;2 p( M7 d. B$ Z+ P: k# W
}
. O7 o/ A4 z7 z4 c3 r9 l; f& X: E" L4 c }
static void __exit led_platform_exit(void)
% b5 N+ Z2 x4 u1 H$ q" F{# r& P8 A- o7 }
platform_device_unregister(&da850_evm_tl_leds_device);
. W( C9 X6 ?/ Y, v2 d
/ _5 {- n9 `6 C( \. W6 k/ z C printk(KERN_INFO "LED unregister!\n");
! C( ~- |# I- V4 G" Z$ ~}, G7 z* O4 I* h* S& `5 ~
* E( S9 ~& B" ? Y5 Pmodule_init(led_platform_init);& W5 P% O& Y! ^7 U% w& j9 F
module_exit(led_platform_exit);; l! V4 x$ E2 L9 _8 s
8 Z+ P4 X1 A8 _# r- r! B1 RMODULE_DESCRIPTION("Led platform driver");
+ h+ R; M8 r3 h9 o0 r& O9 SMODULE_AUTHOR("Tronlong");. E( Y- l/ p$ }
MODULE_LICENSE("GPL");* h* q8 d1 \" g. i5 V5 a# h
6 |5 W* ]8 J5 |0 R+ I |
|