|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 p+ l% S* G! P! v) w#include <linux/init.h>! F% L* M+ s* |! B- L; ]
#include <linux/module.h>/ W* n; h) r& O- o* z2 o
#include <linux/kernel.h>
' a# M1 s; ?% B9 Y. L/ p$ w#include <linux/types.h>
3 N3 N( `% `5 R q- G! E' B- r& {#include <linux/gpio.h>5 n; x8 l: E/ ~7 u# J2 v
#include <linux/leds.h>
* b/ M2 \+ s8 z/ ^8 l% Z$ u6 k, g#include <linux/platform_device.h>- L# m9 S5 c0 p/ v
9 {$ e% Z6 X- Q5 T' @8 W( u
#include <asm/mach-types.h>
3 R+ x1 A* ?9 B9 L( R6 @; @& Q#include <asm/mach/arch.h>+ O; A$ N- m- W4 x( E# M9 O7 s) q" K
#include <mach/da8xx.h>3 q/ g5 |/ l% X! T9 {' ^
#include <mach/mux.h>
/ r/ W. B& x- |! N) n
j" M. I+ g, I! O+ I7 Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: q: j% S( w+ s: q; z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ o' q% P6 v9 `0 a% c/ P#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* {/ \ W& k- H( s% [0 e' u% L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) U/ ~5 }- X' ` G
( C8 e/ G7 U7 x/* assign the tl som board LED-GPIOs*/
6 k) r( g; c5 t, Qstatic const short da850_evm_tl_user_led_pins[] = {
7 P; B Z/ [- M; S5 g /* These pins are definition at <mach/mux.h> file */& f, e4 ?5 P+ r$ a6 C# R/ B0 U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 c( C4 u8 v/ Z! M* N; K -1& `3 h! R* p) k6 S/ V
};, c# c$ m. z7 w
7 P! R" d6 @& @) wstatic struct gpio_led da850_evm_tl_leds[] = {
- N5 t n) }- d+ ]$ p- A {
5 x2 @. e: ?" q% H .active_low = 0,7 e+ b( S9 M8 j- b0 A; ^
.gpio = DA850_USER_LED0,
' d6 e% K' \1 d .name = "user_led0",' b1 Q- x K+ T% X0 @$ X3 c
.default_trigger = "default-on",( V* ^6 g+ N3 P; u* g2 D" S" C
},
9 ?& M' U! `4 h: k- W5 Q1 k {( B; x& z, b& x3 M8 I+ q" Y
.active_low = 0,3 U5 K+ y: M" z6 Z
.gpio = DA850_USER_LED1,/ \& f4 d; d% P! L0 v
.name = "user_led1",) x9 l# ]6 p3 i, i9 l2 r
.default_trigger = "default-on",3 ?2 ]' d/ ~% R- V" a- w
},
) T$ [" g) B; m' Q9 i4 l {
$ e( k/ x! B( s. ?: m .active_low = 0,# t$ J8 j/ V% L" M' h
.gpio = DA850_USER_LED2,
# G% y' ?5 l# W0 Q% f# T7 C# @ .name = "user_led2",
& S% u" w. @, r j .default_trigger = "default-on",( a3 _9 O& B1 m8 J& J
},8 F) [" E4 o! d4 ?) ^& _% U: T) A
{2 L8 j7 M v( Q. R! i
.active_low = 0,
: [- J& }* k$ D8 |4 { .gpio = DA850_USER_LED3,, e+ h, j5 S8 w. I
.name = "user_led3",
$ e$ r* j: ^; z3 X1 g .default_trigger = "default-on",
- N8 b) K. {$ o# l2 `" W },: ]& y1 V5 v5 i$ X( t- u
};! M$ f( O- s0 j& R' k$ E
1 b7 k' @& ]2 k3 e4 K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 M: U5 F+ a; c1 T/ P
.leds = da850_evm_tl_leds,% G0 L4 s o. b: R; t5 C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) v P1 m, X/ O' G$ X. i: r};3 S/ @1 c7 Q) K* r
! o" k9 u# _: E% v& astatic void led_dev_release(struct device *dev)
* r; q% G) S8 {( i! c{ w' _( ^7 ]- Q0 E
};
: [" r ^, j- z/ a
) ~- x# ^& s4 ?3 P8 {# S7 mstatic struct platform_device da850_evm_tl_leds_device = {
. z$ ?, N4 a1 ~+ K' A# P .name = "leds-gpio",# S- h9 T/ g; P9 @2 s! X' X) b
.id = 1,! l2 U' _1 S# T `
.dev = {3 g/ _0 g, H7 I. ^
.platform_data = &da850_evm_tl_leds_pdata,8 `- i2 i# h0 ]$ y; h
.release = led_dev_release,
; c4 Q; G/ A1 ?& M) k }
' ~3 y! Q" `$ _9 L};+ J1 [' v1 K% k/ t s3 L! ]" r
: j8 R" I$ ]* I/ V: C( [
static int __init led_platform_init(void)& |/ L4 T" K. E; Y) k3 b
{4 R( N" Y8 l) p, T" m
int ret;
) G5 A r* r# O" C% Q: q8 q#if 0
9 l6 S# p7 v& G3 n' [8 o" J( A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 }6 b' q4 `8 B; F6 q
if (ret)( u) ?$ y% O% x2 A- V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ a/ P8 }- a; s k" ]1 f! w "%d\n", ret);
# c5 ]+ S! p f& Q& u. b! F$ ]#endif
! l1 f( b# P% T+ ~" v2 ? ret = platform_device_register(&da850_evm_tl_leds_device);
/ F v. C- k1 t8 n if (ret)
3 L. Y8 P0 E# G2 N pr_warning("Could not register som GPIO expander LEDS");
/ Q. b$ F! c- Z. n4 m9 u else% Y3 E* m( ?* X+ @+ Q2 J
printk(KERN_INFO "LED register sucessful!\n");
2 l. U" s8 b3 J2 k# E8 a4 \: t! J/ `+ K; s
return ret;' A2 c7 w$ {6 O0 c
}
2 N- t1 k, |1 F1 s L0 q' J& h
w N* \" t) g9 j. z: ] Kstatic void __exit led_platform_exit(void)9 ? ?& M) A) }* u+ |/ ?
{
) o& a+ K- E' f$ Y. W7 H" N! f j platform_device_unregister(&da850_evm_tl_leds_device);
6 \2 ]& Y0 a0 p$ {. P2 j: n6 [$ J" f3 a9 {
printk(KERN_INFO "LED unregister!\n");! f% ? D. q( \- P8 x. `
}$ l: r* C1 p; i$ c" p' `
. ?7 P+ l+ I+ S5 Y {8 B
module_init(led_platform_init);* t7 M& I% j, t$ `( B
module_exit(led_platform_exit);5 \' _) G7 }, u x/ K* Y2 g+ s
* S( c+ O) T. Q
MODULE_DESCRIPTION("Led platform driver");
' Y+ a: C2 P( K+ [) m* g* a3 OMODULE_AUTHOR("Tronlong");
( t9 Z9 V u L; IMODULE_LICENSE("GPL");
, R8 F P6 J I
6 A3 Q0 r" @7 J3 }7 Z9 Q7 ~ |
|