|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- j0 d4 ^& i( C, e4 c/ I$ j z
#include <linux/init.h>
& j$ T1 R1 m W# n& a6 Y#include <linux/module.h>
5 I P) q/ M7 C- ~#include <linux/kernel.h>
7 _7 c0 n0 d# \' q R#include <linux/types.h>
8 @0 o- i, S" q" e$ a# H# u' K5 L#include <linux/gpio.h>4 g n! V. ^9 h/ H# a0 C% H
#include <linux/leds.h>
# j% G3 z+ z, U) L#include <linux/platform_device.h>- W; k% |, `+ { Z" [ y3 x# l k' u
& H0 D0 v: V) H W6 k: q
#include <asm/mach-types.h>: w# O& ?. O$ Y7 Q/ }. @
#include <asm/mach/arch.h>
# S% J9 L4 @: {+ ?9 L% @9 U#include <mach/da8xx.h>
, ]+ p% N0 n% n; k, A0 U3 l0 I#include <mach/mux.h>
. f6 b1 ?* q3 I1 ?9 v& g& N1 E
9 V2 D3 d1 }) p# R' A$ [#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 B7 ] T$ o# ?/ I' m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ P7 F& P; P7 w% d( L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 C! Z. @9 w4 D
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 b- ~7 o2 Z, q3 m- |
+ { q% z* |: b- W, j! q
/* assign the tl som board LED-GPIOs*/
% t. H9 u+ x5 i" Pstatic const short da850_evm_tl_user_led_pins[] = {8 N2 C1 A* k& f5 z! e
/* These pins are definition at <mach/mux.h> file */
& @! F; M4 |) k6 H0 P# y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 h! \* c+ y0 l9 ?# _" T9 i" U6 P -1
9 w5 t1 e; W9 B0 M};
7 ?3 X4 M! w6 ?. C7 E2 {. r" Z5 I& `
static struct gpio_led da850_evm_tl_leds[] = {3 Q/ ^+ x3 V2 b4 n1 C
{
9 P) u" R! H8 i9 E* ^ .active_low = 0,& q+ C( I/ p P
.gpio = DA850_USER_LED0,
, D, n) p* w6 H- U# u2 B .name = "user_led0", }$ q7 E9 a& x! j/ ^
.default_trigger = "default-on",
1 d1 k$ W0 J/ j/ W5 I },
7 ^1 g; g1 P" Q {6 n5 A/ \# z, Z8 v& u' ^' S
.active_low = 0,1 r7 Q" L* q) I
.gpio = DA850_USER_LED1,
" ?. C* O/ r( i5 ? .name = "user_led1",6 U# K% E5 G6 i9 U0 O' l( B
.default_trigger = "default-on",9 r* S5 P V5 @+ ]$ T% L
},
! K$ K# f7 n0 C$ M0 M7 k4 r4 Z8 ] {7 B Q1 A( ^5 q/ ^
.active_low = 0,5 K: j- j8 R3 k
.gpio = DA850_USER_LED2,/ n {; y4 V( F" T
.name = "user_led2",: I: M2 c% S' c
.default_trigger = "default-on",6 z4 U7 q5 S5 t/ p2 r5 ^! M
},
) q r( \5 k J& ]% P& l' _4 J {
, u: D* e- r1 A4 t .active_low = 0,
( g& ?* u4 ~: A8 Z# r .gpio = DA850_USER_LED3,0 h; V9 G2 F5 K- ~
.name = "user_led3",9 P4 P$ ]; h2 z. i s. B
.default_trigger = "default-on",
( \# U7 q n. `0 w5 n },
' G! A5 t9 V1 ~- [) L};
5 K0 ?$ ^7 _: r% z- [9 z
|- Q& _& j3 h0 M R) o. Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 \0 o5 g: s& U9 b$ o8 S; P" D .leds = da850_evm_tl_leds,4 U5 [, u5 M$ V3 y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, q4 t' y5 A' z! w0 p% m" n};
9 O, D' h7 h2 n% E& |" V9 ` U8 n9 K% v( A5 X0 ?- c8 T$ E: u
static void led_dev_release(struct device *dev), R4 u6 o0 d* s+ l0 _
{: a! t& C& [0 M/ ]
};
3 A9 O9 A+ j% Y
& k7 w/ k1 V( d1 R: k* B. Z" R$ fstatic struct platform_device da850_evm_tl_leds_device = {0 e6 ~+ z/ _ c' {
.name = "leds-gpio",6 |" ^6 e8 |. U! |* U( w7 @
.id = 1,9 J# `7 \6 o" |& G: D4 @, T
.dev = {6 ]6 ]: p, k- ^# V) N6 l
.platform_data = &da850_evm_tl_leds_pdata,
/ H, M9 ]6 x# Q( X4 a# [ b .release = led_dev_release,
! ?$ w" h4 t3 D' u3 O7 o. y }
2 R+ k) s1 d3 ]% \7 U$ h# w9 m};
& @3 o4 _0 ~9 ?; d* e0 q& Z: j
0 P7 H: y& G- l/ v6 i" h$ o2 Z" I- {+ t, zstatic int __init led_platform_init(void)( D3 }# L: _7 W0 y+ C
{
o0 Y# ? _$ e/ } int ret;
! k$ }2 w0 r7 \2 e#if 0( u* I; D& p' @, H' p
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! S( R3 j) O4 a# A4 F if (ret)
+ l( L% e( M6 t; d, ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! q6 l. d- c* v' [5 n
"%d\n", ret);
% n4 X5 H- U I, j#endif1 Y" g& v2 {5 Y
ret = platform_device_register(&da850_evm_tl_leds_device);
, I+ \6 L# F. V4 Q. }8 W) J% j2 w if (ret)
7 V5 R+ h& p1 \6 G9 x5 s Z pr_warning("Could not register som GPIO expander LEDS");
2 A- e/ h* Y }: h7 b4 B N else$ [- X0 Q/ P! N& B* J3 `1 @+ U. V
printk(KERN_INFO "LED register sucessful!\n");0 H- @$ m- [0 S" z/ ?
- j5 V6 _3 t! I: j0 A& v
return ret;% I. Z/ X# y+ ~' w
}2 o1 `5 W- y b9 I1 q
& P, j; n$ J1 `; x0 [$ V, `
static void __exit led_platform_exit(void)
1 p; k4 J; |1 q9 x/ U0 B+ t5 s{1 W8 l# j U T
platform_device_unregister(&da850_evm_tl_leds_device);
- u4 A U' Y N& }3 b
! w) n1 K8 h; Z7 h, L D9 `9 b printk(KERN_INFO "LED unregister!\n");& Q2 `0 z6 e* V' T8 |
}: w, P. ~3 S2 c# I3 V4 `
9 r3 N; v% Y7 t2 |$ ?" B* Zmodule_init(led_platform_init);- @. B& O# h1 K1 t, b. g% t0 x
module_exit(led_platform_exit);
- v/ R+ n+ Q; ?, c% F2 r
& x7 c+ A# ~2 \2 o2 `" ]& I1 HMODULE_DESCRIPTION("Led platform driver");
8 j" S% r: x' G0 M4 f7 B7 UMODULE_AUTHOR("Tronlong");1 M0 e; [% y8 Y& G0 A
MODULE_LICENSE("GPL");4 R8 q7 b4 m2 {: W8 D. a o( e
& i/ D- r; |+ ?- h. Z9 L3 E/ }
|
|