|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 I( n3 E( N* a* c$ B5 D& k u
#include <linux/init.h>
% w$ Z" @) U* X2 h5 w#include <linux/module.h>" \ ~0 T( b% G5 ~- o
#include <linux/kernel.h>
# j" z0 d# j P+ b( g1 m5 c#include <linux/types.h>* R: r3 B O w
#include <linux/gpio.h>
- B/ S/ f/ r0 \2 J#include <linux/leds.h>
$ p" |& Z6 V- q7 G; W#include <linux/platform_device.h>7 h% E) q/ q+ j' n% ~' g
2 K6 e7 t0 M' p/ K w* V: u3 y
#include <asm/mach-types.h>" {( K% L: Y5 X' h7 U
#include <asm/mach/arch.h>
1 s$ } \5 K" t! f9 ?#include <mach/da8xx.h>! O/ w H0 U' i9 Z( [% ^
#include <mach/mux.h>
8 w9 z) R* N: x9 [7 }: d
" a0 K/ N4 X/ J; z% X#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ `$ E" S4 V9 L; X( q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 I1 l7 I: c* R( O7 K" ~+ {* k
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( E8 {( j6 S7 r c#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 Z6 n- j# c' Z" K
2 i f3 U0 Z7 o4 ~/ Z: f! I
/* assign the tl som board LED-GPIOs*/
* A6 U) i( o) H( m5 Vstatic const short da850_evm_tl_user_led_pins[] = {
- B: s" i7 _ }9 j2 Z% q e5 t4 ~ /* These pins are definition at <mach/mux.h> file */
% \$ B Z& S7 j0 ^0 N) e! U$ g, S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' D2 h! X: i# b! v u
-1$ V H2 ?3 T% G+ d
};5 R+ b" b9 x1 P' {9 d1 g/ q
# {) [& p C+ J5 u4 W0 Ystatic struct gpio_led da850_evm_tl_leds[] = {
% \ T z/ Z, O" A: C. I) w% j, Q {
; H$ J1 _. c/ u8 \ S .active_low = 0,! J" P7 H7 t/ O. A; X* L
.gpio = DA850_USER_LED0,
W7 P) Z4 @! ^1 }$ {! c v .name = "user_led0",
7 s. M9 i z! p+ _ .default_trigger = "default-on",) W, \4 w, F, k" ^: Z( K$ R
},6 Y" W( U% e2 `* o7 j2 Y2 e8 O( k
{9 T: S3 @' c9 B% q3 e g0 K
.active_low = 0,
/ q( D0 ~' t! n .gpio = DA850_USER_LED1,& c; Y F) u, Z% b
.name = "user_led1",. Q9 p9 w4 ~5 P4 ?+ ?( K) i
.default_trigger = "default-on",, [. ?5 |; t2 X4 ~* \* [
},, u. E% O' P7 y! V
{2 v6 ?1 ]( b9 G$ Z* f; q& S
.active_low = 0,6 h% y$ E* R' F1 b7 ^4 I9 w1 F7 @
.gpio = DA850_USER_LED2,# z" s3 G# @- \' _0 G" ]9 q
.name = "user_led2",3 v1 G7 N" r2 i/ \' B. P
.default_trigger = "default-on",, O" Q; `1 R0 r; F
},
& N' s4 H- F, [. s0 _ {! y0 O; O3 s3 w8 s
.active_low = 0,) v3 ~1 \/ ?* L0 [
.gpio = DA850_USER_LED3, P0 r( t( ^/ r/ |
.name = "user_led3",7 W8 M3 [" `3 }. s- @
.default_trigger = "default-on",+ p+ d9 \4 X' w3 a/ K7 n
},8 y# a. W) O: n8 h' m
};
: x `: n) M3 B& q& d/ u% e* Q/ q: Q p* }! G# u. c
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 }1 o$ d2 [/ ?- Y) C: T/ [
.leds = da850_evm_tl_leds,
6 |) v% w) Q" X .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 J: h, v2 d) d% L. b- H3 r! ]};
' ?: f1 a5 K! H, F: @9 [: T. u1 l% n6 z
static void led_dev_release(struct device *dev)
( @/ A6 R6 P1 Y% L1 J{
9 {3 U+ r/ f) Y. z' z$ _};" h; [+ ?2 E' R3 x2 L: [
* u7 l& w. x' gstatic struct platform_device da850_evm_tl_leds_device = {
! y' t! n8 `0 l5 F9 K! j .name = "leds-gpio",' c: j. M/ T' O! ~
.id = 1,
( ~5 E' t7 S- b .dev = {6 D, O$ k* \8 S# q4 g, R% Y
.platform_data = &da850_evm_tl_leds_pdata,
0 A4 K8 h' h& M( K/ M- m' I .release = led_dev_release,* O) J0 \) k( [5 Q$ h; \7 }7 u0 l
}6 \# }) x# c# ]# X: v
};
% H' G3 h5 a2 a; t9 V) [( P/ p8 F9 p! W! i/ }
static int __init led_platform_init(void)
+ B9 G) z4 J" { H{
8 _, Q1 l, U- j m7 K0 f/ j int ret;
3 h: h4 t# C9 L/ u1 o# m+ P6 J#if 08 C g3 o2 c I) w) w
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 A% F+ j& a$ B6 k& A. X8 ?. C
if (ret)& p# W5 Q$ ]) v
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" s, D, p. j& a0 W8 Y3 k* C# z
"%d\n", ret);( e% ~$ m# f! ]
#endif ~: \: \* C8 b! f
ret = platform_device_register(&da850_evm_tl_leds_device);
; Z7 Y. u) L& G if (ret)0 K4 n% L6 N; \0 L% U$ \6 I
pr_warning("Could not register som GPIO expander LEDS");' r5 r& {4 O6 h# P/ m0 B; \6 H
else1 B' o: X8 W: T! u' j
printk(KERN_INFO "LED register sucessful!\n");- q# L9 h0 u# }) A* f# |4 G" {
) A4 ~! V, ?) @' `/ W return ret;& @$ I" A2 R5 t, r0 D
}
9 F' r" U$ Y; M% c( L8 u
$ r5 ]# [; F4 k! Ystatic void __exit led_platform_exit(void)" j# A/ X' i9 c, s3 T
{
* q& l7 j6 F. U! Q1 ^ s platform_device_unregister(&da850_evm_tl_leds_device);
% z" ~4 K5 c5 Y& ?& @7 d1 _9 t6 @, x5 R' X
printk(KERN_INFO "LED unregister!\n"); o7 \+ ~" `% W2 s+ V! ~" s
}
, {5 L* u" L. [/ W% O# E9 Y# T! I8 A; i/ x& g& B
module_init(led_platform_init);
0 }/ w4 a/ D; Y1 Y$ {module_exit(led_platform_exit);9 [" @& ?7 A- {' D! D/ {
) w2 Y" i6 E# u' cMODULE_DESCRIPTION("Led platform driver");
* z7 U; d( n7 T! H6 N% aMODULE_AUTHOR("Tronlong");
8 W# Y; {: N7 A3 L" Q9 g" {9 _MODULE_LICENSE("GPL");
; n( A2 f) h" l1 h6 f+ S1 D' m- Y f. Y' z& _
|
|