|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 I- V8 V- q' B2 d$ c: R3 a# E8 k$ x7 I#include <linux/init.h>
) S: O9 S" f9 N5 x+ T2 E#include <linux/module.h>
) ]3 w! f* w0 H# h+ g, E3 ~) y#include <linux/kernel.h>
/ @7 e/ }' K1 t G' F#include <linux/types.h>
8 y g* i+ Y, l& l+ `* K1 g#include <linux/gpio.h>
+ S7 r9 y7 q2 Q2 G! L9 D#include <linux/leds.h>1 ~& I; d5 g$ L2 [
#include <linux/platform_device.h>
. E6 r! O- t3 N9 A. z* M: c9 z: p% o' i6 R, c3 L' H+ |; s
#include <asm/mach-types.h>6 W1 f4 S4 x/ K
#include <asm/mach/arch.h>
$ j4 E1 l$ Q. `# L#include <mach/da8xx.h>
, X! f8 v6 ?7 L#include <mach/mux.h>
4 u& ^$ _" E/ G! O1 {' K0 t" x8 B' M% a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: P+ H8 W% V& _2 C#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! J2 L3 W1 [; Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
N% M" ?7 x2 X3 \- Q7 I5 j; `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 C7 H- l- s T/ _2 ~$ `/ X0 x; F N9 F) O$ C0 a$ N( ]; f
/* assign the tl som board LED-GPIOs*/
6 p( c$ C) b9 w) B: o: Istatic const short da850_evm_tl_user_led_pins[] = {
2 Z$ ^ d1 p! B- i" A3 E /* These pins are definition at <mach/mux.h> file */* d. _$ F* q' D7 H4 d ^* e
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. i2 Q' Z$ V# M i, s+ ~5 A" Q -1
, O# O! q: s% n% \" C- Z};9 P7 \7 S7 P! ]
. N S5 v" y5 J! v2 k1 R
static struct gpio_led da850_evm_tl_leds[] = {
0 F O+ ~. q( N; I9 |* p3 X {" c) p6 \" w( b( _$ g1 I! S* }$ U
.active_low = 0,
) ?2 {6 a7 J( R: t: ]2 @ .gpio = DA850_USER_LED0,
1 G, g! K2 b$ S( o9 M7 H .name = "user_led0",
! h& C# y9 a! f& Z$ e, w .default_trigger = "default-on",
/ m0 F) Q) N7 e4 A/ `# S },* Y* r4 K% t% M* W+ d
{) I7 ]0 I7 w2 }+ t
.active_low = 0,, S6 l8 b7 X5 `/ R( Y) ^
.gpio = DA850_USER_LED1,/ k( Q# Z; u7 B
.name = "user_led1",4 B- k0 L. i/ ]5 V M
.default_trigger = "default-on",
, O+ l* i- T. A* F },9 _9 D. b$ V% k
{9 |! x0 u: K. J0 w0 D7 Q) G* p
.active_low = 0,
* b6 ]& ` q9 Z( E/ _) r" ~3 v- g$ Y .gpio = DA850_USER_LED2,
2 m% y2 ?( c$ K8 G6 G/ |$ P* @$ f .name = "user_led2",0 M2 b' ~ a2 ], t
.default_trigger = "default-on",; d/ y; A( ? g; d% Q! W; t4 L
},+ f4 r) G. y8 l4 G" D; V
{
: Q' G6 Y4 r: C# ?: M .active_low = 0,
( c/ r! t0 ], ^/ [7 W z" `: b .gpio = DA850_USER_LED3,
/ z7 V, e1 D( N7 x" [) T K .name = "user_led3",, R* S |8 M5 }/ m
.default_trigger = "default-on",: Q# D/ g) n; x* t' D, A
},5 I8 V' d. Y: O
};% b$ s3 x d7 P
+ ]4 I* V$ I2 T- [$ R: a V1 W! ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 h4 b+ \( J6 T( x
.leds = da850_evm_tl_leds,
% _+ D+ Z# o. B3 t+ N, k4 C .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
_2 O/ O2 g, `* c) W& h8 C( `};
, G9 S: n% `, F) R4 P; [8 `
2 G- r# Y& y' @3 k4 D2 c7 J7 Lstatic void led_dev_release(struct device *dev)
0 _4 @' _; u) N3 {) w9 U{
" D4 L |- `" T, l};% W; F4 ~3 a- |* S
, V0 ~, G) O# D- s" _) h0 Q* b, s
static struct platform_device da850_evm_tl_leds_device = {
" w. } @3 w2 l* q .name = "leds-gpio",
/ w2 A7 F* b3 n& r .id = 1,4 i0 L- S/ A: f3 y9 V
.dev = {
) E: Z! u" q5 e7 H+ | .platform_data = &da850_evm_tl_leds_pdata,. ~0 t. C4 R& n2 U
.release = led_dev_release,
5 X. y7 G6 E" y9 Q }( X4 {6 q8 O. x% u
};
; U K7 L' D6 }9 t2 G3 S" m
7 l, O$ e) E4 v R5 G, h9 Lstatic int __init led_platform_init(void)
1 I. Y8 f$ v) N0 `{, h* C% h/ z, O+ {# s$ q1 C
int ret;
3 f9 f8 ^+ H2 L* q#if 02 _# k: ?9 u; u3 `4 [ t9 K) r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 t0 c2 Y4 w9 K* N( _ j if (ret)
9 C9 I: J; T% B {3 I% F: C! ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :") g( H( w8 F& R G- r4 T
"%d\n", ret);- `, N9 H$ K7 M4 o3 u4 S
#endif+ i% w' Z& s. ?
ret = platform_device_register(&da850_evm_tl_leds_device);
9 z' Z# ^/ s( I0 e- P, O if (ret)
4 T; s- | m5 _2 \& d pr_warning("Could not register som GPIO expander LEDS");( z6 k0 M" ?: x/ [9 H8 @% w
else3 `# W$ I- Q- l
printk(KERN_INFO "LED register sucessful!\n");
! f+ }- r" T0 e4 R
" _9 z$ b6 r4 M# q' | return ret;) }8 I+ p5 D) E; L, O* f; x+ g8 Q
}
c4 @9 _" n# Z: e
& F! j B1 F# X% _2 L- u, \static void __exit led_platform_exit(void)3 h; x3 x% F- _- x: Z/ S5 }
{
, j- w* q; n4 |5 {8 W platform_device_unregister(&da850_evm_tl_leds_device);
* L) \( S1 x& e4 e- ^
" _9 b; a. _. w1 B2 p d; a printk(KERN_INFO "LED unregister!\n");. X: @' `2 w9 x c9 [$ E2 ^
}" Z- y; ?# { i4 ~! o# T# K8 j- D* {* G
! @& e* b3 U' ?, f- q9 R
module_init(led_platform_init); d# N% ]- p0 _
module_exit(led_platform_exit);
# |, T+ }- Q1 l9 `$ b
/ {% q) z, B; E% N, |# UMODULE_DESCRIPTION("Led platform driver");- z. ^: e$ m8 U5 [1 `# h
MODULE_AUTHOR("Tronlong");7 T J! w$ v0 A3 N) r
MODULE_LICENSE("GPL");8 w" S: X' d: a( F+ d: B c
/ ]" ]5 Z& ?8 u) g; _* \4 | |
|