|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 ]8 p9 p/ V% g" n7 J, K
#include <linux/init.h> d* @* k9 L6 r' ]2 [ p% Y% h
#include <linux/module.h>5 V( w$ j& p0 o# v. Q2 j3 Z
#include <linux/kernel.h>
/ F" ~7 o) O# H6 Q2 f#include <linux/types.h>
* P3 x& w( Q0 g#include <linux/gpio.h>
9 N ]2 D9 r4 E6 }0 y3 `#include <linux/leds.h>! [( j& X2 g$ R/ d) }9 y; Y
#include <linux/platform_device.h>
7 W/ B' ~9 K& n* M- E [0 u* B/ S4 \& n. y7 W! M
#include <asm/mach-types.h>
+ ^' F) A$ s Q+ ?' A#include <asm/mach/arch.h>
9 b( N. _6 B: I; w#include <mach/da8xx.h>
2 S% o1 \" x C0 d3 A#include <mach/mux.h>
3 _/ B, O8 E0 [% c2 L5 s/ M" F
6 f. S- A7 d$ j+ Q1 E#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" f" u8 U6 j9 d# S: e
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 X" k. k; O7 J; I: n" N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) Z- f$ M( H. d7 D0 [" [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# O( @7 V/ b$ O: Y! p2 S, y
( i' a' v% l2 X2 n6 s& Z/* assign the tl som board LED-GPIOs*/
' v. O& w W P& D% o& K# ]( nstatic const short da850_evm_tl_user_led_pins[] = {
; h3 n0 i& R' n; s6 }# a /* These pins are definition at <mach/mux.h> file */
+ P: ^8 F( \4 ^, i: K# }, { DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, e5 }6 \8 ~& A* I% i. t% R4 x* |
-10 I$ v, m3 z+ n, Z$ D6 f5 |
};
& b2 y4 T6 f5 r
* ^( H& Q# D4 d' G5 \( U6 jstatic struct gpio_led da850_evm_tl_leds[] = {* Z. Y# R' l) f9 H0 [
{
6 p5 l) u( J2 x. t* e3 ~ .active_low = 0,
( K' ]) ~1 Q z9 f8 g$ L' v .gpio = DA850_USER_LED0,
9 C G3 D; \0 z1 p- B .name = "user_led0",
! ], b0 z# q; U- V3 n4 | .default_trigger = "default-on",
- R$ B- o5 `9 K1 Y$ A/ o) t },
/ i( k9 ?! O' V7 r( a& H8 u1 F, b {8 }% K; d& L0 T+ ]* l
.active_low = 0,
+ h. b. E B- Z' s .gpio = DA850_USER_LED1,, {7 r8 @8 l6 a9 {1 X$ _7 d& [
.name = "user_led1",
3 p+ q$ F) K- C) X .default_trigger = "default-on",
/ Q, f7 r7 j n" G8 V' Q+ s2 S },$ \( J6 }4 `& E/ C: S
{
2 u0 ~( X5 u: j* r m% q9 u# S1 Z .active_low = 0,
/ @ _* |, `5 F) x; ~, m .gpio = DA850_USER_LED2,
/ d: o0 F \6 ?$ @6 k .name = "user_led2",
$ A& t" n( P0 r' X .default_trigger = "default-on",7 f# \/ [% j l
},' G( R0 s3 D) S2 @ r& c( C9 @" x
{
7 ~& ~+ o( f6 f1 c: V .active_low = 0,
+ d9 u5 K" \/ S I6 D3 J .gpio = DA850_USER_LED3,9 J }- O, V* e) r; G5 _
.name = "user_led3",# \: i& {0 b0 u( k: W2 e) K8 i9 O
.default_trigger = "default-on",
% N$ |( z- D, n4 Y: k8 v/ Q },
- W) o7 W/ c( o- k5 _. b" E. i( S: @};# Y" M& R X4 ^4 B
8 t3 f6 ?0 O* J8 i9 x. Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 ?; h* _- m4 {' r4 M5 I .leds = da850_evm_tl_leds,0 n( y" A6 n. _* h! X2 f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 ?$ s( b6 I3 @- r" _};
4 K3 ]0 s4 W0 `8 `& t9 @0 \( p" m ^+ n9 J1 J. W/ f, P# B
static void led_dev_release(struct device *dev). l$ P0 ~* C8 r& ~$ N
{
5 \' M: C& T/ f! d};
# L7 P% t6 d8 a" d o
) I) U% p# e' b4 [3 b+ `static struct platform_device da850_evm_tl_leds_device = {
6 r$ \0 K: h6 F$ T; r& S9 I/ J .name = "leds-gpio",
+ U$ v3 b1 j8 z .id = 1,
4 H/ D Z; y3 u .dev = {
) T* c: J( t$ s3 U3 }3 n5 ` .platform_data = &da850_evm_tl_leds_pdata,
2 P* c, Q8 O/ w0 m7 K6 Q0 B .release = led_dev_release,
: d3 b- p+ o7 F& L }& U8 x/ @) Q- y
};& j* E! Y, I2 q1 S7 e* i
) T) Q* `: @0 E3 Q2 V5 m
static int __init led_platform_init(void)
3 e F& j+ v! a8 \# d{# m/ L7 f8 A8 a7 ]+ N5 w1 i; x7 s
int ret;
! p- `4 ~% ^0 R0 {, d. U#if 0/ S: I B R2 `) e( q2 C- K3 U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 ~$ I4 g' P+ U
if (ret)
3 D& Y3 D1 B. [/ D3 q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 v4 i0 l/ p/ Q |7 T2 ]0 Z: b M. j
"%d\n", ret);
: h. B* ~* w9 g' l% p#endif* J( ]( b- }% t' U
ret = platform_device_register(&da850_evm_tl_leds_device);
4 Z+ w" C. {" ^ if (ret)
( s' a; d2 k- b. L pr_warning("Could not register som GPIO expander LEDS");$ p1 M, w; N5 a% F( I$ q
else* f- n4 H9 Z; h
printk(KERN_INFO "LED register sucessful!\n");1 D; J+ y1 d7 A4 A/ \
2 C# b1 k" m6 \8 T/ [) y
return ret;6 U7 Z- p/ ^( N8 X
}
+ ~) D* u4 @9 B+ K& h1 Y6 {
7 m! a7 @/ t) ?6 e0 @static void __exit led_platform_exit(void)/ `1 W; G" ^6 J' y7 T' y
{
. N6 X( T. s) d# }$ y platform_device_unregister(&da850_evm_tl_leds_device);$ f4 r8 y4 j* p3 k# I& Z
) ?$ G I% S+ j& Q( ]) M3 w# |
printk(KERN_INFO "LED unregister!\n");9 [& }/ I7 i4 M# \$ P3 {( ~! I
}
' ]% a1 ?/ C: l0 k# j& C3 s: O4 Q ~
module_init(led_platform_init);- Z+ w6 z: R/ S/ m. ~& B
module_exit(led_platform_exit);
7 \2 s* s( V# ~5 |3 [
) W- |, H/ s8 C4 n" S; `( I. k8 kMODULE_DESCRIPTION("Led platform driver");9 R4 N/ T1 s/ B
MODULE_AUTHOR("Tronlong");
/ q, P2 g* A5 |MODULE_LICENSE("GPL");
0 Y2 U b0 K) p$ ]0 u' D( ?5 C; g- o% }
|
|