|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! \- u0 O# }0 T+ x$ W1 F#include <linux/init.h>6 g1 Z( ]! [8 y P- E) e& T* ~+ w
#include <linux/module.h>! `6 ~( x4 a# Y& q
#include <linux/kernel.h>
q( W# W1 R0 H$ r" V. L9 X4 M#include <linux/types.h>$ L! o8 N* ~- @; N% m
#include <linux/gpio.h># l# |% I3 b) `' w5 X1 N
#include <linux/leds.h>0 L2 f7 {2 K& a. J9 i- J% r
#include <linux/platform_device.h>
; }4 n5 f. \" X6 ~' L
5 g) b1 ^- {* _! O) W, C#include <asm/mach-types.h>
1 q. _& C' n) _: O/ z* N% T+ t#include <asm/mach/arch.h>0 G2 Q; g6 `( L4 X
#include <mach/da8xx.h>
9 K, f/ | o& ]0 y3 f( Z- {#include <mach/mux.h>
8 y R2 W+ D6 j0 ~5 c& V4 n8 l% M2 ]$ F1 N% V& w
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ S& \1 H! w6 @ M# ~7 v4 }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% u" S6 y* W! Q3 Q! i h8 J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. T/ s; A0 ]4 a) S' U0 d#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" [* f: w/ Z) j7 X7 b n/ F% ~1 Y! Y# y$ u- l
/* assign the tl som board LED-GPIOs*// o8 i/ j" I6 T6 C ?
static const short da850_evm_tl_user_led_pins[] = {: i5 J/ ~% f9 A. C$ Y/ D; g
/* These pins are definition at <mach/mux.h> file */5 w* F% D, J' c3 q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' i8 \* x) A# K) K -1
8 U& \5 V# B* l. h( M; ]};. ?; D% f& Y( U; `/ O+ C3 E
8 H; z3 G; c" h7 @# [) ^- i2 O
static struct gpio_led da850_evm_tl_leds[] = {2 F& f& l3 _. }8 ?/ F1 X
{
6 T( f1 _% A! v: d! ?3 [ .active_low = 0," N) O: G1 t+ I' D
.gpio = DA850_USER_LED0,
! C7 ^7 X+ L& ^& l& u3 K. N& C .name = "user_led0",8 m! W# n! ^; r; V% v2 T
.default_trigger = "default-on",5 {7 U8 k& F+ W _% B8 c
},& @4 r( ^2 s5 S* |
{# I; w/ }6 s( P& `& W
.active_low = 0,) I( ~# z- f1 `/ C: x2 h8 t& g7 I
.gpio = DA850_USER_LED1,
' S" L0 i& O0 \2 {* q .name = "user_led1",
- }0 q; v0 J" V .default_trigger = "default-on",
6 J% K3 b' t4 d4 c },
) S! i; z/ t2 B% c {* W$ L, d& G( |9 u3 X4 G
.active_low = 0,
" s! I; ` g# L6 v .gpio = DA850_USER_LED2,
2 j9 |: l& _% k! z. w8 p3 j4 Y9 d .name = "user_led2",. ?+ M. O/ M: W- T6 E
.default_trigger = "default-on",
! e: h3 l, m9 g! Q- @; [7 }5 W4 _ },9 h# S# h+ v, F% }' `
{
; r9 a% |5 @; T8 W: I% Q( d .active_low = 0,
% V- t- d1 j7 }: ?' v. \ .gpio = DA850_USER_LED3,
5 Z2 ]& w5 X5 X .name = "user_led3",( r; J9 @$ [# T6 W: u7 U" M
.default_trigger = "default-on",
' T( A. D# V5 G7 G- P1 t },
) v9 G9 U- w% B. V};
, W8 {& ]: y0 z8 J. E5 h: k
5 W o+ i/ {, k5 W7 Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 S8 g8 G3 C3 b) j1 [
.leds = da850_evm_tl_leds,, l9 c3 l) `( `5 Q1 J* O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" c4 A, I4 R) @ ^+ A9 u2 e};
6 l8 C; |+ B- A* [
/ E2 V) o s: n3 m; cstatic void led_dev_release(struct device *dev), i+ r9 R2 T# j! s1 Y3 z) ?
{6 u$ L$ w& C9 v
};9 g8 b$ L g' E `, i4 T. b
5 z1 j# d7 @8 D |" [' O8 jstatic struct platform_device da850_evm_tl_leds_device = {! a5 ?7 A# P% O" l! x
.name = "leds-gpio",7 g+ x3 Z# R& a: X3 X1 a
.id = 1,1 U$ d+ k% ?/ l1 z7 O
.dev = {
0 K- Y* {6 n7 R; T" | .platform_data = &da850_evm_tl_leds_pdata,* [2 i# m! v0 v% X/ P- s
.release = led_dev_release,0 x9 e: H0 N0 t1 a( J# p7 ~
}
* e8 ]) P5 `# h! W# w$ N, P/ Q3 m};
, r% l5 h/ A% G, ?' D8 U5 h) Z" d7 Y3 u* U* O( D2 H
static int __init led_platform_init(void)
0 b$ E4 f- ~1 Q. j! _% p; Q{5 V) j; w& n1 v8 ?' H+ [
int ret;$ s: F' z; E7 i6 j$ a( W0 J9 {/ j
#if 0& \( e% c) t% A: f. t% L7 A2 a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 O3 @, G4 l! B. v; o4 \ if (ret)
8 C9 \5 Y$ } t/ T" d9 e$ [& n pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; t* _5 p/ E9 w& Z
"%d\n", ret);
! F _' S* F2 k& L- H% D2 r P+ H#endif
' ?; x' r' `; X+ Y4 q* v ret = platform_device_register(&da850_evm_tl_leds_device);% ?/ b! w. ]# j. c0 W& l3 Y
if (ret)
# l* ~1 w. _# q5 ^; c+ k% N pr_warning("Could not register som GPIO expander LEDS"); e5 N A! t7 A9 K9 l
else& Z5 X9 @ H2 a& x
printk(KERN_INFO "LED register sucessful!\n");
! P+ N" {8 i% h$ m( w4 x2 Z ~+ h# J9 }6 V; n' W( W% H
return ret;% v; R! E2 q1 |+ \" C
}
) r: L) ~9 r7 s* v0 o
# }: I2 f4 e% x1 estatic void __exit led_platform_exit(void)
5 Z1 |$ i2 D# j1 _3 K{
4 S5 u( F' Y7 P5 _ platform_device_unregister(&da850_evm_tl_leds_device);- p! m- \& k+ R
3 q; Z3 |# `6 Y1 p. b% h
printk(KERN_INFO "LED unregister!\n");
6 m% v, }; m6 b1 [}- K @0 ?! q5 `* A. v6 X4 A
/ Z2 ?" k; |" K* o( y
module_init(led_platform_init);
( `# c s- q% U: J9 j Fmodule_exit(led_platform_exit);6 u" q# f/ G2 R, j( d/ v7 L# q
! U: {( I' w+ [0 P: c8 gMODULE_DESCRIPTION("Led platform driver");0 R, o! c5 m" X6 X
MODULE_AUTHOR("Tronlong");2 {/ n5 y" T8 y: j
MODULE_LICENSE("GPL");& `( V" U8 q# m" |
& k* @ j2 i) x( I' \" ^6 l* j
|
|