|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 F3 E& T# p6 a
#include <linux/init.h>
' a9 _: m4 r" N7 H& E8 c2 I#include <linux/module.h>
/ K% `+ G' x! U7 M& Z#include <linux/kernel.h>1 m9 b+ K, `6 ?6 p+ U5 I
#include <linux/types.h>
+ D: n% M' G. W! G* a#include <linux/gpio.h>9 f+ d o4 d5 c( V! B
#include <linux/leds.h>
( s' J; i$ z+ ^! w1 L4 y#include <linux/platform_device.h>
; u/ a- A& i- g% M9 y5 B" w4 j0 p3 F
#include <asm/mach-types.h>
9 @0 m, w' Z0 U9 S1 u#include <asm/mach/arch.h>
: v; c0 Y$ g6 H* @% R; ?#include <mach/da8xx.h>5 N0 c0 ~6 Q( |" g8 c# ^% f& \! H1 P
#include <mach/mux.h>
C7 Z6 w2 u- Y/ r5 \- A9 z
, Y( \" w0 C0 h, t# w; k6 N5 |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 R$ {8 l3 F6 A- }. }4 k
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 Q2 Z7 x5 B+ R$ _7 j% _" Y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' f" q* x& ]/ G3 f! V9 _9 x
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 D) n3 } g4 k% n# A! j' c: q& w% L1 Z, f! {) p6 v/ h- I) z2 u' {$ E Y
/* assign the tl som board LED-GPIOs*/0 L% a( ^4 @2 C+ F0 ~; K9 H
static const short da850_evm_tl_user_led_pins[] = {. r" {: I% c( ~, P( j3 I1 \% t, [
/* These pins are definition at <mach/mux.h> file */
: K3 M) O/ C- t t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 }$ ]6 l6 L* `8 M6 o: E -1
+ R K5 j w9 S; i1 F& x7 t6 N};# p2 n- ]7 [ }2 L6 [
3 H' [( P4 g4 Y2 }6 {3 p: q( x& y Istatic struct gpio_led da850_evm_tl_leds[] = {
" k& K6 i* M+ E: {# e, L: M; N {
9 x4 D% e2 w9 ?; c7 p .active_low = 0,+ H7 s, f! u) t2 I
.gpio = DA850_USER_LED0,8 R7 t0 y# j: |$ @9 i4 R! w
.name = "user_led0"," g0 H" E& V3 N# n4 \" A
.default_trigger = "default-on",
1 O2 [4 f4 ~8 } E; c },
6 d- U! ?+ L- r% T8 @, p8 }& ? {
[5 M$ C% M f( Q1 `, K4 o# Z .active_low = 0,
! H" t/ g8 H% X- k .gpio = DA850_USER_LED1,
- G( I" ]( V- q7 x" W, N2 r .name = "user_led1",
+ w' c, C( M) Y) a* x .default_trigger = "default-on",7 S2 d# j: u! T- H A/ ]
},# y7 w( E# e. T3 C' g
{- L- b5 ]5 ?' a! n, K( l8 D/ ~
.active_low = 0,3 S* R0 q1 T% a# }9 z8 s0 @1 \
.gpio = DA850_USER_LED2,
9 i6 D3 c4 t7 A) j* Y$ A, J .name = "user_led2",' z$ R' q! a. ~: U Z, M
.default_trigger = "default-on",1 H& G+ ?! v% o) ~8 M- [( J8 k5 z
},/ z& ~' \" \9 |7 P# b
{! C! f9 z* p9 x8 _% f1 |
.active_low = 0,7 k% `$ o2 G# o0 Q' |! ]
.gpio = DA850_USER_LED3,
, Y, @: [7 l- Q; {1 W% o6 j .name = "user_led3",
# L% {& ^, Q Q0 `! F .default_trigger = "default-on",9 d- w. n" }! Z$ ?5 B
},
3 d9 n- f; L0 q! O+ e9 r};
- i: r7 l& J8 {& J! n+ t' |* ^ f! l. K) M% E' t" v( i R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 Z# L0 D6 \! j8 S7 K& ^2 A .leds = da850_evm_tl_leds,9 u" Z# A; o4 e/ Q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' y! H y$ v* L! }3 Z8 s9 l) K' @};
& p8 R+ Q) }7 R4 ]/ a- L% L: n( g2 l9 X0 M: T2 b. G* O! L
static void led_dev_release(struct device *dev)6 N6 O& D1 S" p; W s' ?) b0 z
{
0 `& {2 k. L, D i4 A8 x* |6 i2 N};6 F/ A( o8 w8 k9 C- H
) H8 d+ ?1 N6 K4 A: w [
static struct platform_device da850_evm_tl_leds_device = {
4 O7 {' ^. ~. E- {, w& c .name = "leds-gpio",/ }# }/ E6 d7 J
.id = 1,
/ q# u3 F7 q- ~ .dev = {
$ a( z0 k# a" B9 f0 i7 L* U- m .platform_data = &da850_evm_tl_leds_pdata,+ n$ r) W# h5 _0 J0 `8 |
.release = led_dev_release, b' A- E1 y1 t y+ n1 _
}
: E8 X7 a) b& }" S};
; K: R) z% j& F7 _' L1 T0 a( v. l8 C* F& A. r
static int __init led_platform_init(void)! @0 Z% V5 Y2 K
{5 S! y3 F% A# [# | u8 _! _3 [% x
int ret;
# I. J' {$ K8 J, q4 n#if 0
. a8 {# }& F% h2 i0 g ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( |: y& q6 y$ e9 R# r
if (ret)
! G! M- Q) ^# J8 ^; p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* k2 U. c3 }$ B2 ]+ ^8 N- u0 ^6 Z "%d\n", ret);
a/ k \8 K J( L0 }0 j8 t#endif! t$ A% J) o7 s* U) x7 m, v+ V, g
ret = platform_device_register(&da850_evm_tl_leds_device);# ]" p2 r, o4 J! N9 p) [0 p
if (ret)
; O0 ?, |, G' j0 i% A pr_warning("Could not register som GPIO expander LEDS");
3 t w# N2 G! q* ] else2 {/ z# d$ K5 {, t! P1 E
printk(KERN_INFO "LED register sucessful!\n");
. N+ @ f" z/ U" P, ]
. b- o5 m( c6 Q3 W return ret;( G' V. W: O% @2 ~8 m4 Q
}& V8 c8 F# l4 z
% a# Q, |+ t; ]/ A' x8 \static void __exit led_platform_exit(void)# n: b/ R4 v. U
{
4 Z1 L! x; N, ^4 d* @' A/ h* C platform_device_unregister(&da850_evm_tl_leds_device);5 t% ]9 t: o9 I& C$ @
2 N& {( X4 e9 [: C6 R0 ` printk(KERN_INFO "LED unregister!\n");9 E# \- {5 E4 M2 F) ]
}
1 z* t9 \( n% [* T6 O0 }
$ k1 Z# X4 Q2 dmodule_init(led_platform_init);
. b% [9 h$ _; m2 x1 `9 V8 ~module_exit(led_platform_exit);! a1 H8 N# Z! R/ j, @ \
4 S, Y" T" J V" I" B9 r) \MODULE_DESCRIPTION("Led platform driver");/ ~) j, D% |" A/ [3 I4 b
MODULE_AUTHOR("Tronlong");
3 ?& `1 g, E: R) D0 I9 f eMODULE_LICENSE("GPL");% s8 G2 \. |- u& @1 w
# y2 c! ~' ?! a* d |
|