|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ i( [' u* q1 C9 i, L#include <linux/init.h>. _9 q! Z' z1 y* n; G
#include <linux/module.h>
8 W# N0 G; Q8 a$ t/ R3 O* K#include <linux/kernel.h>
9 C: C. c2 l. y' W9 U5 y: B#include <linux/types.h>
: O0 d6 P" e6 N# ^- J$ T9 F! y#include <linux/gpio.h>
; l) X/ c( ^3 @8 x3 D5 o6 q2 ?' {$ n#include <linux/leds.h>
1 P' U5 S" d- h( k \#include <linux/platform_device.h>
% o# w8 B4 g# C/ ]. \: x4 ^8 i0 I6 y$ R4 l; H
#include <asm/mach-types.h>
& ]: V- W3 R* G! }#include <asm/mach/arch.h>! a2 ~9 \4 ]* w2 h* T8 k2 Z
#include <mach/da8xx.h>
* {! y& m- a. m: J* _7 P#include <mach/mux.h>
2 D' _7 s/ L, D4 c; l: C/ Q# e+ @: `7 U& |# z6 M/ ^0 U7 R* k+ ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# b* G, }# u% V#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, M: s/ R: [* L; e* [#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( T$ _+ ~4 K/ t7 V) k5 ]8 t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), {+ i( h( ?9 f( x$ \
i; a$ m: l/ L% P/ f! j$ c/ [
/* assign the tl som board LED-GPIOs*/8 k+ ]% G9 Z3 Q$ q6 r
static const short da850_evm_tl_user_led_pins[] = {
3 \- L. U' }) z# h/ b5 L/ q /* These pins are definition at <mach/mux.h> file */7 V- F" r) e+ o. B+ F* E3 a+ ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- w9 m5 V9 Q4 D. v- {
-1
1 I5 _ M0 J. O0 h, j};
, n4 U2 ~$ Z0 [' z. V P" R; X2 {- `( \
static struct gpio_led da850_evm_tl_leds[] = {% h$ q1 P, d* s0 y- ~+ B( G
{
8 Q' R% G, ]! j3 I' h5 i% s# `' J- ? .active_low = 0,* h' r, ^9 |7 g
.gpio = DA850_USER_LED0,) ]5 G1 n) T0 Z a
.name = "user_led0",
0 p% @ g( w4 ?9 ^) H' q! | .default_trigger = "default-on",' L9 _$ M0 M0 @
},
6 Q# ?8 l& v' Y6 `) L9 h! E {
. t* ^7 h: b8 D6 H .active_low = 0,& F, d* z5 Q1 t- T9 ?
.gpio = DA850_USER_LED1,
' M* v! i5 N2 r7 S4 Y .name = "user_led1",% r7 V9 F2 v+ J. a
.default_trigger = "default-on",
8 f; h' B$ I" J1 ]6 y },) v% K8 N$ Z; X$ k) {, ?
{
5 G# \( V. m7 A) J9 k* R .active_low = 0,+ b, P+ R; t+ w
.gpio = DA850_USER_LED2,
j' U& @+ ]: q# F3 [, f .name = "user_led2",) q9 M) |& [2 `& A U9 D
.default_trigger = "default-on",
1 u* ]( v' P# k9 x% o. z: Q },. E' c I# |# {. B# l% N7 e0 n# O, i
{7 ?. }$ [1 ], C5 O7 H7 t# V
.active_low = 0,2 q* o3 C& W* |. v) L
.gpio = DA850_USER_LED3,' B! P0 f. Q+ h
.name = "user_led3",8 M5 f3 Q& i% o& \) F
.default_trigger = "default-on",
$ h- I4 M' |& z) R' k },
L& N: q$ s5 }/ Z* g. G0 j};+ z* y7 ^# V4 z: a* h; s0 e
9 s$ g. }: h; V3 S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 C9 z) w: v& X. h! d
.leds = da850_evm_tl_leds, |- x# _0 T: U! r2 e6 \4 K0 p
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 f* e! q8 u+ l' @, R& N. b4 b};
( E* g" ^- ]" S3 ?) V/ |7 } y6 A& g8 I& Q' ?- B% D/ U J
static void led_dev_release(struct device *dev)7 K" k$ d3 E, s9 p
{
; h% A' u5 U' b1 }; {( C% U, a9 S};
. ?6 o6 V1 [$ e0 Q( h: f+ c, N" y; I6 z
static struct platform_device da850_evm_tl_leds_device = {
" _1 `$ v8 j* o! ` v% x .name = "leds-gpio", e) |4 }: I3 s, e
.id = 1,
# o; t& e5 ?0 J' {* U .dev = {
- c/ A* C# }! N" ?( g .platform_data = &da850_evm_tl_leds_pdata,
; W5 ~' m0 S& e, Q; w' G .release = led_dev_release,* z% i$ Z7 {: m( r5 k- S
}/ R4 \: @ R8 M, G" A$ z: z
};
3 I3 D. u, D7 H! O" D. a5 z6 l7 f' `$ E; |- Y- z
static int __init led_platform_init(void)" N7 e c6 S3 w# Q. @# {; i
{7 u. O" O5 f$ P# N3 }
int ret;- X8 I; Y% B. _" `: `% Q
#if 0
" k; H& @4 Y( ^. g/ \ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* }/ c8 ^- W$ e- s4 O+ e; T
if (ret)' `' \: N( B. U% f& t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) H; o3 ^% a$ b6 O. H9 k2 s& m "%d\n", ret);
8 H5 g2 W- M; @' B, \) w. _#endif y$ u; V" v4 e! B2 u
ret = platform_device_register(&da850_evm_tl_leds_device);" ^5 E' _) Q# ~' o. k2 G2 e/ m
if (ret)
! }8 u5 y7 b2 s3 d( y: f pr_warning("Could not register som GPIO expander LEDS");5 C" h' |( `# j; Q1 w: G% @7 h' b* _* l
else
0 q. L- X: A6 s: _0 u, V printk(KERN_INFO "LED register sucessful!\n");2 h. o# F1 s. P. e! o
& A/ b% a3 h0 r: y
return ret;
$ I* o4 o% F; k% p6 [4 u7 K}
; S2 G+ ?7 N$ _8 n* d8 A, H3 z4 |" t A" [4 |$ ~! B G, t
static void __exit led_platform_exit(void)
6 D3 w8 z) ~. o/ R6 M{
7 z( X/ U" |6 E4 K platform_device_unregister(&da850_evm_tl_leds_device);% r) j" \0 T2 u: D
) F. g& u2 d1 ~) `. q9 S printk(KERN_INFO "LED unregister!\n");
8 S0 Q4 f2 M5 J z, M! |}
. t( T: a' G' p; |" `3 e2 Z4 H9 Q& J0 z# I# d% \
module_init(led_platform_init);
1 J" ]- u5 H2 @: |$ Cmodule_exit(led_platform_exit);
5 _& |. m& v* V
& \5 X# q. c1 w& GMODULE_DESCRIPTION("Led platform driver"); u( U) H9 a$ l- i" B
MODULE_AUTHOR("Tronlong");
0 R. s$ R; ~. b) bMODULE_LICENSE("GPL");. W9 q) @1 `' l Q+ ~+ _
/ v. M( l( {. T5 K6 U6 ~# T |
|