|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& ~3 h+ b$ R7 m3 G) u4 B
#include <linux/init.h>6 x8 q& Z$ s+ t. l# g; D5 y8 M
#include <linux/module.h>( b$ N2 c b0 D9 Z
#include <linux/kernel.h>
' }4 B0 }5 F! K#include <linux/types.h>) D9 D5 X2 j& U4 W$ J" @
#include <linux/gpio.h>
; q0 \! M( u* f; t#include <linux/leds.h> F) s2 Z" J) b+ q0 I* x2 x
#include <linux/platform_device.h># N% R, ~8 K- f
) W% K1 h! g9 |#include <asm/mach-types.h>$ N7 E& r/ p0 O2 f6 P2 [
#include <asm/mach/arch.h>3 f# }, M0 W9 O
#include <mach/da8xx.h>
/ x$ g+ o) P' Z8 }#include <mach/mux.h>/ v2 F- v: z; V- T# V: n/ [. ?
* \0 v" U h; f3 s+ Q9 K4 |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- F' F8 G7 U% x# U#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), e9 p* j5 c) h2 }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 Y1 `( q# ~) s#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) _% ?, z2 E' q* C& ^* U
: f8 Q8 w- J( a1 O; n
/* assign the tl som board LED-GPIOs*/
) I+ [9 I( g4 q, T4 p; b* Zstatic const short da850_evm_tl_user_led_pins[] = {
4 O; u% h- Z3 y /* These pins are definition at <mach/mux.h> file */4 d- W4 f. A+ q( Q2 z& H w
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," ^7 a9 k5 Q, a6 H8 ~3 b
-1
# b5 d% H* M; a6 s Y};0 }+ `$ D& x/ z/ I3 H! f3 |# A
3 N p7 n4 T& H6 J; Xstatic struct gpio_led da850_evm_tl_leds[] = {( P1 y) W" o3 q8 v) H, M
{$ K5 y( R/ G# R6 _- E, {, z
.active_low = 0," {0 ^ g+ ]4 ^; V; j4 e m
.gpio = DA850_USER_LED0,2 ?' k% D: k& x
.name = "user_led0",
$ a8 |8 @0 w x1 n5 g7 H9 E# C) P .default_trigger = "default-on",
" a' {$ L# d# M9 ?5 P/ K: w) _ },0 i. K6 ^( t7 }9 Y* r; ?
{9 A6 E, J; y, B/ l
.active_low = 0,
: j7 ? N( ~" Y' a( W .gpio = DA850_USER_LED1,% ?5 o+ J0 n/ P& p
.name = "user_led1",
% b% w) f# L) g4 n- J' b- r6 D .default_trigger = "default-on",
( u2 [: i8 V: P },1 X( k" \0 k9 n8 ~( {
{% H# [* w& v5 m2 Q7 @( d& Z3 U
.active_low = 0,
& O1 F G% l$ @+ V, Y( V7 t .gpio = DA850_USER_LED2,, t4 v6 }, B& N1 B4 a
.name = "user_led2",
`9 g: {' M: Q5 Q8 n n .default_trigger = "default-on",% w7 z5 ~2 U x) s; [( `% a% C
},
+ l4 V; x1 b: T; B! P {+ t$ M0 s7 q0 Q6 S
.active_low = 0,- ~2 d, J; W; s) e( w' r
.gpio = DA850_USER_LED3,
/ S$ g9 }7 G {0 w- M .name = "user_led3",2 a. }$ v0 X- y; i0 S. {
.default_trigger = "default-on",
: Z; W# H3 A' a# |6 d- U: i, B }," j' i: [% `) H! U9 l5 f
};
3 {# g: b f/ L! i- r" h9 \
4 o k) M5 Q/ K( a X; Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# O1 \1 X* Q. q- J3 v* e& F
.leds = da850_evm_tl_leds,
7 {0 a1 G6 P, e7 a4 g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: S' I$ g$ A4 s% \
};7 @! ~# B5 b ~9 J$ O' A5 Z
4 }6 S3 u j( {! K/ n8 D7 ?8 xstatic void led_dev_release(struct device *dev)
_4 l j2 ~, s! V; E1 V! u- p{4 ~6 ^/ R" m0 Z5 L1 k
};
4 u' w% h% w7 w
: \% I5 X+ Y* ?3 o8 p' P$ }" j8 A; Xstatic struct platform_device da850_evm_tl_leds_device = {' f6 _( [' M: @9 q. E
.name = "leds-gpio",# d8 V) j! S) e1 |; k! c
.id = 1,
, l5 _$ r9 i3 d3 m .dev = {
' P8 P$ u% _7 t$ O g .platform_data = &da850_evm_tl_leds_pdata,1 |. b/ @2 t O
.release = led_dev_release,3 b' J5 L5 F; j
}
( v4 D l1 U& ^& J, }4 i5 I7 ?; O( ]8 G};. X. h* W& g2 Q/ K" F9 B
$ ]+ i4 {+ h6 v4 A# v7 mstatic int __init led_platform_init(void)3 w8 Z. R, p9 O9 S8 G. n4 Z
{
: u4 E' m' D" R$ Y int ret;; Y7 _3 z' z6 O" |* ^
#if 0- x: a$ A" n7 V0 w
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; f8 E1 h& S; B Z3 E$ @7 ^; B if (ret)
! O. ]0 X* `! `8 E+ a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ ]* S; _3 o" W; ] "%d\n", ret);4 [8 U/ k$ c1 A6 y, z ^3 D
#endif
0 y$ h9 z; ^. V4 n7 R7 j7 ~ ret = platform_device_register(&da850_evm_tl_leds_device);
* Z* Q9 g7 [! N2 D! O( k* U& S+ a if (ret)2 h9 S* ^. ? m/ o- N; [/ p- O
pr_warning("Could not register som GPIO expander LEDS");
9 H8 x7 M* I& u, @* N else2 F4 ~; V+ x" e# \/ l2 Q
printk(KERN_INFO "LED register sucessful!\n");! n, X* F! M0 P, {
5 a6 U( T+ t, m
return ret;* S4 @. z7 E/ o! m4 ?+ ~
}: A+ Z" o( }( M: L+ `* a
* I5 I- h8 ]5 H, R; `! m
static void __exit led_platform_exit(void)
- _; U" ^) D; }( y8 x D{
$ {) {- O3 k8 j1 z4 m* m" e platform_device_unregister(&da850_evm_tl_leds_device);
# C. @9 M! T& `* i6 g* R5 Y; J
% z6 C) ?: O9 C) _2 D+ \" u: Z printk(KERN_INFO "LED unregister!\n");
8 R3 l% `) L" B: Z' Q c4 n}" w- A3 l3 ^7 f9 n4 [) W F
0 Y+ ^- X/ t3 c0 {2 Zmodule_init(led_platform_init);
+ m9 u4 P" O" @' o' S1 E/ I, mmodule_exit(led_platform_exit);
& O l0 \% d9 a }" i% j1 ?& N* M! K
MODULE_DESCRIPTION("Led platform driver");
4 B- w2 s" e! h7 u- B$ IMODULE_AUTHOR("Tronlong");
$ |6 q* n6 _1 {" C5 J; m6 R: ]6 o4 lMODULE_LICENSE("GPL");3 g' X- \# A8 n; T& _- h
3 f5 H8 p: ?$ N. |7 J
|
|