Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
unicore32
kernel
gpio.c
Go to the documentation of this file.
1
/*
2
* linux/arch/unicore32/kernel/gpio.c
3
*
4
* Code specific to PKUnity SoC and UniCore ISA
5
*
6
* Maintained by GUAN Xue-tao <
[email protected]
>
7
* Copyright (C) 2001-2010 Guan Xuetao
8
*
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License version 2 as
11
* published by the Free Software Foundation.
12
*/
13
/* in FPGA, no GPIO support */
14
15
#include <
linux/init.h
>
16
#include <linux/module.h>
17
#include <
linux/gpio.h
>
18
#include <mach/hardware.h>
19
20
#ifdef CONFIG_LEDS
21
#include <
linux/leds.h
>
22
#include <
linux/platform_device.h
>
23
24
static
const
struct
gpio_led
puv3_gpio_leds[] = {
25
{ .
name
=
"cpuhealth"
, .gpio =
GPO_CPU_HEALTH
, .active_low = 0,
26
.default_trigger =
"heartbeat"
, },
27
{ .name =
"hdd_led"
, .gpio =
GPO_HDD_LED
, .active_low = 1,
28
.default_trigger =
"ide-disk"
, },
29
};
30
31
static
const
struct
gpio_led_platform_data
puv3_gpio_led_data = {
32
.
num_leds
=
ARRAY_SIZE
(puv3_gpio_leds),
33
.leds = (
void
*) puv3_gpio_leds,
34
};
35
36
static
struct
platform_device
puv3_gpio_gpio_leds = {
37
.
name
=
"leds-gpio"
,
38
.id = -1,
39
.dev = {
40
.platform_data = (
void
*) &puv3_gpio_led_data,
41
}
42
};
43
44
static
int
__init
puv3_gpio_leds_init(
void
)
45
{
46
platform_device_register
(&puv3_gpio_gpio_leds);
47
return
0;
48
}
49
50
device_initcall
(puv3_gpio_leds_init);
51
#endif
52
53
static
int
puv3_gpio_get(
struct
gpio_chip *
chip
,
unsigned
offset
)
54
{
55
return
readl
(
GPIO_GPLR
) &
GPIO_GPIO
(offset);
56
}
57
58
static
void
puv3_gpio_set(
struct
gpio_chip *
chip
,
unsigned
offset
,
int
value
)
59
{
60
if
(value)
61
writel
(
GPIO_GPIO
(offset),
GPIO_GPSR
);
62
else
63
writel
(
GPIO_GPIO
(offset),
GPIO_GPCR
);
64
}
65
66
static
int
puv3_direction_input(
struct
gpio_chip *chip,
unsigned
offset)
67
{
68
unsigned
long
flags
;
69
70
local_irq_save
(flags);
71
writel
(
readl
(
GPIO_GPDR
) & ~
GPIO_GPIO
(offset),
GPIO_GPDR
);
72
local_irq_restore
(flags);
73
return
0;
74
}
75
76
static
int
puv3_direction_output(
struct
gpio_chip *chip,
unsigned
offset,
77
int
value)
78
{
79
unsigned
long
flags
;
80
81
local_irq_save
(flags);
82
puv3_gpio_set(chip, offset, value);
83
writel
(
readl
(
GPIO_GPDR
) |
GPIO_GPIO
(offset),
GPIO_GPDR
);
84
local_irq_restore
(flags);
85
return
0;
86
}
87
88
static
struct
gpio_chip puv3_gpio_chip = {
89
.label =
"gpio"
,
90
.direction_input = puv3_direction_input,
91
.direction_output = puv3_direction_output,
92
.set = puv3_gpio_set,
93
.get = puv3_gpio_get,
94
.base = 0,
95
.ngpio =
GPIO_MAX
+ 1,
96
};
97
98
void
__init
puv3_init_gpio
(
void
)
99
{
100
writel
(
GPIO_DIR
,
GPIO_GPDR
);
101
#if defined(CONFIG_PUV3_NB0916) || defined(CONFIG_PUV3_SMW0919) \
102
|| defined(CONFIG_PUV3_DB0913)
103
gpio_set_value
(
GPO_WIFI_EN
, 1);
104
gpio_set_value
(
GPO_HDD_LED
, 1);
105
gpio_set_value
(
GPO_VGA_EN
, 1);
106
gpio_set_value
(
GPO_LCD_EN
, 1);
107
gpio_set_value
(
GPO_CAM_PWR_EN
, 0);
108
gpio_set_value
(
GPO_LCD_VCC_EN
, 1);
109
gpio_set_value
(
GPO_SOFT_OFF
, 1);
110
gpio_set_value
(
GPO_BT_EN
, 1);
111
gpio_set_value
(
GPO_FAN_ON
, 0);
112
gpio_set_value
(
GPO_SPKR
, 0);
113
gpio_set_value
(
GPO_CPU_HEALTH
, 1);
114
gpio_set_value
(
GPO_LAN_SEL
, 1);
115
/*
116
* DO NOT modify the GPO_SET_V1 and GPO_SET_V2 in kernel
117
* gpio_set_value(GPO_SET_V1, 1);
118
* gpio_set_value(GPO_SET_V2, 1);
119
*/
120
#endif
121
gpiochip_add
(&puv3_gpio_chip);
122
}
Generated on Thu Jan 10 2013 12:56:50 for Linux Kernel by
1.8.2