|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# @( ?4 h% m* O; l. s5 o3 Q#include <linux/init.h>
* I4 f% G2 ?$ d3 S#include <linux/module.h>
9 o/ v9 Q* ~$ [9 T#include <linux/kernel.h>6 D& I: c% o* U: i" N) j; w
#include <linux/types.h>
8 B, W- k) M# W# `+ I#include <linux/gpio.h>$ m0 w5 D* o6 k; z h7 c% x
#include <linux/leds.h>
) E B& n" b M4 w5 `#include <linux/platform_device.h>& f( \5 B) L- r7 M1 e
$ ~) v) R& V& U+ L8 g. q/ I: R
#include <asm/mach-types.h>3 D+ h( w/ G9 T' r0 g9 E! E
#include <asm/mach/arch.h>+ r0 _0 A- w; z8 f# O* `' z! ~
#include <mach/da8xx.h>* e8 |; _: n7 w0 \# I( y
#include <mach/mux.h>
3 m! {% [% q& h0 \9 \( F% x+ n/ ?/ l' a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% I+ p4 r: S& [& q8 P) w; }( \#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
t# W' m- a% l' H( s" A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ p% |+ ~6 C# A) x2 M* z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ z, x6 G& V K% X/ w5 ~3 Z( D, V
( k [ U A2 r8 l/ ^/* assign the tl som board LED-GPIOs*/" {7 `2 b: y# A' m' l
static const short da850_evm_tl_user_led_pins[] = {& {( M, b2 f3 w" ?' X* J- F
/* These pins are definition at <mach/mux.h> file */9 e) ~( ~) I$ ^" D
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" {5 j' f( Q; I -1
, P/ Z; `3 m( D2 a/ Z};) Q0 l2 N3 \% b7 z+ v4 j
2 v' R, P! c$ P7 [+ O3 |static struct gpio_led da850_evm_tl_leds[] = {# W% H0 t+ Q0 z" D3 b2 P
{, t. H! o# V/ `9 [% `8 L7 ~# B, f3 C
.active_low = 0,
! L) Y, _) P6 x: U/ }2 V9 z .gpio = DA850_USER_LED0,
& _$ B9 o1 b& f" L b& l+ D .name = "user_led0",
9 \) d$ ^$ O. `3 ] .default_trigger = "default-on",
% {" s. C' T5 Y" d. I },. D) F" u% \4 ?! Z( }
{: n' U" j; j7 f, P; I, _
.active_low = 0,6 _& E/ _1 @+ P3 u8 x
.gpio = DA850_USER_LED1, D7 S$ `0 B& U L) B
.name = "user_led1",4 I. W7 F3 y5 |. F. B
.default_trigger = "default-on",
8 k5 L" N0 \( f j4 K- A$ Q3 s },+ c4 w. ^8 l: Q$ t+ r- Z
{
$ B7 l4 |; K- Z" Q# s .active_low = 0,
& ]% ^- S9 C7 |/ y( w3 M6 ? .gpio = DA850_USER_LED2,# Q7 Y8 Y/ D' p/ B7 A
.name = "user_led2",
- n$ q2 X! [; t* u1 N8 t2 u .default_trigger = "default-on",; ?. K* N" M- k: t7 o
},; }7 P8 B( v& W% `
{; R/ z! A6 l8 a
.active_low = 0,
N9 \% L; r# X8 S7 A7 b .gpio = DA850_USER_LED3,
' d6 z7 F3 e# \# ~6 ]1 ^0 P- D .name = "user_led3",
+ U [. }+ j" _& _( I$ n, f' P .default_trigger = "default-on",
( C/ s9 K7 O t- L },8 A8 ?' T- } `. G
};
% k% D1 F( _ s' ?- G5 [# N1 Y4 X+ K: K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( i$ f, t1 p* `( W6 G& C
.leds = da850_evm_tl_leds,
: d2 _0 z; @# |9 ^4 ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 I+ L) ?. z# [* c: e8 @
};
8 f o! A6 V% ^! O8 v/ I- B/ q0 q( p
static void led_dev_release(struct device *dev)
, ]. k% d8 Q# i+ t ^/ l' b& ~{# v% M4 Y7 S$ c3 l7 I
};
8 V/ U! k! [+ M w# R1 J: x( a. ^7 j- K! t2 x" O% c# _
static struct platform_device da850_evm_tl_leds_device = {5 K* e: L8 D4 Z2 h: {2 c
.name = "leds-gpio",. `. O* y8 ^+ a: x' a! A4 t+ x* Z( J" j
.id = 1,
7 m) ^- l& R1 t! c( S: N .dev = {
0 O% j4 z F2 D. W6 g* G; Y .platform_data = &da850_evm_tl_leds_pdata,) R2 G% o7 r( w3 ?
.release = led_dev_release,
, I3 c0 R+ ~7 F2 _ }1 r" }6 B4 n" X8 B
};
8 d$ {8 [3 o, ?( o
! l a0 m, x- I; p hstatic int __init led_platform_init(void)
, W( O8 }' `) i% ~# o{
) F( H: j8 G2 t9 u5 l- C4 } int ret;- W) N' _+ h S h0 F y- E
#if 05 _! H) `- _% U. J) h; T) v X+ W5 s J
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 i8 H, S3 J# ~( Y if (ret). Z1 J4 ?% `( R6 o' [
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- t" D, C. A; q& n6 \
"%d\n", ret);3 z/ K3 G. c! E2 \9 x8 ]# O8 m2 D
#endif7 E `+ h* a e
ret = platform_device_register(&da850_evm_tl_leds_device);0 e( ~/ ?' U8 ~9 ^
if (ret)
]0 Z' B. h8 J) W7 C+ g2 g! Q pr_warning("Could not register som GPIO expander LEDS");
5 U( E9 z0 }" W0 O4 y( a else
. N8 S( B. J8 Z( K! x4 ] O" [ printk(KERN_INFO "LED register sucessful!\n");
3 d8 t' \0 J* N( B- K5 u
) O' P0 p' w: c return ret;
6 P' E" b5 o& j3 M+ `4 A) ?& `}
0 u! l7 G, U, y3 \" V- W+ j+ M% h- n
static void __exit led_platform_exit(void)
5 g7 h: ]+ {9 j# a9 H: T5 h{- E2 ^6 H- Z9 M) _
platform_device_unregister(&da850_evm_tl_leds_device);6 g, O6 p9 y- T: d- d- f) K) |
& T) @! j# ]" p1 Q) v/ D6 R printk(KERN_INFO "LED unregister!\n");
: U' b. k- Y: N4 x {* o/ l& s}/ M0 }. z8 R% h/ Q, z
# W7 @% r; ~! R0 ?, x, e# v
module_init(led_platform_init);
! v2 ^6 M! D1 d% W! |, P9 k" O2 kmodule_exit(led_platform_exit);" z0 Y9 c3 f6 ]% i3 ~ y/ @5 @
3 k1 {/ h# F. I) c9 T7 {MODULE_DESCRIPTION("Led platform driver");! ?: a u/ h9 v
MODULE_AUTHOR("Tronlong");
- T+ q% L! b+ `MODULE_LICENSE("GPL");! L8 t* O/ N# B$ j0 {, j
$ ^3 c( a# b& O G% i( y; d! Z6 O |
|