|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! c" ^, i7 i9 c$ _#include <linux/init.h>
* x1 i! |- O# ~# W+ i#include <linux/module.h>
- ]6 \5 O8 B2 t0 M% }4 L8 ~#include <linux/kernel.h>: d) i/ K7 z" }
#include <linux/types.h>
4 ^4 B7 h/ K: g: B: h. Y3 I/ @+ L" Y#include <linux/gpio.h>
6 n3 e+ I. Z2 C' i#include <linux/leds.h>% p' y* a/ }5 P
#include <linux/platform_device.h>5 \0 q/ Q. h# S4 @% ^& t1 c
% c. M& Z. w* T% b2 |: y" y* o
#include <asm/mach-types.h>) x9 m! F8 C/ A$ |, X1 f9 Z
#include <asm/mach/arch.h>* p2 j( ^" |; D
#include <mach/da8xx.h>
# }0 r$ o7 m# ^' E( m7 r' L7 T; x#include <mach/mux.h>3 l2 ]/ `4 ]7 \; `+ I' |1 q# i
; I2 @% | X' S+ m7 t% b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( y' m6 S* a" X% O8 K' D
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% D: _; ]6 q& w7 `- [#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 E, T; K- H5 \! y/ H
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& d! U1 t6 O+ D0 M: a7 Z
! r+ [! v4 s- v7 [% s
/* assign the tl som board LED-GPIOs*/# v! X1 G3 ^8 j3 r Q0 h! q3 o
static const short da850_evm_tl_user_led_pins[] = {1 \6 x- @7 I, _; H2 s4 l# t
/* These pins are definition at <mach/mux.h> file */5 C0 M7 \- ]2 S
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, @; l# v. e" _1 g: s. W -1
- c4 I d W+ P. Z4 h};% A% }8 q8 t, y' o3 J9 I* W q
7 x+ T* ?$ l7 _) u2 I
static struct gpio_led da850_evm_tl_leds[] = {
0 p0 [: x8 t( y! _* [# g0 \ {3 [* i, G( k' s* l
.active_low = 0,9 ?+ S$ j5 V) B1 \
.gpio = DA850_USER_LED0,! s3 K9 g5 p/ M+ ~1 A' V
.name = "user_led0",' R. F1 v' }3 [: U
.default_trigger = "default-on",
. n; W9 x) X0 I- Z& P% r },7 R6 H `6 e/ w' m4 c. u
{
+ V# ~. w$ L+ [. r, x& A9 \ .active_low = 0,
4 X" K0 `2 g5 n .gpio = DA850_USER_LED1,
7 z1 R, k6 A5 ^% O5 `" c( m .name = "user_led1",
) m$ H. g# e4 I5 O3 @: N .default_trigger = "default-on", n# ^9 w8 j4 L e. H0 q
},0 b5 \3 g; |0 j/ r
{0 T/ y S5 a& E0 i- T
.active_low = 0,
. L* U/ z, D5 ^3 n* } .gpio = DA850_USER_LED2,
- J* z+ v9 r. y# h0 ?5 x) _7 X .name = "user_led2",
# t8 }% k* X$ H4 N .default_trigger = "default-on",
/ I# V- o& }$ P i9 p5 z },
6 Y+ m7 ~" s2 s. b( r {9 F; g6 c/ o( |4 ]
.active_low = 0,, b! f$ @5 i( y; |) F
.gpio = DA850_USER_LED3,
# U V. X1 L: k$ W7 a) P+ J- ? .name = "user_led3",
( j* p( z( D: { H5 \0 w" m) [ .default_trigger = "default-on",
7 ]8 C0 Z6 s' ~3 v$ H },) V' j. ]" \# \, J5 j- n
};1 w. ?# z; K7 r
: x$ D7 _( j3 k9 q! j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, X3 h9 m; l: d1 U
.leds = da850_evm_tl_leds,6 {1 ] O9 j# O8 f) c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 a. F5 R& g" T
};
) w1 Z! N) r" i" o5 G& W( O* h
/ ~9 L, o. |5 ?2 L$ T" z8 P% Kstatic void led_dev_release(struct device *dev)
4 E. h( H8 {0 p( p& C* h, g3 v{! ~; }! @; v0 @5 m
};
% z4 P5 T. ]% X% G7 D2 k" c4 f9 O$ A/ N+ |1 X1 S. E* m( W- z: z' T8 A
static struct platform_device da850_evm_tl_leds_device = {
. `" \: G. s2 e l* q4 u .name = "leds-gpio",% e' P1 B, t! g- }% p1 {0 L
.id = 1,3 l; o# s* w( p# \# x" g! z( U1 s
.dev = {. Q( _# F% y( V4 a
.platform_data = &da850_evm_tl_leds_pdata,! @% y. B: l1 \- H1 q
.release = led_dev_release,) c$ K7 g& l/ }8 y: p' d7 C6 c
}
' E! P1 ]* t% u2 Q" S- ~};
/ z; G9 |& R9 @- n0 F# t; \
) P/ z- K* H+ f+ @static int __init led_platform_init(void)
/ w& X( O W9 D$ o7 j( ^{
6 z: `9 o/ k6 N. h0 C W7 L int ret;* f E/ m0 F5 D1 o* Q3 }: o$ `- D
#if 0 `- w+ g5 b' z: u2 a5 r3 E: a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 x$ Z6 G% G J& ^8 ?# I4 x if (ret)
2 H) g; K% j5 }! | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ u/ S; x- k+ }/ _ "%d\n", ret);9 S7 `$ e6 u$ I: F2 [
#endif
( n6 o# P+ M( ~* {9 U' D ret = platform_device_register(&da850_evm_tl_leds_device);
) o+ m4 I3 ^9 {" m T1 V7 i7 o; Y if (ret)0 L# t8 P1 [9 q& `* Q
pr_warning("Could not register som GPIO expander LEDS");
/ h* X n5 `: n else
) E: [; \4 F8 T3 e2 y$ j X# E2 |' q- n printk(KERN_INFO "LED register sucessful!\n");
! I6 V0 b/ @! G7 ? h6 q4 `1 n: q ~2 e- `! _7 ?
return ret;% V. D2 S" T, a9 x' A
}1 P; X& p z; h
; x( L1 [: P; v8 N4 [. M: |4 w& Z4 d% cstatic void __exit led_platform_exit(void)
1 v+ ?- [5 d( g; `6 j# L) ^{
* F) Q6 e6 k5 r7 `* _5 g) o% x" _ platform_device_unregister(&da850_evm_tl_leds_device);3 \8 N, b' |( B% R
% K) [ w7 r- C printk(KERN_INFO "LED unregister!\n");
4 o' P7 S& n9 K& H0 P}
$ ^9 e7 j0 G! {! T" A
( x1 S4 c1 ^( n1 W1 K' Bmodule_init(led_platform_init);, ^9 E+ A1 y, A! Y" b1 u
module_exit(led_platform_exit);" m) S! d' S5 H& c$ ]7 n
& |7 {+ D' ]( e
MODULE_DESCRIPTION("Led platform driver");( {8 [' T! p( B
MODULE_AUTHOR("Tronlong");8 S) p) q& B! X% p
MODULE_LICENSE("GPL");
/ ]/ i; U2 T+ a, P4 N
9 {+ z1 ^6 I, X) a6 J q* j$ i6 i6 e7 i: Z |
|