|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& @2 l$ m4 _' a4 Q8 D6 W( P: G* M
#include <linux/init.h>" F$ J0 X$ ~: e2 d: i& H
#include <linux/module.h>! }) k! K$ q/ p& s
#include <linux/kernel.h>
! y- |7 n" _5 K#include <linux/types.h>
) F) [" M2 g7 T# h8 j#include <linux/gpio.h>; H c* E2 |, K/ f6 r0 u
#include <linux/leds.h>
2 }9 f5 E7 C* @- v3 }% B: U8 F# b#include <linux/platform_device.h>9 V" T7 f! n4 ]/ [" l: j, X& c
: f& Y9 Q5 c( ~# i# H/ y8 z
#include <asm/mach-types.h>
- b6 g! B+ y% Q5 T- o( ^7 N#include <asm/mach/arch.h>
/ p! y* a. T" ?9 g. c#include <mach/da8xx.h>5 T- n" F2 a$ F" ~" a
#include <mach/mux.h>
) q a6 O: W5 F& ]* k. G
: }; v- Y$ M- C) P! a0 P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 R: g4 M. ~" A! K# g- a, v3 Z9 P+ O#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 g' L* [# i& X0 C3 C) A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 w7 u. _: S' s7 j1 c
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 h$ j- S$ t4 w( o1 ?6 v& |/ g
L4 U, o) w- n
/* assign the tl som board LED-GPIOs*/) H4 j9 L2 t1 J0 F3 @; {1 ^
static const short da850_evm_tl_user_led_pins[] = {
1 ]4 U" H. C. | /* These pins are definition at <mach/mux.h> file */. m7 R/ d4 q1 B( N( G
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 B u+ f0 S% @ V$ `6 y9 F! Q
-1
: I V1 a; B8 P5 e0 C, v& z};
; l% j$ H: ?2 d
' o/ O4 J, V8 v8 Y% i" X gstatic struct gpio_led da850_evm_tl_leds[] = {' W- V( o9 M6 l' t; ]! R# a$ _% D
{5 j5 L5 V/ Q1 B+ U1 `) y* L
.active_low = 0,# y2 B( c j1 M+ e' A. ^* Q3 X" L3 R
.gpio = DA850_USER_LED0,
, }; w2 d4 ^- N5 K .name = "user_led0",' g# h) n; c, C; O
.default_trigger = "default-on",1 e) u7 A+ z2 D% I9 \' A+ X! s% I# x
},
8 M1 y: ^2 r( h, Y* g {
- l k- A7 ^ x4 I .active_low = 0,/ d/ s0 }, l. E* X$ a( ~( p
.gpio = DA850_USER_LED1,
. E3 T8 Z4 c: ^) S .name = "user_led1",
& r; r6 O" H* y5 U* ?9 Q .default_trigger = "default-on",
. Z# B. [: s x: V7 X5 E; p" V },3 T% [9 L8 U; z5 P
{
: O: w5 _/ \5 q! { .active_low = 0,
- A3 F T3 i, V Y .gpio = DA850_USER_LED2,4 D( [& N* O. Z" A
.name = "user_led2",
+ u% n5 N/ h/ Z: ] .default_trigger = "default-on",9 w7 d" P/ E; k8 w5 G, V
},
) S. g0 z% o' `& N {+ c4 i8 _' b4 h1 \" T- H/ X
.active_low = 0,$ z8 n+ x) N( x) f' ^2 b
.gpio = DA850_USER_LED3,
5 |8 Z1 l5 t7 x1 @2 n .name = "user_led3",- G8 n9 v3 S. C6 ]) V
.default_trigger = "default-on",
9 U9 n0 _8 d( U3 O: D s+ S },
; o* b7 J. m. `* L};% x: f& `0 X1 K2 K7 S
8 q5 a, [* a4 b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ W) k0 \0 Y! W) {. D( X7 _! S4 a6 P .leds = da850_evm_tl_leds,) f" Z8 u0 k/ L" H5 p0 c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," a* W1 \9 j; b# D- w
};
. m5 z! Z8 I8 S1 P) d
% q. u5 ^9 Z+ \$ L3 hstatic void led_dev_release(struct device *dev)& }. j" r. j6 l; y) L
{
# P& S6 B- a- _" j* P& A- ]};0 ?- y4 M! b5 V( K
3 L: O2 v; ~0 X0 O: }" Cstatic struct platform_device da850_evm_tl_leds_device = {
: P' e! I3 A! x" ^2 S u: N2 \ .name = "leds-gpio",% D0 r$ s2 x6 x& @! @& K
.id = 1,
Q4 n$ }( R1 V4 Z. n8 y% W .dev = {
6 J% b$ E0 @# d: ^0 V .platform_data = &da850_evm_tl_leds_pdata,+ d) q2 I: T9 O7 s- |: I5 u- }, Q
.release = led_dev_release,4 l; _$ U0 R) k& `% t! u. y8 G
}/ [, d+ m. p# X; Y* ~4 X# Z
};8 X) ]( W# ~( e$ t# u. U+ t
3 I: B Y4 P1 k7 O- ?1 m( n+ o9 t9 ^
static int __init led_platform_init(void)
; w: }$ v- X& E$ o0 b{
1 H- m# p" [6 _/ o int ret;5 T: X, _9 [$ ?* K" k9 O5 Q
#if 0. G& i" ^- W+ d4 s) C# ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* ?" ]9 [; j. X; r' K0 D if (ret)6 F! \# \! \( v+ Y; t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ f1 a1 C% V" ?( C4 G1 G' L
"%d\n", ret);
r: T/ I% x3 H& B) g( v, f#endif2 ]& }, j( `5 ?9 c
ret = platform_device_register(&da850_evm_tl_leds_device);
/ R9 s, V$ d$ I if (ret)
7 P! `% C/ {- v4 E0 q6 m; j pr_warning("Could not register som GPIO expander LEDS");) Z( t- g0 I5 I. B' c! t- Y/ f
else
7 @9 e1 [, D& R- @ printk(KERN_INFO "LED register sucessful!\n");
; U3 r3 Y4 Q3 W
+ E4 K0 r. K( H2 w6 F return ret;1 Y7 W; @( d9 U% A5 I s# W
}0 p) H3 D: q5 W$ I' K" p( k9 m
- h4 R1 z# S1 f$ \static void __exit led_platform_exit(void)
! m1 |' {& i0 a6 e{
- n' \# H: p5 O9 m/ \( s platform_device_unregister(&da850_evm_tl_leds_device);- c1 f& D! O/ x9 {5 l1 I6 H
; I2 y: K5 q: K printk(KERN_INFO "LED unregister!\n");* ~* N' q7 e* ~0 z* s: ?
}: L. o2 @3 O$ W; T' Z+ E. e$ o
/ V: j8 ]4 j% `2 z4 c! Jmodule_init(led_platform_init);: g' c$ t5 ?, F
module_exit(led_platform_exit);
' {- g) _3 h- j/ F' {
! z9 [6 R& F. z2 [# R/ @MODULE_DESCRIPTION("Led platform driver");
; H$ J4 w5 E' m6 w# p9 c$ E" bMODULE_AUTHOR("Tronlong");$ J1 c9 r$ b+ C) m
MODULE_LICENSE("GPL");% }; ^1 W* P& G, b* B# U$ i, }7 x
$ v% y+ U* D6 h! P* |& C
|
|