|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
U& O5 F/ y7 j2 ^( |3 R" Y#include <linux/init.h>% S: C! M* z% X- l0 J
#include <linux/module.h>8 ^ _ b Y/ a! r M
#include <linux/kernel.h>- y3 K+ n7 o% @
#include <linux/types.h>
9 i, z; R, G8 H& }0 p% t5 w#include <linux/gpio.h>7 d8 t$ W$ l- O- u! @ [
#include <linux/leds.h>( ^/ r5 V) @3 Y( D! F8 }+ F, B+ p+ Z
#include <linux/platform_device.h>! g3 }1 z" D: o. C/ O
: V8 z& T& a. g" J+ c8 |
#include <asm/mach-types.h>9 R' c C0 e( P d% e6 i, |6 F
#include <asm/mach/arch.h>
& k$ J9 @( q# m#include <mach/da8xx.h>
$ v/ V# g# o8 z/ S#include <mach/mux.h>8 P* ~. @( L- C- M& F8 D
" M3 g- \& C9 [7 I$ u1 A6 a0 y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 x& u7 B7 ~$ D( L#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& s, P. O, @2 C" ^+ ^
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. }! ]) a7 L4 g7 c! a$ ^#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); h0 Y/ P2 d D/ P
+ F) R% j. w) k
/* assign the tl som board LED-GPIOs*/
/ F3 b3 J6 o, s$ ?static const short da850_evm_tl_user_led_pins[] = {
+ F4 x: A3 @ i$ I& x) p: h1 [ /* These pins are definition at <mach/mux.h> file */
: M# v( F h6 B( L2 j7 Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; t0 S8 p k1 P2 D( j; E" Q& ?6 G -1, W. U( k9 R' t! j7 K \ Z
};
2 d4 K* E: M4 M+ V: q2 c9 {) T, |! V9 M$ ]$ d# c7 r
static struct gpio_led da850_evm_tl_leds[] = {
( G; A. {% ?/ p {
7 X; }7 X+ t0 l v. k .active_low = 0,
1 `+ ]1 n) H9 W5 M( k .gpio = DA850_USER_LED0,
~; G& ^9 `. r" f, _ .name = "user_led0",
9 `! k7 Q4 R/ L6 [ .default_trigger = "default-on",
. A! Y9 A' F4 ~, U8 d },
) P- g5 I: p9 k/ [8 ? {
5 P8 }& u* x- \ .active_low = 0,4 m( }8 K/ j: }
.gpio = DA850_USER_LED1,5 }: L* n4 M+ ?5 O+ z: H
.name = "user_led1",
) r, k! O4 g+ v0 u9 r .default_trigger = "default-on",+ A' l' K8 y- Y% [* x- ?5 ?
},
( X F+ V$ i; Q% U) i% ]5 o {
! y1 P, k) H7 K" j( I2 V9 R .active_low = 0,
# m, q7 _1 Z8 P$ L6 t4 `1 M+ v .gpio = DA850_USER_LED2,
& e3 W) S! Z! J: \2 @) @ .name = "user_led2",* _9 L0 m5 X' h6 l1 Q
.default_trigger = "default-on",; g. Z& H& I; B) R
},
+ R2 f! Z1 p! i8 v+ j {
/ ^ Q' T c' T f# [9 ^6 B .active_low = 0,4 t1 D4 v2 h5 o: ~( N4 J; s
.gpio = DA850_USER_LED3,
) {( z! |; y) s, a. s .name = "user_led3",
. T. C' C2 \% l" X: Z2 X S* r: k- s .default_trigger = "default-on",% r% Z8 ?5 i7 u
},2 Q! ?. M: h, I: S$ v! N$ A, D; H
};
7 |% Z u2 X2 `( s/ I. N3 Z* \: l* F( h5 { H U
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! L' Y: t. w0 D
.leds = da850_evm_tl_leds,
- U! f9 ^& X7 P0 h6 x& L .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. \& D* Y u! ~; `3 t8 v};5 l3 }& @5 o& V8 H
6 A) p5 S$ O% n, m( O1 lstatic void led_dev_release(struct device *dev)) d* W; y- U0 j a$ B \
{
1 l* L" E: a/ Z* v, b0 H};
1 |. m2 N# i" |. Y" W' j2 S* P6 l1 Z2 R& z, `0 d
static struct platform_device da850_evm_tl_leds_device = {
+ m5 W4 T& t* x" \, q& e$ h .name = "leds-gpio",5 ]0 v0 v' A+ [# U+ R2 V) e
.id = 1,
! L3 H; t# m8 q .dev = {
. J4 m- Q( V. @% f" I1 g$ Z/ ^ .platform_data = &da850_evm_tl_leds_pdata,9 f! J0 }' g- H1 X' W
.release = led_dev_release,
7 H$ b& V: n$ @# ? F }
& `# t5 Z" P, I1 m: m. K9 c( x8 E};4 c$ x |! N0 c5 \6 d; J
/ m" k3 t4 l3 q5 |) Z, ^9 j, J4 Bstatic int __init led_platform_init(void)) V& _4 k% [: u/ g
{
6 q2 I( X3 c5 d int ret;
0 f/ A+ z8 n+ Z8 A) u5 Z#if 0
* ~& `* T! _7 B; F& V$ s1 i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 ]; Q, L7 C: ]# k$ ` if (ret)
1 L# U& V1 h; W2 [; r pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# s& p* V" P$ j9 K "%d\n", ret);: ~, W; C9 q" q9 m+ L
#endif
0 ?+ W; n" C1 [9 U ret = platform_device_register(&da850_evm_tl_leds_device);
9 k+ ?8 `6 K' U7 ?8 F4 b, p* w& l if (ret)
5 J2 V0 g5 {9 I5 G! F pr_warning("Could not register som GPIO expander LEDS");
5 V2 u; v1 D# _: r; n5 ~8 y6 g$ [ else
' I5 L6 M) H: z; j7 i: \* u2 j printk(KERN_INFO "LED register sucessful!\n");# ~* {, i$ M3 {, [3 n# e! ^
, l& y7 N [, O4 h F. E/ g2 z z! R
return ret;
2 _2 x# x! v/ T' `}
# e1 I/ v7 c! m% W! m* \4 U9 W$ K
: `: V" V8 ` ?7 `1 K7 e1 M' T0 [6 {static void __exit led_platform_exit(void)
/ u- A, d. Q" J0 l4 H{
& Q, c3 M$ v' \3 {% ~5 I platform_device_unregister(&da850_evm_tl_leds_device);
7 Q' l8 G' G' Y1 F# G% c' \' ^
printk(KERN_INFO "LED unregister!\n");9 Z+ c$ J0 V: J& u0 G
}
& S+ |* Q- ?/ R+ s1 l- ]; d
1 A. T P+ r# x0 I6 |& E: F5 imodule_init(led_platform_init);
" Q2 W6 U9 |6 @; imodule_exit(led_platform_exit);& ^# e. F6 Z# `1 L9 P# J
, I2 T/ w) v! J5 Q' y
MODULE_DESCRIPTION("Led platform driver");
+ b: ~# M) e! h0 fMODULE_AUTHOR("Tronlong");
: I K5 V7 h) O/ H1 k* SMODULE_LICENSE("GPL");
7 i; I: c4 p% e& n' q
( b. N0 ?, K2 I6 J* y, L8 r |
|