|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ m$ o# A# C! Q* C8 f#include <linux/init.h>
; v, J/ t, D- m3 ^7 e#include <linux/module.h>, U6 ?2 X" @, q* G& T
#include <linux/kernel.h>
' b5 {; _1 b( r+ {; a: B# ?#include <linux/types.h>8 U, f$ @0 I* _) ^8 g
#include <linux/gpio.h>
! s& s$ T" x: n5 }; z! F6 r8 V#include <linux/leds.h>
" K2 b5 W L2 K: q+ t! ~% H#include <linux/platform_device.h>7 U' r4 C) a& e0 T/ O0 X; ]
1 i# f3 H/ M* ?4 y" s; c6 R
#include <asm/mach-types.h>) X- f2 T4 H' \) h( D( [2 z
#include <asm/mach/arch.h>7 ]) S+ R3 h* c) A
#include <mach/da8xx.h>
7 W4 i2 g0 g8 a0 K6 E/ i#include <mach/mux.h>! [) ?. F5 P1 s% Y
+ I2 u2 v/ }9 J( ?5 p, K, m4 G#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ M9 ^4 ^7 C2 P) `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! F; v+ E' l. e' W+ x9 N1 i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 _+ `# d( r* w4 i6 @#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 \" {! l5 i+ G& h) u" y! c; k
8 ^" m, O# I& [& L6 ^8 R7 s( o
/* assign the tl som board LED-GPIOs*/
4 c$ y: a2 X8 j& u: |* zstatic const short da850_evm_tl_user_led_pins[] = {* Y: {1 |+ }$ l
/* These pins are definition at <mach/mux.h> file */
! f2 [7 a% Z! S1 X7 g DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, l, D- H4 \. { -1
$ D0 p6 }& U' N( y) P a};/ T: d8 _+ Z# D! y0 X* h1 H" i
. c: v% q: ^9 z: X. s9 d1 Estatic struct gpio_led da850_evm_tl_leds[] = {, e" i& u$ U3 B+ {# [
{; {* b. J8 H' g, @9 r
.active_low = 0,
; h$ m- v- h1 E, q" q3 M .gpio = DA850_USER_LED0,
9 g3 }- C. {. t: d- M+ t .name = "user_led0",
2 l0 _7 v* J, Y .default_trigger = "default-on",
0 C; s& g W% q- S5 C6 m- f },
; B; \8 I# i1 \ {
5 J) P, ]3 C$ [$ |* {2 k& g .active_low = 0,
& B7 a, M4 g1 x9 W3 c .gpio = DA850_USER_LED1,6 d" u6 H: a/ f% a9 v
.name = "user_led1", E/ V8 W* w0 F& P
.default_trigger = "default-on",
7 `2 T( M5 W" ]$ }3 M4 m: w7 f/ \ },
3 V: P2 h1 f" x5 j4 e. ~3 _ {
$ {1 \1 C6 E8 N .active_low = 0,
% v5 |5 O: H D, A% b) U/ X. f .gpio = DA850_USER_LED2,! A& f5 e! v8 X" }2 V' v
.name = "user_led2",0 V2 p5 |4 }9 e! }$ P
.default_trigger = "default-on",9 j7 i: }+ X% e# }% ^2 w1 H
},& w- Q* {+ P4 Q N% k; t
{4 h* d. n7 }. T* \9 G
.active_low = 0,8 J% ~# H6 [6 M9 E
.gpio = DA850_USER_LED3,' H5 ]- m+ c+ Y" _6 y6 X) T- h
.name = "user_led3",
2 h& \+ ^3 x% o' j3 l8 T" H .default_trigger = "default-on",) O9 S( F$ g. c- @' s: g
},7 ]6 N$ w5 h: X
};
8 I' |$ K+ c7 d2 l$ W! x5 z
" P! W, a6 g; A. z+ \- x1 mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" q- | I% `8 V: r+ q .leds = da850_evm_tl_leds,8 G9 X$ j5 ?# D: ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 @% h3 e/ V& Y( h};1 `' i# V: e$ V
3 m3 h4 F9 I( gstatic void led_dev_release(struct device *dev)
7 U. T, C1 w) W# z% D9 R" V{0 u8 N/ h" `# `* h$ w# h- K1 N
};
4 F4 N$ l$ q8 n# @0 v% T4 \2 W% a' X8 B' z- S
static struct platform_device da850_evm_tl_leds_device = {
% c9 I% l9 E& ?" R( ? .name = "leds-gpio",
2 N7 I- a U9 l+ E .id = 1,' S2 P) E" r; R+ Z5 m. t: C3 }
.dev = {
: C& T; R' W+ M) w) z7 g% E .platform_data = &da850_evm_tl_leds_pdata,
5 G5 W* J$ z0 G c u+ P4 g4 s: ^ .release = led_dev_release,
1 l6 h) t/ F/ l% F& |3 F6 M7 S. ~ }: r% [1 {) I/ f9 `. h& x
};
$ ~! U1 ?+ I7 @# a4 r/ Y# H( m. b8 R# j8 T7 I0 H' y% a7 U
static int __init led_platform_init(void)
0 |! X4 L _$ |' k3 P6 F' ~{
& M. L4 K9 q" k7 F$ Q int ret;& ^/ T8 C5 E7 F/ m1 X6 p
#if 0
" q, [3 ?2 s: @- l$ \8 J$ [ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 @7 ]2 Q! p1 S) ~5 P if (ret)
9 i, M6 g( @$ e w; _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- \7 m& l- ]. P- S& j- U6 p9 W9 M* X$ n "%d\n", ret);6 @: B% r3 ^3 L+ z$ e, u/ P4 e
#endif
4 @+ w; \' F+ u& x( y ret = platform_device_register(&da850_evm_tl_leds_device);; G7 t- E- l ^1 ~- i3 ^
if (ret)
$ z% d% P8 ~" c pr_warning("Could not register som GPIO expander LEDS");# B0 Z0 r5 a9 n9 d
else
. U- m, J1 f* z$ b% R printk(KERN_INFO "LED register sucessful!\n");
( i9 [$ Q) M! N6 D2 f* v. j7 y/ ?+ W7 F8 E
return ret;" D( I8 E# D1 f" @
}
: ?+ L2 d$ ~; a' n9 L2 ?. F1 k0 P) [* `
static void __exit led_platform_exit(void); o, o' R# X8 e: H5 M- P9 g
{9 J' d4 @* X+ U$ z' @0 k- T
platform_device_unregister(&da850_evm_tl_leds_device);
/ T! ?& I. v: i9 n, h
( I2 z1 B# c* |) K2 x7 } printk(KERN_INFO "LED unregister!\n");( N* g, m a$ u6 u* g! r
}
. d; s: W0 _! O9 P! Y. G' k6 u' e$ {/ [, H) G3 d6 P" P" R3 G3 o A/ N
module_init(led_platform_init);
6 A7 `, U! X7 Z; C cmodule_exit(led_platform_exit); r4 \( u) c4 C& U' \
) K, @+ D; P1 s- C6 X0 O! d+ hMODULE_DESCRIPTION("Led platform driver");
% _6 |8 [* ]1 i5 W% d- W# `MODULE_AUTHOR("Tronlong");0 l7 d: y* o G' t8 Q) U/ D
MODULE_LICENSE("GPL");
9 l+ L& l, c1 d& q
% p2 ^, d0 c! d" R- G! A |
|