|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: d# g; S4 {; @- a( E#include <linux/init.h>
/ H0 f6 S4 S% G# [2 G+ q: X#include <linux/module.h>' G% ~ Q: L. Y
#include <linux/kernel.h>
8 @$ I" R' ]8 B) T- n4 \#include <linux/types.h>% ]8 [- \! N7 u6 ` E9 o" ]
#include <linux/gpio.h>/ _) z* W1 d/ Q6 I1 p
#include <linux/leds.h>- x8 q, u4 s' s8 |
#include <linux/platform_device.h>0 N' H1 i" v4 `. X0 D& q
& Q" s3 c J! F3 @8 q# D4 P
#include <asm/mach-types.h>
( X% N& T0 f D$ \/ m C4 g#include <asm/mach/arch.h>
1 A0 [4 x0 V# X. E, V#include <mach/da8xx.h>- E( J. x* Q+ u) g" x
#include <mach/mux.h>" m2 l9 G4 e3 C0 V2 D' L
! y/ Y) i* J" z8 W& A; h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: m% l/ S6 Q. h0 b1 B6 E) m3 G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 G! m6 e9 h( j#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 A$ [0 ]" s5 E8 B; A8 g9 @+ U1 M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 u1 R5 i$ T4 M/ _: O2 e0 q
* S4 d0 `+ ^; M$ X. x3 @
/* assign the tl som board LED-GPIOs*/
& @; V' p1 L. Hstatic const short da850_evm_tl_user_led_pins[] = {
% C+ o% @# \) Q7 V! _* T /* These pins are definition at <mach/mux.h> file */
- n1 e* N' L- i" c DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 K3 c# F3 o1 r. W& Y3 g
-19 W. c( }+ @" t( M$ E8 [: a
};
. @$ |6 P9 v, }6 C' o" ~: u- G& Z* F
static struct gpio_led da850_evm_tl_leds[] = {
# f% T3 | s+ R {
( i/ V4 a( c* M* T; { .active_low = 0,: x% G# k/ l, w. t! k3 ]
.gpio = DA850_USER_LED0,( ~' X& R& Z0 U3 I$ Q; `
.name = "user_led0",
6 N9 F2 p" k- ^) `1 @ .default_trigger = "default-on",# M8 `9 ]+ t. @
},7 c/ z4 b: M# A; \$ X$ P
{0 e# ^5 k# U6 a4 g4 A8 |
.active_low = 0,
$ n2 b6 d, X! y0 C3 N$ p9 m0 y .gpio = DA850_USER_LED1,: r8 `1 ~, m; X7 I! l& w; D$ }
.name = "user_led1",& k# ?+ I! y1 K w0 H. Z
.default_trigger = "default-on",( L" i J0 \/ [& t
},
4 U" E6 y/ x1 }: i9 @% `. C {4 I- A4 \5 k% h/ W0 V: G8 U
.active_low = 0,/ ~$ @- E) f6 I1 q% z
.gpio = DA850_USER_LED2,* {- H2 {! P$ R* u
.name = "user_led2",* W+ l; Q3 \# z0 G# W
.default_trigger = "default-on",. A, ^% k% m* V. {- g( z) b0 z
},6 f2 _, E {: U# E9 g6 ]3 E; L
{
: @. m9 H- q' k .active_low = 0,
" Q' R' v" A, |# R" [6 {0 O .gpio = DA850_USER_LED3," _6 L% l H$ t9 b# @$ D
.name = "user_led3",
( K* L p5 f1 m# F4 Q .default_trigger = "default-on",
3 e N8 b. `: N1 S5 L },
; N# d, v, A$ Z/ b, x6 |1 k};7 ]: v X7 g# R. v+ F
, f! _/ |7 N4 i6 hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 l) l& g. i9 V, z( e' A9 S' { U .leds = da850_evm_tl_leds,: ?' b( R! e+ D. ^- T+ n! P' Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% g# x# z% _+ n( S+ I3 D* ~( a};
+ x5 Z+ j8 _+ [3 J4 @
. Y1 L5 c) n$ @3 R0 T$ nstatic void led_dev_release(struct device *dev), H0 N# n ?, S- z
{
1 C5 ]$ X) M* I+ D; p};! h: Y: Q+ F% x) t; E; T
- e, V( B- _1 r: [/ j4 ?, L( }* s7 a* Ostatic struct platform_device da850_evm_tl_leds_device = {4 s. n) w: l: G1 r
.name = "leds-gpio",& q) a0 B& a& F
.id = 1,4 m+ S6 a Y1 t; x
.dev = {( N6 J* y5 H0 q
.platform_data = &da850_evm_tl_leds_pdata,) ~- `* g6 A5 {) [7 ^, a& C
.release = led_dev_release, F, ~0 H9 G" w8 B& x
}: F$ b2 z/ h1 J
};+ v4 d, ?3 A' O( {+ y. o" Y ~5 a
^9 { F* Q& W
static int __init led_platform_init(void)
6 N7 s$ B/ C( N- i0 R% A# ^/ f{" L; s# f$ y$ X" y
int ret;# R# J9 f6 z, |: ?/ g. y' I0 Z0 |
#if 0+ z- ^4 E% Z& h: ] {$ a V i, j7 q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# C4 z# U; C, Q$ ]; N5 m2 C" W if (ret)
7 ^" p0 n8 D9 R% v. N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 I% \3 S4 H9 X5 P3 ?4 R$ S1 H "%d\n", ret);" b. O2 ^5 U# _& z+ ~& I m
#endif1 }9 q) r9 |" Q7 f
ret = platform_device_register(&da850_evm_tl_leds_device);
, e, I# o5 i# b g; |: h if (ret)/ g' G K* C. X
pr_warning("Could not register som GPIO expander LEDS");. @. I+ ?# n M& |* l
else' u: P4 Q+ u# r
printk(KERN_INFO "LED register sucessful!\n"); F3 x5 q1 h- X0 h5 d# m
+ J* Z/ G# H# Z; | return ret;+ a9 G" h0 c6 p3 G1 @
}
4 r6 I4 Q! p% t$ Q" b) b* p" q* E' q8 T( ~# s1 [ R
static void __exit led_platform_exit(void)% O% s! [7 o8 \5 _: i
{; P9 S0 j" P5 P) {/ Q2 ]
platform_device_unregister(&da850_evm_tl_leds_device);6 I% ^& ] C* [. S( t* x G
2 c4 h. J' O9 d: X4 T* ]7 C: r printk(KERN_INFO "LED unregister!\n");
" R$ o3 @. B5 ~" V$ q6 ]( W! E$ X6 d}
. r& J: N7 v* @, M9 ?% p( I2 J( A6 z& D' B
module_init(led_platform_init);
0 t: H1 H0 E6 ~9 i2 Y: S, z* amodule_exit(led_platform_exit);
, ]) v: m1 Y& c- N5 F+ m
8 d8 ^5 E1 @. s# r" x3 k/ HMODULE_DESCRIPTION("Led platform driver");
4 f$ V1 H& c3 {) Y; NMODULE_AUTHOR("Tronlong");
* ~% u* K( T2 F3 M$ vMODULE_LICENSE("GPL");4 Z- _) f, W0 k- ^/ _* U3 P$ U" |
& u+ ^' b1 Y6 p/ C h( \$ ^ |
|