|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 o( K" S# e" i8 n7 R#include <linux/init.h>* V# T# G9 \: F6 x3 Y9 x: r$ d
#include <linux/module.h>
8 c! N( l0 I# K! |+ J: o* V#include <linux/kernel.h>
* @1 ^: W! T p, Q0 l' }#include <linux/types.h>( C6 r( f! t, J8 m" _
#include <linux/gpio.h>1 j7 B" L- [! y5 [3 z
#include <linux/leds.h>
* T/ H. d2 N2 C#include <linux/platform_device.h>) l8 c% m& d5 z- R. z1 t7 z$ X1 ~- c) {
* V. P& p$ ]! I) p; l' v" \, ^& |* M#include <asm/mach-types.h>
2 u* A! I" G( J: l#include <asm/mach/arch.h>
; n7 L/ _" C8 |6 C+ n- G#include <mach/da8xx.h>
4 N& p& O+ J& x: `3 y#include <mach/mux.h>
& ^9 A: [5 r2 @5 j+ Q8 q8 M* V7 ]( @3 ~% z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 Z5 w% w0 h: H. _$ O6 G( R#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 w1 L: q0 D; F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ P1 {; f/ q" J7 n {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! W/ k/ X- M! E% l+ a5 y/ C$ j: K$ l. g- k `! ]6 o
/* assign the tl som board LED-GPIOs*/
1 a1 n7 z( F* e) ystatic const short da850_evm_tl_user_led_pins[] = {# d1 O4 l. H7 O( P# K% I" S& D
/* These pins are definition at <mach/mux.h> file */$ {+ a# D H, [
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- @$ W/ P. w& Z7 ^" v
-13 `8 k) S3 M6 R. \" q. v' K
};8 R$ b* X8 Q g7 H9 {" j
) i) _: T3 y+ J' z* s+ W
static struct gpio_led da850_evm_tl_leds[] = {
; q5 A* V) b" q h! R {/ p2 v E3 `5 v+ G- F
.active_low = 0,
$ o2 I& q. O9 B: s& L) r .gpio = DA850_USER_LED0,
F+ n! n S6 ?# n" K: C; V: C$ r .name = "user_led0",4 ?4 }! X' {' Y5 c4 f
.default_trigger = "default-on",/ x4 \: Q% \( t2 P. w
},8 `3 e0 i' m% O! n* J
{
- _( c" m5 G6 t: n( n .active_low = 0,/ Q, n2 U* M, Y/ Z
.gpio = DA850_USER_LED1,
0 S; @7 I8 f4 C) x .name = "user_led1",; N4 q8 C! M L; V; f+ [; N; N$ Q
.default_trigger = "default-on",( x$ m0 G1 G: D% E9 ?3 ^. ^
},3 e3 V$ W& R' A6 X" y$ G
{
: G0 Q/ P7 s# }9 R i0 R! i .active_low = 0,
! P J) r+ C% z6 L- ~: j .gpio = DA850_USER_LED2,+ Z* W0 O0 a9 Z
.name = "user_led2",
9 \7 n! C5 S+ s1 ]% a1 w7 t, p .default_trigger = "default-on",. [ D" r0 ?2 ~/ S2 r8 z7 m( B
},
% S! n1 Q& `0 }7 X {6 P7 ` Q) f3 ]; L: `
.active_low = 0,( S. T" K; X) s5 p8 o, y
.gpio = DA850_USER_LED3,
5 U2 Y& X, k# a( r n, W) H .name = "user_led3", g( @2 x; T1 ]' }5 K1 j( J
.default_trigger = "default-on",5 V' N+ Q* ~9 {& P
},
B4 u, C K) u$ k2 n& H- P};: A6 z" Q3 D& d2 x8 e' D- j- {
0 x E9 k2 {: E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ W5 y' M$ Q! r- C( d .leds = da850_evm_tl_leds,' ` l3 l7 w6 g9 @/ j
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 |$ K7 G0 \6 {" P};
! a" s. v& |- f" k( m# e9 Q
. { P% A, ?0 p) E+ {/ estatic void led_dev_release(struct device *dev)3 F- P9 _1 }, l( C% D1 b% ~
{$ {, U% r n# |% L# C
};5 A" f' n2 l- W
4 ?3 o0 }6 F7 Z$ N/ J/ t! @. d! \9 r
static struct platform_device da850_evm_tl_leds_device = {9 @- d% `$ d2 }7 Z6 X) _
.name = "leds-gpio",/ [7 L3 d8 p; I
.id = 1,
6 C/ l: y2 \" f2 o7 l! T% [6 \ .dev = {2 b9 w6 A4 e) h( C$ C
.platform_data = &da850_evm_tl_leds_pdata,0 M7 F5 Z U8 m
.release = led_dev_release,
7 l1 `' B# R0 w2 L* f }
4 {( [0 a8 X, M0 _; Y};
$ C3 z3 l+ D. h! Z) ]& q& _2 m/ P( w+ U/ k3 V4 p
static int __init led_platform_init(void)/ _3 y5 Q2 @) z! }1 J* r0 @- F
{* a2 f. Z1 v! s) v) R, f
int ret;
" a6 _, f: H9 K* t# r9 e#if 02 ]0 o f' a7 u3 Q. n1 o
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); A, O% I, `0 H* v
if (ret)
8 ~% z4 |) [( j4 N" m' m pr_warning("da850_evm_tl_leds_init : User LED mux failed :", ^: H* ]2 x/ T' L4 E- o# l
"%d\n", ret);+ s3 M' ?% M m8 K% }
#endif
$ S2 G! j6 h( H' M ret = platform_device_register(&da850_evm_tl_leds_device);
+ w0 B1 D' u# N4 r7 I+ J if (ret)
% Y( _! h) b v1 Y& S pr_warning("Could not register som GPIO expander LEDS");2 F: ]6 i4 t7 k/ P6 ~, L
else
6 u# [% w. w* B6 A printk(KERN_INFO "LED register sucessful!\n");
3 n4 C5 \. A9 E; |
7 V+ o* O8 E2 ^# Z/ \( h K0 l return ret;
* N; k4 Z* h1 I6 t7 V) p+ C}
E$ E0 B2 G9 B: ?7 H
: ~' \4 x, X) m& h Mstatic void __exit led_platform_exit(void)7 o8 A" ?/ p# q2 i4 n9 y. \( M1 g
{* v$ T( e" x1 R! d0 d
platform_device_unregister(&da850_evm_tl_leds_device);
4 Y& N2 g$ e* c% ^) N3 V' H6 N$ y, t
printk(KERN_INFO "LED unregister!\n");
9 d5 @+ v9 k/ z9 j! v}
0 h \+ Z! w* E8 g3 i O, G7 a7 Y) U- u4 w% ]1 e4 R$ {
module_init(led_platform_init);
8 B M8 _) J* ~8 u! umodule_exit(led_platform_exit);
# o7 D# v: E7 E* f2 f
$ F. N& P$ j. k2 L4 w- A$ FMODULE_DESCRIPTION("Led platform driver");
# p6 C$ |- l2 k. a& |: _MODULE_AUTHOR("Tronlong");4 b' u7 J _5 x, ]1 o$ N
MODULE_LICENSE("GPL");# ?& ?) B: q0 S- U, V
6 v6 I; r$ |9 S% h/ I
|
|