|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. L4 o; u. ^5 @' ~1 K. G1 r& K3 ]' j& k
#include <linux/init.h>: P1 ?9 H: T) r; R) }7 I0 ]
#include <linux/module.h>
5 v) G5 t; ?" [! v2 B#include <linux/kernel.h>
; W0 F( H) y ]/ G8 C#include <linux/types.h>
. P+ N. g1 u. [2 N. K5 s2 N#include <linux/gpio.h>
4 U* T' H7 w% c+ ?% w, T# p#include <linux/leds.h>
7 R( U! e& A" A' j: N& \/ T#include <linux/platform_device.h>/ d2 D. D: K; i1 e. n- j
2 c) a- H3 Z1 K* E7 |#include <asm/mach-types.h>
2 i* e' z! }5 w0 }" [7 g#include <asm/mach/arch.h>) G) ~ k* ~8 A
#include <mach/da8xx.h>! W' v: {, s9 @. j: L
#include <mach/mux.h>/ e9 U4 P) ]5 d. F$ P" h* z4 Z5 r
* G- s# r7 C8 C7 d4 W; j9 H
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# I0 U5 O2 t1 i* [2 J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
J3 W% b4 H) N; n4 U. [- o% r5 [* y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ f" V- P& D `% @! G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" F: ~4 `! I1 c) {5 ^6 ~/ H0 N7 Z3 l! |
/* assign the tl som board LED-GPIOs*/" O$ m! J4 }, H2 E. M* P
static const short da850_evm_tl_user_led_pins[] = {- Q) p0 Q" z! S$ }$ v: E2 n+ Z: ^6 Y
/* These pins are definition at <mach/mux.h> file */$ j& @* g9 |% E
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 Z7 n+ k! h# ^* ^) q0 y; ]
-1
4 ]" |. A; c* s, N' L, C};
- T7 f8 c8 P) M; P. R$ A( [0 t3 R6 H. s3 u3 ~2 y$ g7 [/ D6 F2 D
static struct gpio_led da850_evm_tl_leds[] = {4 h( B% d& o3 @" D. ]" z
{
1 _' f5 x4 s" ^ K .active_low = 0,$ o- e& b5 V5 q1 s# ?& N$ y, T
.gpio = DA850_USER_LED0,
1 f, } v$ P2 C: V7 S) m6 w .name = "user_led0",1 R" J# {/ y' l3 s
.default_trigger = "default-on",8 R: H% y U8 X, s3 ?; m% G
},* E7 q8 E- J; r- g0 w3 V
{, H6 B/ P; p5 p4 G+ Z4 ^
.active_low = 0,9 \" _8 v. [8 s+ u# [9 s! L
.gpio = DA850_USER_LED1,- O$ n a, h* f
.name = "user_led1",: u. I( C( t7 z! ?' k' C' \* A; J
.default_trigger = "default-on",
8 S/ F# O z8 V; |3 l l, r },* V+ _6 D! }* H4 S
{
0 o! q) z$ k8 E .active_low = 0,/ J) _4 w3 B; }& O* K4 |/ F. ~: {+ V
.gpio = DA850_USER_LED2,
7 W8 T0 F& ?1 M# ^* l .name = "user_led2",
, G; r) a! i4 \. k( J .default_trigger = "default-on",
# `* l# N5 @/ w% f. a },
) u4 ^' y! [* `0 U/ L {
a! W. C: s. o9 ^ .active_low = 0,
9 U- v; G' _5 h$ Q .gpio = DA850_USER_LED3,2 c3 V1 z3 p3 |! v& _3 L
.name = "user_led3",/ ]4 o% ^, U( ]! a
.default_trigger = "default-on",- U& ?/ `& l: V% ]/ g
},
o" W5 b, z/ M9 O8 X* ]- B};
9 c0 L. }3 o) F) c* s6 j* f) a3 ~: s8 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: S# Y0 \ U$ v, o$ N. W: A" }
.leds = da850_evm_tl_leds,+ U# E/ x8 U( v2 T! D; D
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* O" ^! }2 P7 a, p% Q};% Z- M+ p5 z* j5 |% w
. x0 ^- @2 a: t. W# w" vstatic void led_dev_release(struct device *dev): w5 }% _- ]2 I! n( o ~2 E: s; C
{9 P; |( K" D8 R
};5 |. M1 b& Z- M. r+ k7 g' K8 r
) Q; K, o; t% o* y2 e( u9 O6 {
static struct platform_device da850_evm_tl_leds_device = {9 i4 x: `4 p! Z1 O; _
.name = "leds-gpio",
! U, M+ S" e0 ]9 L! Y' b. n .id = 1,
% D* t# J: ~6 x2 Q/ N .dev = {9 u9 g0 Z5 F# Y$ @
.platform_data = &da850_evm_tl_leds_pdata,
1 e2 o% M* |, r f3 Q( J d .release = led_dev_release,
3 \/ P/ ?! R" }' e }
0 y( N" g; X( G" e# }};+ h& h2 L# n$ {7 P- v8 m
- L6 |0 J$ d7 Y! X
static int __init led_platform_init(void)7 e' `4 i+ R! {9 _" I
{
- R6 r' o0 b; g3 s1 g4 a int ret;9 \# ~2 {8 g$ y" x6 U% Y
#if 0
$ v) s/ E! l @; ] i9 p: { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% x2 H: l6 T$ s3 S6 w- q0 L if (ret)2 W6 S5 i; h/ c5 K4 a% ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 g- S1 e$ w9 `5 x/ H( X* h t5 q
"%d\n", ret);
) M$ {2 g7 x7 N#endif9 e* Z5 H4 w. k3 r
ret = platform_device_register(&da850_evm_tl_leds_device);$ P- g- W7 X9 j: X8 A
if (ret)
8 P( s1 b0 B* O5 R+ _ pr_warning("Could not register som GPIO expander LEDS");7 q) u0 W8 ~* S( y: B( x
else8 U0 [/ a g* O6 p0 x1 g
printk(KERN_INFO "LED register sucessful!\n");" n: Y8 [+ @* i/ k, w
, d/ n5 Q7 b6 R o" S, P return ret;' f1 Q: Z! J$ p# N9 ]7 C6 b
}
7 X1 h$ z+ K# n9 u: [" o+ Q: T4 y2 O5 j- S; n9 q# |; \
static void __exit led_platform_exit(void)
* ]) g/ ]% H W! w1 a+ u$ t" z{! J4 ?. |, n- h6 O7 n& o8 |
platform_device_unregister(&da850_evm_tl_leds_device);
+ G( \6 r u2 w
' z! I3 F# T+ D3 O6 a printk(KERN_INFO "LED unregister!\n");( {# _ C$ y' q7 e# R8 F4 f0 i8 Q" X
}
: t2 U- P' z! g' \9 ]0 j' K+ e: J/ k% p
module_init(led_platform_init);" F8 P: T0 A; \
module_exit(led_platform_exit);
, z+ O8 x" Y5 c8 h8 d. v3 k! t4 ?0 I9 @2 c! l- o; u1 k+ [
MODULE_DESCRIPTION("Led platform driver");
- E8 R, n- J% H% c" o8 F' e( x/ nMODULE_AUTHOR("Tronlong");! z1 h' t) X5 K9 w2 M7 l7 s
MODULE_LICENSE("GPL");
5 i. G/ s& U- i
+ ]+ k+ `8 k- Q5 I1 Y8 j# H4 o( j |
|