|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; H' e) _2 F% t/ S) }" t* y: f
#include <linux/init.h>2 B$ C9 [, ~9 E
#include <linux/module.h>1 B* T: h7 \7 F% b9 c. L
#include <linux/kernel.h>. q- G6 v9 |5 v4 m3 O& G3 |0 p1 l
#include <linux/types.h>5 z7 x( r( f( P+ t) ]
#include <linux/gpio.h>. H6 o9 c1 ?$ j2 W2 R
#include <linux/leds.h>& ~* x% N: n1 a+ W3 J2 v+ O
#include <linux/platform_device.h>
[8 ^. a" T1 Y! f$ F0 j5 f
: s" [) F, `' M# F5 e5 M) p#include <asm/mach-types.h>
6 e2 j4 A& P( N- i3 u P#include <asm/mach/arch.h>2 @+ \0 u5 {3 R1 e6 u" L
#include <mach/da8xx.h>
# F9 i. \) H/ s: `* l2 u7 b#include <mach/mux.h>
) q' R+ F8 Z3 Q1 q" `0 ~3 v7 A7 y* I, ~5 s r6 @1 B2 j" V
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: C0 t9 e/ c/ d! X. N* G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 T/ A, H3 o! x0 d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- f3 r1 g: _5 N5 i. m$ j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, S" D$ [8 B. X$ \' L: \2 x, \3 I5 G% o; q2 u4 R4 U: w* f
/* assign the tl som board LED-GPIOs*/9 H% B, W4 a/ i9 W0 F# o' b* M
static const short da850_evm_tl_user_led_pins[] = {0 e* }% b1 n& Q: B, {$ d
/* These pins are definition at <mach/mux.h> file */
8 a8 z; x5 }" Y) a Z3 u3 h DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 X M0 V& s& D, L0 R -1) z2 M' c; d6 L9 P5 V8 x- [* C
};. C. W4 }& _: d, f. H! Z4 z
$ _$ S. K+ ]- c$ Ostatic struct gpio_led da850_evm_tl_leds[] = {3 |' K* h0 E* H. z
{
% h# H7 r- k6 r1 s! _) K+ M .active_low = 0,
& b$ q- C( K2 r, d0 z9 f7 ?$ o! t& q .gpio = DA850_USER_LED0,
/ i0 Q- s0 T" P1 J! a+ F0 ?8 h .name = "user_led0",% j* R" i8 A9 [5 p3 p
.default_trigger = "default-on",
* F& x# ?. f0 c. o Z },
& S: ?, u9 h- ~- l+ t) o3 W1 V7 N {
( ~( `. ], s6 |+ w( J .active_low = 0,
/ h" ?& g0 w# p; j7 F, ~6 ` .gpio = DA850_USER_LED1,
) q1 D, A3 i C7 @ .name = "user_led1",
: q6 N! u4 q% S .default_trigger = "default-on",& s7 J# X) a# A$ U+ \
},
( [! k7 Y2 n6 X% \" I p* v: w {5 z v7 X% D! g2 A! ]$ ~
.active_low = 0,! [/ Q- v$ Y7 Q% J( A6 l" G
.gpio = DA850_USER_LED2,$ n, p9 C9 w5 L2 U
.name = "user_led2",
! k2 [: i4 H$ B" ?% [5 d) e0 S- c .default_trigger = "default-on"," X3 M- R' [5 b& A7 n7 U
},, j$ n6 s7 ~1 t9 u1 S7 O
{+ E# C- j; T# y" b% z
.active_low = 0,
0 p8 U8 A5 l' V3 i) ]9 x8 e) [# e .gpio = DA850_USER_LED3,9 }4 A/ ?: W$ `& J
.name = "user_led3",
, e3 V) H0 v3 S- o! | .default_trigger = "default-on",
1 u# _3 L! G, J0 Q; E },
: }0 ?% [% P' D3 y; p' v};
0 G: H* I' i# M$ a2 D4 R" W
0 U" t; m& |+ \; R$ U7 J1 T7 T5 Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 x9 b, V# V; M" \ ~7 [ .leds = da850_evm_tl_leds,
8 L1 x5 r' \9 r( J0 B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' c8 {7 B0 P4 w$ P W
};1 [' W, w g9 y7 B/ }! y- p/ g
& G; [( r. s6 _0 Y- o
static void led_dev_release(struct device *dev)+ t+ [9 k' W+ N
{0 S+ J8 S- a5 Z) {# f- `$ k- G4 `# d
};! C. E' z' P8 W( z5 g
2 H; O3 [' \: j0 Ostatic struct platform_device da850_evm_tl_leds_device = {9 z: I! v% F# Z K& g9 K# {
.name = "leds-gpio",) ^6 j4 _$ x9 S7 H1 o. o# k
.id = 1,
: p$ G/ n# ~6 F& M& j .dev = {
. x7 w5 g) m2 n; A; S( |0 ~3 n .platform_data = &da850_evm_tl_leds_pdata,
7 q, s( `% U3 }& t .release = led_dev_release,
) F$ Z* D& ^! C* w- i$ ]. m2 U }- w; [% h, s" [ o# |; @1 Q8 n
};
) I$ m0 {# w( N# }1 u8 q% i, Y% k- v9 x+ J+ A+ E
static int __init led_platform_init(void)! M$ k, e5 F# R8 h+ B ^ s. C% y9 b
{1 |; O7 l3 w8 H! T( l7 F
int ret;8 i# D* _) Y& m R* I/ R- C
#if 0
- s, M8 S' K5 M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 k2 K/ c# ^ g8 O; t& W* } if (ret)
" y' g9 R0 J. M# W2 u pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 c8 a* }. d! F3 B! ?( g "%d\n", ret);
' Q3 e7 o* W4 Z D#endif; z/ [ ~; }: B; l# Y
ret = platform_device_register(&da850_evm_tl_leds_device);6 v( y7 |% C0 {1 P
if (ret)8 |& u/ p: k! D& @. }
pr_warning("Could not register som GPIO expander LEDS");
$ V* p2 B/ y. x) T. X( | else
8 X9 ~* z' S* m1 I( k9 @ printk(KERN_INFO "LED register sucessful!\n");2 ]7 {3 H8 U! i' L% \5 G7 L* D& x! V
9 [4 S# D* b8 \# m
return ret;
( H* X( f. s# U, u7 v}
7 @" o) o6 p J! {8 }( M, O& l
* @4 z$ i) U7 |& w# Xstatic void __exit led_platform_exit(void)
" j. n' ^9 o% @; \ \6 c{! N- r. N1 V6 X" d4 S( R; Q; n+ S$ b
platform_device_unregister(&da850_evm_tl_leds_device);0 R. D: K- Q1 O# Z
; T0 r" n& O! ~: p% O s1 G
printk(KERN_INFO "LED unregister!\n");& a( K' x/ `8 c* `8 c0 z8 o
}
0 T: [$ O8 V( t8 M# G, B i1 Z2 c# v4 K- y
module_init(led_platform_init);8 }. q. @& l" [
module_exit(led_platform_exit);# f& C+ k0 \: F6 U) X1 x
2 W; X; D2 w8 P0 J* S: [5 dMODULE_DESCRIPTION("Led platform driver");( c8 j9 H; c% Z6 X, W* W: E
MODULE_AUTHOR("Tronlong");3 Y) q+ R2 Z a) G
MODULE_LICENSE("GPL");9 k1 P! {7 p( W( w
9 w9 {4 m. Z/ y; n" H8 R
|
|