|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& D; c1 e' _6 i" s+ E1 }& ], V' i#include <linux/init.h>
" ]/ W; \. z0 h% v+ C3 J' H#include <linux/module.h>
l a7 @8 c$ `. Y* j4 H#include <linux/kernel.h>
# g/ K* U" W4 j( ~3 R#include <linux/types.h>" y' i5 W+ [, ]1 }3 @. i' U
#include <linux/gpio.h>3 H& X7 T5 @' z, s
#include <linux/leds.h>
$ @! G% u: o/ }#include <linux/platform_device.h>
( y3 }# U& p0 O5 M# @( R
+ o+ s2 ~7 W% J; d2 Q% H& E' M#include <asm/mach-types.h>! r; E6 h# x9 T% O! ^& E% i
#include <asm/mach/arch.h>
7 A) e& `" Z! m8 r#include <mach/da8xx.h>
/ }. M6 E) a$ u/ y1 T, p#include <mach/mux.h>) e8 ~6 t3 O d
2 T0 _ \& M X) T& C# h1 q; F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ ]5 b; t$ ]5 h R7 l
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); O4 I9 K# q4 j+ V, b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ I1 L) ` \' ~+ I
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 ^# J2 ~) z( g4 b% Z: a& x2 P, V5 U/ F- i9 z5 h5 m
/* assign the tl som board LED-GPIOs*/% v, R1 d- u! g! L, A1 j* L
static const short da850_evm_tl_user_led_pins[] = {
" }5 z$ F7 u. {- T /* These pins are definition at <mach/mux.h> file */' W9 o9 ^; n8 K [$ X& p# Q5 s
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% J% ^! k+ y5 g
-1/ r8 Q1 u0 d3 n- |! r; v
};
4 V l2 F% C: g- U! ]
6 K1 B: _; l7 i4 v! |static struct gpio_led da850_evm_tl_leds[] = {
1 ]7 h' _/ {( f- R! P {
2 Q! Z# L. o$ K. ^ .active_low = 0,# p, \) Z Q/ V
.gpio = DA850_USER_LED0,
+ F% }; `# x) x9 c) B8 i) k& | .name = "user_led0",+ U# ?4 p: M5 O( ? b1 B& P
.default_trigger = "default-on",1 ]+ W* Y$ R3 M
},
" ~ }* s I# A2 z- y {1 m9 _9 g: a" Q: M- R. h
.active_low = 0,# ?$ _: z; ]2 H+ n$ v
.gpio = DA850_USER_LED1," m5 D! }! R# h1 g3 t/ u! r
.name = "user_led1", U$ n: E3 G) q8 h# p/ O
.default_trigger = "default-on",
! \, b0 y0 i6 b& w8 Q& t },$ B9 a2 x/ ^: t& l: f
{
( u8 A4 o8 Y0 X .active_low = 0," L' h# g3 X) u; O' s
.gpio = DA850_USER_LED2,
1 }) F0 F* z. i7 K0 O3 S .name = "user_led2"," t3 u9 S" x; o4 i# M
.default_trigger = "default-on",% Y- [# j9 I, m; l. y
},
0 K+ m- ?2 \/ Y/ u/ x$ u8 X2 O; B {5 J6 G- r( @! o. v1 q1 g1 _& I
.active_low = 0,
3 m7 w+ G* H# k c, q* a" j) g .gpio = DA850_USER_LED3,$ g6 s" z: K5 x$ i( m2 l
.name = "user_led3",
9 u0 o- o m- f8 n% K: O) \; V* g .default_trigger = "default-on",/ _% P/ \; a! g1 D2 {4 [6 H
},1 X1 h# c# X% w% A; h! k9 @7 ?1 @
};6 O# a+ Z5 ?' d# y
! N- I2 X1 U" C! o' S& \3 B9 e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' k- l: }' [0 c0 @. M/ k
.leds = da850_evm_tl_leds,& B0 ^. X6 T% F% I% t
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 D; B7 ?( \- w$ r+ n( n3 ~};
- i/ S0 O% r, o! G: E5 o5 P& W7 O* j" D/ B$ t8 ?' G+ v5 y
static void led_dev_release(struct device *dev)6 K c" z8 R4 l
{
8 n6 D7 L1 F; v7 h0 i" C0 f1 j, H- H};( s6 \6 ]* g) U, A( V) y5 }
% N1 v! ~: B' A5 [) c9 z* s) \
static struct platform_device da850_evm_tl_leds_device = {
- p. K: M: G$ d .name = "leds-gpio",
1 V) o) @9 O* f( N& f: N! m! J/ K .id = 1,1 M/ d6 B- u5 {4 c
.dev = {2 g$ b9 i* h, x R6 n8 q9 B
.platform_data = &da850_evm_tl_leds_pdata,9 U/ u0 P9 @7 h9 W0 h3 ]& h3 y1 }
.release = led_dev_release,
/ v* _5 Q6 g4 N }
4 f9 d4 D$ u5 _* ^};8 X- O1 O0 @8 N3 [6 `/ j6 G* ]
' y0 {6 S1 ~0 astatic int __init led_platform_init(void)$ F* {; |* b9 k' Y) y
{( r6 k+ w/ L: a
int ret;/ {: n& ?7 |& _: v( @
#if 0
" Q s- C& o+ K1 h ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ s* v. C$ j! K' |" p if (ret)
7 m, P5 g/ F0 m. f- C pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" w+ Q! X: D* @3 b; E6 f8 L) v0 @3 s "%d\n", ret);
2 u- Z4 C7 l; ^- o* x#endif' Q/ p5 T6 D3 s! o* }, K
ret = platform_device_register(&da850_evm_tl_leds_device);5 G6 Y/ F4 b, Q# U" G. C2 Q
if (ret)
0 x/ X: r$ U8 P& E pr_warning("Could not register som GPIO expander LEDS");
5 m2 X; w |5 p2 S else6 n/ `7 \5 z' a
printk(KERN_INFO "LED register sucessful!\n");1 v: H# F" e* _( O% ~) C- ]
, g8 v5 x( i3 v: m4 [' Q A! p return ret;
) n2 U4 L' j4 e r}
8 Y9 V( |5 p: C, `" G. F
M, ~. g7 { k/ n2 tstatic void __exit led_platform_exit(void)
# R8 y3 Q% v0 E( V6 W: w5 C{
2 d+ C6 ?9 ?5 Y* W5 W% V; [% s platform_device_unregister(&da850_evm_tl_leds_device);
; Q2 F$ `; X9 `) B5 ~! S1 f2 U
9 o0 I" t4 y9 k& K! I printk(KERN_INFO "LED unregister!\n");
, y6 B7 U* H7 D) j/ @. W) f}
* Z2 P' A/ r9 m) d$ O1 P0 _9 m+ t
module_init(led_platform_init);' G$ y9 L5 f$ J: p
module_exit(led_platform_exit);; y9 z0 m* Y/ [9 \2 k; x) N
* h7 ]- D9 c, I+ s$ a/ [- s
MODULE_DESCRIPTION("Led platform driver");
' P" t4 R2 F4 cMODULE_AUTHOR("Tronlong");
' {1 T6 V6 m U. e- r+ GMODULE_LICENSE("GPL");
0 L$ l3 M, w3 m- h# A9 R# T2 V
, z( b+ j. }( M- j8 Q$ j |
|