|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 [/ B4 d3 ^; T0 d
#include <linux/init.h>
/ ^ _: z3 ~' d4 B& |- F; @#include <linux/module.h>
' P& C4 w& D. \% X" q! ^' Y# f#include <linux/kernel.h>
# D) a) o$ g3 j! Z v#include <linux/types.h>
' d* U/ o0 u' q. \* I- F, v# N( _#include <linux/gpio.h>+ ^8 A; R# e# n2 R0 J# I
#include <linux/leds.h>) }$ g1 u6 L4 k7 z2 V* t8 v) M
#include <linux/platform_device.h>* @, S$ n/ d4 [, z! z2 @
# T+ e) E: y2 B
#include <asm/mach-types.h>6 B) D8 y0 z2 ?( V
#include <asm/mach/arch.h>
+ q- r( m4 g/ V, u" i( M#include <mach/da8xx.h> e) h8 H. Y' d5 D) |
#include <mach/mux.h>- T2 S# }9 [. {$ G
7 f+ i( n' p9 Z# z1 z2 p7 C/ ?#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 H+ X7 W6 ~; p% M+ x, M* O#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' D) Y) f, ^2 w B( S1 u) t3 W
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 {- b+ n' u' B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 p- V# o" t& E# h1 j$ J2 ^+ Z$ j- y) N. {$ t, U% h# U
/* assign the tl som board LED-GPIOs*/
# v* ?" V; {, t7 h/ ?7 K, A; ~static const short da850_evm_tl_user_led_pins[] = {2 u3 I& P4 e h; e C# e
/* These pins are definition at <mach/mux.h> file */4 q* ~) }& v. }
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ v( q- }4 I9 O4 L8 [5 i% s, t2 [
-1
+ X3 l) G9 I9 r' E+ }};
9 l3 h p/ _6 ?0 I$ Z! z6 D$ n) A. I/ g% Q, q0 D' \; ~* W. t; a7 s' S8 z
static struct gpio_led da850_evm_tl_leds[] = { z% I, S& t, M u
{1 C6 _" g8 H4 c+ C5 Y
.active_low = 0,2 Q) \0 V. P$ K& ?# U- a
.gpio = DA850_USER_LED0,
1 }- H+ y$ A5 q3 I; r7 ~ .name = "user_led0",. k4 m( Q' d) L% \6 M$ f
.default_trigger = "default-on",, T8 D$ H$ G3 y
},
$ N% p; G1 Q4 \* O {- \) F- k, K& K5 a9 G* e" X8 L
.active_low = 0,, Q* d( i/ G, g9 g8 T1 z: |4 I6 y1 k
.gpio = DA850_USER_LED1,9 p6 C- f, c0 }4 g6 A
.name = "user_led1",
- b0 Z; f4 h" a$ J+ x* |; B .default_trigger = "default-on",$ D+ P' d+ K+ T' H y( L6 s
},' X" N* j1 _( T# a
{% H; w; q! m* p* f& s# H! ?, ]; C
.active_low = 0,, ^% v( Y( i- P$ U
.gpio = DA850_USER_LED2,
% ^4 M- F/ A0 s# [9 v .name = "user_led2",) D2 h; M& l% ^# ]& d
.default_trigger = "default-on",( t% Y" `! y( O P) ?+ Y( B
}, c3 X( Z6 Y7 A" ]( A& F7 \# r
{
" a9 a4 S& N+ H) p .active_low = 0, ^5 W6 C# z! A% o/ | A
.gpio = DA850_USER_LED3,
& J3 Y- g6 h+ T- n: r0 b& E .name = "user_led3",
$ ? K& Z" b; n- e' i8 C .default_trigger = "default-on",
3 q2 R. C# w, f5 l },
1 B1 }* s- I& _- L& i};. _2 R0 N6 [" A( }
1 w8 K4 i: D1 Jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ u& ^3 o3 C% ^; N/ L) I
.leds = da850_evm_tl_leds,
- ^( \$ a3 _2 p: Q9 W, g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" t" a/ {1 ?9 d3 K, A};4 i) i5 v4 D) i9 v9 y
! T$ D0 |: {- _2 Rstatic void led_dev_release(struct device *dev)- Z+ e9 V. z2 T) F+ g# w- F2 V
{
5 _0 V* M) y, t, F0 c};
5 v/ j5 W6 n- V# f
. z, m$ Z& \7 P" {9 S6 P0 zstatic struct platform_device da850_evm_tl_leds_device = {
y- }/ W# F5 R8 q' H9 S .name = "leds-gpio",
" c# _( @: f- Z# m, ^' @8 p8 Y .id = 1,, K- o7 Z" I% O& e0 U- y6 C! m% D
.dev = {: D3 Q6 F9 Q; r! ^7 H1 x
.platform_data = &da850_evm_tl_leds_pdata,! P/ n2 S0 b( g
.release = led_dev_release,
+ b2 t0 u6 M0 o5 i G# [ }
9 H% e7 \5 P( \0 E3 S};- |( k- r) h$ Z$ ^# N% t4 J; C
$ @" V2 O, c0 b/ c' `static int __init led_platform_init(void)
# e( A" R$ R9 W; l{- R2 D! I/ N& i8 c( t
int ret;
+ I6 P& _9 \1 E7 B#if 01 I4 ^2 t" T' f+ s4 H8 W/ _: o
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 q c5 N8 d. P6 _2 t4 W' W if (ret)
/ s& _. ^% I8 c# V& Z) k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 B3 }% l, e) ?- B: u+ N+ | "%d\n", ret);
/ a: _: b$ r/ W% U; _#endif6 G6 v* t+ x) q
ret = platform_device_register(&da850_evm_tl_leds_device);
1 l4 Y$ X/ x3 o( q/ p4 Q; E2 @ if (ret)
+ v6 ?0 d* R) j) o pr_warning("Could not register som GPIO expander LEDS");6 e9 h6 q; j# a6 d( y
else i3 {& Q7 s: p2 _2 H; I- ~
printk(KERN_INFO "LED register sucessful!\n");$ T1 p) K6 ^- C- Z4 j/ D4 j! w
2 H2 S) H/ e, [
return ret;
( r' [; C. E& l7 ?) K4 z2 z2 ?}
. _( f; t. F- S6 W
6 h4 H# Q; j1 A) S8 W9 ^# Q6 y. bstatic void __exit led_platform_exit(void). Z0 q U5 I x7 I) j: q8 P
{2 N2 l% M1 ]1 m- ?3 I- U) U
platform_device_unregister(&da850_evm_tl_leds_device);
- p# d6 k& e9 h6 b$ J5 x
( W% g$ n* D# w/ n* Z printk(KERN_INFO "LED unregister!\n");
1 p/ x% {& g. y3 {8 B5 h}
. ?+ ]1 f# j% W9 h5 V: F1 m5 t% D, V5 d; r# ?3 c$ ~
module_init(led_platform_init); g$ `/ J% O' g+ ~
module_exit(led_platform_exit);
, ]( K3 E5 Y7 i. p4 V/ m J6 _! d+ D+ v. P
MODULE_DESCRIPTION("Led platform driver");" b) u5 Z; N# O& X$ w. M
MODULE_AUTHOR("Tronlong");7 h* y$ j/ B. L8 r- e( z9 O, y) r" B( m- r
MODULE_LICENSE("GPL");4 C( `# i R6 {6 W( b2 k
7 _) } u, r p$ C$ p1 _( s9 B
|
|