|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* s3 H, Q# j; c* E B$ s#include <linux/init.h>
: w- S- R; y6 s" n, [#include <linux/module.h> x* q( L5 o5 c# a! [" ~
#include <linux/kernel.h>
/ h. u$ |; E4 D* f% Z#include <linux/types.h>( |& ?( f* E m9 A
#include <linux/gpio.h>) N& f# {% \0 y a$ ]
#include <linux/leds.h>$ w6 b! ]. I1 j7 N, a
#include <linux/platform_device.h>
6 s7 l" }6 S- O- r% J
; M, T5 i6 ]5 e+ |$ y8 Q" Z#include <asm/mach-types.h>2 E5 d1 U9 \6 }$ m
#include <asm/mach/arch.h>) z! u3 i* u4 p9 g* U) p4 L
#include <mach/da8xx.h>. Y4 r5 ?& `) _7 o2 Q8 S* `9 ^
#include <mach/mux.h>
- o( K }4 |: ^ j* i a( e1 D2 w0 Y/ u! P. Z ] {( A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' b+ Y8 x; V3 L( k#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 U2 e& {: x; d t1 {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ {7 }( J5 P4 n1 D6 s% V
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ y' ^; I& C% d! x6 B! g8 F N K' z6 d' O
/* assign the tl som board LED-GPIOs*/" m% b8 g$ H" s+ r1 U
static const short da850_evm_tl_user_led_pins[] = {$ q0 m/ j5 E# d( a
/* These pins are definition at <mach/mux.h> file */ @5 v" j6 c7 i
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 m. ?4 j2 k$ ]9 f( i+ h -1
% l( T9 E' w7 c9 q# |, B/ D @/ g: S};8 w6 }, a! g5 O2 m8 b! {& ?2 F
* B& b s( S6 K8 tstatic struct gpio_led da850_evm_tl_leds[] = {
! b9 W& V' c3 I% E5 _ {
; y d/ P% y( j4 r) b/ l, E .active_low = 0,
! W5 @* {! H! G3 P# _4 g .gpio = DA850_USER_LED0,
. w3 h; |/ o- s# S, V$ I4 T8 |+ ]. n .name = "user_led0",+ C5 z3 n* o7 X% ^# w
.default_trigger = "default-on",
& Y/ `- H# e6 v B6 F( E0 c0 G },
9 c ?) J7 C# u P+ |# N { M. p/ A. i9 z5 f/ z# }$ F
.active_low = 0,
$ H8 J! L8 {" i1 n/ i; B: @ .gpio = DA850_USER_LED1,5 s9 W! q3 ~% ?
.name = "user_led1",1 u5 _$ V! ]8 q, @2 Y9 d+ ^- }
.default_trigger = "default-on",
+ f! W4 }5 c3 e1 ]/ p$ z5 a5 Q },& X% }$ m6 Z/ T% Q, b
{
8 @5 M n7 T6 L/ q, g2 U0 i. P .active_low = 0,
6 Q' W! S. R: R, g. J1 X .gpio = DA850_USER_LED2,
+ F5 |4 h5 h4 J .name = "user_led2",
" r W1 `! Y/ P* p( \ .default_trigger = "default-on",
; U+ g d' A& Y% l: o4 M! J6 L) V; G },
" `4 Z! R) ?" j9 H: S5 D {5 t$ ^+ E5 N% V X0 X& c) J# W! D* C
.active_low = 0,
! e% h) i1 Z! Y o# N2 _$ f7 { .gpio = DA850_USER_LED3,( I7 p$ K# V% w0 i
.name = "user_led3",
{) r* {3 y' k: r* ` .default_trigger = "default-on",' |, J6 i+ ?5 [
},) Q* @- R- ~1 h, F
};/ l* c4 B, G0 I" Z2 c0 {( q
' A! L$ C0 v/ Q6 h* O. N# N$ F/ ~static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 J$ r0 j3 `# W' }$ d4 W9 f
.leds = da850_evm_tl_leds,
8 `0 G+ a1 }: B1 u/ L' k3 } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 x/ G4 A3 k. k
};
3 m6 C4 a8 R, M7 D. u0 d0 G% T) a5 ?( I4 b# ?! g8 K
static void led_dev_release(struct device *dev)7 K& H+ C u E4 I! s
{
0 j. z4 M2 }$ _6 K/ |2 G% F8 n};
0 R' R3 D4 R* A7 X
/ p, g# u6 p$ J) U. E D$ [8 O2 dstatic struct platform_device da850_evm_tl_leds_device = {2 y7 \& {; @8 [0 b+ w8 J+ V" d
.name = "leds-gpio",& C7 r0 s; H. d, J* z$ x
.id = 1,
# u. R: d0 }6 s8 Z* K .dev = {
1 B& V* R- q# [0 |/ G0 m5 C .platform_data = &da850_evm_tl_leds_pdata,
' Y+ c- l7 r: G! J .release = led_dev_release,) I6 G- B( C" N! i' d" g
}: W! t, M. r4 Z. g
};( E0 v; d5 Z. C% Y
0 @8 h9 E1 U/ ~" z$ y0 E# Dstatic int __init led_platform_init(void)" w% ` j: ~8 l
{7 H, ]2 u( o) J# v
int ret;
) `, P z; V* d+ d/ ]5 v/ j4 k#if 0- i1 s3 d# Y, H( e ]
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& y7 g, I" ?0 _
if (ret)
* H( G7 C& g! M2 E. k, U; U pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* O. e: I3 n7 u6 g6 i J3 R "%d\n", ret);/ d N8 T5 W+ V4 r8 U4 p
#endif
& c6 Z# `4 ?2 z ret = platform_device_register(&da850_evm_tl_leds_device);
% n" y8 ~ D' d3 `: U if (ret)
5 v- f8 N8 A+ v6 Y pr_warning("Could not register som GPIO expander LEDS");
- k& J9 @/ L! F I else. k9 p6 L8 i" @2 G( F! L. C w
printk(KERN_INFO "LED register sucessful!\n");
9 H# Z# \% L8 i" D5 f5 g! e8 S- f7 u- [& t3 f, y
return ret;" [2 v' g! D0 I% b
}
/ b2 F8 e# r; D7 v. j" g. z
* ^, e! ~' Z# P! A6 y2 pstatic void __exit led_platform_exit(void)
8 j) [) K9 n9 l" L6 O" o% y{. g( Q/ \. n2 D0 W% ^. e% U. k) H
platform_device_unregister(&da850_evm_tl_leds_device);
# c6 l( Q: {. C# G& F' S7 |2 }. E' [5 ` b5 s. o. @
printk(KERN_INFO "LED unregister!\n");$ [* W8 _6 i" N5 k7 Q3 Y7 Y! ~
}
1 x# Z2 [2 i; N! \) \
M2 n- l+ F' h. Amodule_init(led_platform_init);/ a: |4 L# T3 D% F, l
module_exit(led_platform_exit);
# f R2 S0 V f. i3 T3 @
) E; ~" `9 i; J r2 hMODULE_DESCRIPTION("Led platform driver");
/ \# Z7 G+ o" M) X7 x4 A9 qMODULE_AUTHOR("Tronlong");5 S6 j+ W- t, F6 R6 ~" J
MODULE_LICENSE("GPL");
. N5 {! Q( r# A& ]
: W4 W8 ?+ c4 u+ Q6 w |
|