|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 \, H: c5 q" }3 R#include <linux/init.h>8 p) o, Z8 @ s9 k4 u& _0 O R
#include <linux/module.h>1 S4 e! K4 u9 z1 k: j
#include <linux/kernel.h>; H6 P& @' E a2 t( z9 t) h# {
#include <linux/types.h>* G: s$ h. E8 z9 Q; { U
#include <linux/gpio.h>* t5 w3 \7 r. _( J" `
#include <linux/leds.h>
! A% T {3 Q! O#include <linux/platform_device.h>+ o. S, e6 }0 @8 L( d2 T% ~
2 D+ J8 R3 \4 A8 s4 D7 ]( D#include <asm/mach-types.h>
- h& [5 Q; A8 P# A+ [+ N#include <asm/mach/arch.h>$ j) P: N: O$ w- p% ~8 O7 y
#include <mach/da8xx.h>
! r) ^5 y6 W: B B#include <mach/mux.h>3 V2 L z" M {: r. X% S2 R* t
% a, g0 `% ]( S3 g, D#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ D2 o% v G4 a; ]# x* H
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). ^! L" e* j7 s( _
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# i5 R9 \: G: X0 P2 Q) z' |#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ H$ Q' ?" C1 j+ f. C( t
/ }9 P, S) T; e2 l9 ]1 M
/* assign the tl som board LED-GPIOs*/4 Y* U# `; F( ~
static const short da850_evm_tl_user_led_pins[] = {
; D. h8 C: y9 S: O* Y4 | /* These pins are definition at <mach/mux.h> file */: @: I- K' o9 y$ u" \ W' n9 j# S4 _
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& X4 z* D0 x) E* X" Y) C -1
. Q: { j! |! \0 A};
$ d* `% e4 s. ?8 L' a0 O& p0 ~
static struct gpio_led da850_evm_tl_leds[] = {
- ]: \' n2 M( a {% t# T9 q ~% |. f# g7 m7 _' H; U
.active_low = 0,
% Q( z1 o$ T" F1 {( d) M6 A .gpio = DA850_USER_LED0,
/ u; |- g8 ]1 }5 Z. B .name = "user_led0",% J/ r* I% g. s
.default_trigger = "default-on",! d: h! H/ i( k" r! h0 r
},
5 t2 h% u: Z% `+ F; R" B {
! C, U0 l7 S& [$ S/ l0 X' G .active_low = 0,( x% ~$ o- ^0 @$ c
.gpio = DA850_USER_LED1,# H5 ?8 _. R8 I& U2 x7 G6 t
.name = "user_led1",& E: V. j7 X/ G- Q, n
.default_trigger = "default-on",
8 }7 ]" }3 i4 k. f: W5 o- k9 x },
2 W: v9 W+ I, `/ Z3 Z9 Q {5 j( V3 Q3 t* Y8 Y/ K2 d& |
.active_low = 0,
( a* t# I1 r! x' ~; ?1 p .gpio = DA850_USER_LED2,
1 g) O7 V1 E! H2 @: q L+ a .name = "user_led2",
: W6 P2 t- c; K' ~ .default_trigger = "default-on", K' P% @$ h, Z! f7 ]
},/ U* w! @9 o. v& P/ Q- Z
{
7 e$ j4 o+ ]. o$ @- ]: K .active_low = 0,! C% o* v, x3 ^$ T" u
.gpio = DA850_USER_LED3,1 s& b( Z) `4 x- Y2 R, j2 \
.name = "user_led3",
: l5 L6 m; ^1 ]1 P3 a0 Q2 e: w+ I .default_trigger = "default-on",; H& b$ @8 D) ~7 I- Z! T
},
7 L: S2 {; ?! b2 z7 Z/ w};" y8 x% D3 m) l: e7 h0 C% Z4 K9 B! a
/ P; E* c7 D" c' \: L Q; A6 [; V
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( n/ k1 z/ ~9 r) n8 z9 |
.leds = da850_evm_tl_leds,
: W1 K- y' N+ S8 j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* S x9 E2 \4 D4 o# c};
/ r8 x$ H* C) m' J/ n
4 t% K8 f" P! p. X5 rstatic void led_dev_release(struct device *dev)) W' K$ {; r l1 ?
{1 C j6 v" q+ n @3 f
};- E% H# g2 d9 ?! S2 a, F( f
/ ?, M2 z5 m5 g$ L; O" [4 ?
static struct platform_device da850_evm_tl_leds_device = {$ L" T; @; u( b5 N! A0 [
.name = "leds-gpio",, i b. [6 Q/ k# Q' O
.id = 1,
4 r X8 T7 ?2 `5 d# z .dev = {( e( l7 v+ f% B+ u
.platform_data = &da850_evm_tl_leds_pdata,9 H) F8 S2 T8 t; }1 v
.release = led_dev_release,0 ~. H% N4 f2 j ^+ W. z
} Q# ^( R- L3 }6 R
};
6 P; c8 p6 n# g* S8 {0 s7 B
3 b& R# W4 y! S5 ]4 K6 Bstatic int __init led_platform_init(void)5 b$ Y q- Q) }# o5 x h! L; \
{
. j3 H/ m. ^( u+ U int ret;
% o$ g+ k/ j+ N9 y$ i#if 0
# c' c8 ?& B: U& Z: v; z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 m+ Y7 `$ y m7 ^7 v if (ret)* y& Y$ b% k {- l+ e
pr_warning("da850_evm_tl_leds_init : User LED mux failed :". d- b: q8 U' S( ^% a+ x3 A
"%d\n", ret);/ p, c8 U2 `7 W/ X9 i% O* N
#endif6 X' e" a9 c* r7 j
ret = platform_device_register(&da850_evm_tl_leds_device);
: [8 h6 s' h# p if (ret)
. F5 u: O. z' `* x) p pr_warning("Could not register som GPIO expander LEDS");8 T) o. q6 }; j# Q2 C+ W
else
5 y* y' I7 ~" S& ` printk(KERN_INFO "LED register sucessful!\n");
! a8 O( b* |% |( X0 x" ]6 G% g& y/ n) Y
return ret;# [; R& V4 X. [: ]) v v O; ~
}1 s/ `8 e8 E4 _) L0 ?
# }1 ]- u$ F1 L, y' {* d
static void __exit led_platform_exit(void)$ Q# s+ k8 ]! p' d$ I/ t# }& o
{% E# L! L9 Z" v/ U2 }& {/ `
platform_device_unregister(&da850_evm_tl_leds_device);
. i) Q3 d( v5 _8 b- ]9 q R- L) B& P4 G5 a
printk(KERN_INFO "LED unregister!\n");
# e$ H: L; ^ K) D" t}: C/ R9 X) V3 `& @$ C
+ Q! [, r$ }3 zmodule_init(led_platform_init);
7 }3 W F7 `( \5 Xmodule_exit(led_platform_exit);
; T* G8 i# f/ h/ J! m: _" M0 Q3 \% L, L
MODULE_DESCRIPTION("Led platform driver");
6 \( B" y+ |$ m% b6 G0 u$ sMODULE_AUTHOR("Tronlong");; X6 g& V% I2 r' B) O2 A* z
MODULE_LICENSE("GPL");
4 ~2 v+ T6 p- G0 v( y
! \" S0 l' V+ d: a+ }& {. r9 c |
|