|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, I3 {1 N n$ ^' A2 D) d% w
#include <linux/init.h>1 g$ q6 c- ` a' k$ D7 V! v
#include <linux/module.h>
* a$ p B1 N" F2 [* D" a( G#include <linux/kernel.h>
% |- @( ?4 ~7 o) o5 U#include <linux/types.h>; B0 P3 f! h3 U" I/ @ @9 S
#include <linux/gpio.h>4 |( ^" I; v+ t0 o+ [- V8 C
#include <linux/leds.h># k" O* L5 T* E0 B' G
#include <linux/platform_device.h>5 R( Y* J3 P, ?+ [" M$ b1 N8 z
9 Z1 q6 S7 |7 Z3 c7 K#include <asm/mach-types.h>
& Z% r( _4 {3 [#include <asm/mach/arch.h>0 d; Y* D8 l: @
#include <mach/da8xx.h>
$ ` Z2 i3 U* Z- B1 U; q, C8 a. T c0 J#include <mach/mux.h>
) b# J7 X# y; z" B7 l. `% E6 F, `5 {3 S+ Q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 T6 V3 t% c+ X2 c# [8 {#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); X( E2 g$ T- d6 k% o% @: @
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ @+ [6 W' U' X% _0 P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! H- U; V( d. K5 E! ], P( k$ `: y4 W6 c, R( O/ N
/* assign the tl som board LED-GPIOs*/
7 d% h7 x# F9 | Astatic const short da850_evm_tl_user_led_pins[] = { [0 M2 F6 \/ J# r/ ?
/* These pins are definition at <mach/mux.h> file */
6 V9 S [) a' t: q" q1 c( C. c2 e! i DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 A, z3 ?/ j$ }! T
-1
3 c/ Z4 L3 ^' w! T( j% `3 z" y};
0 Y2 K9 J3 H- i( Y% z( u: W F' K" F
static struct gpio_led da850_evm_tl_leds[] = {3 y( W+ C6 ^ d+ A- Y5 n
{
1 J( _: J- Q' U: c .active_low = 0,0 J+ `8 r2 f3 k2 R
.gpio = DA850_USER_LED0,( G2 \" ~/ w+ }
.name = "user_led0",
9 m: h8 c' O- o# a: X, @; e' ] .default_trigger = "default-on",
& r8 \8 M' U! ]* K( }+ J3 H },: x! C0 F) b4 @5 r2 q9 G2 D8 P9 n
{
- V6 `# R7 H* K .active_low = 0,! G' r" Y0 N5 F
.gpio = DA850_USER_LED1,! K7 v1 f1 \8 t3 _
.name = "user_led1",: A {" F0 V5 c6 r8 P% ?$ e7 E) M
.default_trigger = "default-on",- w4 c i6 U0 j8 ~6 v
},
; s0 f4 m+ J3 B; W4 p6 t' V# Q {& P; A) c0 ]' P8 E, F
.active_low = 0,; a9 @- M% \* `7 M5 O F
.gpio = DA850_USER_LED2,0 W% z: [/ `: P, [; d1 L; G
.name = "user_led2",) t- h& @1 B( X* k* R
.default_trigger = "default-on",/ _! ]1 W% z( p, F- `) n. i
},2 G9 w/ z& M6 ]1 ?- h$ L# L4 g7 Y
{, D8 V c+ X6 p6 W0 N3 d3 G4 P
.active_low = 0," H" V! b+ u5 s1 ?3 T* A
.gpio = DA850_USER_LED3,! o& N4 F D6 G' y3 K( f( k
.name = "user_led3",
; S% B3 L$ _9 z$ x .default_trigger = "default-on",' j8 S- E) V! v) `
},
! D- t0 X* q. O+ L0 v};
" z( P& F* U3 J- p: [, O5 y# \" r E. u4 u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; T& @) y5 O7 E
.leds = da850_evm_tl_leds,$ T' M; p# W6 P8 M
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 X4 x: F9 \9 @2 f8 r7 T};
0 W3 C+ f$ l: W. h( N/ e D8 P, C* [( F
static void led_dev_release(struct device *dev)
% [9 T- C9 `/ U9 x0 s/ `% G{
9 G4 |8 C3 Q F};" @' b% x4 `, U: u9 @( X
! C1 k- M* ]4 i
static struct platform_device da850_evm_tl_leds_device = {" y; r9 S8 z. o+ j" d P( N
.name = "leds-gpio",2 @- X) N' ~( n9 O" J) m6 ?/ V3 s
.id = 1,
~" V0 r( ?" V3 I .dev = {5 |6 e' u' G. `! S, Y" S1 _
.platform_data = &da850_evm_tl_leds_pdata,
* R: O4 ]7 p0 [( ]( r5 G! [ .release = led_dev_release,3 ^) Y- |! e, ~: A0 s9 m t% \& ^
}) P9 z# D2 j8 L" a: Y$ h
};
" B0 o. G: C- c( x4 y; ~- ?4 G( q$ O: I& e' @# I
static int __init led_platform_init(void)
% d6 G# H9 a: F5 ]' _& c' q{, M6 Z$ Y2 F* k+ A" I' x$ S
int ret;
" f& Q1 v; M, N( n1 R: Q#if 0
9 j! C2 O3 K/ i0 A& { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: k5 K, S8 i% T+ E: C
if (ret)- C C+ Z2 C, ]: Y& W0 K2 S I5 x
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& J9 o4 J+ D9 `, p# _* k2 x% Z
"%d\n", ret);
& V$ w8 m/ m% Q' w) _& z" Z#endif
' w5 l: Y9 y3 u3 R) C9 \ ret = platform_device_register(&da850_evm_tl_leds_device);, E' I# V; ?0 e& ?% W4 {
if (ret)$ G1 M7 W8 r) C' x
pr_warning("Could not register som GPIO expander LEDS");9 ^" v# b# v" F( Z' F
else) T5 W# V/ |6 a1 b5 u% z9 S
printk(KERN_INFO "LED register sucessful!\n");) _; ?3 ^% |0 i$ }# S
. X& f, q6 S3 |. Q8 d return ret;; a5 f1 E0 c2 z/ L' N
}& u& ^2 K+ B% M- F; [6 G
: r% k0 V2 [+ ] X3 G: Q7 E
static void __exit led_platform_exit(void)
! |* V, y9 O7 j% M{+ W" R. I4 e" M* }7 ]
platform_device_unregister(&da850_evm_tl_leds_device);5 P7 p/ V" S, u6 R' i7 W
0 T/ _8 K% q+ N6 j0 K5 O* v' c printk(KERN_INFO "LED unregister!\n");
. X% e) E! S+ E8 u}& w! @) y, \) T" v7 r
( L0 x5 g% l8 r9 g$ Fmodule_init(led_platform_init);4 U. e, J, a5 u$ w# p+ y! a
module_exit(led_platform_exit);
" J6 S3 `' \+ N! Z, J# Z8 O( [" `! G$ [
MODULE_DESCRIPTION("Led platform driver");5 c- ?1 o8 u w
MODULE_AUTHOR("Tronlong");
' J6 o# ~ ~: o8 r4 aMODULE_LICENSE("GPL");
4 z0 O5 g% r6 v! E5 e2 N# S" v. t
* V' d/ b# F) u6 d/ |# z: r |
|