|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. J s2 W. [ s#include <linux/init.h>0 X' F7 L% C" ~9 C1 Q
#include <linux/module.h>
; ~+ |5 h4 s1 }#include <linux/kernel.h>
) O e! n" o: g+ r#include <linux/types.h>
% U0 _1 @9 E" a7 d$ i#include <linux/gpio.h> f2 g6 i. F' S3 O
#include <linux/leds.h>
3 q# F' s4 V2 B4 l#include <linux/platform_device.h>
p1 f# Q& c$ G% _& K& {4 ~
( U6 [+ C+ G2 ~, A4 n9 P8 p& d#include <asm/mach-types.h>- j( o w! ]" o9 ?$ I1 Z
#include <asm/mach/arch.h>
7 e& |# ?: g3 ]( |- a#include <mach/da8xx.h>
& O: p: a- J& Y4 U0 p3 o#include <mach/mux.h>% V d* ]4 ?3 b; W1 F: f4 U3 G
3 b) c5 q; A% q& M3 T# E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 j. B4 V, I1 {6 z+ C( T- j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) M, b& @2 r1 m0 Q+ l8 K
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- ?& a( g3 k& {#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ v9 ^& _; `. q8 _! r3 K$ L
+ Q" |- x9 I: v6 y/* assign the tl som board LED-GPIOs*/
% W$ P1 D1 s! S) j4 ?) r( rstatic const short da850_evm_tl_user_led_pins[] = {
; z5 y. H* T X" s /* These pins are definition at <mach/mux.h> file */
( @/ m- O) B9 K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. \0 V7 b3 G4 W! S. R! h+ Z -1
, y1 E3 z' K$ N6 G. C};- M$ n! T% S$ \$ i/ L% z
6 @2 ^ p6 _- ^# L% _2 b
static struct gpio_led da850_evm_tl_leds[] = {/ o8 G" f1 D( ]- j1 B
{% |$ M' q/ [1 @3 Q. T
.active_low = 0,% H7 k G' u0 \+ {3 i5 b8 w
.gpio = DA850_USER_LED0,/ N8 k9 w# P1 C
.name = "user_led0",
$ r! d/ X6 k; d0 H @5 ] .default_trigger = "default-on",5 Y; I0 {( @. Q" }7 B# {0 ]+ {
},
9 e6 o1 c z" D8 M3 J5 _9 H3 _$ [! F {
) o/ m8 i+ W" P .active_low = 0,2 C/ y0 x' ^5 f# \
.gpio = DA850_USER_LED1,5 W3 p0 T7 B. o5 u' Y/ t3 c
.name = "user_led1",8 Z$ }: U9 H2 l$ o
.default_trigger = "default-on",
6 u: j* ^ Y9 l# I& | },4 w3 }: w& q5 Y0 b8 k
{0 i8 G* E+ l# s$ @ i: d
.active_low = 0,6 t0 G+ [- Q% T# p3 g
.gpio = DA850_USER_LED2,' P9 J* P/ W: w, s0 l
.name = "user_led2",
( _* P0 F% t+ \5 p8 N .default_trigger = "default-on",
6 u: b$ Y7 Y3 |/ U. k" B },
* S7 B5 S. f+ J7 d0 z9 m4 A6 N3 { {
4 q: e- \$ p* u& Y .active_low = 0,$ a: V% `3 c+ P3 M# N
.gpio = DA850_USER_LED3,- a3 o! z/ c d5 |/ |$ p( l1 q
.name = "user_led3",! G9 F: p- T7 f# z' t( Z) h2 _
.default_trigger = "default-on",
2 w4 c" t; n6 q9 l/ v },9 h3 z0 z* A' T
};
. ]. D& v9 p% [' F ?8 x% M, }7 `8 N" L$ m
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 D- `0 d) P* E9 ]' E2 |. t
.leds = da850_evm_tl_leds,1 V& }& N5 h, ~0 O. n$ s& f L
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, E, l+ M8 i* O" ^, Y$ L+ o o};
. z& s! B$ r) ]0 L9 L$ d+ {' ?# G. `0 c
static void led_dev_release(struct device *dev)/ `; o n' O* K! @% |
{: k- S- `- {- ?- }& Q% c; R
};5 d; G( V: {9 D% C& t9 T1 ^% |
0 C) u( |) C7 x" e/ Y6 [5 B
static struct platform_device da850_evm_tl_leds_device = {
' T! i' d b% P' z' [: a' z+ L .name = "leds-gpio",
: e4 z9 J' r# L& b+ C3 h3 e8 G .id = 1,
3 R% s8 u) j; [; A+ ^ .dev = {0 `, s% @( B9 ?! Z }
.platform_data = &da850_evm_tl_leds_pdata,
" [* q5 ^6 c/ j+ x! ~+ s .release = led_dev_release,
2 F2 v$ J7 @5 l$ p4 V }: O; S& v. p5 C( i5 M- J
};
6 l( I6 W, K! K2 |5 u' G9 I5 Q6 R4 z+ [& h/ \
static int __init led_platform_init(void)( t5 Q/ _; f* S+ L0 ]/ j. h5 h7 l
{" G) x7 ?$ [$ t+ o& ` V; Q
int ret;
. R: [, F) @, p& r#if 0; ]! [( s# p" W2 v; a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, r( `0 {4 D6 g; ~" n# ^* \( [! n
if (ret)' N4 ~, n$ ]9 T+ e& x4 g8 o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :" t/ b; G) E! w9 o
"%d\n", ret);1 Q5 c0 b6 h1 y, f* J7 z* s
#endif
' P3 ?) a* V# A0 j ret = platform_device_register(&da850_evm_tl_leds_device);
b, c; e& n9 y, X9 D8 I if (ret)2 I _, b9 y9 O. U: K
pr_warning("Could not register som GPIO expander LEDS");4 t8 W8 s1 u2 W- G) \2 X+ N/ [; L& r
else
; d6 c/ l: I! N9 h. j printk(KERN_INFO "LED register sucessful!\n");
% e* f9 n* z8 D s4 n; i0 b( K/ u6 O* X6 {) I8 h! [' k% ?
return ret;" C2 J8 A0 G5 c4 O
}
: r5 X) Y8 Z6 Q5 }. N' g8 e' _) ]3 ^5 h7 V
static void __exit led_platform_exit(void)
+ c" {' \3 i) A3 O2 W8 b1 N% {: U{
* W s, R/ {/ u+ N, m platform_device_unregister(&da850_evm_tl_leds_device);
- e1 r5 T" x3 c+ J! }( J; g
% [. E; P# i% K' f+ _ printk(KERN_INFO "LED unregister!\n");
1 w: C6 w2 f6 W4 S}. V' G+ x" \6 h1 T, G5 ^5 w9 t
x5 j* _: j3 b1 x
module_init(led_platform_init);7 v2 x7 Z+ ?, l6 r+ \0 v1 q% J
module_exit(led_platform_exit);
5 }( w k& M: M6 A4 }' N" t2 a3 z
' p5 F, Z* B1 U) s' fMODULE_DESCRIPTION("Led platform driver");4 x! t; T0 @+ o) K7 c" }" x9 u
MODULE_AUTHOR("Tronlong");
7 p( X; Z$ w; z) {MODULE_LICENSE("GPL");
& h4 J3 j5 Y3 u2 l9 H2 T# A6 r% {7 Z
y8 |* M. a( P% w% m |
|