|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 p" j0 V* Y2 v4 H
#include <linux/init.h>; p) d7 ~' u! a3 x0 g8 b, h; s# H& A6 L
#include <linux/module.h>
3 q6 W+ }2 D9 S R4 F3 B#include <linux/kernel.h>% ^! a- g" D0 U3 {" e. Y, w% {/ M* @1 s# `
#include <linux/types.h>
v0 Y+ K6 \' u; v#include <linux/gpio.h>
) M3 x& n; D5 ^4 O7 ? r9 H% A#include <linux/leds.h>
, w' I; ?8 U% l8 o#include <linux/platform_device.h>! P/ ?8 d- C) Z) R% x
6 {6 C. r1 @( |8 g
#include <asm/mach-types.h>
: [2 V7 @' C6 j, d2 k#include <asm/mach/arch.h>
5 g8 I' T. ^' u" w5 ?( U5 S2 H#include <mach/da8xx.h>2 ]9 z: N5 k6 ~! P3 K* y9 ^
#include <mach/mux.h>
, b4 o' ~& v+ j: A% Y8 D0 z
' e3 Z6 C s4 W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! Z( A" V. p/ O% H. ?1 g#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); o" ?7 u, p& q0 K
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# P, a: Q3 j: `6 n/ O$ c1 L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 G3 G3 a7 s/ W& }. s- `6 [" H6 A) K7 `2 r
/* assign the tl som board LED-GPIOs*/
4 a3 M$ c- H, w5 H8 g% H/ mstatic const short da850_evm_tl_user_led_pins[] = {& \) v4 B8 e4 J C
/* These pins are definition at <mach/mux.h> file */
) M: s, b9 h& x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
a" a! C3 G6 m4 N -1: ~4 J9 U. j$ N) A0 e1 \; `
};
: q3 B) x' T5 w% M7 j x; Z1 i. T! Z" U) V1 M8 O$ `9 X% {+ q
static struct gpio_led da850_evm_tl_leds[] = {/ l0 @2 \+ V. T4 K* N$ I+ Z
{
+ t) N2 A1 } Y4 N2 \ .active_low = 0,, ^! f5 \0 P$ N
.gpio = DA850_USER_LED0,
1 G8 u/ I9 s2 a: |5 m .name = "user_led0",+ k% M8 ]$ H) d1 ]8 p7 G- m% N
.default_trigger = "default-on",
% p. P; @# |# Y: H: k% [ },
6 a' y, a @0 i' A* C3 Y$ ` {
+ \7 Y4 _+ u Q/ a. { .active_low = 0,
+ u5 ]! A+ }% t9 } .gpio = DA850_USER_LED1,
' v- }3 o# V/ e5 i2 { .name = "user_led1",
- c/ k: O# g6 A .default_trigger = "default-on",/ G6 _! v' x9 \
},
7 }5 p) d3 v' n {, k' ~5 p* u0 \5 k! o- H
.active_low = 0,
% t- t! U4 k0 r) Z3 Z! ^, O' b( i .gpio = DA850_USER_LED2,
! Z# [- N" i5 |# b; G! R/ } .name = "user_led2",7 l z+ c+ x# d" |3 i8 u. c, Y
.default_trigger = "default-on",
; U4 E* v7 o/ L0 B" K) [& n1 | },
$ c# J" V( L7 J {
! r; p, k; u3 v2 E L8 g .active_low = 0,( _7 z5 m9 n' i$ E2 Q- d
.gpio = DA850_USER_LED3,9 U/ U' @4 ?6 F1 M$ ^
.name = "user_led3",2 n; l0 V& h! |
.default_trigger = "default-on",& o. k& {" a8 V+ S8 _
},/ g/ z9 b2 `7 {& Y' X1 H
};" U% f* Q( Z2 y+ Z# u2 v$ |/ e
+ J H- t* ^$ O4 C& m
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 k* U( y% Y2 h/ b
.leds = da850_evm_tl_leds,
! ~ ]" M4 t+ ?+ r: B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: |: H+ R, t$ c* h7 c5 d};1 j' G3 U2 s! H
& w0 m, s! l |4 i6 j* K' a- Fstatic void led_dev_release(struct device *dev)% N+ J& j0 i e6 c1 C" p! R
{: O% `, m! Y) a& {) l
};
; l4 `. f5 L7 x
9 b# Q" D/ B# O- B; zstatic struct platform_device da850_evm_tl_leds_device = {
0 x4 ~6 {& {) P0 f .name = "leds-gpio",
. \, J" M. H6 U8 v+ u .id = 1,
* M, y& W% s" _ .dev = {& v; _; O# T" E" a: g
.platform_data = &da850_evm_tl_leds_pdata,
# F; I2 l, `7 ^$ N: M1 ] .release = led_dev_release,% w m( I' I& \2 i4 B. y
}2 f# S4 I3 Y# _, K6 [ O# \! V h
};
3 Y8 l" u! }9 p$ C# M1 b% z
5 ^: a) X5 }4 N. T* J' tstatic int __init led_platform_init(void)
- J) z* {4 f+ c& B, N" f$ U8 E{8 V' h% r+ b' m K7 U
int ret;! B$ x& ^' a e9 B7 q( {
#if 0
, A+ w A8 M6 {; j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ @8 |. C/ l; ? if (ret)
H4 g3 r; ^1 ?# B- h* F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# a O- v# R* u "%d\n", ret); z( w# k& q/ `/ H2 Q6 ~
#endif
& x( e3 c. H' i# H# `% e- m0 C ret = platform_device_register(&da850_evm_tl_leds_device);
+ o9 a6 c7 p) V& j if (ret)
3 f2 f. b* i! }& c( c/ d pr_warning("Could not register som GPIO expander LEDS");
& n8 K0 R# d& ]+ y: m( j/ | else0 S: X' I X# K8 q
printk(KERN_INFO "LED register sucessful!\n"); w- `5 T" F/ S- b5 c
A9 G+ H, ^% ~# {, S return ret;! m; |1 j3 p$ v
}7 Z+ G/ b2 K& Z- P' B+ w
4 }: K- k7 w6 z
static void __exit led_platform_exit(void)2 E. s+ D/ B& m* k
{
7 Z, P$ P6 d( o platform_device_unregister(&da850_evm_tl_leds_device);1 x9 C% M6 w( l0 V7 |8 T
) g7 f! O W4 s) I$ Y8 u
printk(KERN_INFO "LED unregister!\n");
3 H7 V$ {. I) E" A/ Q5 `$ E3 F9 Z% z}, u4 w- H9 b, a, s& X
1 v& X7 V8 X7 E" u2 g- z
module_init(led_platform_init);) Q( {6 _* ]' D$ p. R9 H" Z- `
module_exit(led_platform_exit);. D4 ^% e4 ^* x! J) W# g
. Y$ g& P0 Z: Q ~7 {! TMODULE_DESCRIPTION("Led platform driver");4 N! i& D" ?/ a% ?7 [9 V: y
MODULE_AUTHOR("Tronlong");
5 p/ a* C7 h( L3 p! k) B5 f: MMODULE_LICENSE("GPL");' d* d! p7 q$ j7 w) x Y: g9 [
* V5 q1 `% E* V+ ]
|
|