|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 ~6 e- u* ^) k" \
#include <linux/init.h>
( ?) [4 N) p- Z. d& C#include <linux/module.h>9 ~# \7 g4 L. t2 |) z0 d0 i. f
#include <linux/kernel.h>" [2 _; `. z7 Q/ _
#include <linux/types.h>
1 W5 A6 d5 x) I' p S2 g#include <linux/gpio.h>
1 d1 N' \$ D2 N& @4 m8 g#include <linux/leds.h>
5 `9 B/ M4 K) i$ i( i" b0 l: ?#include <linux/platform_device.h>2 w" p: h. L" ^+ s$ n( m6 y. c2 k b
$ U. f- n0 X# N& g
#include <asm/mach-types.h>
- P% l9 S' u4 x1 I& [# T8 T3 R: z#include <asm/mach/arch.h>
/ Y+ B, c" _/ {$ z8 w#include <mach/da8xx.h>' s4 y6 s5 W9 n6 a" x, c( ~( E
#include <mach/mux.h>
% {9 \$ t; ^4 h" T: J
# ]8 g/ q, G3 |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( {! ]; b9 G- A! n/ W6 i Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% Z5 ?3 u$ a( m9 @" k2 w+ |
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# K( D( R; K& _; m9 O. d% u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) B: V# m0 K {% N x7 `; h: k# e& G
/ @- H0 W9 P! N3 z& T. l/* assign the tl som board LED-GPIOs*/. Q/ r8 N7 I# g0 P$ C
static const short da850_evm_tl_user_led_pins[] = {0 V6 F2 U6 M) x2 _ s; r2 W' v
/* These pins are definition at <mach/mux.h> file */
6 H# ^0 R% ]/ s, T, U; M$ \- ^+ i DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& z. b0 h3 U5 G. X: F. g6 P
-1! k7 v" B! m* V
};
4 K$ o5 M3 `$ C8 ?% \/ o! G* Q" s. A8 p7 g6 b W
static struct gpio_led da850_evm_tl_leds[] = {- h$ X* L/ m* Z6 f- w
{
" V% n' g) m3 p .active_low = 0,! i- J- J" }" l7 B/ L; o
.gpio = DA850_USER_LED0,$ T$ o8 @1 `& W5 P* l% o
.name = "user_led0",
. g- K8 M* `# \! z* A8 m3 V .default_trigger = "default-on",
/ F L# D w V h$ S& w6 m },- `, F* J' I& z0 |2 z; ?: F4 i
{
, y7 ~- l% A/ m; C& a .active_low = 0,
/ M% ~: G- o1 X \2 d* p7 G5 z .gpio = DA850_USER_LED1,
# v8 z2 q8 W6 z' m" \) V. I" i; @ .name = "user_led1",
& D" J" I! `8 o* K9 [ .default_trigger = "default-on",$ c: W, v/ d: U
},
# R) i# H2 Q2 i8 m) | {
7 l, F* k: q8 | K" \+ V .active_low = 0,
! ~ i5 N/ T( z$ b2 @- n9 m; p, H0 V .gpio = DA850_USER_LED2,
5 o/ o" Q% F: L+ g .name = "user_led2",
+ r5 m7 d2 z2 ?1 l9 m" E( T9 L" ^* K3 r3 y+ [ .default_trigger = "default-on",
5 }. ~9 C# k1 Q6 ?. x. [! F' _ },0 z' A- M: l% N1 y
{
: `3 V9 R4 y0 S+ H' l. u" w .active_low = 0,0 J8 x2 n/ }* w1 [- d
.gpio = DA850_USER_LED3,9 J5 |3 u* @$ N5 L% x" ~1 ]7 v
.name = "user_led3",
3 m6 H S1 o/ t8 \ .default_trigger = "default-on",
6 D9 J2 y9 t1 d8 d5 w },1 @; U5 z4 q! Z: G2 e
};
* j) Y& y5 f7 o2 b5 a; w' k( y; B* E8 {8 m- U5 k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' T7 E1 d$ q1 D# B9 C
.leds = da850_evm_tl_leds,
: a8 O6 [0 y/ ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! H. I; N; [+ p0 [. a: \8 ]8 D4 _
};
: m( ~ O% @2 m$ r6 h. Z8 t" \6 D( M$ g& w, T2 ~9 s9 U
static void led_dev_release(struct device *dev): s" H. T% ]7 M Z7 r" a6 z
{
1 Q' l8 `" o& o2 M};
: _' |$ m7 ?* o# \: A) v' x+ B5 Y! y/ ]
static struct platform_device da850_evm_tl_leds_device = {
, G, c/ @5 h0 i) B% n .name = "leds-gpio",
, ?1 ]8 T5 W3 P; K- j, G$ l .id = 1,+ p" y6 b; I8 r4 z' z
.dev = {
% H* R1 a* U2 q$ u' D1 s t4 q .platform_data = &da850_evm_tl_leds_pdata,
2 g2 V7 C) U9 t. U .release = led_dev_release,
' U" n$ o2 H5 R4 z/ j+ d) K9 P3 J }
) _+ Z6 T+ ^3 e3 G};
; G% ~9 j E# j' r/ v" y3 |
9 @# j% _& g8 v: L) Pstatic int __init led_platform_init(void)3 H) _/ X$ ~; X, N W
{9 N7 @+ k" v+ h7 f. m4 G- w
int ret;
4 E$ f7 c8 N W3 O( R7 v#if 09 L3 N1 l* z% I) M% Y9 |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 b! \" a* ^0 J/ z g) P1 |
if (ret)
6 ]" d p# X+ H* H; G; X I- ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 Y; i( F3 ?7 Q b5 ~" A
"%d\n", ret);
( x1 J2 M) S0 }( b" S2 n9 J#endif* _* V+ S3 B0 \( ?- ^
ret = platform_device_register(&da850_evm_tl_leds_device);& @2 B" G- x! j5 v4 E' N
if (ret)
) w/ r1 N( @5 s$ @; T+ m2 G$ o0 w3 @ pr_warning("Could not register som GPIO expander LEDS");( r, y3 |. f; R# d) U$ M, Q
else
3 p! [- v" A/ k printk(KERN_INFO "LED register sucessful!\n");8 ^4 |' d% ?8 f6 {
) T% e" w5 p" E- Z8 d$ J6 ]6 y$ \ return ret;. f! s3 i* U% K* |
}
( T7 k6 ^) ?+ w- N! [
$ Z# A) y* J6 O5 I* A( N! A1 estatic void __exit led_platform_exit(void); `, x1 f4 P& T1 I* Z: `
{
7 m5 X7 ^, U3 q! f0 _( c platform_device_unregister(&da850_evm_tl_leds_device);, q- H* b4 w8 k" ~1 P& j0 r8 w
0 F+ A& h# |" M, s3 c5 ~
printk(KERN_INFO "LED unregister!\n");# ]5 H5 J0 q0 N# {0 K' m
}- i7 [- m2 Z1 H! P+ N2 Z6 F! b
% g# f6 y* n+ f: p, bmodule_init(led_platform_init);% O5 y. N% p4 s% ~; U+ \7 K
module_exit(led_platform_exit);
- Q5 f5 [- ~# [4 h& W% g7 o6 j5 M, y5 X5 I+ a2 }, H5 h5 i
MODULE_DESCRIPTION("Led platform driver");
6 U6 ]$ G( J% X2 }MODULE_AUTHOR("Tronlong");
" |( B) r4 C1 s# Z. UMODULE_LICENSE("GPL");
6 `% n, A; x5 ? n7 w
; M( M2 D' ?4 z1 f( n; l |
|