|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 ?7 Y( g+ F( y# b4 g#include <linux/init.h>' v) s& m7 v; H; ~
#include <linux/module.h>* Y9 S3 q$ d$ V# {6 U8 l
#include <linux/kernel.h>
4 n( Y& ]" E, A6 c! }8 u3 P3 ]! c- A8 G5 R#include <linux/types.h>% @( E8 j: P9 D& s) G. }" A
#include <linux/gpio.h>/ ^+ }* _' f- U! [5 R
#include <linux/leds.h>
7 X; b, \* x1 z#include <linux/platform_device.h>6 W$ `; @# g& b! b% k( O
, Q: y8 Q- R1 p" c+ a
#include <asm/mach-types.h>$ _9 o, W" W6 _
#include <asm/mach/arch.h>" }8 b6 h! C3 n- k4 E* A; [* i
#include <mach/da8xx.h>: p5 y. I- J: K* H3 p' z
#include <mach/mux.h>
) W* ]% }2 [, G: {( r- _8 E
. M) \$ T6 z0 T4 Y( [#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ _4 P. c( O3 _" m4 a2 F1 s/ I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. h9 n5 F# Y. j* M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* M0 L9 M: a1 E/ F9 H- o; w#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( e6 X o0 ^: t) P8 y
, W! i7 r G/ D6 Q' U$ n
/* assign the tl som board LED-GPIOs*/+ K4 K; R+ ?& f3 @7 `
static const short da850_evm_tl_user_led_pins[] = {" ], n7 L+ k$ o4 [( a, \
/* These pins are definition at <mach/mux.h> file */
" T" K' Z; Z7 C1 X7 y! t6 | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* n7 J$ ?/ q$ d6 w! j3 x* W, H9 k- X
-14 b1 U9 n8 E5 d- Z; S
};: J$ f% s; o. K- c7 A, d& s" L
# U! g4 Q$ L: w9 Fstatic struct gpio_led da850_evm_tl_leds[] = {
* W% X5 e8 Y3 o' C L j: n- |! u {% W7 [0 s1 L8 V1 J, R
.active_low = 0,
! `: C! v/ e2 r( C .gpio = DA850_USER_LED0,
$ L$ B1 E% W) z' I# u .name = "user_led0",0 L' ?% ^* U1 a/ A1 u3 _
.default_trigger = "default-on",# s6 e( E9 v' F" S9 L0 K9 \) y1 I0 \6 }
},
$ A8 _1 f9 j( N: R9 \ {
& A2 w. C- s! f$ C7 Q .active_low = 0,
. ^$ W4 Z3 t6 R1 R6 ` E .gpio = DA850_USER_LED1,
; n6 |1 V: R# H' w6 a' F( U .name = "user_led1",
' h. \" q( K+ d+ P .default_trigger = "default-on",) Q$ W6 l4 W) [, `8 a
}, L( g+ v# z3 E+ S! R
{
( S; E8 k6 E7 G# E .active_low = 0,( S% ~* A6 V- t& i
.gpio = DA850_USER_LED2,
8 p3 g8 K N- k9 a: d" Z .name = "user_led2",, J, c0 K1 C8 Z$ G9 P% q) E1 A
.default_trigger = "default-on",% u- X6 Y B+ U* e9 Z; p
},. i# g" T; H8 L/ e9 t
{5 o0 m2 J6 {, R
.active_low = 0,+ }1 t3 i" A+ X
.gpio = DA850_USER_LED3,
& z7 f9 S4 M) @0 H* Z: |. b! f, r .name = "user_led3",
8 c A' ?. U6 m1 U4 y$ v$ R4 G; f .default_trigger = "default-on",/ T( h2 s+ H* D& D
},; w& U. N! @$ S6 S: e5 Q
};
0 M. i# g: X8 o* V/ q1 S4 W% R1 ~. h J4 \% z! D+ Q5 V+ v
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, J# n, g& p+ Y$ Q
.leds = da850_evm_tl_leds,
; ?( E9 Q$ j, t! M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 ~8 T0 t' l- Y H
};- v9 |/ A* V0 E/ E( d9 O
6 {( B; @. J% y% v$ v, q5 F, ~static void led_dev_release(struct device *dev)2 b R; Q- T' ~+ c4 m
{
- m3 u: P Z0 {- C};" V* @8 M( T) {2 `% U
3 @# p4 ?- x* [% a# A* `. }
static struct platform_device da850_evm_tl_leds_device = {
( q X7 Y( w5 H% N+ ~3 ^ .name = "leds-gpio",
3 _/ G8 S1 n; ], Q7 O) M& q .id = 1,4 A' \. c3 D6 N! f* g
.dev = {
; {, z' B8 S7 h7 c. g& P .platform_data = &da850_evm_tl_leds_pdata,
! R7 h1 }+ Z( }' j& J .release = led_dev_release,* ?+ k& M1 |* n( s! \; o* Y
}: G7 [. O4 C3 |! D6 [, J
};
/ B/ C |# l# m) p" w
/ e. S* A. ` N: e0 H+ p6 h7 a% Lstatic int __init led_platform_init(void)- w+ V5 p+ x: K1 t
{8 ]0 d" l/ J8 y$ R- A/ h
int ret;
& K, ~8 T0 V; x F+ A6 J#if 0! h, T# x* u( u1 g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. e5 V! F6 u4 t9 ]2 c9 V" b$ k
if (ret)4 b# l* W3 D O$ n+ [
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# ~5 w( h3 o5 H: r: @
"%d\n", ret);
5 m9 h( @# _2 j! i, F8 w#endif5 Y/ S: C# o+ M9 K% k* [4 P
ret = platform_device_register(&da850_evm_tl_leds_device);' w2 x, M5 U3 M/ U& t
if (ret)
( f- ^- A$ d) j( y: y" ~ pr_warning("Could not register som GPIO expander LEDS");. s3 s5 O H5 e, \ W& L: Z% D; B
else7 ]3 [! E* N- F# d3 R
printk(KERN_INFO "LED register sucessful!\n");
; l/ g n5 g9 a" ?( s' O- f2 U, T6 G
. {8 Y4 y; Z: B/ z return ret;
3 S$ Y2 v1 |9 O5 B' i5 O: }} s. @& |' @8 F
& y. P0 H7 E% P& P5 t# O# ?! s
static void __exit led_platform_exit(void)
, M8 a$ Q# }. I- Y; n$ f* ?{3 i$ N; n5 S2 N. c6 h K
platform_device_unregister(&da850_evm_tl_leds_device);
9 Q% N A; y. h. c2 h6 B
1 G1 m( z; Z2 }2 n+ X( j8 P" N printk(KERN_INFO "LED unregister!\n");
$ {! k y! \ b5 _0 @% J9 m" l! I0 Q}
( Q$ u# D( _2 c8 V+ t- j B; j. a# J8 T. T6 `6 u
module_init(led_platform_init);
g" }) f5 {' L- \8 X$ dmodule_exit(led_platform_exit);: H; r1 x( l$ q' r
' X' S' |3 |* I( Y. {5 L# zMODULE_DESCRIPTION("Led platform driver");
2 a1 h }2 e6 p; BMODULE_AUTHOR("Tronlong");' ?8 X) p* O7 [( _% k1 a6 }1 D
MODULE_LICENSE("GPL");
, H- l! r1 Z4 [2 x3 [' ]4 V0 d9 l- z3 j
|
|