|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' Z& A4 N) m: O' F, p#include <linux/init.h>
7 ^0 V; @, O5 V* v#include <linux/module.h># I' U: z, Z3 a; S, v
#include <linux/kernel.h>1 ?1 `4 G, G6 L1 z
#include <linux/types.h>
7 D3 k, W7 g2 W- \9 T) D#include <linux/gpio.h>
" \9 q; U: J9 D8 U4 P( h#include <linux/leds.h>* K9 d$ }3 k2 ^1 O) G% z* a
#include <linux/platform_device.h>
% X. Z+ E+ H l5 ^; F: \* A N. O2 L& f" h
#include <asm/mach-types.h>
- _3 b& M( G5 C4 b" V% N#include <asm/mach/arch.h>
) G/ Q2 r9 o9 j& h#include <mach/da8xx.h>1 D# D* c/ ^" E: X0 T5 n
#include <mach/mux.h>
& i* n2 `& W& T& u6 E! v# W6 v8 x6 e* R" a! I) D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 k$ H! r7 C" D, n+ j' v& E
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; M% V0 o/ O- L, h; h#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ s" [: G" J. _9 l; }; G
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 g; }! x: A$ t( w+ @1 I- B0 t, O" v1 \' l% U/ E
/* assign the tl som board LED-GPIOs*/
5 r3 p8 {) }8 o& o3 o$ Astatic const short da850_evm_tl_user_led_pins[] = {
7 k1 E. C v9 d2 a$ A% _ /* These pins are definition at <mach/mux.h> file */
) V ~# L& L0 Q# {% _ a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& q. c. h7 R% ?: |5 v0 w* |0 B -1 K# c: _) z8 V2 j
};% h9 G! ]) ~: x, z/ d
+ e, J1 D& g# m, n4 p ~1 Y$ z7 D$ e
static struct gpio_led da850_evm_tl_leds[] = {* u. S( s! t7 z2 \
{
4 [2 m9 n) U, K .active_low = 0,
3 ^) ?% B$ r! B0 n .gpio = DA850_USER_LED0,1 e( s% z; _1 H* G
.name = "user_led0",; F8 u- G% ]+ n* {8 U1 ^
.default_trigger = "default-on",: Q% U) D/ F; ^7 s {- F# E
},+ ?$ O* f2 l; x5 m
{& \3 M; n, k0 A
.active_low = 0,7 ?) U( h& D* c" C
.gpio = DA850_USER_LED1,3 T% S2 Y, m" ]8 d( H% [$ Y, L" v
.name = "user_led1",1 Q# u# p, c* M1 }: i5 Q9 H
.default_trigger = "default-on",
, p7 m: D* [- k" o* l+ x },2 E/ T6 y6 W4 E' I, f1 @
{4 ?0 t9 A8 ]: j* j3 _7 F, i* y' n
.active_low = 0,
+ e) V2 z* o, D T .gpio = DA850_USER_LED2,8 ?, u% Q, n* s3 |' o; o
.name = "user_led2",
) W8 v3 b* d+ e; M2 }5 T .default_trigger = "default-on",
" f9 d; M! Q% T+ I },
+ p3 S) Z& L' m( U6 l {* N) V j# y- Q- E+ ^. r
.active_low = 0,
- F1 U5 V5 f9 R* l7 ` .gpio = DA850_USER_LED3,
, l% R- ?( g L' j3 ?, j .name = "user_led3",
! ]) A/ l8 q4 U8 I9 Z* A6 m .default_trigger = "default-on",
6 _6 a9 l+ z6 k C% p },: m6 ?; x5 B& k, R5 E+ f1 c% e, @9 }
};
1 _* g4 L& n% V" ^5 k7 U7 _9 a8 w0 C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 S" Q- C$ p% x* n' ^ .leds = da850_evm_tl_leds,
6 \7 T- D" w9 Y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* K& u: v/ ]/ v) U% x2 |5 r
};
" F9 p3 O, Z" k' }2 q# l$ N3 G0 A
static void led_dev_release(struct device *dev)7 E) J# L& b; h- d$ Q
{1 A0 |. F) ~5 v `
}; S2 z8 v2 m. N$ P" V4 h
0 T+ O) _( `$ Q( q% h& Tstatic struct platform_device da850_evm_tl_leds_device = {
/ r& |6 h* T, ?+ A% | .name = "leds-gpio",
& g4 Q4 [ B1 V2 R+ n* t0 ? .id = 1,
, Q* H8 S! ~- D .dev = {" j7 Y* A; c3 o9 N
.platform_data = &da850_evm_tl_leds_pdata,
% C4 k0 I! X% T; F .release = led_dev_release,
4 S6 \$ w8 V8 F2 y }1 S; G4 M- i8 {: O8 }2 F/ A8 I
};! F9 {& ~8 U ~& s( p; r- y
, z# s5 J4 E! q! C. O
static int __init led_platform_init(void)
$ Z W9 b6 ]" S/ q( }1 r; k& n& V{4 }$ u+ r; R0 }3 f
int ret;
# }2 x) O. U9 Z' s# y* Z+ @2 P' E#if 0
* p' [" t9 h5 N* I, E( z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; ?6 \4 m. m" b* z, F
if (ret)( G( W7 b2 O8 X ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ c& j0 m7 `: _2 b8 _; b+ J$ l "%d\n", ret);* c. S# e5 I0 [# _/ h
#endif% T# J2 o! L' W+ T+ `
ret = platform_device_register(&da850_evm_tl_leds_device);7 C/ G$ f" j- `3 d3 h+ C8 F
if (ret)
- f2 O2 Y4 T% g0 f( I# i9 D) R1 F pr_warning("Could not register som GPIO expander LEDS");- @: M/ [, ~' m2 g% B# r
else
& n" F- |5 A0 ^% @$ N printk(KERN_INFO "LED register sucessful!\n");
( Z5 {9 c: X( Q6 T F4 f
& I/ C" y, A) X: E; F return ret;+ J0 l0 O+ e3 Z! p, t9 C8 h9 \
}
) {/ S. A9 [/ r5 Y: N% p" U6 c1 Z0 H. ]7 i5 \
static void __exit led_platform_exit(void)" d: ], X, }& _- k* E6 m$ H
{" ^% ?! @; x9 J
platform_device_unregister(&da850_evm_tl_leds_device);
4 \4 T- p( V, \& w O
5 v' i* R' c) ?: S6 w$ j7 y) h2 ?- y printk(KERN_INFO "LED unregister!\n");
' _% G$ v$ n) [% Q5 \# f/ W( M! M}' ]0 L% V1 _4 ]4 s0 Y7 k
7 d' F) p7 j) ] F
module_init(led_platform_init);7 q" N$ n# D! y' T+ B
module_exit(led_platform_exit);& s" ` ?/ L# c) _
; i) Z: k$ }7 ]% m5 g$ l Q8 h) _; M
MODULE_DESCRIPTION("Led platform driver");
, N6 C# e- N5 \8 Q- i; LMODULE_AUTHOR("Tronlong");+ K4 j' W- ~+ U8 V5 ?! G- R
MODULE_LICENSE("GPL");
# e O/ V) r/ s! ]1 N6 y. E5 |
$ s. i$ X& M: J u% s2 x |
|