|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 U1 R5 L' w7 R2 `( M
#include <linux/init.h>
; C0 W& H& t2 y! g#include <linux/module.h>; _$ R* ?! ^, o5 B
#include <linux/kernel.h>! o1 ]% L8 B' B6 ^8 `7 V z8 k
#include <linux/types.h>2 v" ?: X; x7 M O
#include <linux/gpio.h>0 f" r+ E8 W# S& m0 \
#include <linux/leds.h>
# d! e# Y5 r* T: C* m7 U#include <linux/platform_device.h>
6 g% _ M! D7 G* p5 S" V* `; g% P+ \. G' x! b- [2 w6 Y
#include <asm/mach-types.h>
& i$ X; V. Y4 c# I* P#include <asm/mach/arch.h>. S! R2 o( N) e. f9 ]1 ^' J2 i. C
#include <mach/da8xx.h>% {# |, d6 @2 ~. F/ @. m: H$ m
#include <mach/mux.h>
5 y2 T0 T7 c' [ u$ W# O
" E4 A4 {) l5 t* f% c0 c/ x#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: y; u5 m' U* [1 V& U _% `#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 \0 t3 S1 E5 r9 e9 s7 D, C; }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 H) ]* y" w0 ~5 l4 Y# {# B' V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& j9 m F/ S+ {
2 _0 |3 o" B# j- k1 e# z3 @/* assign the tl som board LED-GPIOs*/# v( s6 ` P& k! B
static const short da850_evm_tl_user_led_pins[] = {3 x4 }8 e7 W: X/ A5 }, U1 P& v5 c
/* These pins are definition at <mach/mux.h> file */* w4 Z/ x. w7 ]- W
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 \* F7 F* s: k0 }4 r. e, d- M
-1$ w8 l( K1 O9 W1 J) V! D
};
y/ j( p0 F+ B# y" z |- E3 |+ K: L* ^5 r% F+ c+ ?% ~7 R
static struct gpio_led da850_evm_tl_leds[] = {
- i7 U3 y8 l) r2 x5 [* K Y {
4 \' @9 a2 m6 s$ y0 |3 Q .active_low = 0,) t, q+ e, [7 a+ k
.gpio = DA850_USER_LED0,( E& h+ Q8 s( V" T, z7 ~ g. w& J
.name = "user_led0",2 i. z9 P D' D8 r U$ l) r
.default_trigger = "default-on",
3 X+ |( U- e' b6 b, J) n; n. `3 ~7 x },$ P) Z0 L8 i6 T' ^- U
{
$ F1 f: b* ~/ J .active_low = 0,
+ r6 B* K R9 P I .gpio = DA850_USER_LED1,! L' Z$ L1 [2 l. [
.name = "user_led1",
! O6 P& @9 g* K' K .default_trigger = "default-on",
2 m% }' }& j5 O1 A$ M },# C! G! ^1 A$ y: k: U( K7 i9 F
{, |! s8 y: j& G; c9 L0 |0 d
.active_low = 0,! W' b s" y' |7 i* q
.gpio = DA850_USER_LED2,
1 V9 o/ D, z K! h" p& l4 E, I .name = "user_led2",: `4 Q4 o; P) t* d
.default_trigger = "default-on",$ u+ H, W0 R& ]: m+ `) n; \9 W O
},7 q, K9 y# `: F$ N
{
$ B! B$ k y% L .active_low = 0,$ A7 ^) o3 \3 Z0 _+ n! U, Q( H M
.gpio = DA850_USER_LED3,
, s7 Q6 ^" V q b \7 \6 J, W .name = "user_led3",
; |( n4 |3 c2 J0 B2 s% @ .default_trigger = "default-on",
+ x7 b5 s; V) S, B' g' N },
. I Y( G9 i& e};( S0 ^6 E8 G5 ?, `
[/ }. W5 M/ _. R" u) o& ^! astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 k1 W6 C y3 P6 d& o( \
.leds = da850_evm_tl_leds,+ N# }- k( h' `+ H, ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 i8 v! A- B: v" [: W};
! p# X/ s$ H! q
3 x o7 K8 D9 M0 cstatic void led_dev_release(struct device *dev)! R3 L5 t, ^, ]7 m4 ?# G
{
/ b6 O( H- `: c0 V |* c; m- O; j};8 K& u7 p: @# s: n2 n4 K* ~) X
/ Y# S& N/ D7 H: q. k+ l$ b7 M1 A
static struct platform_device da850_evm_tl_leds_device = {9 m/ |+ Y2 Y9 t$ [) Y+ t! L& C" D
.name = "leds-gpio",
3 R. I% S" P4 ^0 L. f3 d .id = 1,7 U5 x) P0 R" ]/ @2 {# ]
.dev = {
4 K4 b/ Z3 o6 y7 H4 T% Z" v .platform_data = &da850_evm_tl_leds_pdata,- N% C' F' F. Q; K% C
.release = led_dev_release,
4 c+ z$ V& L! v9 a+ m }
+ F4 p3 y$ B2 w- L};
+ G! z. m& v" J6 W0 t' A; y/ N% g( _! |" l6 X' C
static int __init led_platform_init(void)
. T4 z, D4 s7 M) @# t4 z' f2 ?{
1 f4 M) `; Z! j( W' k' a int ret;
& j$ S& D I8 [" t" y4 _* b! n#if 0
$ q8 k$ z& f4 }! }9 w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 N7 w. R$ p$ G! R! A. b if (ret)- W# \6 E# u/ n0 F K: y( m+ m3 R
pr_warning("da850_evm_tl_leds_init : User LED mux failed :" Z% S7 a+ v. Z9 Q+ u: Z+ T5 t7 j
"%d\n", ret);
& S& I1 b4 N: M7 o#endif3 d6 e% V4 p8 L' v \5 l
ret = platform_device_register(&da850_evm_tl_leds_device);* u) a7 O& |7 `, j+ I# H6 L& C8 E! Y
if (ret); p# T3 A) K( a1 |! |' W
pr_warning("Could not register som GPIO expander LEDS");
; E& }. s! D. z$ U! W( y$ P else& Q+ b) T0 Z8 _$ O5 i- Z2 Y" w
printk(KERN_INFO "LED register sucessful!\n");& h- h* b" p4 v
- D! B7 O4 h6 r. E% M0 p0 Q
return ret;9 T: f' Q% l* L1 C! k P5 z
}' s8 ?: x7 K2 H. F
; Y* B) ^. N8 j {% h1 q' f5 M6 I( f4 @. gstatic void __exit led_platform_exit(void)
- i1 n* Y9 K7 x l$ K( e{
/ G9 m. h1 p. j, j5 [ platform_device_unregister(&da850_evm_tl_leds_device);
* n7 i7 y# j: c$ F( m" |# m( Z) h& M2 S" ]8 A5 C
printk(KERN_INFO "LED unregister!\n");
# S# R0 r7 Y* G; K- b}' t2 |; R! P* u' p, O8 J
1 e! X/ a! j5 h( T5 `3 g* s
module_init(led_platform_init);0 c5 k- G9 m6 u0 u
module_exit(led_platform_exit);# R& t9 j2 _3 w
- C8 d$ N+ m8 Z$ ?' hMODULE_DESCRIPTION("Led platform driver");" H+ B4 s$ r. Q0 ^2 m* ?
MODULE_AUTHOR("Tronlong");
% `7 n0 O% _8 Z7 j$ S0 u( z6 PMODULE_LICENSE("GPL");
9 l7 |& l4 ], V% `, G
6 ~* B6 R3 Z& B' z |
|