|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( j# t4 R8 u0 e- n* w# }# \#include <linux/init.h>
6 w+ b1 x) z7 ]9 Z F#include <linux/module.h>
8 q: o! I. I8 {' ^ R1 s#include <linux/kernel.h>
* g8 w3 ^& x: O/ w u#include <linux/types.h>1 X0 {1 S3 S! _7 ]
#include <linux/gpio.h>
; r) K! r0 y" ~! O#include <linux/leds.h>3 [; w' A. n4 C, Z0 x1 H& t9 o
#include <linux/platform_device.h>
% m. a% J5 B1 Q' B
' d5 o$ j4 i0 k7 T4 n/ {, J#include <asm/mach-types.h>
& l$ d& ~3 A1 Z; ^' J- q- H5 B#include <asm/mach/arch.h>+ C0 O% {* P0 Z9 O
#include <mach/da8xx.h>9 \% f2 J& W' w- v% a: ~
#include <mach/mux.h>9 E3 S6 ~, @7 W, O7 J0 b
. F1 v4 u9 H3 f/ {1 C#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. u7 l# a: q$ r E) x9 j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" s9 q: L5 L; _# g2 d% ^#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* Y/ y' d) V1 o( R4 A3 G# ?
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 K8 L8 }, t P' {" S2 |- _8 K( x
/* assign the tl som board LED-GPIOs*/
D+ J$ C( W3 w7 Nstatic const short da850_evm_tl_user_led_pins[] = {
$ N# ~) Q7 _- N% [ /* These pins are definition at <mach/mux.h> file */
% [! \5 h3 b& h! E! z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 D5 Z$ c4 v2 e" }; G7 C+ P$ t -1
! A6 [ z' Z) a; b: b: Y; ~7 r};( s" a* ~: \! I4 k% T' z5 k, Q
1 `+ F( K5 l3 B, ostatic struct gpio_led da850_evm_tl_leds[] = {
4 }6 E1 a4 A" l5 _, h {4 X" }0 s8 w- ~% T: E+ i/ O" w
.active_low = 0,
- z% f0 v! M6 x .gpio = DA850_USER_LED0,( y9 n' i" _* D% o) v" R; q/ \
.name = "user_led0",
1 k/ k) Q! C2 z, l! L3 v .default_trigger = "default-on",
. w( F. z: e0 l },
' |6 [/ e" L" F! y2 ^ {! Z$ @8 ^1 U/ w% o) O! X
.active_low = 0,
* F! \4 z4 p6 o0 D0 d .gpio = DA850_USER_LED1,. P9 B) p/ _, j* n
.name = "user_led1",
: `1 g4 c; c/ ]! u! N. V( }% P .default_trigger = "default-on",+ n& L8 d5 q" {. ?* H
},7 y& R1 |1 N; _9 |7 O
{7 k( b: o+ Q5 |. }6 k- m
.active_low = 0,
+ u; o! s9 x& o% K/ F5 k* { .gpio = DA850_USER_LED2,( D9 d5 d% s7 K! K
.name = "user_led2",. a R7 @9 N9 i8 j
.default_trigger = "default-on",
, I9 J: R! O% }/ y: p },
4 e; e! X. U$ ~1 @( Z9 P {
x) V8 h) [! V1 ?8 s .active_low = 0,
* y0 P/ h4 D$ a9 Z' R .gpio = DA850_USER_LED3,
' B! W, e7 [! \: E% s .name = "user_led3",
4 l/ ]2 n) G. Y8 X8 y6 s$ g .default_trigger = "default-on",) E! \% k v% t, c# C, R
},
7 g4 |% N1 r$ f6 k/ R4 b! z};; ~8 ?2 L. Y4 m) Y5 y0 O
9 P8 {# X& |; ~0 n6 n x" V8 Jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' k" t# l+ ?$ q* y7 q5 X
.leds = da850_evm_tl_leds,
6 k+ v) o) Z" E; j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 f( H& o9 S. B6 _" s+ C! X};* Q7 U0 h, f( O2 l4 l
+ J H- Y6 W f: }( [# G1 y0 H
static void led_dev_release(struct device *dev)
( [$ O' |, M [$ Y{2 q' s' f l. h7 {
};7 o1 x8 h! M! o: \% Y+ l6 v% O/ A
0 t; S. C, I3 u
static struct platform_device da850_evm_tl_leds_device = {; D6 ?# C8 X/ ~% R1 d1 ^
.name = "leds-gpio",
$ k# n, U9 [& u9 f .id = 1,
( l' y; x) R. k. w' @# f& W4 k .dev = {- \' f1 e) [0 i4 J
.platform_data = &da850_evm_tl_leds_pdata,6 u, n7 Y4 E& g1 H; Q9 |
.release = led_dev_release,# X5 ]$ P/ C; G+ K% [- @9 N# }. j- g9 c
}
$ |3 i' ?7 a' X+ G0 c1 o+ a};
7 j" e5 Z; h" ^) S) e8 k" E. c+ i2 A# D. L, _, F
static int __init led_platform_init(void)
+ g/ e. ^' r u$ t5 G+ j' h; X5 g- g{
! l, v( `* Y; J: i$ [ int ret;
8 O: K" y8 x8 F7 |#if 0# [% J9 k% M3 L5 d" r5 U0 S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# C6 u7 T f2 R. q6 d. t if (ret): m5 {! f. [' F& S5 N
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 l- `+ ]" W# h. N8 M: i' i
"%d\n", ret);( u% Q& m+ d( U8 g- b# J
#endif6 Q8 T4 C' V1 l" [" |' s- N
ret = platform_device_register(&da850_evm_tl_leds_device);( f; |6 A3 z: y" T* x
if (ret)2 [( S, `- e9 g1 `! \( b
pr_warning("Could not register som GPIO expander LEDS");. S- [8 x( A! C" k9 W$ v
else
7 W: c- `: \/ J( ~) V( F$ V printk(KERN_INFO "LED register sucessful!\n");5 p' J% k i/ v
" J: b/ B' X1 p! d, R; j I return ret;! J9 i& j# F% m( k1 c' M0 e5 K
}
9 A0 \1 i5 ?6 r. b
7 [2 I6 Z5 w' @0 O( B( ?static void __exit led_platform_exit(void)* ~' V2 H3 I1 p
{
/ Q# g& M, Y; f0 J) |5 b7 e platform_device_unregister(&da850_evm_tl_leds_device);; o `9 _( q! E/ T
0 ^/ p) [+ [% d# }7 V7 a printk(KERN_INFO "LED unregister!\n");. D: L. d" N& s, S/ D3 b/ I# {' G
}+ Z) R! e6 [' v( o. _
& M$ B9 a% L* i7 a. T% Wmodule_init(led_platform_init);
' `- w0 y i$ P- [module_exit(led_platform_exit);, b% K3 B( y2 x9 P# Q9 s
% {( W7 P* V0 d. p5 V, K( N0 {$ a- FMODULE_DESCRIPTION("Led platform driver");. g; t, W, B: L+ q# H
MODULE_AUTHOR("Tronlong");" u& T# B' s' ^# w8 B) M/ d
MODULE_LICENSE("GPL");0 r( ?6 r/ N E, m; ?7 {
3 H/ |3 r0 T1 k/ H! k4 }3 M4 c0 v |
|