|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 k6 V. D: ^! K#include <linux/init.h>9 q, t! R: R) E L2 H& Q/ W2 \$ ]
#include <linux/module.h>8 V9 r* J* d, F' ~' u
#include <linux/kernel.h>
7 E( c2 x% p1 n$ d# q" Q3 E: }#include <linux/types.h>4 [& e4 J4 q. g; `" ~. J
#include <linux/gpio.h>
# H# t" Q! O: V( t+ j#include <linux/leds.h>$ D! {+ P# c6 t+ @* x
#include <linux/platform_device.h>
3 w( b6 l/ R S; z+ |9 Y
2 Z/ u2 Y) T2 ~# S4 P( V* _#include <asm/mach-types.h>
1 Q/ Q y* K+ x; `2 O( i#include <asm/mach/arch.h>5 ?1 {2 g# H3 E- C) g# _2 a; _% [- s C
#include <mach/da8xx.h>
7 Q; e& N* d$ ~6 o#include <mach/mux.h>
6 U& q6 b9 k5 l# ?1 |* {0 K0 {; N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" v) W; q* u1 E6 S: v' p8 D3 @
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 B& k0 }, N4 [; P7 s
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" U/ t/ B$ J5 C4 \# Y$ z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 v7 @1 T' z6 X- g& h% i, l3 Y
) S$ Q# J! q* w" Q' B
/* assign the tl som board LED-GPIOs*/
3 [) D( e9 ^' S6 s' ^& s+ T% Rstatic const short da850_evm_tl_user_led_pins[] = {
" B% P+ M( S# H2 y; f' _, {) n /* These pins are definition at <mach/mux.h> file */
" @6 Y; y$ Z* x4 _/ d* ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ c$ T8 N" u' @% N6 Y" r& ]7 X -1: F1 o+ d z* Q4 {8 w M, m* ~
};
8 z& k8 E/ [* I4 `5 D
1 l1 M0 S! X) O5 E# H" vstatic struct gpio_led da850_evm_tl_leds[] = {
* F6 R8 F5 ^: t, y# v! M9 F: P {
' e) W& s( U K .active_low = 0,' A6 o% @6 A- z% D+ y0 X" q8 }
.gpio = DA850_USER_LED0,9 G+ @# A. {4 [4 X( ~2 F3 j# K
.name = "user_led0", } s7 U8 R4 O3 U9 F2 w$ y7 d
.default_trigger = "default-on",! e2 W! u+ e* |* C0 P" S
},9 ~2 x8 E4 n* X3 s4 v; w. L0 g
{! @. N& m2 N* }6 `6 H0 s1 Y
.active_low = 0,
9 y4 Q+ }$ g$ g* c- D2 J; G .gpio = DA850_USER_LED1,; c5 ?. ]4 {% p/ x
.name = "user_led1",
3 k# P( c! V$ t% c, z .default_trigger = "default-on",4 @% z$ i' ?& W% ?" m
},& S0 U) Q$ U0 L; T9 v, r
{
2 V+ j" c; E' O0 u0 }/ S+ g1 } .active_low = 0,
! K, L- Q5 _: C% G6 t! o .gpio = DA850_USER_LED2,& \- f! l# I( L) f
.name = "user_led2",1 [( u6 e+ c: A- _6 L* S# h3 B
.default_trigger = "default-on",/ u0 ? ~0 ^# a
},
! j5 Y9 T1 ^; w% ^3 T0 w. C! Q n {
+ N8 @$ x' L" @' c3 j, D4 s ^ .active_low = 0,# t$ o4 `9 C2 Q2 E" ^. `% p7 k' O
.gpio = DA850_USER_LED3,5 s3 S* C! L# F4 n; H6 v5 ~
.name = "user_led3"," r0 K- k1 Q7 D4 X3 Y, Q6 E
.default_trigger = "default-on",/ Y) \7 k. @+ ~7 V1 g% J# x4 y( h
},
( A* | [9 S2 |4 b/ W};
% C; B0 Z- ^- H9 K9 j* z6 K3 U {5 q, t1 y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 E2 c3 l" v# h; T3 Z+ N& ?
.leds = da850_evm_tl_leds,4 r G2 V+ u' ^+ v$ ~8 s' V: R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- y! D' d2 u$ y9 M};) D& j. B R0 D' \8 Y
$ b. h3 H: L9 o. m) l& }
static void led_dev_release(struct device *dev)
f4 S, r' B) g6 h{
5 U8 U$ ]# |0 x};$ q' \ W% P# c+ J( p
& D0 z0 J, k' @; I2 _# J
static struct platform_device da850_evm_tl_leds_device = {0 M% ~+ i6 K0 r0 p$ {$ U& X4 C
.name = "leds-gpio"," l( E" |$ |6 [
.id = 1,9 _6 t) ^+ N' w; M: R4 Z6 ]
.dev = {
7 ?* z( x- ?$ O .platform_data = &da850_evm_tl_leds_pdata,
) @3 z. t: z" e$ w3 v# {1 D; i .release = led_dev_release,$ |8 p3 h0 D7 R8 T
}' a; a- s+ y2 X
};
/ D5 U1 x- b: F
* Y2 o& Z) t: t6 h+ cstatic int __init led_platform_init(void)3 t+ ^( k2 V. o, Q; U1 k
{
9 z8 a4 B. V8 L G6 } int ret;
5 a7 f$ V( c) |& c6 j; V#if 0. w' U a% m/ j4 D* C0 V$ E
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: a J4 ]! }5 M+ c- K- D
if (ret), J9 ?4 l& X( B: O0 [/ J4 d* S" `
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* }0 k* y) p4 z* e5 Y9 ?
"%d\n", ret); U% [( [9 S' U) ?
#endif+ V2 T$ M& n, S; F( J0 H* `7 L" y
ret = platform_device_register(&da850_evm_tl_leds_device);
8 Z( k5 E; g! i7 _6 I if (ret)
: u0 Y3 s6 G+ R% K pr_warning("Could not register som GPIO expander LEDS");
( d5 f" i/ M6 ]$ E: h7 O0 H& L else
9 c- `: Z+ K5 c$ B( s printk(KERN_INFO "LED register sucessful!\n");
# g% |, Y8 ~; ^6 V& ]' m+ S9 R* L8 w* M& m8 o
return ret;
/ R3 T' d5 P5 [5 G& }( \}
. N; @* S: c5 `! g H: N8 s, ^- ^& Q- y
static void __exit led_platform_exit(void)
: z( M; [3 k; w3 Z' z. b1 r V{
* F/ Z& L# E" G2 M9 a% a platform_device_unregister(&da850_evm_tl_leds_device);) i' X* u b5 P, R" I' x
2 w9 D2 E. `" A. O6 r
printk(KERN_INFO "LED unregister!\n");! Q* i2 R% e: G
}, z5 s! v' D+ l! P/ d
* T$ D' `. p9 H% x5 \6 ymodule_init(led_platform_init);8 `; v+ D' z* \ s, ~
module_exit(led_platform_exit);
7 ?' x+ w: t/ ]" I2 M. d; G7 P) t! z6 i8 L7 Q% o
MODULE_DESCRIPTION("Led platform driver");* A3 r. T z( |4 S
MODULE_AUTHOR("Tronlong");
* s6 S i3 Y0 l7 I( W' aMODULE_LICENSE("GPL");
- w5 C1 B e2 e6 h+ N
; L. K: s5 |) X3 {5 l5 E |
|