|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ ^' B! k- K0 j7 ^; k" ]
#include <linux/init.h>
# @4 _% j4 b) G- Z5 }#include <linux/module.h>
6 q$ U3 v4 `7 Y, i+ b5 j#include <linux/kernel.h>% k/ J6 b; T* V/ q
#include <linux/types.h>
* O, b4 W) H2 ?#include <linux/gpio.h>
0 ~) e0 j' a1 Y% b! T* c9 W#include <linux/leds.h>6 b) W& {* ~1 C4 ~/ S( W
#include <linux/platform_device.h>
% f2 p4 i6 p L0 T7 T; o2 k# B `$ W- m
#include <asm/mach-types.h>5 Y2 D2 ^. \ b7 N. }
#include <asm/mach/arch.h>6 F# ]' g* r! n2 V/ t6 m: f
#include <mach/da8xx.h> |! z: |( y9 u
#include <mach/mux.h>, Q9 W4 }( F5 Z: q
3 O; A: V% ]) a6 v$ T% j#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) @) d4 N, _; Y& N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. u0 a, Y. b8 A3 r" @+ O- [. q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); G8 Z: P% q3 H" E
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! [9 }, @+ n) A2 v9 c6 h, ?* @8 Z3 {: s3 z! V
/* assign the tl som board LED-GPIOs*/, U- u, E- m8 v4 Y
static const short da850_evm_tl_user_led_pins[] = {
& j* S1 P) f8 B' T /* These pins are definition at <mach/mux.h> file */' w, `4 o2 O6 I% }/ O3 T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- R/ R/ h! O+ p8 b+ v/ x/ Z -1
L8 ~' k4 q1 d/ @1 E; Q( Q1 E7 E7 Q};0 {2 h/ ^, v- F7 b X1 I" |
0 y' m; C! ~! M8 w! e5 ~
static struct gpio_led da850_evm_tl_leds[] = {7 e) w4 G& \ S4 P; e8 _* O/ E
{8 J% D. m9 x0 Q$ T( M0 ]% c7 ~+ s
.active_low = 0,
. g6 }. I y) Y D+ ~6 k2 V .gpio = DA850_USER_LED0,/ L; n6 f, C' A5 S
.name = "user_led0",4 X4 @- ]* H% |3 S) N% C
.default_trigger = "default-on",
# u& J2 D5 j6 [1 k) Q* m5 l! G8 U },
3 N4 ? J; @6 g' G. Z {% m! u8 g" @0 P, ]8 _$ p
.active_low = 0,9 ^. D( w* J: I( o0 U3 [
.gpio = DA850_USER_LED1,
; _ [+ d3 J3 e/ u" e( Y l .name = "user_led1",
3 A3 F4 X( Z( ]5 l6 P* U .default_trigger = "default-on",0 ^/ |6 w) Q, z0 y- v
},
# @# H6 O0 L8 p {0 P: O1 m; v& Q8 ~- C
.active_low = 0,
- K' C2 d( X4 A .gpio = DA850_USER_LED2,
0 W% q, D" f5 _- f- }" j .name = "user_led2",
# s; L! J( @! z- J# `2 i .default_trigger = "default-on",: T- q5 E/ v. F" a: u6 t
},
7 d9 p. c- S1 H3 E& V8 ` {7 \7 }) ~. T/ ~& Y, z6 ~$ x4 M- ?* _
.active_low = 0,
, ~6 R& v. y: m .gpio = DA850_USER_LED3,
! `9 U: l1 H5 a" A .name = "user_led3",* B" u# c8 \9 U% H- ]
.default_trigger = "default-on",. m3 [$ L- Z" l1 A% U9 B
},& X8 A6 |) }8 G# w6 {3 w4 t
};" P+ L* a" d8 f5 T/ g0 X }7 m
" l/ ^, i( F @( I7 Rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 r* Y: b! L" n0 i3 t( V# w# N+ H
.leds = da850_evm_tl_leds,
% U( J6 i3 E( }' H, k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 S! k4 J" _4 ~! h8 i};# F# F6 i# b3 ]/ _
7 A2 M( d/ C" pstatic void led_dev_release(struct device *dev)
! u( {* @; z6 o{9 k' ]' G0 D4 K3 r2 e
};
% @/ o) t A+ v: [
: _+ s- D8 F, p: i$ S; b, fstatic struct platform_device da850_evm_tl_leds_device = {
/ P- m. \7 [6 {( F3 ~7 _$ u* q .name = "leds-gpio",
' j& c# q: j5 P y .id = 1,
7 u; m7 v. ` a. m1 X$ q4 h .dev = {
0 K, G% H+ Y" | .platform_data = &da850_evm_tl_leds_pdata,1 o# w' j' h2 R2 T) ?
.release = led_dev_release,
0 X. `, z- S8 n4 Y' q, ? }
7 }; u- P' i! K% D};
9 |8 B% b9 k: e" b- }# ^* z* R6 ]- d6 G& }5 H
static int __init led_platform_init(void)
4 L, Q. B. f9 ~5 ^( n ?! T% X) P5 U{
2 [6 I6 `. P Z int ret;
& t7 z: ^0 ?3 ^) a# M#if 0) d' d) s( B8 V8 H; Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 g: t, y# Q2 T1 B! [
if (ret). `$ o+ Z" B+ _4 b9 V7 U3 a" w, ^' ^
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": m( A, M5 j7 S: T! _
"%d\n", ret);( P9 o. E/ l' |% A: K
#endif
1 t& C8 K- A& J3 A+ Q, R ret = platform_device_register(&da850_evm_tl_leds_device);9 g6 y( a% p0 T5 x7 ^7 P& T" M0 D
if (ret)9 n- @5 O' ~4 a, v' t) ]8 H
pr_warning("Could not register som GPIO expander LEDS");
% N* r( `; R) ^. E6 X# ~. j9 A else
6 b/ P9 h6 T! l( _ printk(KERN_INFO "LED register sucessful!\n");
0 F4 P2 t$ h$ V* O
' k8 k4 \/ P, @7 J return ret;
$ Z* a% ^3 ~, b% C}
4 n, k8 l5 J9 o2 B. v# X% p8 d) _# G% _7 t
static void __exit led_platform_exit(void)
' d; D: g c4 |+ H{! k& X8 q* F+ Q. H6 I1 m; \' @2 {
platform_device_unregister(&da850_evm_tl_leds_device);
3 ]4 G- V) }) h$ s' P' B- m) a& j% z
X: ^" y% P/ }, p S: b* u printk(KERN_INFO "LED unregister!\n");& H9 l. w5 b' z% S4 G
}& i6 T+ L( n$ O' A: g8 V9 [
8 Y8 e* ?' z2 ?3 v \
module_init(led_platform_init);
2 h; ~) W5 D( U6 S2 Z, Mmodule_exit(led_platform_exit);
A. I4 H) ?: p @1 \) b4 C; a& Q+ `- z2 v
MODULE_DESCRIPTION("Led platform driver");
. `1 _2 Y- c$ l W2 X* ZMODULE_AUTHOR("Tronlong");' R! A# x' f- y/ u
MODULE_LICENSE("GPL");
, g) L; E6 E7 N* e8 K% Q/ L( a3 W
6 e# G$ w3 P1 A( q |
|