|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( ~) h+ x; H: T' ?#include <linux/init.h>5 @+ E. s8 y5 r6 e; U( l# y
#include <linux/module.h>9 x5 Q8 Q! F8 E6 ^7 S
#include <linux/kernel.h>$ T. j% k7 F& M$ n3 h: j+ ~
#include <linux/types.h>
$ s* l, j/ }% ]3 N, u7 Y3 I#include <linux/gpio.h>, _5 e! P3 V: H" f4 U$ G, k6 c. C
#include <linux/leds.h>; H/ K% ] o' e- B0 _* D& _% ]2 ^+ P
#include <linux/platform_device.h>
\4 ]( K9 {: V) e$ m% u" d" p4 K& F! [9 K$ m* y# `$ i' S
#include <asm/mach-types.h>
/ ?9 F, {- |$ v! a4 t/ U; W3 e#include <asm/mach/arch.h>
6 \; X0 P, Q' D' I' ?#include <mach/da8xx.h>% ?( ?- k( w% T" R6 H$ z6 O3 y
#include <mach/mux.h> C& N8 _/ n7 g* V: P) M* }
5 J* w+ Z5 E5 E! ~& S6 ]8 k) a! U
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 \# p. J: H, }0 ?0 k$ g! |
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 |: b8 h+ o; x4 y' \9 f#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 Y7 z3 U# [' a#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 T) ~. c; V1 O$ n e
% {: Y+ |7 K3 U7 U/* assign the tl som board LED-GPIOs*/
- s5 F6 T7 W' z: W" s) Tstatic const short da850_evm_tl_user_led_pins[] = {
; u8 |! [: g& s /* These pins are definition at <mach/mux.h> file */
7 B' }: K, I* M1 T p DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 [- S. _$ J; }$ h& J9 F4 b -15 }0 z, K R9 W' T7 W/ R8 a; f5 u
};
. e; I& b0 E( \9 b1 B; ]
# v$ g& S3 L7 ^( U- r2 X& Xstatic struct gpio_led da850_evm_tl_leds[] = {
6 P+ E! |- A& n+ t0 s- {: ~ {
2 ~' u1 F$ r3 r .active_low = 0,' t/ K6 Y, ?3 x3 C
.gpio = DA850_USER_LED0,; E' d& P8 m+ N; s# V; p# M
.name = "user_led0",4 L2 N1 M% G5 W& J! U$ O( U
.default_trigger = "default-on",
+ E* m5 l* k j+ } },% j! d& w- d, |0 M
{1 ]/ h1 Z7 O. c0 ]$ ?
.active_low = 0,
- K- P0 h* \) F' k4 R" h+ |2 w .gpio = DA850_USER_LED1,
( ~: j" b- Z/ V' m .name = "user_led1",) A! t- G% _+ B5 Y) H0 ~ w9 t
.default_trigger = "default-on",8 ?4 o) I X. _7 n" B2 @' t$ ]
},- Q3 B$ l, V& Y/ v" X
{
4 e; w, G3 s0 m& Z8 u .active_low = 0,+ S2 y- u( d0 K: r [
.gpio = DA850_USER_LED2,/ J0 N9 z* N- \2 S+ \
.name = "user_led2",
% O v/ m- j4 S6 i& I* e8 W/ H& J .default_trigger = "default-on",
* H- l- w- F6 P N4 [% @8 m ?( E# c },/ A9 z8 d2 j0 W o8 V! k
{- W+ O/ c# r. B& D
.active_low = 0,$ ~, ~9 t x6 J! Q! w
.gpio = DA850_USER_LED3,
* e' ], N) c' d .name = "user_led3",5 p6 e8 ]' a8 h. u, T
.default_trigger = "default-on",
! ~ [0 d4 U1 b. u9 O4 F1 g4 j P },
8 b) `3 j1 q2 s7 x( P& w4 u. \- T6 H& V};
& `4 c; p- Q1 H; \; @9 I0 N
; ]* Y- F! e2 C+ U& Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* W, ]2 W& }/ z6 r
.leds = da850_evm_tl_leds,5 t2 ~) T3 F, @, K) d; d! l& q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( d9 ]8 c+ R) T) g. ]7 J: Z- }};
* F) u5 f. n, o0 ]- B3 h) r3 m' q* B2 l* [. o0 g
static void led_dev_release(struct device *dev)
( G, w( c1 f$ r+ H{# C2 p: |* I* u& m9 H
};& o. O& w1 l( T v, {( d
. S& t6 I5 b3 h2 K" H9 f
static struct platform_device da850_evm_tl_leds_device = {
& S3 S l. F% i0 f/ ^) B .name = "leds-gpio",0 \% N4 H9 l8 p+ g+ c3 `) z! d, I/ @2 Y
.id = 1,
& z% |! h8 s4 G1 z! A3 d .dev = {
& x, U: h2 q$ W+ i .platform_data = &da850_evm_tl_leds_pdata,) \& f A& ~% r4 a5 X# }
.release = led_dev_release,4 S( H" ?9 [, Y* H7 F( r
}& K$ I# d: T- T3 p+ I9 G- ^& g4 Q
};
1 j. F: H2 J0 O0 \$ Z/ c# R$ r
* i1 h! x% v$ q% B2 tstatic int __init led_platform_init(void)& u [ \. }# \- W
{& o. d4 r+ I( p4 @$ K0 U
int ret;
" m% R1 W9 j& K$ T/ t#if 03 r6 r7 X1 v0 I! m, M. C5 }
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' s- E- b- n A: G& W if (ret)) R$ S2 j6 e+ K" U' b \& }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 N1 f: l0 ^9 P- t4 [; |0 |5 V "%d\n", ret);
n3 o5 B8 ~7 w/ [5 ~#endif
( z- M" e( i% ~' N% I' X2 q, D ret = platform_device_register(&da850_evm_tl_leds_device);" G) P3 Y5 W6 t% a" |8 }
if (ret)
8 ]& g, L# Y! G& A0 x pr_warning("Could not register som GPIO expander LEDS");
A. q6 \2 G2 C1 d6 C. c else
& H+ s6 R/ Z# H; P3 P printk(KERN_INFO "LED register sucessful!\n");
) N" Q( k) B8 A! \: v% Z
7 s4 k$ B" h8 Y return ret;, _* @) d* k* a# |
}. O3 _ Q* ?7 M0 J) t
1 M2 O# S! X! A/ |, n! rstatic void __exit led_platform_exit(void)9 u, L0 E+ u) d
{
! K$ I; h$ S$ u8 o platform_device_unregister(&da850_evm_tl_leds_device);' I# i( j3 N5 ?3 m6 n& ]
, W1 r- z5 M( A- W5 c
printk(KERN_INFO "LED unregister!\n");+ ^$ l3 C9 ~' D! T* c$ o
}. C8 o! v& X8 t8 [7 I& U
4 v: d p3 S" a) Q' `$ k5 imodule_init(led_platform_init);
% y/ ?9 J5 q5 l# Qmodule_exit(led_platform_exit);/ ^5 n/ M# v- g
; G7 v$ }* v9 |; r9 K* ]
MODULE_DESCRIPTION("Led platform driver");9 m" E. O" O' z, o3 V e
MODULE_AUTHOR("Tronlong");* N1 l( E! x- C- a% k% b
MODULE_LICENSE("GPL"); }3 R7 h- e* ]" k3 {3 ~
9 ?, c+ [9 i) C! j* e
|
|