|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# `6 u& o, \4 e9 [0 C) k( K1 u
#include <linux/init.h>
9 I7 V: S5 _! G' } Q1 c3 f! f7 [4 u#include <linux/module.h>- r1 t, K) O& O7 \6 o8 G5 g
#include <linux/kernel.h>
9 g# t# H- e- G#include <linux/types.h>
- u- K3 v! g- f; S' o8 m#include <linux/gpio.h>
. L3 V0 l9 D, A4 y0 c: @. q+ Z#include <linux/leds.h>/ b$ A" `# E' }
#include <linux/platform_device.h>
( S& Z* \1 o6 ^& k
4 \$ f p/ o& E& v5 g& {; C#include <asm/mach-types.h>; k( ^; Y# S3 P
#include <asm/mach/arch.h>
* w$ U. Y/ s# ?6 X% T* S#include <mach/da8xx.h>. d; r- a( t+ F! F& R( {; [3 N- R
#include <mach/mux.h>
0 i8 M$ I* d$ E( U' E8 W+ p
4 t6 E+ l9 L6 m8 p ?0 d9 I#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% Q( n7 _5 _0 i/ r1 d#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& x. _7 J: O+ g3 S- [- ^3 p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; { C# F* G' |; O( X" `- G3 D* i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) H: K; c3 B0 R( ^& N8 {
2 n- v$ ~9 j5 K: I$ P/* assign the tl som board LED-GPIOs*/6 z! W7 e1 ?3 I; V; t& J
static const short da850_evm_tl_user_led_pins[] = {
a) V2 x _$ o /* These pins are definition at <mach/mux.h> file */* d2 O' o2 y, z/ _, D+ k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 p+ x0 t% k) p4 U4 J5 a -1/ Q+ S3 q' X! ^' l6 O5 N
};9 E$ F& M8 o7 o% f2 l7 r, }1 M
- E9 J! ~9 M. t, S1 W
static struct gpio_led da850_evm_tl_leds[] = {* n+ c1 i0 w& u' |( U( n
{
/ `. K4 e& V0 B( }- |: ~ .active_low = 0,
( ^7 S% A" @: t% q' p6 i. ] .gpio = DA850_USER_LED0,
$ K H6 ~5 c G .name = "user_led0",
( S8 D' u# [( q/ ]& V! Y4 W .default_trigger = "default-on",' J0 g* r& n( I/ r/ ?+ E0 |
},
- M# I1 J, j) Q% r9 Y; c' E {8 E3 C: Y" X( r1 i. z9 N3 I
.active_low = 0,$ a& B: |, h- f2 Z0 {
.gpio = DA850_USER_LED1,
, u8 Q; g7 T7 l# V .name = "user_led1",) c! ], S/ Y1 u# V
.default_trigger = "default-on",% ~6 R$ L& g4 h# k/ {5 w
},
6 b) Q, N+ f$ P/ @) \; A {) V( h" O; R# R" `2 \
.active_low = 0,2 h% z$ h) t8 X) Z4 V
.gpio = DA850_USER_LED2,; d% W# X: Z( m/ A; ]
.name = "user_led2",
2 D) L. V; P: G .default_trigger = "default-on",+ [( k2 |/ Z; o# U K l% H
},
T9 p5 q5 V4 [1 { {
3 i& ^, y' N8 |3 d2 d .active_low = 0,
+ X! M. ]! x! e$ _: {( b5 }9 O .gpio = DA850_USER_LED3,
$ Z5 Y: V) c! ~8 d* ]( F* Y .name = "user_led3",
4 a# ]8 q/ m& T9 w .default_trigger = "default-on",) r9 p7 K- H4 u) B2 b
},
, u6 K1 V# k% D5 D: U8 \};
; a, R ^) @6 x" Y& v, d# }# L( a3 T3 A y& B# ?3 F$ P
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& [ D* c8 t& H1 ^* g/ k) k .leds = da850_evm_tl_leds,
9 A9 k7 R @# H' A .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 _: B1 |4 A( t) T};
- k: _0 V8 N8 {$ Y& \( P5 A9 g! P4 S5 D: f/ s3 b
static void led_dev_release(struct device *dev)
, @6 T, _2 C' ]+ t2 X7 A{1 m( p x/ w& U1 {( P9 J
};, D: v: c. B' k! c# Z0 n8 C
+ }# B) c% F2 \) F0 h* O
static struct platform_device da850_evm_tl_leds_device = {. R- R0 T2 @# g9 [( U0 I
.name = "leds-gpio",6 p1 A; [$ s2 _2 y' T
.id = 1,
' f) l: ~3 q; y7 d .dev = {) n1 E/ w7 c$ K# x# ^- h9 V4 Q6 @
.platform_data = &da850_evm_tl_leds_pdata,
/ F- M$ m& M: M. Z( ?# b! c .release = led_dev_release,6 v- x/ X8 [) P! o. P
}* e$ W% n5 j9 Y8 D2 t y( U' H
}; X4 L+ m" h, W$ |2 l2 _2 Q$ X
' J' x; @/ r6 ?7 L
static int __init led_platform_init(void)7 C* O" f" \5 l0 o' R
{) q6 Z! i$ ]0 u7 I0 H6 T, m
int ret;
; D% ]2 F* \$ o: w' ^6 ?#if 0
: ~. X% |/ O5 D; E- E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 _2 j6 C$ h$ H if (ret), C3 `7 v8 P% B0 @- [' B4 L
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 d3 C( t9 Q0 c# ^+ m9 P: F3 V; c
"%d\n", ret);
8 }$ V/ @, K& g. B4 F2 Q/ Y5 e, K#endif
, j2 L, y: t5 `# Z6 V c ret = platform_device_register(&da850_evm_tl_leds_device);
0 z$ E8 O t5 V" I) W# q5 ~% T if (ret)* y: K" M9 {8 k0 T' f# }* ]
pr_warning("Could not register som GPIO expander LEDS");9 M c0 A2 m- T
else* ^3 v/ m! K. D# o; V9 i
printk(KERN_INFO "LED register sucessful!\n");) v" y9 T0 H; Z$ m+ r
7 G- R* F8 d* r% {4 i return ret;5 R1 |' `) h3 z, Q
}& ]& ~4 U* T6 f
/ W# q( w7 j) @9 x
static void __exit led_platform_exit(void), r* d- D/ o. G9 z5 N8 r7 a
{% l$ Y# a% u# A
platform_device_unregister(&da850_evm_tl_leds_device);
9 d- O8 p* a7 B8 h2 ^" t
7 C i1 H" y# C1 p# B printk(KERN_INFO "LED unregister!\n");
) f' i& d, C; Y9 r# X}2 s: w4 X9 b; g( b
7 D5 U6 {2 a6 w1 ^' C7 t6 i, N, Ymodule_init(led_platform_init);7 `/ v. C; C' U+ d/ N& m
module_exit(led_platform_exit);
& l0 @& a \7 y& ]! V+ R# r( R9 {
' w$ B Q4 W+ F: |1 a8 ]MODULE_DESCRIPTION("Led platform driver");
m+ T9 A# E8 j" u {MODULE_AUTHOR("Tronlong");
0 z) ~. i+ k3 m" \! YMODULE_LICENSE("GPL");
& S( R& f( _% y# k2 v4 ?
. I+ J* G: ^2 A4 d* o! p! a# q |
|