|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 [) g" p, @" |4 X1 K
#include <linux/init.h>. |4 }2 N8 d0 `+ o7 ]
#include <linux/module.h>/ o( w8 }- U9 J
#include <linux/kernel.h>
- n* d! b) v& |( g#include <linux/types.h>6 q; D" [- z* U; S. `; ?8 z
#include <linux/gpio.h>8 i2 V1 N9 m+ ?# ]8 c, g6 R
#include <linux/leds.h>
8 w e, g" h: w3 O8 R' I#include <linux/platform_device.h>
6 ^& K, z. w0 j3 l1 ?1 L# f! U# v* R4 U
#include <asm/mach-types.h>& e; b+ X5 m$ G9 v0 a+ Y/ Z; u2 z
#include <asm/mach/arch.h>
/ \( P7 l! h" x x, `1 g x; {7 h#include <mach/da8xx.h>
$ e6 p2 g. G, {# l( R. s# n$ L% x#include <mach/mux.h>/ Q; y# @' g3 @; {: f: a
% s# |. |. I% M# y# r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 y1 h1 e. x; N" B9 d$ x. h! c#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) |6 G/ `* H0 Q' Q) m& I
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 H5 G$ j5 u9 h8 R$ h+ T! l3 m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# {0 Y# O: W6 q" O
4 L& ^' l$ v# H' Z/ T8 _/* assign the tl som board LED-GPIOs*/
: I6 J% L" ?" d4 Lstatic const short da850_evm_tl_user_led_pins[] = {2 T9 W4 t8 s9 O$ h3 J
/* These pins are definition at <mach/mux.h> file */ n8 h0 P) A9 ?. f: i0 I2 w4 U) X
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) B" A5 g6 |# Y- C
-1) Y1 ~- A8 T/ T i6 e" h( B) [3 K- u
};& B7 ? s5 v" b' K" C) P
+ ` T% ~7 d: w) P
static struct gpio_led da850_evm_tl_leds[] = {
/ t+ Q' a4 Z4 a, n7 e {
. i3 P# w/ k) R; H' { .active_low = 0,4 W4 U4 T* u- j0 Q
.gpio = DA850_USER_LED0,
. k9 M( U4 g( l, t: [3 Q" z+ k# O .name = "user_led0",
2 J3 u; `4 W- c# z .default_trigger = "default-on",' d2 s2 I; m& y7 Y2 [
},7 j$ `- n9 t) U _! B
{2 `7 p3 _+ t, ?: ^( h! r
.active_low = 0,
3 x4 G- G' O; f3 U% T .gpio = DA850_USER_LED1,4 o, s; B, t# C4 Q
.name = "user_led1",
- U0 j4 a) o2 p0 X8 ^ .default_trigger = "default-on",
, o5 C4 }+ v0 R( g },
0 W5 O1 `1 g0 s4 J {9 G4 p0 O; `* \! a% r
.active_low = 0,- ?# k: F; ~1 V) X- o
.gpio = DA850_USER_LED2,4 E, S' g! C7 _1 N. p
.name = "user_led2",
9 i7 x- L. C/ O- j# i! B .default_trigger = "default-on",
2 p" Q' V; Y! F3 F- E },
+ E/ [$ Z3 `. X) H* ^ {
% p+ i% B' p/ C1 {5 F! M7 Z .active_low = 0,
5 I, [5 c. V2 P0 r' `! A; B7 y .gpio = DA850_USER_LED3,
5 B3 B, C. w1 F, S2 a9 P .name = "user_led3", S: Q4 X+ m# s) L4 v0 j3 J0 S
.default_trigger = "default-on",
) Z- E/ O6 ~* O' F! Z },
% Q, ?% ]' R" W" c};, M- l) Q! M9 N- e
& b- w+ R9 L7 N& q; V* Bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( ]- T$ G* o- V* u) \ .leds = da850_evm_tl_leds,
/ i/ Z: R& E4 C9 g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ v- q# E2 {2 R D5 e};" `4 O/ Z0 T) d' E) ~9 [% N& f
7 [( E- i0 e9 [static void led_dev_release(struct device *dev)$ ~) V# ?, ^* C }% _
{8 w; M, t" p5 m. h1 e
};
' B. P" X! k+ k7 i: x2 F E
A6 D6 P3 J! Q$ Q2 c- wstatic struct platform_device da850_evm_tl_leds_device = {
4 n9 _9 G" `' m .name = "leds-gpio",+ E6 w3 u1 V7 Y
.id = 1,
3 s1 Y/ A+ }- N" S .dev = {
9 W5 s; a* p% |0 Z1 J$ y0 T6 n) K .platform_data = &da850_evm_tl_leds_pdata,
* t4 w/ B5 g! L+ f/ c .release = led_dev_release,
: A/ Z9 }# p0 y# k }
. g+ ^$ h$ b" c; c6 S};7 w4 x* R. Y: y
6 V) e) \9 V& c7 ?/ U0 P0 Rstatic int __init led_platform_init(void)
* J- T& n! B, _{. K; C9 E! X8 U: @
int ret;. A9 K+ m3 U! D( g) B6 o, Q+ Q
#if 0
' p6 d* p! c" z# B ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* x/ `: s1 {' ~* }# s! \
if (ret)
. [; D9 Z4 d( @9 n& P1 E$ w pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& q" b4 c& N' J0 V$ y% T5 u h
"%d\n", ret);$ t. M( e. S7 u8 `4 z& Z) |3 m3 r
#endif3 n1 b- P# W- E8 @5 G0 I! E
ret = platform_device_register(&da850_evm_tl_leds_device); q: Y0 R$ Z0 U d- R4 a" h
if (ret)
5 ~3 Y' }9 Z4 W! Z- Y* Z* F2 h6 ] pr_warning("Could not register som GPIO expander LEDS");
; G" }8 F# }* h1 ]- a else
2 T6 ~0 [0 N. j2 P! [" j printk(KERN_INFO "LED register sucessful!\n");+ c9 p- o- K, }1 Q7 J% U
0 r$ D/ L/ [4 Y
return ret;: q' W2 N" D( I2 I
}
) r: T, C; t' }5 A; I, Z9 j+ \' ^
static void __exit led_platform_exit(void)! C- _, g6 Z" e7 r% k) J
{
4 H1 O# C; Y$ U5 u2 A platform_device_unregister(&da850_evm_tl_leds_device);
/ u) P: a7 j, X* J3 X( b& z% M
+ s9 S6 S7 F) ]* f: k printk(KERN_INFO "LED unregister!\n");- Y8 {4 i" _) N1 `$ n9 ]+ \, f
}2 `$ f2 `' V( s) z" f. j$ F( T) z
- p3 b- p! C) J0 T% b: f- q1 `
module_init(led_platform_init);5 `3 k3 v. i( @
module_exit(led_platform_exit);
, q8 H. G0 C& g% l6 l7 _) o% l5 ^5 F/ q% ?& A' @0 I6 W6 A
MODULE_DESCRIPTION("Led platform driver");
( J. u: L" [2 M% l: L; }. S/ MMODULE_AUTHOR("Tronlong");% M% S" }7 X: o1 r# P g
MODULE_LICENSE("GPL");
; M2 I* D& \( }8 m
2 P( Z Y! o+ U |
|