|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ x$ \" ^& U+ l5 x1 `#include <linux/init.h>
& Z5 T. C5 b; y+ P1 F$ R#include <linux/module.h>
, d2 S9 j3 y/ T3 q' Z#include <linux/kernel.h>
. f0 B- M4 x/ b) q K* X1 z#include <linux/types.h>
9 N3 P: \; o4 |( s' k#include <linux/gpio.h>
0 J2 M2 t, S+ e! I#include <linux/leds.h>
5 J( ?) n" J8 C8 H#include <linux/platform_device.h>& C6 ?" A. d2 {* G, x! i2 i. ?6 U
* l; q7 V3 C8 o/ B#include <asm/mach-types.h>4 J% Q& V" }. C- ?/ z, O# T/ z; T
#include <asm/mach/arch.h>
+ s1 R' `* \7 E7 d" m* Q w#include <mach/da8xx.h>- Y1 P$ p% ~ ^
#include <mach/mux.h>
; X j7 `2 d( ?: Z) I$ M. Q4 L* t |8 f4 C. R
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 t `0 C5 `: g8 E9 P# L#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ A% ^* ]) S+ z, ~) A" \" M2 P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), K8 a" G) P, [; b" k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ r6 K& M2 W8 q. X/ z
- e( @) w1 Z0 Q1 p9 N$ B/* assign the tl som board LED-GPIOs*/" o- H7 c: c5 C' _! ~8 O) M% H
static const short da850_evm_tl_user_led_pins[] = {
3 E5 H' H- L! C- Z /* These pins are definition at <mach/mux.h> file */
3 e+ z2 T& _) B' ` DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 f# U! m u5 R6 d9 W) v -17 c; P; Z1 s8 m7 ], k; o/ Z( `
};
! S2 i4 r G( I/ w; J2 g( I& g$ L; Y0 u0 T2 Y
static struct gpio_led da850_evm_tl_leds[] = {
* M. d5 j& P( V5 J* m7 Y! T {' p' W* @1 {) J; f5 z% |
.active_low = 0,
|7 D+ i @: O- Y( | .gpio = DA850_USER_LED0,
. c' F/ O) U6 w9 T .name = "user_led0",+ l }- R* Z" {5 s' c
.default_trigger = "default-on",% Z6 e8 ? l2 _& V2 S
},
0 |7 d* O1 G( i. c( P5 W& F1 g {
/ N- O6 ]" }7 }: r9 y .active_low = 0,
/ B5 }9 \ N( }$ k7 p .gpio = DA850_USER_LED1,
6 Z+ u3 D# C. S j .name = "user_led1",( ^, }0 [9 t2 ?1 w
.default_trigger = "default-on",
r8 ~6 }% `" K# u6 V8 y1 U },4 i% a/ X( |8 K/ g+ x# r1 Z) U
{6 N. ~7 M+ C8 ~# A0 ]# S: ^
.active_low = 0,; L' `- D: S7 _; c8 s! }" K
.gpio = DA850_USER_LED2,
4 E6 C. q. Q# X3 ~5 | .name = "user_led2",
& M T6 l. r9 N6 A# r .default_trigger = "default-on",! h9 A7 k( N$ z& r8 w
},
" R1 W9 o/ N4 M; o* M {
* t, a; z* G: A9 n" Z$ ~3 t .active_low = 0,
5 E9 t7 ?+ A. U5 i .gpio = DA850_USER_LED3,
: C7 G6 u- r. _' N& m4 O .name = "user_led3",
+ T% C& v5 D* W .default_trigger = "default-on",9 g0 I/ @: p* s3 N3 g( Z# C& h
},
' a4 y: E' B* I. ?, o2 _};
& _5 w. t* C R0 z
7 a$ ]. W) L- Bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 Z* j! a- [0 Q$ T8 a+ M8 S' ? .leds = da850_evm_tl_leds,
0 I) _" |/ {4 `" ]; ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. n E2 k7 F# V5 @8 X};
1 j! r7 G" V! R ^. m8 e* q
4 v m3 y: ]3 J8 Z. B) V) j8 C" Ostatic void led_dev_release(struct device *dev)
7 Z0 B5 }: I2 b{: K$ W; m7 |# @8 h' h
};
1 t& t' W7 P* n3 ^
0 @( N. P" g# `7 K" [static struct platform_device da850_evm_tl_leds_device = {
. A6 N6 a+ R/ z$ X p7 p .name = "leds-gpio",7 i/ o3 `0 r7 R
.id = 1,
! k' j# `% K6 Z0 o .dev = {
5 B5 a& M, ]; G# V) O% L: i .platform_data = &da850_evm_tl_leds_pdata,
7 m# l' e0 I3 B, M$ E8 n .release = led_dev_release,7 ]" O3 [6 E/ y8 ]: W5 T
}% ~, M* j# a- w H4 B1 V
};% p+ S5 ?& j8 q/ s& R( H: A1 ~& I
. p p4 j9 E! P" a3 `& J
static int __init led_platform_init(void)9 _8 S8 \/ a3 n, p5 B
{
* s Q4 [2 n( s1 t9 R2 d int ret;2 m( s" ^) s& }7 F! `
#if 0* p" p) ~* |7 i) |; p- i' ^% B
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) p _6 T+ W. S7 C) ? if (ret)1 Z, }. N6 H" x% L
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ p8 j! X i3 p! M3 D
"%d\n", ret);+ |7 Y F6 @0 {' t' _
#endif
5 `' R9 w( j1 P9 ?# Q* Q8 n; m ret = platform_device_register(&da850_evm_tl_leds_device);
9 j/ \6 A) S' E if (ret)( E$ T9 {, `2 e+ M6 R9 b- f5 q
pr_warning("Could not register som GPIO expander LEDS");
$ X) A# ^" m3 @4 H7 ~ else
/ H. `: J# m; F) U Q2 T printk(KERN_INFO "LED register sucessful!\n");
# ]0 v2 S+ d* u) R( W8 o7 P3 w+ X' J# U. j( T+ I/ Z
return ret;
! f8 g/ H2 o2 K2 K& q}
+ f/ [0 g# |% E3 C8 O: J+ [* z0 G4 T1 a
static void __exit led_platform_exit(void)
, T5 n) r) J4 J0 O+ N. c @; @3 m{
- M; E1 v# Q: b8 X9 p platform_device_unregister(&da850_evm_tl_leds_device);
* J- V, r+ Q" f; b( y; k) r* C' @3 Y- B& R& H$ F8 b! T; V
printk(KERN_INFO "LED unregister!\n");. Q) B. b5 Z. D
}
7 {$ I U# _- _- f# @; q. O
5 P0 h3 W( D8 B8 Z3 i# Smodule_init(led_platform_init);
& `$ Z0 j, m1 @& }8 I( p" T" U1 Wmodule_exit(led_platform_exit);0 j( |' c, f) \( a6 ~
* O. j& U' g- I( W* ?4 L' y& \MODULE_DESCRIPTION("Led platform driver");
$ f. o8 L; a i0 M9 }( l1 z+ A% CMODULE_AUTHOR("Tronlong");
4 Q# D4 m/ f3 @) U+ @/ [MODULE_LICENSE("GPL");
3 a- R2 D8 L7 ]8 t; h* z. y& P b3 y5 M/ o" j
|
|