|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ u4 j2 R1 s/ k( `( L, q
#include <linux/init.h>; o! a. _: C+ g% ~8 A4 }, V
#include <linux/module.h>3 m* R4 k0 t; _' x8 A: w
#include <linux/kernel.h>* i; a5 k; m8 D# v
#include <linux/types.h>
% u: Z$ R6 i3 j* Z7 h, I( V#include <linux/gpio.h>3 ]& [, M- B: a/ P' D
#include <linux/leds.h>2 b' O7 T ?# D3 H
#include <linux/platform_device.h>
; Z8 d! ~ T8 B( i
! G! } w( g+ a$ Y* A, W#include <asm/mach-types.h>
: ]5 v3 n9 w [! E#include <asm/mach/arch.h>2 N2 K, z: L! {, G. e
#include <mach/da8xx.h># L8 M4 T7 y5 `9 \8 a0 Z3 _
#include <mach/mux.h># H4 y- L& l }. N" B
" h: v; ^, b6 V( I& K5 q' O3 e1 n
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 \8 d8 h5 w ]1 @; a& u2 g
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 T1 J6 m, C$ M7 c$ |! u; W' d
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* |; H* b* X' S" S; [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ N% H. s$ Z5 R% b$ j# O% Q g+ }* M
/* assign the tl som board LED-GPIOs*/
4 n5 ^! O) }( U0 X, istatic const short da850_evm_tl_user_led_pins[] = {
* F- S# J/ j9 S3 x2 U9 {/ v1 B8 E /* These pins are definition at <mach/mux.h> file */ K3 j- K& s k- ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! D# b0 C+ K, H& M0 @" q# W0 L
-1
3 M6 E1 J% b) @2 f8 m1 v};' k1 @4 l: N) F7 K. F
' {6 N G1 v+ L: G! o6 j3 R
static struct gpio_led da850_evm_tl_leds[] = {
. R, S% i7 |- Q- H% o% Y {3 I8 @4 K2 v6 z, @4 q9 T
.active_low = 0,
$ o0 w4 t( C5 v- {/ T5 E, d .gpio = DA850_USER_LED0,+ G/ f: ~, P" b/ v
.name = "user_led0",
1 q `' K& S4 S/ G .default_trigger = "default-on", }4 m) a' X7 Y- q0 c1 w3 g
},2 N' `6 d' m$ D
{0 e- v3 J' o4 S, h6 F% G: B
.active_low = 0,7 `0 l9 i+ ?* j' V+ D/ x
.gpio = DA850_USER_LED1,& _; L- M) f! {9 I! V
.name = "user_led1",6 y8 E {0 @: K4 d# B
.default_trigger = "default-on",
& m# W. r2 S- x [6 s },
, D; M$ ?* [, F1 }) E {4 y. b `4 M2 F, @0 z
.active_low = 0,
% ~% O6 ^& D$ H* x) c$ z .gpio = DA850_USER_LED2,$ l X. {% s2 k% g, \6 O( M/ k
.name = "user_led2",/ ?8 F6 ?7 {# X4 D7 ^
.default_trigger = "default-on",- ~, i3 B, x3 j `- ~; j2 p
},
+ E! R% a2 g6 l8 A, y* {' ` {
% e+ o( N5 b4 C) z4 D .active_low = 0,+ R- |) m! w: {7 f/ l% `5 {) V: Y
.gpio = DA850_USER_LED3,
6 P& m' E& y& A0 h8 Z$ L, [$ p: p .name = "user_led3",! Y; S/ e& H2 B$ K% t; m8 H
.default_trigger = "default-on",
, Z- C/ b! q/ I( A+ Y# T },
1 O0 @+ U( Z& V) G) s};
/ R2 Y0 ^2 s8 x$ G8 f. d
* ?) f D! L; D( C6 q5 Nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 Y3 w3 I, v9 M$ P' m+ {
.leds = da850_evm_tl_leds,2 [: \- q! `& e" B9 X% X6 v' z8 x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ R' E V" \) J1 e0 n
};7 @" N, g. p3 H- U( B' G
8 G( S0 V5 }+ ]static void led_dev_release(struct device *dev)
9 s7 I4 A0 \- u$ I{
; `6 |2 r& j: }" i/ i};5 o/ @! A. L3 b. W8 t( Y6 [6 F: z
8 Y) `( z4 J7 R' }! `) estatic struct platform_device da850_evm_tl_leds_device = {5 l& o" S+ A. M8 f
.name = "leds-gpio",4 s( r& K2 n9 Z3 n& o- i; K( E
.id = 1,
" o2 K u* h. j# ~ .dev = {
1 v9 X9 \% z. W! D, ? .platform_data = &da850_evm_tl_leds_pdata,# d( \8 \) J! l) ~- S8 L4 i
.release = led_dev_release," J; c$ Z; a7 W3 M
}
& F) T- G- t2 g! X};1 N1 A0 |' d$ d
/ y4 S, i9 C6 I( Nstatic int __init led_platform_init(void)
9 b& ]" e0 H$ x3 I7 |9 B{6 t( I. O2 A; g1 [8 C
int ret;, R5 K8 ]0 Y6 v ?' B$ a
#if 00 J9 ?$ [( ^1 s) G: C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" w: }' Y9 x. X1 ?$ @8 O3 a% C if (ret)" y" m0 `, h# {* G) U4 l/ v
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* j) N: N" E4 _% _3 K$ `" l/ G
"%d\n", ret);9 F6 _2 f) I8 x. ~! K
#endif4 |. w; C" }1 S- W
ret = platform_device_register(&da850_evm_tl_leds_device);9 d# I6 n) O, F0 T& w
if (ret)
' F, T9 j: C, z# R& N" c; J pr_warning("Could not register som GPIO expander LEDS");% ^: N7 c6 u+ ~
else
# G% v3 d7 m- b8 q4 @) Z( } printk(KERN_INFO "LED register sucessful!\n");
1 X0 q' P/ K3 J; \5 n3 u& L& Q" z# j* b, x- |
return ret;
2 t- g3 u. l; Y( \* u/ G}
0 t/ V. X1 h4 P0 |/ Y; s! h! _' M5 J: P- R$ p) f: G+ b
static void __exit led_platform_exit(void)/ L. i3 Y* C9 h: K, O3 q! S
{
( U2 ~7 P" }6 y" q% @ platform_device_unregister(&da850_evm_tl_leds_device);/ I4 q, O/ I7 @& j$ T
" X' M2 H& w4 E printk(KERN_INFO "LED unregister!\n");
9 G! y: p0 J" H, Q3 v1 z& F4 [0 i}
) a$ \) l9 f( j4 {+ z6 |( ^( ~: V. N8 J3 M9 p& l
module_init(led_platform_init);
N4 e7 ~4 j( @% ]8 smodule_exit(led_platform_exit);
# j/ b" H0 P( W2 q
1 M. e: `8 r. f7 FMODULE_DESCRIPTION("Led platform driver");
3 ?. v+ Y) |, {3 _: h1 l# EMODULE_AUTHOR("Tronlong");
. G" S3 A+ s. O$ ~( VMODULE_LICENSE("GPL");+ ~ i+ D, X3 y/ c. L
" x# @. n* e; \$ ?. w1 p7 z
|
|