|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 x0 e4 `# i- ?4 c3 D- @#include <linux/init.h>
: a9 C7 [% C: O3 ^- }5 L! A3 j#include <linux/module.h>
/ J1 Q# R2 S, p! [) @; v. _4 d4 u#include <linux/kernel.h>4 L9 q: a1 ?6 H- O
#include <linux/types.h>7 Y, y/ `' h L+ K3 n2 w x. ^6 _
#include <linux/gpio.h>% X0 a3 M4 e. H, `
#include <linux/leds.h>% o! l" }! q8 z( B V5 D T
#include <linux/platform_device.h>/ X) `' D; {: h9 u' u2 W
+ z* L! x, J% i! v) ?2 i" M0 y
#include <asm/mach-types.h>0 f* _7 N* P; [7 Q6 j/ U) g
#include <asm/mach/arch.h>' {% h* B' l. G) L+ W: ^
#include <mach/da8xx.h>2 {+ ~: g: i k1 Q1 e
#include <mach/mux.h>
8 H P' l7 ~. s3 p. J1 B& y1 y& B+ H" `2 @, I! C: d. y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! i, p0 L. I' e6 D+ h#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% y$ R7 t6 |& d% k
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( j) @; ]3 |) C6 f( V1 z/ c
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* \! m! q$ ]5 g" f/ N
9 G) ?. a/ }0 H
/* assign the tl som board LED-GPIOs*// C! N; T1 n- X f+ e% G& }
static const short da850_evm_tl_user_led_pins[] = {$ k! P% P* Y8 [) ?5 q
/* These pins are definition at <mach/mux.h> file */
! h2 d- V E/ l DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# f, Y8 Y7 E! s4 r
-1
: v. g- w& S$ Y' f};
1 A& ?, z% L8 E b6 T. r1 h
# X/ t% i6 c2 i( X8 |static struct gpio_led da850_evm_tl_leds[] = {
6 \, e) F" n1 t5 E# j% _ {( G3 @8 {6 k a+ i9 }* Z: m0 E _, k
.active_low = 0,
, _- q' G, O G+ A .gpio = DA850_USER_LED0,% Y& U/ C2 X' Q) v% l E
.name = "user_led0",' l P3 |* l) j
.default_trigger = "default-on",+ J0 f8 N5 d9 X" d7 Y
},
0 i4 p( U3 }2 T \4 P: F8 u7 J8 W {
; P3 H0 ?" N1 { .active_low = 0,
( l( e; @' j, ~ .gpio = DA850_USER_LED1,
" o6 C ]0 c% C/ { .name = "user_led1",
" K: ]1 n6 [: X .default_trigger = "default-on",6 }3 B1 W3 c$ {% X
},
# D, `( Z* y% A: f8 z7 A {1 L! b: o# W- F5 v& U
.active_low = 0, r2 a- U$ y2 a' k' I; N6 a
.gpio = DA850_USER_LED2,5 \1 `- w' f- y" g# K
.name = "user_led2",9 b9 J" V2 h$ ^" k- v( U
.default_trigger = "default-on",
5 c2 }( ~( \9 a- h- R/ Y },
; Z6 y3 H5 B! W" y# a& w {8 i# ?' I. t3 h. t( |
.active_low = 0,
% P5 i3 j* B W# ]! h! j( c .gpio = DA850_USER_LED3,
& E* T2 b+ \$ K- h. Y3 H9 C7 | .name = "user_led3",! o8 g1 D0 F2 `3 w6 Q" k
.default_trigger = "default-on",9 H6 I# _7 B6 Z: H; T* a" n
},1 F7 C7 i, y& C) P) x- Q
};; o ^$ Y B" i: y5 j
" M+ Q: M- j4 V" a6 Y! t0 @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 r H. Z: [, x1 f' V5 ~ .leds = da850_evm_tl_leds,$ H# g$ t/ V8 t$ x6 h0 _2 R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) e+ U2 W) Q$ j, | k/ C};
. M% A. s. b! @/ R9 A' x2 e# g1 q& v: e0 y
static void led_dev_release(struct device *dev)
5 {9 U! h( r8 T6 N' F8 v{% r- V" _( S" ^* |
};
# h) u' w8 o2 I" J5 K( M! L3 x( s* P x3 N ^- N
static struct platform_device da850_evm_tl_leds_device = {- X: ^' G# c- q1 _8 i
.name = "leds-gpio",
) ]; G# b$ z- O C6 B .id = 1,+ V. {5 _( G, O! o8 `
.dev = {
4 L2 I2 X& l* [& z3 S, ^& k( j9 d .platform_data = &da850_evm_tl_leds_pdata,, _1 H/ I7 H9 D0 x1 q
.release = led_dev_release,
9 c9 ~1 q8 Q. Q$ N, H }
9 Q) d% T) U' r% I};
7 L4 [# k0 ]1 H" B& R) ~
3 ]- W0 G% I3 [9 [* E7 r/ c4 estatic int __init led_platform_init(void)9 u; i7 H" R: t, C. Z% w
{' ~" @, C V6 z4 l' k# [' A
int ret;
) |1 z; |; C, F0 [+ [#if 0
1 X' O8 f9 C3 l% L s" s ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 C! @% T0 F% D
if (ret)
7 p' }9 x% Z1 S6 @4 ` X" I pr_warning("da850_evm_tl_leds_init : User LED mux failed :") w7 b: v7 B5 h8 `" p
"%d\n", ret);2 @9 C P5 E7 _
#endif
* M! K8 G9 ^1 t; q: J. F, s ret = platform_device_register(&da850_evm_tl_leds_device);, J" |8 t& Y( H( {
if (ret)
% w7 f; x$ S( G! b# i. G pr_warning("Could not register som GPIO expander LEDS");- V8 S" z* o6 o/ g* B2 \1 g
else, G0 t- u) e, z1 L+ `0 G7 e7 y
printk(KERN_INFO "LED register sucessful!\n");5 l/ J# t+ M4 k8 {- K/ d$ q
, c3 J- M |( X5 i" T8 R. T0 f return ret;1 Y# L5 R: \* J9 c: j' _
}- E3 G2 H. _7 x2 V+ y
: U. d" k+ g! ~) I4 r3 `; w
static void __exit led_platform_exit(void)- [) Y# @, F4 r) @! X
{& ^0 M: H3 Z( }# c
platform_device_unregister(&da850_evm_tl_leds_device);4 N6 i: ^# S8 \- t0 t
2 }; Q6 r( ^ U9 E9 P1 j+ H
printk(KERN_INFO "LED unregister!\n");7 ~6 S* D) t, N) I
}
9 G0 S4 [" |& \5 W }% p
3 ~) ]$ q* z% x3 Y/ S4 y) H0 emodule_init(led_platform_init);
, I. y2 f F' k5 Amodule_exit(led_platform_exit);
/ \$ ]+ H* h# F8 F- M! ?9 x1 P5 E% b* F7 q0 w9 f+ V/ n" ]
MODULE_DESCRIPTION("Led platform driver");
: V' e7 T- _7 A5 K5 NMODULE_AUTHOR("Tronlong");0 B4 y5 c8 U* ]& a7 p0 \% S7 |( s) X# q
MODULE_LICENSE("GPL");% K* t8 p& r1 r6 s8 T+ L
+ ^% U7 t% R. m# K3 d" O/ O* q
|
|