|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, ]3 u8 }3 }, X" [4 {+ R6 K#include <linux/init.h>
$ D; ]. }6 ~: R( Q#include <linux/module.h>! x' Z7 j# G/ L) K+ r% z, {
#include <linux/kernel.h>
0 l1 u* Z$ `6 H! V7 @9 Y#include <linux/types.h>
% a; T/ ~# c- N% i! l( |#include <linux/gpio.h>
; H4 O0 r- L- Y& l( w; o L#include <linux/leds.h>& A# N8 Q% x5 q e, ]2 L0 g
#include <linux/platform_device.h> w8 n5 N- T" A" [) v6 M1 i
) w# ` w0 v$ ?+ H2 w8 o#include <asm/mach-types.h>" j% o# v* l) K
#include <asm/mach/arch.h>
! N2 x0 u% {7 X#include <mach/da8xx.h>
1 t; l/ O1 H( g/ m#include <mach/mux.h>
2 u* s3 H; W! A& I
5 s g P3 Z4 F3 D#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 V+ R1 N. f/ c7 c: F+ W$ s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, j; f$ h) \' V3 \8 v#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ P0 o0 G6 \5 h#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 Y' y. u! i$ q0 U- [7 d
- G# z. q$ B" ^( B* g4 X* S/* assign the tl som board LED-GPIOs*/; m3 ?) T8 z# R0 O! f9 T
static const short da850_evm_tl_user_led_pins[] = {' o. b! _+ T5 k3 y2 J* C0 ]( D+ W; ?
/* These pins are definition at <mach/mux.h> file */: N4 z! t: I. ?) Z: j' q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 D' ~& j. f( H. E* |
-17 A: \2 C; F7 T/ L* a/ [. {' l6 a
};8 A, C5 I; X }. X
C% n- }- Y7 I2 h$ R' kstatic struct gpio_led da850_evm_tl_leds[] = {; T! Z# |7 C/ _2 Z2 ~) U: ~! D
{
/ y7 s9 u' {3 z3 `! U .active_low = 0,
r1 ^4 X0 l$ X- |3 K% B3 ] .gpio = DA850_USER_LED0,
6 l$ L$ o& q" a6 B .name = "user_led0",
( h3 G: i# k& y' o. ~& H .default_trigger = "default-on",
1 U. F& Z% z, Z! h6 a },
* K4 x0 `& l" X" h: q {% H" w1 m ^% l( l! M
.active_low = 0,
* S6 |' v7 o8 L# W0 F% F8 R$ v .gpio = DA850_USER_LED1,! t; `0 b: {$ L8 h0 F) s8 Q
.name = "user_led1",
$ K* {! `' p& ~; \4 P* {4 j9 g .default_trigger = "default-on",
. S! B: U* z& Z$ G+ W: t },
, a9 i* h8 L8 g$ @: m {% ]( A; f1 N4 x
.active_low = 0,* D6 r) u4 W9 u) ?) E7 u, {; D
.gpio = DA850_USER_LED2,* d$ ^/ D$ r! X( ]
.name = "user_led2",+ U5 j, B, s! |/ ^/ m! }% W
.default_trigger = "default-on",6 h- j1 {7 c9 r, y- n
},
: f( n0 @* {0 X9 b$ w7 i0 p: Q8 d {
% S1 s( i* b H* L7 j .active_low = 0,
' Q( U+ ~% t1 ?; g! z7 ~0 N5 ~4 w .gpio = DA850_USER_LED3,' X2 U, F( S% |! M& m f d0 a( U
.name = "user_led3",# S. n* c; R7 t" _
.default_trigger = "default-on",8 {5 E0 l+ s8 ~! A- w
},
* R7 i o1 u7 w. v};* W: o; o+ \4 D
+ p4 B1 U$ C0 V8 b& d: |% L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! m" x8 s# b* N0 g( ?9 D7 c
.leds = da850_evm_tl_leds,0 h2 z/ P( F( Q4 c9 H* E
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),) F/ ^1 m. G0 e: M* o& i
};
V. ?2 y: c- W; |' F! i0 |! @& A- S. k
static void led_dev_release(struct device *dev)7 T: ]$ H; v( e2 E$ r. i% Q/ l1 g4 M
{
0 |* ]% c, P4 P1 y! v1 g};
, Z2 Z6 z, ]& B' o) y% E2 `3 g
" I: a1 \5 e- w( Y9 ystatic struct platform_device da850_evm_tl_leds_device = {6 q7 G# \+ r+ v( z( `" o S' B
.name = "leds-gpio",: }1 I; |9 Q7 T6 p
.id = 1,
& c8 D- x- c5 D! b .dev = {( l7 x4 r, |/ C# e) v; }
.platform_data = &da850_evm_tl_leds_pdata,0 k$ s" h0 D) H( z+ r
.release = led_dev_release,
5 {, {, q; g! x/ Q }
, n* o3 t( Y; O6 K+ f};8 m6 X( P# ~4 C8 r p( M
. ~- z- t- e1 z6 \; @* w9 U. }static int __init led_platform_init(void), g! E7 F% ]7 b2 a& P" x$ _* d
{
& f1 ~5 t0 } W3 r1 t$ {' ?, x$ H int ret;$ G. U% j! G0 T! b i. l* z& P
#if 00 }( N5 q* W* @, A
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 f; G7 u! D# {+ z
if (ret)
! V) U7 u: H% x, \ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( F2 i, y9 s0 O( B
"%d\n", ret);
/ G- f1 r. N4 B% M; m' f2 j* r#endif. M$ R2 A r3 m$ c( W& o$ m0 ~& l! j
ret = platform_device_register(&da850_evm_tl_leds_device);
1 ?8 V5 z& _, q1 A if (ret)8 [7 L8 M. Y# I5 v f
pr_warning("Could not register som GPIO expander LEDS");
0 ?0 M& e( k. y( `( f" J* s0 F else
) D% Z6 I$ s1 ~5 Q- e0 p( M8 K printk(KERN_INFO "LED register sucessful!\n");
% ~' f& X0 S) D0 J- k% a, q1 M) g; b, K
return ret;
% z2 H1 J5 [7 R. {6 l}5 q1 F* K2 C; s% S8 }, }: w
+ `, g0 |% Y) I/ n: F* Vstatic void __exit led_platform_exit(void)
+ P& g) T! G# Y6 s3 O# q; W: o{) _ k% ?& n: `/ ]; Q, w
platform_device_unregister(&da850_evm_tl_leds_device);
$ X5 |) s% b8 V( Y. |( t* Z5 D2 ~: a* B5 b/ Q. p: b
printk(KERN_INFO "LED unregister!\n");
1 b3 j. G7 {1 h. d9 [* m" `$ j}$ h/ G6 G: U9 @0 w* h3 x& H
. A. |2 T6 d; ]7 y! w# y) Y5 `5 Xmodule_init(led_platform_init);
$ B9 v" e5 i$ o: g8 T; M zmodule_exit(led_platform_exit);
. n- K( {1 ^! o0 F* X' d
4 B4 _* u8 ?- h0 b0 B) iMODULE_DESCRIPTION("Led platform driver");9 J5 }6 W C+ U l+ b
MODULE_AUTHOR("Tronlong");
8 |3 ]9 F% b2 k( l& x9 sMODULE_LICENSE("GPL");% _+ }: d( H$ \/ m/ o% O
$ q) ^2 {# ~# M; S
|
|