|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# [" q: [" [5 m1 ]6 u#include <linux/init.h>, V) o, \/ } O2 A- s& {) T
#include <linux/module.h>" x* ^+ ?! k8 ~: V- p6 M6 b0 q
#include <linux/kernel.h>
, R8 `0 E: c$ X7 C#include <linux/types.h>
! G# g" R* ~% D4 m0 V5 ?% W1 c#include <linux/gpio.h>
6 A! ~4 I5 g P& F' Y" c#include <linux/leds.h>
% K7 h0 D2 S4 z; i- ^+ |( `; v# n# ^" A#include <linux/platform_device.h>
! i9 v3 S6 [: x) b& w G" r" o1 d; P! F* W7 i
#include <asm/mach-types.h>( s& b/ o% F- J: w; C) q7 n8 ~
#include <asm/mach/arch.h>7 W2 q; j6 J3 d r
#include <mach/da8xx.h># l1 D. U$ y6 m
#include <mach/mux.h>6 K: P/ N0 E- F1 ` d; d6 [5 [* b
% j6 G" j9 x- ^, T" r9 V" F1 ~# s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ o/ n" q* ?% j9 r8 j% ]
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 Y1 P0 K, V9 X" J#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& f, ^3 v. P: ^& B% H {6 z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); D0 D# s* T( A7 R) v. a
& H" L% b3 Z1 `8 D- m
/* assign the tl som board LED-GPIOs*/
" E S# G" Q& Y8 tstatic const short da850_evm_tl_user_led_pins[] = {0 `! _2 ^1 X+ x( P
/* These pins are definition at <mach/mux.h> file */
" b1 g9 } `" ^1 P7 x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 i$ E0 f+ V$ _5 @9 k1 Q2 U3 F
-1/ h$ p. g$ h3 \5 J9 G9 C
};
+ J* r- V% s( q# s0 L4 u# |/ u
! R) R' W9 J1 `static struct gpio_led da850_evm_tl_leds[] = {! Y c' M- M5 |2 \5 c& n8 K
{3 g Z+ I3 V- |
.active_low = 0,
7 P4 h2 i! \: u' O8 J .gpio = DA850_USER_LED0,
+ o u2 {1 C; J$ w# V. v .name = "user_led0",
4 m! M+ M* H: L: ], x .default_trigger = "default-on",
/ p, }3 ?; H( `/ k },) c8 Q% T6 |) z
{
' b9 \# \" ~2 K# w6 H7 L .active_low = 0,
* a; [5 I- @3 w% Z( L) l, K .gpio = DA850_USER_LED1,( ?1 {7 m) T3 I$ p7 [9 n' M: X
.name = "user_led1",
9 v" _3 Z, @# v8 k9 y, N7 N9 [6 s .default_trigger = "default-on",
9 X- s" e2 x% m6 X( V },
: E0 n* g+ D" v9 X' @+ x+ c {
2 T4 X/ Z3 P. [) M& p' A .active_low = 0,% _/ G5 R* O& y; T/ Y% Y& ]3 P
.gpio = DA850_USER_LED2,
. t" n: Z# K- t% D" l2 n3 n4 U7 o( L .name = "user_led2",
1 Z2 r. U2 p, b ]/ H0 O! ^ .default_trigger = "default-on",$ V; y' A; F- k6 ?8 D) a9 b4 B
},
6 L, w( u3 Y% o) j {
9 ~, |& T3 e' }0 x- i* A5 B0 q .active_low = 0, g; P7 d' d1 j* I/ k
.gpio = DA850_USER_LED3,
7 k. B7 ]* k# u( {% Z; q" J4 C3 S .name = "user_led3",8 o1 h! U' G' x4 ~, ^( t/ F- f
.default_trigger = "default-on",1 D) A. ^ _% w/ U, `5 S j5 \- U. E
},
- j5 Q' s" N5 k# A# M$ H};
0 q4 n6 g1 {( F& P; g$ U2 m9 R9 O" X! v! C& a( W% h+ `4 `5 H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; m7 j( |# Q9 v* P& }" M
.leds = da850_evm_tl_leds,
: C0 c# G/ m, m K$ k# X: O .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) s: q2 E/ r3 p7 \) L};+ ` y3 {7 e& G! O5 `
! B* v/ w/ a8 ?8 [- } R7 \
static void led_dev_release(struct device *dev)2 p1 N6 r4 I5 |5 K, V+ r+ k2 i
{
9 g/ A2 ?% A+ f( c3 i1 Y};- \) D$ ~% d1 G9 K" H+ ?
8 W' q" f; P4 C( Z
static struct platform_device da850_evm_tl_leds_device = {
& P* d: M& [! a/ N) L$ I7 y .name = "leds-gpio",
0 H! Q' m9 }, Z .id = 1,7 T* d5 c3 X# o
.dev = {" ]2 i* l6 u- o( u2 [; q5 y
.platform_data = &da850_evm_tl_leds_pdata,
5 _1 b% y5 G" i/ ^) t% r/ K .release = led_dev_release,
% X8 C/ B' g- h }
4 I& h) _+ G& {* U3 e2 c% O$ z3 z/ T};
2 `9 Y- E9 E$ j: b+ Y
( o% P _; ?& p0 hstatic int __init led_platform_init(void)
, t! k# n3 Z+ t% y( d{6 D. r' P6 F( w1 }) b1 _- l# e
int ret;5 c2 x9 ?1 i4 D- f
#if 0
) c4 L5 \4 S- K. s ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 B: \! X s8 Z4 j, |' k; G* H
if (ret)' }9 u% |$ u8 t1 J( p: T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 H+ Q7 y; ?9 ?; w5 e "%d\n", ret);
I6 u; }: i. f7 W#endif: p" `9 k) H/ ?+ I+ K# }* ~; }
ret = platform_device_register(&da850_evm_tl_leds_device);5 C' j8 t* z/ s* i i \. A+ _
if (ret)
. ?1 X2 u1 t4 @/ C pr_warning("Could not register som GPIO expander LEDS");
& U+ s: E; ~- k% v: r$ G6 K else! @' ^% E- f- C' }
printk(KERN_INFO "LED register sucessful!\n");
8 x5 d; |: X6 G4 i/ y: u2 d# [
# ^, }# S+ a' E' V# N return ret;: G, C+ U; N4 o6 E6 x, Z
}+ H6 X$ d( @0 T6 c# c: y9 y/ _5 F
3 v/ t7 m- k; h# j+ A; c4 z5 K
static void __exit led_platform_exit(void)5 s$ J/ o6 ?5 m
{6 z% g8 G# t5 B1 ?) e
platform_device_unregister(&da850_evm_tl_leds_device);
: Z( @ l! S) K* R7 o& L2 h. N* q) y: S2 G( x" V1 B: ^1 Z
printk(KERN_INFO "LED unregister!\n");
H' j1 R) i% ]}( Q8 b" L5 }4 L! ~) |0 c# d
" G8 F s4 R" Y. d Lmodule_init(led_platform_init);. ^3 l" b9 d3 G: ]# D4 {# L" `
module_exit(led_platform_exit);
; E# U# M( p, s4 q/ v. [2 ]- Z) }- b7 \; P
MODULE_DESCRIPTION("Led platform driver");* ?1 p9 l/ L& A1 h
MODULE_AUTHOR("Tronlong");% `/ }( d% }+ m8 D# a
MODULE_LICENSE("GPL");
( y1 ]$ \1 ], A# d- [' D( \; I7 |: S1 c$ }" _* s4 i
|
|