|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, D8 }1 l3 o8 n6 S/ t0 H
#include <linux/init.h>
4 N4 @2 c! W) f( O# `0 x#include <linux/module.h>
1 S$ X+ I9 {4 t! E; ]4 e#include <linux/kernel.h>
0 r$ h, ?: j% ]8 B. e% d#include <linux/types.h>( p. ]/ @) T+ Q* I, Z
#include <linux/gpio.h>+ b* `9 M2 N% \$ e9 G' w6 A& K5 {
#include <linux/leds.h>8 e& E- A" ~; [0 L/ W1 B
#include <linux/platform_device.h>. E; L' z* H$ s$ z0 c. O) c
* ?" b6 b4 M& C, T3 X* |
#include <asm/mach-types.h>7 m% V) F6 q* u7 E. L. Z
#include <asm/mach/arch.h>* @$ s- V; J4 m; U
#include <mach/da8xx.h>7 u6 ]5 ? k. \5 \1 t' y
#include <mach/mux.h>
1 |& p% h, b) `8 j" |, ?9 y/ R9 t4 Z# } e2 k. s' Z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 u! |1 \) v0 y/ e: b
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 H6 |5 {. |+ x! k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); s) `6 k1 b7 i5 v: N1 S
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. I6 l) v8 m; R |3 c; v" ]! K9 m0 I, H ?$ r
/* assign the tl som board LED-GPIOs*/$ y* ^0 V; T* c4 `7 @
static const short da850_evm_tl_user_led_pins[] = {
, b4 i9 k# a4 ]- }, u/ \ /* These pins are definition at <mach/mux.h> file */
# O% }1 Y( i! H+ n- n1 k3 M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 ^6 C; q6 B. Y9 u6 l$ x
-1
$ U& J. y; a" D};
7 M3 N4 z5 o0 A' S: D9 n8 I3 ] w( f% f8 I. ]
static struct gpio_led da850_evm_tl_leds[] = {
' U* I8 g! D; F- A9 f7 z5 q {& c/ x6 P6 w( f1 O
.active_low = 0,% q2 q) Q/ f2 S2 h/ R
.gpio = DA850_USER_LED0,
0 ^. e' \- x6 c. O2 P+ M .name = "user_led0",
4 k" o; `2 S/ |. s. l, ^7 M2 M .default_trigger = "default-on",
, c/ ^% _& `' I) u" i$ m },
$ p0 t, p+ R. D {
* y! u( b/ ~ a2 \7 Z. e .active_low = 0,# |2 x. k1 B! f8 Y) q
.gpio = DA850_USER_LED1,
6 Y7 x5 A/ Y* `2 F( @& [9 c# N .name = "user_led1",' O/ ^4 y- H! e% M3 R
.default_trigger = "default-on",5 B4 }, O: z! m/ Y! U1 w
},9 W, |# S$ C: H/ Q% H% R
{( Y* F6 p9 P T4 A; E% a
.active_low = 0,& L8 j \5 j3 Q9 B6 ~
.gpio = DA850_USER_LED2,( E* R# ?( a& I7 Y ]) g& T( m6 C
.name = "user_led2", F$ Q2 [' O- ^3 @, W) y
.default_trigger = "default-on",
: H5 R! U1 x6 H/ {/ s* j9 a* | },
* e8 ^! Y$ [$ `4 J- |& Y {
2 S; B: l* _* ^3 O+ N! J! e .active_low = 0,! x. F; S# L( D/ k7 F5 ?
.gpio = DA850_USER_LED3,# G' j# j3 P' k9 Q
.name = "user_led3",
{5 }; [( ~) t8 a; Q- n4 _$ ?5 ^- F .default_trigger = "default-on",
0 _: c n# Y- Q$ d; K) Q4 j1 p) _ },8 R, G6 F3 `2 W/ L3 E9 ]) M y
};
@* [" F! n, D8 I1 v, M$ C+ ]) v* r* [7 u7 [; M$ o9 K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' Q$ ~' ~5 C9 {+ s" { .leds = da850_evm_tl_leds,8 Z C9 y( y' N% w- x0 X. ~2 [/ n
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: L7 S4 ^9 Q. m};
/ E9 R F% E2 ~
) S: o" w' `5 M7 Fstatic void led_dev_release(struct device *dev); E; a/ e8 D3 a9 I, j& {* |% ^- A
{
O/ k3 n4 ]' Q9 h6 k# ?};5 M. \; K& z* F
& T8 r' U+ |4 j6 J. B# X/ m0 P
static struct platform_device da850_evm_tl_leds_device = {, j5 _9 A9 v8 u" W- R- Q2 F# Q
.name = "leds-gpio",
( I$ n# ?% ?4 X Z .id = 1,
) k, Z7 z$ z9 g% F( O0 U3 r .dev = {5 L& I* [! v2 b0 g
.platform_data = &da850_evm_tl_leds_pdata,
" b% i* [8 M4 a- f6 U6 X .release = led_dev_release,
, q0 i6 E* T# r3 { }
- Z4 }9 ?; _2 L' |/ M};+ S% `0 f- L$ n- U+ Z- l
! ]' {- q# K8 T9 A
static int __init led_platform_init(void)
3 ?) Y4 |9 h) O9 M{! \7 p0 e/ r: E' f! i& Z
int ret;
* D3 I$ P0 c6 z6 V4 u. L#if 0
& s9 ^$ v/ r8 p ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& }$ W* d1 T w if (ret)1 A" ]8 ], X1 Y. K! d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) |4 @0 O m9 o- p "%d\n", ret);* L: \" @2 \. s
#endif- d7 g- `2 z. t, ?& |
ret = platform_device_register(&da850_evm_tl_leds_device);
' ?0 r* m/ e2 w5 ~! U; Y if (ret)
# E0 i/ f; M0 }7 U. Q pr_warning("Could not register som GPIO expander LEDS");
6 \4 Y2 }& x, M) T8 l6 U else
/ [4 g6 k/ |% @ printk(KERN_INFO "LED register sucessful!\n");
! I6 c/ q: p) Q/ a* n" u/ Y1 s2 V( O) ^6 j1 x+ K. ^
return ret;
/ ^ F$ _+ n: Z1 Q}
$ y7 v7 L; o- [2 K
3 Y3 I' c8 O* G# d1 B& Zstatic void __exit led_platform_exit(void)
3 G% o8 e: v7 B, T( m{( m3 |. p x# J5 e; q" y
platform_device_unregister(&da850_evm_tl_leds_device);9 }; ~" U. X: Z; W5 x7 r
3 Z# N+ L% K# l7 l% v printk(KERN_INFO "LED unregister!\n");1 a, l! n7 R1 {- L2 X b* U
}; N" ]. a" \; n3 I
2 }! I! _' n" G% U* m5 X
module_init(led_platform_init);
7 Q+ A: I4 T- M& xmodule_exit(led_platform_exit);
+ I4 M6 f4 V g1 O7 Z6 N8 K; z- v# g
MODULE_DESCRIPTION("Led platform driver");
1 B/ V, z1 t9 r. sMODULE_AUTHOR("Tronlong");5 R% D5 P& o7 X. D/ e# q) a
MODULE_LICENSE("GPL");
) w. [, f0 y6 [5 W
( P5 V% R8 q( U Z S1 V |
|