|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ c5 i( \+ U2 u' ?#include <linux/init.h>0 p& |, { [7 v
#include <linux/module.h>- Y: U, s8 x( a# S+ r
#include <linux/kernel.h>5 u# Z$ k1 e! ~3 D1 k4 G
#include <linux/types.h> O% }3 Y4 a! @2 W. F5 f8 g* X2 r
#include <linux/gpio.h># `; u+ ?9 \' G6 u
#include <linux/leds.h>
/ l1 v( W& J. J: A( @#include <linux/platform_device.h>1 m6 u6 C5 v& l) k
4 y2 @% ]6 d R#include <asm/mach-types.h>* g o1 b! F* n j6 F5 V
#include <asm/mach/arch.h>
1 {" t# Z/ P+ g2 ?) Z" z0 G4 L" E#include <mach/da8xx.h>% \- c: ]; w0 L [( N9 c M
#include <mach/mux.h> e% l& c/ @4 Q% E; ]) q9 A: X5 R: R
. D3 L0 F. r" ], i6 W( L$ p% R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 ]/ H! p! i3 }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. }& k9 r! f/ g# q- X+ i+ l6 A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), v3 w) |, ~! E. N7 B9 N3 ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ i6 @; `! | J" R, s6 D( h- ~( T! g0 Q, f+ X1 s$ g. U
/* assign the tl som board LED-GPIOs*/
% h% u _2 O% ?% i( ostatic const short da850_evm_tl_user_led_pins[] = {
% M7 O) S4 v2 ~/ n1 D6 ` /* These pins are definition at <mach/mux.h> file */6 y5 p& [0 `9 \& E5 @" O
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: j% ?; g$ ~( @/ i1 p5 D -1
3 p( Z7 P/ _+ ]* S) X' V};
0 F6 S$ K: g5 M1 R5 Z' I$ s. v+ }, n2 Z8 {' ^$ [: J* D
static struct gpio_led da850_evm_tl_leds[] = {
0 z z# J6 W" s4 J {' o4 B9 B9 u3 ]3 K
.active_low = 0,8 h. i c' Q; |. e$ ^
.gpio = DA850_USER_LED0,. W. T# n' F" x+ H, {7 }
.name = "user_led0",0 b3 E8 a" A5 r P% `
.default_trigger = "default-on",
0 g! K( Z% \" M" J+ r# i1 R },
" E1 K L5 [- o! ] {6 J) A3 c& S) R$ V. N7 A
.active_low = 0,
$ E% h+ W$ R- l' w; T .gpio = DA850_USER_LED1," |4 B7 i3 t* t% m1 d3 v
.name = "user_led1",8 f0 D0 ]& |8 n" Z0 K/ @) \2 [
.default_trigger = "default-on",2 |' }- D2 x9 t, w2 ?
},
: { p) Q! [% S! u {
) i3 B4 {) s) p p9 H .active_low = 0,/ W* e( g8 S4 G/ o
.gpio = DA850_USER_LED2,
/ m( r9 L/ r, r% J! p: Y6 W8 d .name = "user_led2",( r4 I3 G; C& H5 m
.default_trigger = "default-on",- t% J L& O( N) ?2 q4 ]
},: a/ \5 w+ ]9 _8 k- n' [$ D9 M
{
g" |0 U2 _1 y0 F2 q! s .active_low = 0,
, U' D7 \$ z% v5 L .gpio = DA850_USER_LED3,
i* b/ j! F( {. _1 ^, }# A$ y o .name = "user_led3",/ C3 l; u& E; `7 y: e2 m+ t+ ]5 i* |
.default_trigger = "default-on",
0 p/ B5 Z5 R7 i: M+ K" Z3 m },
; K" Q, s/ n1 i$ b};* O) b; v/ Y; }8 f& H2 Z5 N; @
. `! ^' L& w' b: @# f
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 i- B0 Z F; i3 F* d8 g .leds = da850_evm_tl_leds,
' @) k* S7 O. \) p$ b$ l# b9 p .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 I. F7 |) w) ~& }};( D# w# g4 P7 l- \0 f5 m) c; F: U$ d
6 v& k+ }0 ]2 h( fstatic void led_dev_release(struct device *dev), @/ V3 o7 `; w6 W0 x
{, D1 C% H+ }7 ^% O3 J1 w$ A6 r; }
};
5 \5 a9 T; y7 u1 P3 r$ j; j) K7 Y: c8 `* l, C3 C8 W
static struct platform_device da850_evm_tl_leds_device = { _3 w' h: x/ g
.name = "leds-gpio",
1 i) H0 {* o$ e- H .id = 1,
6 z X5 i0 X2 v .dev = {, t! Y! A" J" j& C0 U
.platform_data = &da850_evm_tl_leds_pdata,
: i7 l0 @) F1 @# U# _) j. {( T. X; y .release = led_dev_release,
5 I2 P- [. A0 {) `- j2 J2 \ }1 [8 q; Y% k3 [) D$ X* Y" @8 _/ T% H
};
# N: e- r& O; h& l1 B. k+ ^1 q; Y! N7 A' c( c* U) \
static int __init led_platform_init(void)
9 |4 y0 G! l5 e1 Z8 L, }8 A3 b{( o% h, t, V2 w6 f3 O4 z7 m1 d% @
int ret;! P/ a `! V! p8 v2 g" A1 C1 Q$ D
#if 0$ M2 a5 g" m+ H# N( z3 t0 `( r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, D! j! C0 j2 V( N. V
if (ret)5 Z" B2 I$ f% ?5 T! G# B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. Y0 t9 |$ x [8 y8 C5 X "%d\n", ret);
0 E( E& d% w7 N# l. |) p#endif
0 t% f( m/ [5 q9 Z ret = platform_device_register(&da850_evm_tl_leds_device);
. R, T% Q4 r8 y9 p- q if (ret). k$ V$ r- H" T/ S
pr_warning("Could not register som GPIO expander LEDS");
1 A3 `7 M1 f, Y. O+ |+ G5 k else
# K Y2 J2 ~, Y' j! Z3 ` printk(KERN_INFO "LED register sucessful!\n");
8 i' P2 _2 G" q: P" A# N) O/ [ K' I! j4 J% \( M8 H
return ret;1 s1 n/ A+ W$ [/ Z* _, h; t# z7 T
}
6 m/ h# s8 f( y9 I* L
: E3 i+ A* k7 ]7 @6 A0 l; cstatic void __exit led_platform_exit(void)
1 V+ E- g3 j0 x4 _{7 b J0 \: B& U
platform_device_unregister(&da850_evm_tl_leds_device);
j* K, N4 \* f8 z7 M _+ |- g
) G- Q! r- ^. {% k printk(KERN_INFO "LED unregister!\n");
, x. Z6 |+ q5 {}' e! Y9 C$ v% x6 W- x/ N* R
9 |& h* u( u- amodule_init(led_platform_init);8 L7 x$ e- `- V# J" J9 u4 h1 H
module_exit(led_platform_exit);7 E; g% o* \# P1 T, o4 r# N; e, r, f
/ B, J7 t' ^& O: U- _! s5 ZMODULE_DESCRIPTION("Led platform driver");* u6 A4 h0 {$ ?$ w+ q# o
MODULE_AUTHOR("Tronlong");
2 D% d/ O! ^, Q( W4 \$ [MODULE_LICENSE("GPL");/ L" [& _5 ` `# f1 u
6 N6 t4 C' k) y; i6 H- ? |
|