|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* o- N1 o2 y: S9 {& W#include <linux/init.h>
6 ~- R" q) d% v6 p#include <linux/module.h>4 J3 z- q% s' [' V3 M; d# }7 B
#include <linux/kernel.h>7 @5 s% G5 W5 E+ c; v6 s
#include <linux/types.h>$ |1 D$ G' ^- G; t
#include <linux/gpio.h>
; E0 g9 g4 b3 N9 d$ j+ E* o, l#include <linux/leds.h>
/ i# i' g9 R% g# o! K#include <linux/platform_device.h>
* p% f* ~5 u. I, b8 K: M+ @$ f4 g6 P; k) j- D# E0 S- J1 ^
#include <asm/mach-types.h>& Z5 ~7 F6 i+ X- b$ {
#include <asm/mach/arch.h>2 \7 J) K+ [, f' o. h. G5 t) t
#include <mach/da8xx.h>3 C7 ~* C5 h* p/ ~$ ` f
#include <mach/mux.h>
1 O6 T! V. {" {2 \2 x$ g5 Y/ ]* k! r' V
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ o( u6 B$ |1 u5 W- r#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. t% Q7 o7 s" x3 P7 b#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' K& ^+ G3 s C8 ]
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( d- T- u# _+ U7 N: A
6 n* v1 ]! o# @+ b2 z/* assign the tl som board LED-GPIOs*/8 K# \; c4 K/ v% b$ P F. H& p" |
static const short da850_evm_tl_user_led_pins[] = {$ n# i( r4 u% p6 d/ P" O
/* These pins are definition at <mach/mux.h> file */. `/ R3 y- q) T7 z! s+ M3 o% x: g( q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! R, ?' G; z. Q. r. I1 @9 ^$ w -1$ v* N; s* K! i: E# q/ w
};+ t$ X- C. w6 e3 G
2 G- f3 B2 a- |! L8 T
static struct gpio_led da850_evm_tl_leds[] = {- s5 d) `# F2 L0 Y
{
$ `. w! E$ ?( X, [( P* w1 O' k P .active_low = 0,
" X: ?% v: i1 k; x( f' {4 a) n .gpio = DA850_USER_LED0,: t% g7 V. I3 U. R8 Q/ T. b- a
.name = "user_led0",7 Z. }4 l4 m' _
.default_trigger = "default-on",
3 d) j6 b. h8 _+ c$ Z- w },8 w5 N( R, F% {% c1 r& j
{( O: r& T5 {# v" q
.active_low = 0,! j7 e$ Q# a' h5 W
.gpio = DA850_USER_LED1,# z `2 y7 V- |8 D, H; {9 O2 ^% H
.name = "user_led1",; `# v; p ` T i( \
.default_trigger = "default-on",& v, M5 w9 Q5 G9 Q* D
},
$ f7 @# v1 Y3 E9 h* e( I {
0 j3 R ]2 p7 V# I- C, A0 J .active_low = 0,! @. t1 j& }- D$ n
.gpio = DA850_USER_LED2,
: D. A. |& Y' g4 l) D .name = "user_led2",
5 L: O6 R5 N1 o2 d+ @8 u7 G5 x .default_trigger = "default-on",0 e3 L4 r% l( {' R4 A$ S; R4 e
}," k- e( |4 N7 V
{
- A9 j" c4 V9 L7 [* X! W) O. Q .active_low = 0,
$ s( w4 z) O$ u: }4 J .gpio = DA850_USER_LED3,
8 U9 X! z. q' i& |4 Q .name = "user_led3",6 Z/ |$ x o, d/ @$ b: Q* Z
.default_trigger = "default-on",
' b- R" S7 i+ | },
* j7 G& D+ d- w- [+ C};
/ P( C" I; p1 J9 b- g# g D3 B* h- _
: y, c) \' U. _4 H- ?5 xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* ^0 I' z: G' `# o- M) ]: } .leds = da850_evm_tl_leds,6 L. a7 D5 B; g) c4 U
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 U. n$ O/ h% d# i8 C};
9 N4 Z1 [8 }* w/ {# `/ V
, y( e7 [* z$ ]# N( {2 J% z% gstatic void led_dev_release(struct device *dev)- ]4 w) w1 u x) Q% b' p
{
& i; a n1 b& N6 A i( n9 x/ Q};# Z/ s2 F3 E a3 V3 T
1 C0 w1 _5 V8 |/ ystatic struct platform_device da850_evm_tl_leds_device = {
+ K+ f& p% R; }/ k5 k .name = "leds-gpio"," t' M8 S: E+ h# M. e, H6 H9 {
.id = 1,
8 _+ x6 i* e3 x2 i0 J1 w .dev = {
4 t$ w0 i3 O5 [$ p8 r .platform_data = &da850_evm_tl_leds_pdata,6 i1 K2 R6 C N5 s" N$ j" F* n
.release = led_dev_release,
# r \( i$ O; H o9 e; m }$ N7 n' o: [, B' `# T
};
+ }9 M) W1 x* w) o# k
4 ?# i0 R4 y8 X' S0 D' [' N! p7 lstatic int __init led_platform_init(void)' @3 K( A l! H& m' ^ L
{
/ w& Q0 ^' u. R, U" H& ?9 E4 p int ret;
0 Z; F0 ?0 u6 o$ g#if 0; x2 X, L' n# O! z$ ]
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* W, J _6 M! g5 F8 R if (ret)
8 z+ O3 V& G5 Z/ G4 v pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 C k( C, c& \ p6 A "%d\n", ret);
; U: O( b7 P! ?, w4 b. y9 X( L9 h- T O#endif
% U% s Q* [/ L( I' U ret = platform_device_register(&da850_evm_tl_leds_device);# K& X4 g$ E% z2 E$ e
if (ret)
% ]9 O+ Y" x& |* n' y M pr_warning("Could not register som GPIO expander LEDS");
. Z/ x- p3 d- S. P else
+ ~& l4 U7 a" \ printk(KERN_INFO "LED register sucessful!\n");7 @ y. A/ a r3 H" B8 H% b7 {
- W: }: `3 ~9 o8 \/ g) J# r return ret; c8 `. u" `' U' T5 L
}7 q+ J- | B5 a
% `& `6 Z* Q, N" Jstatic void __exit led_platform_exit(void)
+ M* S, ^+ o$ f3 {$ K{
: d0 @" P9 O, |4 g% T$ H- |, O platform_device_unregister(&da850_evm_tl_leds_device);
* L" U7 h0 h/ V* h: A9 a
' p) h4 ] Y) Z1 t printk(KERN_INFO "LED unregister!\n");/ D z; C( {% s: q' Y# m
}4 n/ M4 s; T8 s6 V1 q: Q) P
6 H& {* A6 b9 W4 `module_init(led_platform_init);% d. _ W% l2 z2 X5 L/ A2 F. h
module_exit(led_platform_exit);
: q f# @# w4 I f6 h4 z$ _% z
. w1 S2 m$ Q) MMODULE_DESCRIPTION("Led platform driver");# j* e$ x' ?& Z0 C' Z
MODULE_AUTHOR("Tronlong");9 e3 y6 r8 L3 x9 v! Y& r( ]+ Y6 c
MODULE_LICENSE("GPL");* w: y: e# _( ~4 i) k/ @+ F7 [0 j
2 r# x: |( b, }+ G& U/ r |
|