|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ y, f6 n ^' u/ J$ C+ S5 o#include <linux/init.h>
* d2 e8 l! g7 x) O4 h#include <linux/module.h>
% a+ }; M9 N, {- E#include <linux/kernel.h>2 e) C4 Q1 |0 A4 j R& P
#include <linux/types.h>0 Q$ u7 \8 j0 S4 ]; X- A
#include <linux/gpio.h>( k+ L1 x, G, e+ d! }" t
#include <linux/leds.h>7 o8 B5 f+ ~- e, m( j( x1 S4 p- w
#include <linux/platform_device.h>
' S, {% {- q7 _5 P _0 S" T/ b
' T& Z* @* C& I0 @/ T/ D- B#include <asm/mach-types.h>; l0 x2 A, q: z- @
#include <asm/mach/arch.h>
9 p3 q; ?* ]: R' L. T8 v" {#include <mach/da8xx.h>
+ l% }. _# }: ]( @#include <mach/mux.h>
4 a% g" w+ `/ v; N
Q* B- [8 m% w' \/ q; C# D#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- Y7 r# h, P0 l7 g- @- t4 v
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- B4 q) x; o" A7 e9 u4 r) p% G* r; e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) y2 Y& \" D7 ]; c$ Z* j" o( B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 Q: z+ e% f6 J* ^9 s4 J
; L' e3 R: s8 E3 Q) E/ d2 ^0 I/* assign the tl som board LED-GPIOs*/
) v( t0 k2 @$ A2 t: `* q1 hstatic const short da850_evm_tl_user_led_pins[] = {
5 P- m0 @3 @9 Y: Y' \, P /* These pins are definition at <mach/mux.h> file */; r, ^& a" k7 ~2 ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 b2 H5 m# ]5 E* u7 n
-1% W c7 G. x+ M( R/ x
};
$ Y$ z& ?% r, t7 A0 p1 K# G9 b- y. T
& M4 m' r- U% ostatic struct gpio_led da850_evm_tl_leds[] = {: } a4 i9 n) n
{
# V/ A& K- G0 p; W1 Y .active_low = 0,
" j2 M# E$ [; j. V" a .gpio = DA850_USER_LED0,
& ~& }- a1 y+ A3 D( b: {! i! d/ h .name = "user_led0",
4 W6 J# `0 Q, | .default_trigger = "default-on",3 c4 b$ K6 l; z8 q2 O* [' X, U& n
},
" c+ B0 [ j: |/ S {! D& ]3 h3 b' ^1 b2 p' s
.active_low = 0,
D! ~# W0 o, x k5 E .gpio = DA850_USER_LED1,
# N" X" z2 N2 C% X .name = "user_led1",* {6 T: z; l; [- X8 R! f0 r1 ?
.default_trigger = "default-on",
9 @8 k3 s8 }8 j },; ~4 T& C& `. T1 g' J
{# [- \# b4 E/ z) b; \1 x
.active_low = 0,
& v6 p0 g$ E/ I" O .gpio = DA850_USER_LED2,9 E0 [& l# X K0 N, F2 Z
.name = "user_led2",9 u$ r$ j* [ T) }
.default_trigger = "default-on",
/ v3 @" a6 R, _! M8 o2 X* y# f" J: r },# r1 | |3 _! M
{
9 [6 u: ^1 Z$ A" _" w# V .active_low = 0,( ?# ^$ e4 F& |7 y$ r; t7 ~% w
.gpio = DA850_USER_LED3,+ }" Y+ J# i y2 Y8 n9 h5 F
.name = "user_led3",6 K {- ^& {& A, p
.default_trigger = "default-on",
$ z" u; F5 P% y },0 h. f% d1 n9 v9 r i
};
3 H2 _* z4 P7 R
; ~( |; T1 S3 X Nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% ]$ u4 P1 C* C) l- E# z3 Z .leds = da850_evm_tl_leds,0 G# d, m3 q# [* X+ V" L5 }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( V! H1 {( v, c8 h$ J# z8 d& \# L
};6 Y2 ~5 X4 I0 r
/ z6 ?' C/ T5 ]. V
static void led_dev_release(struct device *dev)
/ s" h. D8 j- r% e{9 d z. d" W9 j! t. Q( a {4 ^4 v& a
};
# U( x; q4 r9 C) |. H- W; X3 u! p/ F, S& ?. c0 N: ?2 c* n
static struct platform_device da850_evm_tl_leds_device = {; c# y; p( v# J* G
.name = "leds-gpio", G. k3 h: R7 d4 M. C( ~2 r$ P
.id = 1,
+ E' V9 e* L# K- B, n# L .dev = {( x& ~) J6 N9 f. d
.platform_data = &da850_evm_tl_leds_pdata,2 t7 Y4 Q( k a& \" X9 {, T
.release = led_dev_release,
- B' Z+ r7 F: c6 R8 b }
5 s' }# l4 p% e& T' F* c, @};. @9 E+ K7 e T' H) p6 z( S; X
8 f9 L6 J% n' R3 U: o& Zstatic int __init led_platform_init(void)& V9 ^4 i v9 D; \; n
{
5 R" P s/ h# B* n2 R int ret;7 N$ z1 ~3 Z& W$ i5 A% D
#if 04 T0 O) j; ~! c$ _# Q; W) [$ N3 m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" f# m7 r3 ^0 A) ?; B if (ret). P9 O7 h* B f: N1 ]. v9 D( l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": h/ G- @ e8 U7 p- X
"%d\n", ret);
- l5 m/ Y- S* p, d/ z6 v" X#endif/ M6 E% Z/ m. Q" p; I
ret = platform_device_register(&da850_evm_tl_leds_device);6 d* x2 Z5 W" l1 Y! n
if (ret)
2 y+ C" I! B$ T$ w9 G* J f pr_warning("Could not register som GPIO expander LEDS");) C3 C8 i( n( t! Y
else+ e2 W F& V- [# O! K4 _" ]& J9 u
printk(KERN_INFO "LED register sucessful!\n");: f0 D: {3 c* Y: g3 s
& J% j& t _0 n8 |! S- C! h
return ret;
" u' Y% S9 g5 n" D: }1 @# e' @, R}3 M9 W0 S+ D# r* _" b9 K% Q
3 f7 [' N/ p1 @% W( n2 c
static void __exit led_platform_exit(void)
$ M9 R1 G, B" l. ]: L{, m/ q2 n7 N' H: p" F" I/ j
platform_device_unregister(&da850_evm_tl_leds_device);
" F- |9 X7 V5 S
: K) o c9 R t1 K2 j, r. s/ B) |* r5 _ printk(KERN_INFO "LED unregister!\n");
p4 m; H. p, }5 k, O) P}
! `; I# t! r I; f7 k: ^9 u
1 A/ U( T9 y$ @) M) ?- cmodule_init(led_platform_init);2 o' b' t$ l) |/ T5 c4 r! Z# H
module_exit(led_platform_exit);8 {& u# R9 a9 h2 x! G# A; Q+ j
" T. w/ p: i; PMODULE_DESCRIPTION("Led platform driver");
5 }$ R+ U; Z5 z2 u/ ~% z" \4 ~MODULE_AUTHOR("Tronlong");5 s$ I; M6 @/ r( X. r4 U
MODULE_LICENSE("GPL");
4 V; M8 T* {, Q; L1 w) y
, m; L7 ~0 @- K2 e0 e% b |
|