|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 H3 g: g9 Z) ]( T c2 E) g#include <linux/init.h>/ T: k0 c- b8 y i c4 H3 f
#include <linux/module.h>. H! J- p$ N" [4 j
#include <linux/kernel.h>: [6 v! M" b; _! N% W5 j1 s3 L3 _
#include <linux/types.h>
6 X g9 r% d4 O" ^7 `# V# p' r#include <linux/gpio.h>
3 O# L3 k+ H7 o1 Z; _; c4 q#include <linux/leds.h>4 s" e: T; ]* J$ @
#include <linux/platform_device.h>. x" S K; Y1 E6 K* u1 n
2 B+ d; `/ ]1 ~8 K, {( q$ T t* w
#include <asm/mach-types.h>
, p# B9 O1 b+ q& `# w#include <asm/mach/arch.h>
! s8 ?9 |( Z `3 J& p#include <mach/da8xx.h>) `- X8 z5 m* q& _
#include <mach/mux.h>6 f3 Q$ b+ h& `
: f q! T+ k$ T% \5 V
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 b- w! G$ K' v! j1 \+ |# y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 z7 u, t# }0 l" m
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( o. H2 A4 y# W! F I- @! w
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 L* y% @ P3 \; o$ E/ C; v1 Z9 @1 R* Y' y0 d5 b+ y6 L
/* assign the tl som board LED-GPIOs*/3 ~: O- S# s+ H" y7 s& o
static const short da850_evm_tl_user_led_pins[] = {
1 F' H) ~- }5 R+ x+ o b /* These pins are definition at <mach/mux.h> file */
1 ^( B( E; b7 ?+ B. [ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 M/ c- U1 S* C -1
) @0 ?. D1 ]/ y r3 l};
+ S2 o, ]! Z" d; L' U0 V' u
. l" `5 T+ Q$ @ e( O& i) ~2 fstatic struct gpio_led da850_evm_tl_leds[] = {
( ~+ p& y/ H6 M; H {1 [3 F3 f7 i' r( ?- a0 `
.active_low = 0,
9 a( o0 O1 C7 \/ {6 o0 _ .gpio = DA850_USER_LED0,
$ S# U$ }0 ]$ Q( d3 k .name = "user_led0",
9 W/ m. U5 ^5 c% ^+ ^/ ` .default_trigger = "default-on",
' j5 ~& P N# m6 p },
% _ X7 N8 k# A5 A7 R! ?1 _) F9 \ {
: X- I) B) @5 X" P& ~ .active_low = 0,. @0 a# ~6 F& a6 v- j
.gpio = DA850_USER_LED1,
6 |$ d. B+ j |3 U, ?. _ .name = "user_led1",) ~8 I! |. G6 _" ?1 |' ~; a+ [
.default_trigger = "default-on",1 n) H' [3 x4 Q3 `
},- t L# H# A* [" b
{+ o) f4 h( j8 m4 S. ?" Y+ @
.active_low = 0,
/ E, P6 A! x6 Z! b0 P .gpio = DA850_USER_LED2,( q% i3 a8 H3 R
.name = "user_led2",
# x& X3 o3 ]: s3 [+ j .default_trigger = "default-on",
1 v! E3 z. l3 K p. {/ B) i/ f },- G% p1 u, z+ `% \$ W- ^, O# }$ s
{
. h$ v3 w4 z4 G7 |$ ^! q" B) z: G .active_low = 0,
% D0 p1 V* L5 F; y: S* X" L! l, S .gpio = DA850_USER_LED3,
- q$ J8 O/ b) z# i .name = "user_led3",
7 b- x N" w% z2 K5 u7 _. x) j .default_trigger = "default-on",
2 Q* S" {* ?/ e8 O/ m },
% |$ f4 t+ k$ c2 @4 f4 U! U" k# L/ ]};5 G: O# D7 T! E( Q# K
" @5 o: J7 c8 T$ |/ G0 L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! h! z% g6 g W% ~5 o( Y2 E
.leds = da850_evm_tl_leds,
' ]$ v* @; W. E .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 A# [. y- H. O# x. ?8 y};9 g' n2 N) c& L
5 y6 `' C) F9 i4 M, g$ x( q) r! Estatic void led_dev_release(struct device *dev)
% r1 e# ]! f# g4 c1 A# r/ S# A{
' ?8 \4 P9 p% ^& I3 N6 Y/ X, W: |};
1 J* f$ s7 q6 H3 U' M8 r0 p" v. I9 b
static struct platform_device da850_evm_tl_leds_device = {
i. G5 b- X' _) x .name = "leds-gpio",6 j7 P0 C1 m- T7 }
.id = 1,
; Y6 Z# B; x: O; e .dev = {# a4 z% S4 B& t5 c# _; o" f+ L
.platform_data = &da850_evm_tl_leds_pdata,: {+ d& _$ {8 }0 g' e$ k' `
.release = led_dev_release,; n l& e7 T: o
}
8 e3 o8 f: ]+ S6 q, ?- ?& V" J( _3 Q};
u; I! A* }8 u5 z B4 r
8 d5 z g/ i8 }1 Fstatic int __init led_platform_init(void)
# g0 r7 H5 c p% C! c6 U8 j2 C{8 [! E* m0 H* L* o; c; d/ |( f% i
int ret;* @4 {" y# x2 q: }( k7 J
#if 0
! C! n9 `1 j2 F1 L5 K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ Z5 u5 |* P% O. |6 T
if (ret)7 X+ b3 p" D5 a* S; ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- U: Z/ p5 x0 t/ r1 W3 {9 `
"%d\n", ret);( n* e' [, X3 i$ ?: j9 e3 A
#endif
* \! i/ S9 U" \' ?9 h ret = platform_device_register(&da850_evm_tl_leds_device); q- z, ?* T9 e. e8 a) I+ I3 o
if (ret)
8 Z& u5 w2 x) Q/ {. k0 V; B% O8 B7 { pr_warning("Could not register som GPIO expander LEDS");' D2 q E5 ?9 _7 @( S! f3 u
else% N" a2 s9 w. a5 g& n
printk(KERN_INFO "LED register sucessful!\n");
7 K% Z7 {" p7 ^3 A5 Y. p
4 D: i% R8 ?5 Q0 U( w; w return ret;& v3 o5 m- i4 m5 N: u
}' H$ e ]4 M7 Y+ J% u8 k
3 b* i/ n8 U7 A/ W
static void __exit led_platform_exit(void)6 [9 X: g, u/ g3 f! P
{3 K7 W5 \' B( j- e2 t
platform_device_unregister(&da850_evm_tl_leds_device);( o, o. u! B" ]) J& E+ e( C
7 i6 H7 ^' A3 F# W
printk(KERN_INFO "LED unregister!\n");$ e! V3 }9 N7 @) O0 L& e; }
}' D, U; ?2 c5 H
9 P2 Q3 w9 E9 b% e
module_init(led_platform_init);
9 {4 l- o" y0 e5 g+ v |module_exit(led_platform_exit);
1 U2 T. S* S) Y* v! H# U' ]
! H! {8 ]1 E' Y/ h) eMODULE_DESCRIPTION("Led platform driver");
+ h: M, t8 K" X+ pMODULE_AUTHOR("Tronlong");7 ^0 L( x, t0 s/ L* i4 B
MODULE_LICENSE("GPL");
5 a) M0 |! z" O" g y" x+ p- H* k% R0 f9 o6 l5 o
|
|