|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; g1 B8 [: \% G. ?; s& B M3 ^: a2 {) L#include <linux/init.h>- T) x1 B( H) k5 p+ j# `
#include <linux/module.h>
6 ]* l& r3 w9 H) s. E" T#include <linux/kernel.h>
' j' |0 X# \& s% K. r#include <linux/types.h>) B9 k. D1 N( S' [
#include <linux/gpio.h>; m' \- d6 w/ O! H6 T4 F; Q! i) h3 p
#include <linux/leds.h>
! w/ x& l6 H2 J M+ _" G) H#include <linux/platform_device.h>- }, d# x/ p2 Q5 R$ m
; `5 x/ x: ?$ j
#include <asm/mach-types.h>) X' a) f7 u1 }1 K+ @1 B
#include <asm/mach/arch.h>) g' j# c: \7 y
#include <mach/da8xx.h>/ D+ T8 t4 v# S* X! ~
#include <mach/mux.h>5 N$ K5 F3 }' R
5 r b0 n/ _) c# o# m$ @( M9 }" H9 Q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, e( q6 y' K J' s& ^7 w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 l9 H- G, L- j) n4 N
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" b2 J" }2 e0 A1 t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 \" _# F5 c1 G$ d' M
6 D, J: `2 c; Y0 D2 b+ |
/* assign the tl som board LED-GPIOs*/' J& [) x% e: h4 s
static const short da850_evm_tl_user_led_pins[] = {3 {+ ]- N6 p' {5 d
/* These pins are definition at <mach/mux.h> file */
' t" ]2 j- R1 Y. y$ ^0 ~/ i1 o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- Y4 ~, B* s! Q8 `
-1$ j q/ t/ F2 P8 ~
};# u- l, W; z, p4 y+ M: t& J
/ e% }, Z' B. J0 Ustatic struct gpio_led da850_evm_tl_leds[] = {
8 ~5 N5 ]6 o6 Y9 q1 l9 Z# [ {9 M# r- V4 ]0 `& T6 R9 ^
.active_low = 0,5 p) u: A: J" a. G0 M% S
.gpio = DA850_USER_LED0,
9 t/ _/ c g7 n; M/ Z( B, I" A" C% a .name = "user_led0",! I! @% H# T+ T7 B
.default_trigger = "default-on",6 ]2 Z1 ?$ N% t3 _ R9 z
},
K$ n7 B; G* V x {
' A U9 i/ `( G .active_low = 0,- |+ j% X9 m3 t& H$ U7 G. ~
.gpio = DA850_USER_LED1,
}+ h$ p+ A8 ?, J& I o% _0 q .name = "user_led1",
2 |$ Z, w0 L: {* G .default_trigger = "default-on",/ ^# e4 H, @8 H
},
$ Y" [; v) G0 W# f' K% z+ P {
4 f" C" @1 M6 _( T .active_low = 0,
3 T0 `% T+ O! m5 ?, k .gpio = DA850_USER_LED2,
) b: P9 x# B) U$ U' C1 l: y2 | .name = "user_led2",9 J% e# y6 s) R3 q+ r7 j
.default_trigger = "default-on",& P/ Y0 z+ p# [: z
},
0 M5 b) ~& @ N {, Q" \7 h$ v7 d- N& {
.active_low = 0,
- ?4 j4 [% y/ u9 U .gpio = DA850_USER_LED3, ?5 n2 ?3 O! i" |
.name = "user_led3",
" W1 f$ a; Y% f. C0 ?2 ]' u .default_trigger = "default-on",
4 j, D6 g7 e i" x6 J },8 M' c0 `0 s7 Z. s
};
) l5 r# |: F0 ]: H
( W( v, ^/ i" [' H3 I$ Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, q3 R) [8 D7 C+ o' W) P
.leds = da850_evm_tl_leds,
4 K, X# B' h" o- p4 q) r/ F .num_leds = ARRAY_SIZE(da850_evm_tl_leds), O2 C5 H% g) [3 |9 o( u* ]* B
};3 g: h& ~. O n' @7 J6 |
@( D3 l- m# z9 W/ a6 ustatic void led_dev_release(struct device *dev)
5 h& K; M9 M; q& v2 Q3 K{( c4 o" S I: `5 ~ r. A' [
};
% O) y3 S1 q( d% p; L3 I, c ~$ ?- L' b
static struct platform_device da850_evm_tl_leds_device = {
6 D3 x/ v0 X; O .name = "leds-gpio",1 v) v6 ]9 n" G% s8 m2 t
.id = 1,
* f% c3 K# R! l" f) ? .dev = {: Z: r' m' j$ G9 i" E
.platform_data = &da850_evm_tl_leds_pdata,
$ W3 W5 K9 u+ e# l .release = led_dev_release,
+ A' Z1 `- m/ l2 p7 p$ J& D L$ a }
* W+ R; H- I5 V0 E6 ]};! k* C; c# S! j: b# P5 V
% h4 k* Q- q1 N$ [
static int __init led_platform_init(void)
* f, z$ z; s' p9 Y6 s( c. \" u3 f{5 o4 L& X8 R3 T) |
int ret;
, ]2 e% N6 S- V* i& E! z#if 0
3 i2 K r. j( K3 W3 | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; c" @! n6 H9 b" Y if (ret)
V2 ~% q! c5 r) z0 m- L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! i; P3 o; V' u0 d4 y0 \
"%d\n", ret);* E4 B8 M2 p; s, M2 E
#endif
j& Q! V9 @; s+ A. \# c! L ret = platform_device_register(&da850_evm_tl_leds_device);
+ ]' `# h1 O5 i if (ret)
% S3 G8 y K9 F: D$ Q pr_warning("Could not register som GPIO expander LEDS");5 I4 K# V0 `/ \
else- Q' h* h9 f. R' a4 N
printk(KERN_INFO "LED register sucessful!\n"); m7 m k$ s6 O: v$ N# E
8 j' S. P4 f/ G$ ?( [* E return ret;
" h. \% N; g2 ]0 G1 P |}
u% K9 W6 f# M5 y1 \2 k/ E) j/ Q, _& [" E2 u( T1 Y2 l
static void __exit led_platform_exit(void), E5 l9 z d3 A8 s
{( z* O# q' w0 {
platform_device_unregister(&da850_evm_tl_leds_device);- f1 @4 K8 x# z
- H. p6 [0 r9 H( Z
printk(KERN_INFO "LED unregister!\n");. c9 A8 p4 f6 @3 \0 e
}6 a% X( M) q4 H* Z! }# O
8 D* {2 Q5 W% `5 w
module_init(led_platform_init);- z9 J/ \( x! q7 @
module_exit(led_platform_exit);
! J0 n+ k' i% h; Z I f4 G$ m# z: y* R* d. Y {
MODULE_DESCRIPTION("Led platform driver");9 g; R! i1 B( W- z1 ]
MODULE_AUTHOR("Tronlong");
) T( t7 E0 q: r' v5 G+ uMODULE_LICENSE("GPL");- W2 P- D1 j8 k d7 r
. ]0 q2 |& R% X; m |
|