|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, a- x6 ?+ b# w, Q+ K#include <linux/init.h>/ W3 n8 O- G6 V6 {6 b
#include <linux/module.h>& H' i7 m- C- |3 o0 M4 [! b3 c$ C
#include <linux/kernel.h>; y% q# k, L) K0 K! I
#include <linux/types.h>
, s. v5 h' B/ v% @# f" D' s#include <linux/gpio.h>
' V- W+ z1 f) a8 m: `% T$ m* e#include <linux/leds.h>
' R+ L- M7 K4 W+ g& Q#include <linux/platform_device.h># b" J( ~4 T, [
' N+ b4 q- g( g/ V9 w. z
#include <asm/mach-types.h>* |5 a9 b# ?; @& _0 y2 W( ]- p0 j
#include <asm/mach/arch.h>* }9 \6 P9 u7 y- r8 Q/ L
#include <mach/da8xx.h>% g! n7 r. Y" g$ C* N8 W
#include <mach/mux.h>) f" L2 ], M' A+ B
1 g2 x$ d; C% d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 S1 ^$ z( O8 ~
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 m- ~# Z: R/ S
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- I' Y& I0 u$ X' w) L7 M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' `$ | d, o% w! X6 O, r* |
$ Z6 H- P. D7 v; Z) Q; t
/* assign the tl som board LED-GPIOs*/
& H- w P- |8 g$ G- nstatic const short da850_evm_tl_user_led_pins[] = {
. `6 O2 I2 r1 |; E /* These pins are definition at <mach/mux.h> file */ K" ^+ Q' N4 f0 x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, t8 ^% R! i, B -1
' v2 \: F6 q" ]8 X- Q};! t' u# y+ ]- E/ g
D% T% P+ i4 I% ?* ^8 Lstatic struct gpio_led da850_evm_tl_leds[] = {5 u/ N7 W' e8 m% E6 k5 d
{
$ A. a$ `& S. a3 y$ L: b .active_low = 0,
2 J" E. \- j# n F8 d( j( S, l .gpio = DA850_USER_LED0,
9 }( O6 P" D+ t6 `3 m. s0 L .name = "user_led0",. z" X" g r; |/ J* `
.default_trigger = "default-on",5 z! x# B u1 W
},
- Y! J+ R9 U" p1 f2 u( g {
, |, N2 [, o0 M* W% F .active_low = 0,4 E, J* M9 L$ V5 Q
.gpio = DA850_USER_LED1,, D) c9 W0 i) {# T1 j5 c& S
.name = "user_led1",
9 U: n# n+ U9 N/ O7 a .default_trigger = "default-on",
& L( Y# M1 n0 J1 L: }; j: n },/ m( s- a: ~4 D/ ?* w/ a5 y c
{
3 K5 a- O5 Z1 @& Q' w" P! Q2 m .active_low = 0,2 W! ]. k. B4 b! W2 `/ Y
.gpio = DA850_USER_LED2,; i+ v) c7 Q4 M4 R+ m
.name = "user_led2",8 J& \2 p2 U+ p
.default_trigger = "default-on",# q5 e7 _& T! t2 W' R( d2 c
},4 Z5 s1 W# }$ N, M1 Q2 R
{, z5 ]* |! J! ?
.active_low = 0,; Q/ p( K# H6 L$ k2 V7 G" L0 O% W
.gpio = DA850_USER_LED3,
% s. y4 c, n' u9 A* O0 d .name = "user_led3",1 S0 d& B9 `- d- w
.default_trigger = "default-on",
: G1 a9 A2 Y9 S& c$ ]" b. Q },, a0 _' m* o. F
};
( ~8 ]3 q5 l4 U5 S) g1 T% \6 i/ J I4 F3 z9 f( X1 F8 t2 C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* d& D3 p/ y$ r I5 x* R
.leds = da850_evm_tl_leds,
9 W, j# H* s6 L9 U5 i .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* u- z. o0 m( v1 f7 L};' c2 Z$ d, \8 v1 I! H
" }* o. ?2 t6 g x4 e/ ostatic void led_dev_release(struct device *dev)
! g6 t9 m# h6 _ E{: t) ]5 x2 u0 o9 _, G1 P
};: Y6 w9 r; Z5 l! Y9 K4 ?
. L" g7 @2 J* }5 Rstatic struct platform_device da850_evm_tl_leds_device = {
& ?' q7 b) V, E .name = "leds-gpio",, P9 z7 r6 V* n/ i
.id = 1,
& Z! Q& g1 n; u, } .dev = {) t6 i- y* f1 V' B
.platform_data = &da850_evm_tl_leds_pdata,& v9 m- |. Z( S6 v2 K
.release = led_dev_release,
3 Y" i5 a2 s. y: K }
" q! G3 d4 w- q9 F. J};- G: l8 u5 J0 C: \# u1 u0 x
# |$ t( p: {: f6 Q) P* T0 s/ H5 o; ystatic int __init led_platform_init(void)
1 ~/ T& ?8 u7 l; t{7 b- q% m* j# v( r+ V* l+ }
int ret;; V$ o. d1 l+ ]$ y1 i G
#if 0
' n/ q k1 |$ o% N# ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. B9 t* q% A, Y* P' t if (ret)
- A% u' o1 t" _3 L pr_warning("da850_evm_tl_leds_init : User LED mux failed :": J7 q4 ]" j! T5 u& ?
"%d\n", ret);
- O* W& ?/ Z+ |( J' A- _#endif
/ p6 G8 t# b. K9 f, q, D/ J ret = platform_device_register(&da850_evm_tl_leds_device);
. w; y& C5 s& } if (ret)
, a- ?+ M" F+ G pr_warning("Could not register som GPIO expander LEDS");! i/ w8 w6 X7 i% U5 y# i5 e
else- _5 r, d' r" O1 q' r0 S9 B6 h7 u
printk(KERN_INFO "LED register sucessful!\n");( c3 r& p+ J8 o
+ Z. k7 j9 S" @0 y) v; r* i return ret;; d* v) Q6 Y0 k) C6 K1 V5 D
}
; H' q3 D. K" j- ]
- u3 |( S" p) A: J/ g3 Z( ~static void __exit led_platform_exit(void)
, o$ w& d7 ~ w- @' l" V0 V9 w{3 z' P4 I) q6 q7 Y" Y j6 t6 N- D( Z
platform_device_unregister(&da850_evm_tl_leds_device);
4 B0 |! ~$ \6 k1 p) N
# P7 A: \# p6 x/ a. \" b printk(KERN_INFO "LED unregister!\n");
5 M1 }& M) _0 Y}$ S9 `6 F, d: k5 D8 a1 R
1 ?4 z# Z1 ]- n
module_init(led_platform_init);2 q4 F5 [; h# y7 V
module_exit(led_platform_exit);
& l9 c7 Q' I H, s2 I7 z9 v3 i7 h, f5 E- F
MODULE_DESCRIPTION("Led platform driver");* ~' i& E5 |/ }! j& H) G: T
MODULE_AUTHOR("Tronlong");! z5 X: s4 s" i
MODULE_LICENSE("GPL");
& x; M9 K0 G5 d3 ~) V Q* Z7 I2 ?/ L; m# s5 Z; |
|
|