|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* a4 s) ~$ ^* O2 {$ a' c+ M' A! r
#include <linux/init.h>8 Y6 J% v7 q- `4 Q2 E2 F
#include <linux/module.h>
# ~$ F2 ]! O( u% v; k$ t- o* S#include <linux/kernel.h>
6 C/ S, |) @, U3 ~+ W#include <linux/types.h>* D, T$ J3 h9 y3 T6 E
#include <linux/gpio.h>
- F6 f. y( ]- Y1 T; b#include <linux/leds.h>
: |8 t# j* ?8 `% P#include <linux/platform_device.h>
3 k8 M0 |0 }2 e% l/ F( J
3 _" D* @. f/ J9 O#include <asm/mach-types.h>
' M; E& o# V' t6 W% b$ m \1 M# o; S#include <asm/mach/arch.h>- i R" X5 @1 K" K" n% Z6 G
#include <mach/da8xx.h>! ^$ ^2 f) f, c6 e- N
#include <mach/mux.h>" z/ p! g" ]0 D0 a5 u! B- P
! ?" s: o4 W ~, i! p, H: q& p#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 R4 L; y' B4 g6 q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& j8 R6 r* a1 t p) F" o+ s/ n9 \#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( @" e* B9 w$ ~! N- e7 Q# } a#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 O8 g* g! k: s3 H! T0 r" `( o' K0 k
/* assign the tl som board LED-GPIOs*/
. L( k8 q8 n0 x$ n7 Qstatic const short da850_evm_tl_user_led_pins[] = {1 W2 _2 i; H! K0 P; \! [# H% R
/* These pins are definition at <mach/mux.h> file */
, {/ t4 q; r' A0 c, G$ r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ ~, W0 |3 Y$ ?' e; N -1
. o- d2 |3 M; q' N/ H* C};
; f' {( S# B+ v+ P" \2 l& A1 k" B! E$ {- g2 a
static struct gpio_led da850_evm_tl_leds[] = {9 e+ f7 M7 `2 V9 S3 C5 j
{
4 n e3 x) Y. t9 l9 V) r .active_low = 0,
% f9 z O$ d5 z# V3 ^. n% c- W .gpio = DA850_USER_LED0,! b1 V4 O% W C# B- h- Q& l, v2 X* T
.name = "user_led0",
, G! l9 I4 A' h7 q# x .default_trigger = "default-on",0 t' S F0 p! A" m
},
8 O2 i# s0 u5 A" `; B% g {
6 p+ D1 O. ~) |" g .active_low = 0,7 Q+ R3 v! u" [4 z. h0 [( n
.gpio = DA850_USER_LED1,: Q9 d7 P6 w6 v' f: |
.name = "user_led1",4 ~7 `7 }+ F3 @( V; }: Q
.default_trigger = "default-on",
. Q# u- W. c0 g, A& ?8 ? },$ h" [7 t6 u' J$ c; W4 W) _
{# c) V; ~0 E: A3 M8 F
.active_low = 0,
8 G0 u4 \' V @. w# }1 d .gpio = DA850_USER_LED2,
- M# r2 F8 V% `2 e1 p4 u! H .name = "user_led2",, I/ Z) t! U& e) @+ o) e
.default_trigger = "default-on",; B3 P$ E+ S; F$ U2 p9 U
},0 `8 O% _9 L0 A9 K: f# t
{
5 g* e- q$ l" ~ .active_low = 0,
; q7 l( G7 a/ h9 @( ]- f; w' G .gpio = DA850_USER_LED3,4 M- w) r! G, E, J% K4 U# Q
.name = "user_led3",( b3 k( t4 {! x+ \2 }' `
.default_trigger = "default-on",- o S: S( t1 [( T
},
- a( a! i9 w) ~1 M4 |% q};
" [) m" J( w$ R A: u8 c/ x, s# K' T8 N$ ?! }6 n" y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, ^4 v' j% Q! y+ e6 P' l: a! e1 u: j
.leds = da850_evm_tl_leds,! o$ j" ]: R$ G, w8 X+ R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. c# x# N6 ~* s( G, ^4 a
};
+ ^4 V/ Z3 V0 y; v4 k6 k: w% V! x6 \% _+ S& N
static void led_dev_release(struct device *dev)* X7 v* S4 }' n e; c
{3 v3 G* X% \/ E) B8 V
};
/ U0 @0 u- I7 k4 }9 p$ K
& C" z6 s4 |0 p% P3 [static struct platform_device da850_evm_tl_leds_device = {
. o) y& t$ A' P; |+ a# J .name = "leds-gpio",
0 r' E" B. m" ~6 R% Y7 o U& J$ _ .id = 1,: W; G. x% `6 b
.dev = {$ |. t- h7 b, L- I
.platform_data = &da850_evm_tl_leds_pdata,9 k/ z' c2 J( ]3 h
.release = led_dev_release,* u+ O+ e/ l* M. c
}( B6 @2 p* {3 r3 z* S
};/ K3 z/ @* X- q. z
1 I" A/ _. t) m: X+ E
static int __init led_platform_init(void)$ V( J# h. }4 g! B- h7 P7 I
{8 V6 X6 V0 c: x8 U1 r! v8 T! g% @
int ret;# Y# a2 t. F1 r* j
#if 0
0 ]( D" k! T* a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 B5 i4 T3 Y" S2 |; p
if (ret)8 D/ W# B8 U) C( ^0 P7 g! o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 C+ m( m& N+ A9 B, t* c' X1 d4 o
"%d\n", ret);$ u7 w }* q; d6 H6 x
#endif5 K, C1 V3 m. Q u
ret = platform_device_register(&da850_evm_tl_leds_device);& V% I, M% c/ T" U \1 M6 p
if (ret)& P/ ^) K3 G, Y% o8 H0 G
pr_warning("Could not register som GPIO expander LEDS");
$ z: }& t d$ h! C3 h+ T+ H else; ^1 M5 b N( a( B
printk(KERN_INFO "LED register sucessful!\n");# j) `, o& {5 V! E: Z4 h
" y( [/ B+ t- m% h. [; t
return ret;
) M+ v% x4 N. u3 h+ q% E7 X+ u2 c4 {}9 _% o `/ ^( p( q; ], {7 N- ~
9 [% t/ b$ p) B q9 ?, v3 Cstatic void __exit led_platform_exit(void)8 h. B0 S( \) l4 G9 D# U
{
5 x! h; Z8 h5 W" [0 w platform_device_unregister(&da850_evm_tl_leds_device);
+ V# ^0 F! _6 h( b. {* s6 t* W' u* Q# |! h0 n6 p) b
printk(KERN_INFO "LED unregister!\n");
1 J7 [; G W+ l) y}& W0 }! n" e' T4 I) v% I9 a
: v) T' Y+ G8 Q+ H: ?% umodule_init(led_platform_init);. s7 v/ r& H( a0 g* S% s
module_exit(led_platform_exit);9 z5 }9 t4 t; j- _4 e* D
! O8 G9 E$ d3 G6 ^% l
MODULE_DESCRIPTION("Led platform driver");. X, X$ R4 _. E& R
MODULE_AUTHOR("Tronlong");: V+ O$ h5 G4 M7 I+ k, `
MODULE_LICENSE("GPL");
7 q7 m" U* c3 g8 E/ E, [$ t5 g+ q# z7 r, M
|
|