|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 w& L1 G# P4 ?( O! a7 K; B#include <linux/init.h>4 S& j/ M: L# C9 E3 @, C
#include <linux/module.h>
# o: @) k2 s: M6 F* c#include <linux/kernel.h>
Q) P+ @; r0 p#include <linux/types.h>
0 u9 K0 a$ G7 j7 Z7 [#include <linux/gpio.h>- G7 ^$ `3 E( q! c. l& h1 ]
#include <linux/leds.h>
1 q& U, I5 ^, Q- r' P- o/ Z#include <linux/platform_device.h>; B/ W6 s# h3 \' Q
1 s3 n' {8 K) j7 K E" v, R
#include <asm/mach-types.h>
K- h* f- g6 P" E#include <asm/mach/arch.h>
: {2 _& Z+ @% n: h8 z+ ?#include <mach/da8xx.h>
8 X4 w0 A: B t7 E6 o8 T#include <mach/mux.h>
0 w$ z0 B& K2 x" o" Y5 [5 J- s4 }. M4 e( ?1 \- l8 Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ {, c& `1 \5 S% k( R4 X$ ?% e#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# ]4 ^6 L0 J8 a: u8 v. n#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" q: e% Q' P; O5 Z& I m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. G2 `+ n U( s+ C& W0 K
: F- F7 C" U5 s6 V1 Z/ X/* assign the tl som board LED-GPIOs*/
* R- x# t! m, |2 zstatic const short da850_evm_tl_user_led_pins[] = {
+ U2 [5 [+ \6 Q" Y /* These pins are definition at <mach/mux.h> file */
! s) o% |4 |5 H# q J/ @) U; S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; J' Y+ Y" S2 g, v3 x
-1
v0 x3 K7 P- O" }! p6 x0 Q$ k};- u5 J% X, ^5 Z9 \. b' o
4 f* R" u. h- h( y& p
static struct gpio_led da850_evm_tl_leds[] = {
* P- r p/ |4 q/ [8 q1 F! G+ Z {/ l; f! ]$ z# n- g/ W2 @
.active_low = 0,: F' S; F3 w8 o1 ^
.gpio = DA850_USER_LED0,3 j) ]5 o7 s' y7 p; G9 x- ]$ |
.name = "user_led0",
9 k5 S1 m- J K: D( Z1 A .default_trigger = "default-on",
/ f6 u& d/ y8 u/ X( u, j; Q$ i },7 L2 |' Q$ ]0 }
{
8 M$ x0 n; x& ~; h! I4 E2 C .active_low = 0,, T- v8 N$ B" F$ ?1 f
.gpio = DA850_USER_LED1,
# H! c8 f) f1 b+ L8 i( A .name = "user_led1",& r- R2 e7 L. @6 ^: [
.default_trigger = "default-on",
! H- E$ e6 X) m },
4 l9 O- d! _, P& n. x {; e% ?" s0 ], `* L. X' {0 a' U- p
.active_low = 0,. a- a: x0 ^( M/ H% M1 Y3 _ O" _
.gpio = DA850_USER_LED2,% p' k# \4 W$ `4 J
.name = "user_led2",
) h8 z9 r5 Y/ j* j0 z1 |; G .default_trigger = "default-on",
4 B: F8 h8 w8 o; C },
% x X( w% j* s3 ] {
! }1 `1 @; m5 Y4 Q) n .active_low = 0,
y+ q9 c+ |6 w- E8 @, N .gpio = DA850_USER_LED3,9 `+ p# g9 U% f3 `( g# o% Q" ~$ ~5 T
.name = "user_led3",
4 L5 e7 r3 s* ?( S .default_trigger = "default-on",3 w8 q; R. g x0 z: k. Q
},5 W" d8 }) S g0 @: W- q5 H0 Q
};# @% s& t1 d7 ]- K' m
- l& r& J4 h, q: ^9 m3 F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' c' H$ @ I, I G- Q6 w .leds = da850_evm_tl_leds,
* {8 {1 @7 L+ k/ i, _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ w5 n8 ?& i: k: S( j2 e% l' K
};
) R+ C( L- o; T/ [3 } \9 ~# {3 R7 H' J- v
static void led_dev_release(struct device *dev). T- w, ~: ` `( `/ Z1 b
{
! Q' V0 U S3 H1 w# u};2 @1 ?7 t- p. Z, c$ e
9 G. h2 R5 |( s9 A6 \8 Q3 r" gstatic struct platform_device da850_evm_tl_leds_device = {
0 H% R! v9 Q3 }- m" K .name = "leds-gpio",
/ q6 Q; U6 R# f1 ?0 h- h" i .id = 1,4 O# l) e6 U3 R6 J3 [
.dev = {
& E! t+ K7 G( m- X3 H( k( Q5 _ .platform_data = &da850_evm_tl_leds_pdata,6 w+ C ?$ `- ^! s5 W! Z
.release = led_dev_release,
7 w% r" d3 p( e+ @5 Y8 p" {* M+ F* i }
; M* ^7 E( t1 o' j9 [8 A1 l};, ?( |' u) O4 ~' q
8 ?3 b N' z# I6 m$ `7 a$ v
static int __init led_platform_init(void)
! @0 s8 X9 H. b. v: x/ e{4 z( o( k) ?4 y, i7 h
int ret;
" |1 X V# V1 ?% @#if 0. E+ _2 L& t8 c( |6 t
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! ^/ Q4 K: o2 z8 B# g- m' h
if (ret)6 A' S) ~; c$ W( J3 E% Y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 ^+ |9 E9 C! y9 w "%d\n", ret);
8 A5 H) e1 o- }( H, U0 W#endif
4 j5 n) ~0 h2 h6 u" T7 ` E1 o ret = platform_device_register(&da850_evm_tl_leds_device);
: Q9 H" }3 I3 \1 W! l- y0 Q9 I if (ret), s( f" Y* R* E# U
pr_warning("Could not register som GPIO expander LEDS");
% `2 z7 |$ z) e7 P3 H( @ else: t. f2 m6 R0 B% e+ G! ]! |8 C
printk(KERN_INFO "LED register sucessful!\n"); U$ V* q. n6 g8 A0 v& @% ?
( r5 w8 }: a- ]8 M, Z; T return ret;+ d5 L# R' `2 K- p) T5 Y
}
% w. `# {! O1 G! n' X4 y2 ?7 }2 D2 a9 f
static void __exit led_platform_exit(void)
3 H% B, ^' r$ J) n{
! V+ s2 v ^) y. ^& w platform_device_unregister(&da850_evm_tl_leds_device);
. T b; {% s) z6 \; h* X5 }% p$ E; G3 y% V5 i/ s9 h" K w
printk(KERN_INFO "LED unregister!\n");
4 ?: c8 j9 o6 d2 j) G- A}3 ^* D1 x6 s6 z4 `; g: A4 N
) h! b- e7 i1 M' @
module_init(led_platform_init);( t- i9 `0 p& Q4 h A
module_exit(led_platform_exit);
0 g+ b4 V0 r8 Z1 n+ V/ G; {8 e0 }% V# t$ x" i/ D) c
MODULE_DESCRIPTION("Led platform driver");
* d5 X7 {) M6 u6 V- MMODULE_AUTHOR("Tronlong");
9 H& ], `2 H1 N1 F( [9 lMODULE_LICENSE("GPL");& a5 E6 Y) j b6 @4 y2 _+ W
$ c/ z0 ^ w, _ W |
|