|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; a i" X8 W6 ]2 `0 o#include <linux/init.h>
" K2 c. H. b$ e: R& R! q9 K#include <linux/module.h>
0 L! Q9 o" N5 {) O0 G5 m#include <linux/kernel.h>( C& B; I7 V- f/ u% F8 G
#include <linux/types.h>
$ F) h( l! K: V/ p* w#include <linux/gpio.h>( ]# A# x! w( ~) B4 S
#include <linux/leds.h>
) }5 s% ^4 L* B8 L; B0 ^9 R' i#include <linux/platform_device.h>
# C! u9 X0 K# t, t% ?' {! s3 h X( C. X V* c+ _- ]
#include <asm/mach-types.h>
$ {# c# C) u, b#include <asm/mach/arch.h>6 U7 z. l$ Z1 y# |5 a8 J
#include <mach/da8xx.h>
% }5 U* }& d5 V/ y4 g' W" A9 w#include <mach/mux.h>
; V( r1 X/ r, z8 F5 U" z1 }% [3 E4 B! B- t0 [4 d/ f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! p8 ]: ]8 D: g: ]7 ]) c8 u#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* S3 L$ G) h0 g* ]
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: ?, ^% R2 O6 {/ |* z g7 k3 L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 O( }1 c3 B- r. u, c9 l, F1 Y
: q9 f8 {7 a9 A, e+ I
/* assign the tl som board LED-GPIOs*/2 k4 r) p8 m+ h, r( F
static const short da850_evm_tl_user_led_pins[] = {
7 f1 B8 B2 i9 }; C+ o. Y /* These pins are definition at <mach/mux.h> file */" e/ @, D- R! y) H
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ {3 D/ r# X0 g* j
-1/ j' o# s+ L2 N5 y+ W. e
};
4 @$ r& f+ F1 H- a% |4 Q
' h4 O( A1 I2 L1 i) Q5 D. @! \static struct gpio_led da850_evm_tl_leds[] = {
* R8 [6 k8 o) J8 \6 E* w+ n {" u4 _3 Z( p: r1 U" I, }- }- j' r
.active_low = 0,2 [9 _' H. Y0 |" j3 {. C1 |) X
.gpio = DA850_USER_LED0,
$ n' i3 X+ H6 u& I .name = "user_led0",
. S. D( b5 L$ f .default_trigger = "default-on",
/ i4 g/ a* ?: U& U5 E6 l O },# _" y$ X7 v$ l) T6 ^/ {& _1 e
{. }1 p/ X) s3 G! n
.active_low = 0,4 N- e6 R) q; L- G; |
.gpio = DA850_USER_LED1,
, V1 m7 r5 ]8 C6 G" W .name = "user_led1", l! i! k$ A) W. B/ G! O9 @
.default_trigger = "default-on",
4 }& V# m7 |7 B. F% P% F) [ Y },7 o) R+ u% p2 h N; z
{5 `! d' D& m, [) I: H8 K3 S
.active_low = 0,( Q$ e- C }( d/ g! Z) ^* X6 ]7 z
.gpio = DA850_USER_LED2,
( G8 H+ k- b5 S6 k: }$ c( i .name = "user_led2",
- j5 v' Q% }2 ^3 i/ U .default_trigger = "default-on",( p! ~8 l- R1 S8 h% N, r; {0 ?$ |
},
7 h' E c( W9 u( D( ]' V {, P: E! V7 ]1 z# }( S; ]0 {2 M
.active_low = 0,5 L* X* D# g J$ L* F( X8 i4 ?, e
.gpio = DA850_USER_LED3,
; J5 L4 ^7 U2 D6 N; M .name = "user_led3",1 U, @2 T( A3 P# p
.default_trigger = "default-on",
2 p$ u# H2 F$ d% m9 m+ b w },# j8 [) F: l- V9 S9 f, |& M
};
0 f0 A+ k& @6 X8 D) t6 J$ d0 w3 V6 [0 ~- l# G! B5 U/ k4 y1 g; Q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 x. W7 Q7 r: \1 Y8 R1 v7 P
.leds = da850_evm_tl_leds,; m+ w- \, }4 m7 e: Q; K" J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- o- C2 N8 C; q$ Q
};* H- Q { h4 G6 J8 L
4 r% N3 K" D# h5 t, gstatic void led_dev_release(struct device *dev)
6 B8 \* P$ v: E- r* k' t{ ]- H8 h9 E) Q/ W6 D
};$ E( @4 p5 Z# D5 Q9 F# m- K/ o
6 U1 ?) j) F# e2 y* S" e
static struct platform_device da850_evm_tl_leds_device = {
8 z2 V% ?( v+ d( z' J. k .name = "leds-gpio",
4 J( P+ V3 r$ V, k" A) ]! n .id = 1,8 h& n1 T! K# a! F
.dev = {
6 D1 ]) Z( m1 V2 a, @: ?! R$ C' s .platform_data = &da850_evm_tl_leds_pdata,
. i$ G( |' e* n8 P' T1 |& R .release = led_dev_release,
+ E1 `5 @% }. N" a. t }
6 C, a; U& e: W};2 N' L* p$ C- y% [5 n% ]
$ ~. L4 P6 x7 P0 k) v) Ustatic int __init led_platform_init(void)
! \# ]6 `, H; o# q1 w* E: \0 N{
# J: J7 s& b3 j' y1 H/ P" K, v( C int ret;
0 l0 q. B5 k& B5 h3 y#if 0
4 D7 z1 U4 {! ^1 l# z* A% W6 H4 o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% t; T. b" b8 w+ V e8 E. H; g
if (ret)1 ]4 j3 W% j. E& E& _
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 A2 ^; \; P% O2 G5 J# @ "%d\n", ret);6 r% t# K* x! q$ _2 V+ f& ~2 @
#endif
% H. f5 F5 Y* ~- O8 k" R ret = platform_device_register(&da850_evm_tl_leds_device);
; ^, \- b4 S6 N5 @+ i8 C2 ] if (ret)$ q+ | F+ W9 }5 O0 k( A! M
pr_warning("Could not register som GPIO expander LEDS");3 |% p6 n$ o, _3 T1 z1 y
else* q, B- A9 h w* K |( I
printk(KERN_INFO "LED register sucessful!\n");& T/ l# U$ L$ s, g5 W" A$ k
/ X: Q- O$ _, h1 l! V$ g3 F return ret;
! W d0 v9 o# I1 j$ ~+ e" P2 t}. |1 c- R2 L4 O/ I$ b) T) `
* ~% m' c# f$ H; J! Q; A! C4 Rstatic void __exit led_platform_exit(void)6 e6 O ^9 `& ?/ O4 c7 v
{
+ g2 [6 d! i1 W" l/ B platform_device_unregister(&da850_evm_tl_leds_device);
1 |* n; c7 d. a4 ]
" ]% g5 I+ }; t- B" o printk(KERN_INFO "LED unregister!\n");
$ z8 z& [4 b7 ~2 T$ @# @& A}! S( u: s1 r v9 d! T0 I
" i& R# U2 a+ f @: z2 [# O
module_init(led_platform_init);7 |1 S7 x" N( V& g* I& i9 u% B
module_exit(led_platform_exit);; |5 T( t7 s$ |) D. @. E8 C1 R
: g) ?& ~% H t
MODULE_DESCRIPTION("Led platform driver");% Z' K3 e4 M q7 Q3 s1 X" ~
MODULE_AUTHOR("Tronlong");
$ a, }; w( T; g" k A, R' R# k' kMODULE_LICENSE("GPL");
% ]8 ]' r* Q. @! K2 W$ F& L
- u2 I" b! ^, q; j |
|