|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 T! P5 {& ~% X6 W8 J3 R4 x#include <linux/init.h>
t/ K" Z$ V; M( b1 u# j0 [#include <linux/module.h>/ Y+ o! D; G4 r t) @" B) f
#include <linux/kernel.h>
5 z! z) y o- t. h) z#include <linux/types.h>% A9 C. h- Q+ N0 Q+ R3 A
#include <linux/gpio.h>
; B6 A% Z& O1 w# g#include <linux/leds.h>2 R/ d+ i( M, L; h) w# P" N
#include <linux/platform_device.h>; X! }% m# m" }" p) w J5 i0 S
C" E7 G% _1 u/ r" e
#include <asm/mach-types.h>7 ]8 y7 z+ X8 k$ L% w5 U
#include <asm/mach/arch.h>
C0 @1 L6 s+ r$ P: q#include <mach/da8xx.h>
9 h4 L0 P( l3 a W, g# n4 q#include <mach/mux.h>; y# y" \# {$ Z# h, \0 `1 N6 o
+ P) X* Z+ h; P* Q3 d9 i- @8 \3 a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 v/ v7 r) S; D
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 X: Y$ ^4 o" d I R2 C6 @( a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 l+ j1 ~' L) s: f% r% B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. c: I% N, [. y! h& i# H- c! F
~9 u! N6 r& b' N# l4 W% m/* assign the tl som board LED-GPIOs*/: a0 V! I0 P6 f$ O8 W) M
static const short da850_evm_tl_user_led_pins[] = {! y# m* P! s9 n* G% F) M5 H( f
/* These pins are definition at <mach/mux.h> file */
; b; d+ W( A' U$ q3 c DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( i* t1 S; v, f0 ]: s
-1
+ i. r) D) M0 a+ {0 x};
, i) T. r8 M) g' j# [/ R' P
5 C7 I! X# z5 `: p) a- lstatic struct gpio_led da850_evm_tl_leds[] = {
& p' ^+ q# q1 |2 A7 j {5 u7 F; R5 n: |/ f/ @# V% {4 O
.active_low = 0, s. i S. V3 a# N& N) K
.gpio = DA850_USER_LED0,. q h: g4 X8 ^ s: q5 s
.name = "user_led0",: _5 b6 l7 Z# N9 G* P5 I3 X) `
.default_trigger = "default-on",
# U6 O* K( Q& m" [5 z },
/ t, l ~6 B8 E! c) J {
# h- L u% P: a+ k0 _7 n: A .active_low = 0,
7 v( m3 f4 Z( P .gpio = DA850_USER_LED1,
% Z6 y7 V: e- Z2 D8 e L .name = "user_led1",6 r4 {2 p- h4 |: t: I
.default_trigger = "default-on",
" g. x6 ]8 D! F, K& v& B4 E },
" `1 a6 L8 l6 M' P; e* v7 i6 r {
; [: z( E, R1 I' ~ b1 k, ^# A .active_low = 0,# K7 n/ L- P; I% x) G" x: I
.gpio = DA850_USER_LED2,/ g! S% L. u4 T. W3 t7 G& C0 F
.name = "user_led2",
" L8 y7 e2 a/ E: s5 F* S# P% L .default_trigger = "default-on",0 b' u3 Z. J. e
},/ {& A6 b; [# y
{
, \9 d/ C$ ?/ [9 b' ]& P .active_low = 0,/ q4 _3 |$ D4 }2 h5 S* ^2 R
.gpio = DA850_USER_LED3,
2 q. H% c/ _9 Z" o9 a( K .name = "user_led3",
3 ?- E3 Y- H/ N$ Y: ` .default_trigger = "default-on",
. m5 t5 C$ ^' j! J* f9 g5 Z },
7 p- ?& L/ w8 x& V* j};
) c; i/ F6 T3 L' Z c2 P3 K, b% O% J7 l3 U8 S0 j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 j5 S* \* d c4 n' O3 w
.leds = da850_evm_tl_leds,
6 R& g. s* }, w .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
v$ l$ C. F& A& N! J o% |};
; O' w6 f0 l `( u
3 a4 C" b: e* q1 G l& _) ~static void led_dev_release(struct device *dev)) z& k6 ?% d+ e5 f- }" b
{- ^& _# Y$ v7 K, ~ _- x! w
};3 g# \6 e1 z3 }* q* A6 G) S
8 X8 R+ L5 |5 C! [9 n0 B _ V) |
static struct platform_device da850_evm_tl_leds_device = {
9 d6 l+ E9 [6 O .name = "leds-gpio",. H; J! J) m: E8 z/ Y& m/ L
.id = 1,0 n9 X9 R6 o, h2 e3 b
.dev = {
, r: Q$ [, i3 v: b .platform_data = &da850_evm_tl_leds_pdata,
9 _) n9 i# T8 r: ^! l .release = led_dev_release,8 c2 A9 _, X' v+ X9 S
}) U4 s- `# L8 ?* [7 ^) o
};
0 {) x9 n$ Q! F/ t- a) f7 h+ i7 M
' \& d6 D# z' W5 f( r; Q0 u/ e' Nstatic int __init led_platform_init(void)
, v* R: f$ k' S{
5 N3 ]2 O0 Y; f int ret;
Z' c+ v' B* o#if 0
1 F- \ j4 K- j* q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 [8 p) ~" f: L4 m
if (ret)
! H0 j1 S# R$ r8 }. A pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ Y( }( x7 z0 ~8 c8 R
"%d\n", ret);$ O% W- q0 I6 ?* \) A
#endif( Y9 w5 r8 i {- a' L7 S1 ~
ret = platform_device_register(&da850_evm_tl_leds_device);/ [+ f' A0 \$ f8 T v' x
if (ret)1 }: h5 K% X. J' K+ P6 e4 L; ?
pr_warning("Could not register som GPIO expander LEDS");$ N" i2 I3 W- b7 e/ g
else
0 `, ?5 C- c, b9 ~7 K printk(KERN_INFO "LED register sucessful!\n");& f' F, Z* L' Z- J: b
0 ?: D! |0 x5 z8 h8 L) M return ret;
. Q# p2 @3 q+ N) w( L1 w}: t% S2 P7 u5 r
! V0 J. R0 u$ z' P% W6 `' {static void __exit led_platform_exit(void)* k/ f( M" _! B/ y
{- g. }# J7 m3 r2 G9 y0 G. D
platform_device_unregister(&da850_evm_tl_leds_device);
8 a. s" o, f9 D) q& Q+ n* L; N
6 C$ S7 W- |0 F3 X5 j, e3 } printk(KERN_INFO "LED unregister!\n");/ W" L0 q' E1 h; W, O" X8 C8 S* W
}
- `3 B+ R2 n. @! ?" Z0 @( B. a9 h9 l( [7 u K$ U z: y' T
module_init(led_platform_init);' X9 g6 P2 x- I2 z3 n
module_exit(led_platform_exit);( o; w% ~2 h/ b& {# S5 N+ I
0 e. ?, S. v; B7 `4 pMODULE_DESCRIPTION("Led platform driver");+ J/ a% K& p( Y p; j
MODULE_AUTHOR("Tronlong");1 E# L2 q7 P1 _ I) u
MODULE_LICENSE("GPL");0 t5 X% M/ ~& Z% v- R5 o
$ I: D3 i! o' g/ _( {7 Y |
|