|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: `( ?- c3 a5 d' }
#include <linux/init.h>4 \2 A B% d, R" e( G, ~
#include <linux/module.h>
" F u* t# K+ p% |) R- A6 j#include <linux/kernel.h>3 v, H' Q' _! {& L
#include <linux/types.h>
( c) W; F7 F6 F( s* }: g, y#include <linux/gpio.h>- [* _- b: {: e( e6 } U( {
#include <linux/leds.h>; n/ s! a* h; ?/ q, N
#include <linux/platform_device.h>
# g8 N) f' G) B# M! p$ Q, i3 q) c k% H2 ~, _
#include <asm/mach-types.h>
/ `/ _8 M7 s9 H/ _#include <asm/mach/arch.h>
4 I* [/ R F+ ?8 V" N4 C#include <mach/da8xx.h>8 {, W4 @3 i2 N3 X0 ?) R
#include <mach/mux.h>
- L& d. h$ X3 Y8 r& D) z0 p' U! E4 K7 B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ j5 u. g; _% [+ k#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 z+ J, s A0 x' `1 e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ p! V; m8 } w- C( j& M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- W, T* ]2 a+ Y2 v3 t, p
% F: Z( V+ K$ L/* assign the tl som board LED-GPIOs*/2 n* ]9 a2 Q+ T
static const short da850_evm_tl_user_led_pins[] = {$ o* f3 O$ B8 M# k& f
/* These pins are definition at <mach/mux.h> file */2 c) o5 w. ]6 K. x% i8 d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, J. a& C/ _# j# f7 N
-1
8 E" Q7 [8 d5 `, V};" t8 A8 k' m& q
6 x& }9 r' ?9 }0 |/ zstatic struct gpio_led da850_evm_tl_leds[] = {
' O. i! Q% C+ y" H {
" n( \3 o4 b* m: C* |8 k .active_low = 0,; I& s; d2 i0 A8 j1 t
.gpio = DA850_USER_LED0,
3 @* ^1 t: j+ T( ] .name = "user_led0",% m# c! W5 O+ ^+ l
.default_trigger = "default-on",
3 [, }3 p" p7 R/ `# q) n },. r, Z7 ~9 A4 l( D1 P
{+ j; B- v& x: D5 ?. b/ @" `4 ^
.active_low = 0,
' ~/ V) _ A- w& Y' n; W. b .gpio = DA850_USER_LED1,
P3 g) w# ]+ w .name = "user_led1",5 w) a/ m* h' T6 N9 P
.default_trigger = "default-on",4 L1 I$ C/ s* b& w9 g
},/ e* k. L" Z. L3 p- j! P
{8 T8 S, s' ~. V' v
.active_low = 0,$ `! |/ w, {: G$ u- v8 B$ v7 G
.gpio = DA850_USER_LED2,
$ l. M3 L& M$ i+ Y" B9 o) u7 g m0 H .name = "user_led2",
0 v. o3 u- c i+ p2 L2 P .default_trigger = "default-on",
6 H5 u$ b: F( z S% K },: Y; [3 c. R; x: v
{- |. U7 H# D# i- L/ K: Y* m1 }
.active_low = 0,/ V: ]! l/ c: S/ Y; Z
.gpio = DA850_USER_LED3,' K; V% m# I$ Y( P' H% U
.name = "user_led3",& v. n! }& f5 r( E0 U
.default_trigger = "default-on",4 |& p& g, O8 E, ? I
},
; `$ ]6 C+ w: f% X+ G; O};
# A# [& c7 Q6 N% p" O- L
+ a4 t }. B) X8 J$ pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 G+ ]7 M; F( j9 `
.leds = da850_evm_tl_leds,
( u4 y: U0 `8 v' B" u6 {* O .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( n+ B+ P7 l; d0 [
};
+ r6 r( \* G" P0 m8 V9 ?% Q) H) `% Z! ~
static void led_dev_release(struct device *dev)
9 Y8 {0 S3 }4 ]" ^4 x{/ {3 X, \9 k2 Z" x) h5 A2 |$ K
};
! i, u5 P l% ^; \ ]8 Z( N! R3 s3 F
static struct platform_device da850_evm_tl_leds_device = {
# M+ j* `, [; ^2 d) d* W+ T' A5 O .name = "leds-gpio",
' S0 S: t+ ~- N9 T .id = 1,3 u- e9 `* n( d9 T
.dev = {, r7 n6 K: ^# x& Y" `: h
.platform_data = &da850_evm_tl_leds_pdata,+ C/ m0 V8 w* \$ z
.release = led_dev_release,
y0 o* E2 d( H# }3 {$ U; E- U }# m; p( b4 G' j+ v
};
- @2 f& k# S$ r |1 u/ u
5 P1 B" u2 f4 g. R6 \8 _static int __init led_platform_init(void); G9 M7 G- D) p) ?$ O5 m: \
{* Z* h# S6 o8 w
int ret;6 O8 F; v+ z- f% o
#if 0
?- G9 r8 ~4 G; Z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* C6 t; Q* {: e" G3 f if (ret)
2 L% l1 ?. W# Y9 W* r, a8 ? pr_warning("da850_evm_tl_leds_init : User LED mux failed :") }4 i! }. O$ F1 T- O) z
"%d\n", ret);2 k( A2 s \0 Y
#endif
& p2 W" V- f* Q5 B/ h ret = platform_device_register(&da850_evm_tl_leds_device);
2 O" _. t7 _* }# v$ R% | if (ret): ` p7 K6 F$ p4 }9 j& n
pr_warning("Could not register som GPIO expander LEDS");/ E5 K* U& ?" z4 v
else
9 W& X9 D% |3 M; M; h. Z! N4 a printk(KERN_INFO "LED register sucessful!\n");
5 z! h7 G- _3 [+ u& ?. Q i
" ^/ T; o/ x( Q8 S' O% d1 d* }* l return ret;+ b" ^+ A) t- y7 Z- \' f! h0 d
}
" ]8 _$ o) u, i0 W) l' _
: ~* M8 H, F. m) Pstatic void __exit led_platform_exit(void)
9 P. j/ b. l! P{
. A# y$ _! D; U: I platform_device_unregister(&da850_evm_tl_leds_device);
% O r: Z+ s% U z4 V* X5 \2 V
$ X8 F) B& t: x0 q printk(KERN_INFO "LED unregister!\n");" g# `+ P9 T! i6 V
}
3 }1 o9 N4 a, k; X) ]/ Z6 [
4 O8 {. Q7 z$ D/ @( j3 imodule_init(led_platform_init);# } b8 U9 c r* v4 @: u
module_exit(led_platform_exit);+ _: m9 B4 R/ q& x+ [9 O; B4 `
- s& O, O& W X# N: x0 Q5 UMODULE_DESCRIPTION("Led platform driver");
6 T0 V n# q& t& P. W3 N8 IMODULE_AUTHOR("Tronlong");) V0 H' U, X5 M5 m
MODULE_LICENSE("GPL");
8 s/ |' K% j! I
3 l" T3 q3 s" e0 Q: q |
|