Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
7af2755d
Commit
7af2755d
authored
Sep 23, 2013
by
Linus Walleij
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'iop-cleanup' into devel
parents
1dc94272
e34ca9de
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
135 additions
and
128 deletions
+135
-128
arch/arm/Kconfig
arch/arm/Kconfig
+2
-2
arch/arm/include/asm/hardware/iop3xx-gpio.h
arch/arm/include/asm/hardware/iop3xx-gpio.h
+0
-75
arch/arm/include/asm/hardware/iop3xx.h
arch/arm/include/asm/hardware/iop3xx.h
+0
-12
arch/arm/mach-iop32x/em7210.c
arch/arm/mach-iop32x/em7210.c
+2
-0
arch/arm/mach-iop32x/glantank.c
arch/arm/mach-iop32x/glantank.c
+2
-0
arch/arm/mach-iop32x/gpio-iop32x.h
arch/arm/mach-iop32x/gpio-iop32x.h
+10
-0
arch/arm/mach-iop32x/include/mach/gpio.h
arch/arm/mach-iop32x/include/mach/gpio.h
+0
-6
arch/arm/mach-iop32x/include/mach/iop32x.h
arch/arm/mach-iop32x/include/mach/iop32x.h
+0
-1
arch/arm/mach-iop32x/iq31244.c
arch/arm/mach-iop32x/iq31244.c
+2
-0
arch/arm/mach-iop32x/iq80321.c
arch/arm/mach-iop32x/iq80321.c
+2
-0
arch/arm/mach-iop32x/n2100.c
arch/arm/mach-iop32x/n2100.c
+39
-8
arch/arm/mach-iop33x/include/mach/gpio.h
arch/arm/mach-iop33x/include/mach/gpio.h
+0
-6
arch/arm/mach-iop33x/include/mach/iop33x.h
arch/arm/mach-iop33x/include/mach/iop33x.h
+0
-1
arch/arm/mach-iop33x/iq80331.c
arch/arm/mach-iop33x/iq80331.c
+7
-0
arch/arm/mach-iop33x/iq80332.c
arch/arm/mach-iop33x/iq80332.c
+7
-0
arch/arm/plat-iop/Makefile
arch/arm/plat-iop/Makefile
+0
-2
drivers/gpio/Kconfig
drivers/gpio/Kconfig
+9
-0
drivers/gpio/Makefile
drivers/gpio/Makefile
+1
-0
drivers/gpio/gpio-iop.c
drivers/gpio/gpio-iop.c
+52
-15
No files found.
arch/arm/Kconfig
View file @
7af2755d
...
...
@@ -457,7 +457,7 @@ config ARCH_IOP32X
depends on MMU
select ARCH_REQUIRE_GPIOLIB
select CPU_XSCALE
select
NEED_MACH_GPIO_H
select
GPIO_IOP
select NEED_RET_TO_USER
select PCI
select PLAT_IOP
...
...
@@ -470,7 +470,7 @@ config ARCH_IOP33X
depends on MMU
select ARCH_REQUIRE_GPIOLIB
select CPU_XSCALE
select
NEED_MACH_GPIO_H
select
GPIO_IOP
select NEED_RET_TO_USER
select PCI
select PLAT_IOP
...
...
arch/arm/include/asm/hardware/iop3xx-gpio.h
deleted
100644 → 0
View file @
1dc94272
/*
* arch/arm/include/asm/hardware/iop3xx-gpio.h
*
* IOP3xx GPIO wrappers
*
* Copyright (c) 2008 Arnaud Patard <arnaud.patard@rtp-net.org>
* Based on IXP4XX gpio.h file
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef __ASM_ARM_HARDWARE_IOP3XX_GPIO_H
#define __ASM_ARM_HARDWARE_IOP3XX_GPIO_H
#include <mach/hardware.h>
#include <asm-generic/gpio.h>
#define __ARM_GPIOLIB_COMPLEX
#define IOP3XX_N_GPIOS 8
static
inline
int
gpio_get_value
(
unsigned
gpio
)
{
if
(
gpio
>
IOP3XX_N_GPIOS
)
return
__gpio_get_value
(
gpio
);
return
gpio_line_get
(
gpio
);
}
static
inline
void
gpio_set_value
(
unsigned
gpio
,
int
value
)
{
if
(
gpio
>
IOP3XX_N_GPIOS
)
{
__gpio_set_value
(
gpio
,
value
);
return
;
}
gpio_line_set
(
gpio
,
value
);
}
static
inline
int
gpio_cansleep
(
unsigned
gpio
)
{
if
(
gpio
<
IOP3XX_N_GPIOS
)
return
0
;
else
return
__gpio_cansleep
(
gpio
);
}
/*
* The GPIOs are not generating any interrupt
* Note : manuals are not clear about this
*/
static
inline
int
gpio_to_irq
(
int
gpio
)
{
return
-
EINVAL
;
}
static
inline
int
irq_to_gpio
(
int
gpio
)
{
return
-
EINVAL
;
}
#endif
arch/arm/include/asm/hardware/iop3xx.h
View file @
7af2755d
...
...
@@ -18,16 +18,9 @@
/*
* IOP3XX GPIO handling
*/
#define GPIO_IN 0
#define GPIO_OUT 1
#define GPIO_LOW 0
#define GPIO_HIGH 1
#define IOP3XX_GPIO_LINE(x) (x)
#ifndef __ASSEMBLY__
extern
void
gpio_line_config
(
int
line
,
int
direction
);
extern
int
gpio_line_get
(
int
line
);
extern
void
gpio_line_set
(
int
line
,
int
value
);
extern
int
init_atu
;
extern
int
iop3xx_get_init_atu
(
void
);
#endif
...
...
@@ -168,11 +161,6 @@ extern int iop3xx_get_init_atu(void);
/* PERCR0 DOESN'T EXIST - index from 1! */
#define IOP3XX_PERCR0 (volatile u32 *)IOP3XX_REG_ADDR(0x0710)
/* General Purpose I/O */
#define IOP3XX_GPOE (volatile u32 *)IOP3XX_GPIO_REG(0x0000)
#define IOP3XX_GPID (volatile u32 *)IOP3XX_GPIO_REG(0x0004)
#define IOP3XX_GPOD (volatile u32 *)IOP3XX_GPIO_REG(0x0008)
/* Timers */
#define IOP3XX_TU_TMR0 (volatile u32 *)IOP3XX_TIMER_REG(0x0000)
#define IOP3XX_TU_TMR1 (volatile u32 *)IOP3XX_TIMER_REG(0x0004)
...
...
arch/arm/mach-iop32x/em7210.c
View file @
7af2755d
...
...
@@ -32,6 +32,7 @@
#include <asm/mach/time.h>
#include <asm/mach-types.h>
#include <mach/time.h>
#include "gpio-iop32x.h"
static
void
__init
em7210_timer_init
(
void
)
{
...
...
@@ -183,6 +184,7 @@ void em7210_power_off(void)
static
void
__init
em7210_init_machine
(
void
)
{
register_iop32x_gpio
();
platform_device_register
(
&
em7210_serial_device
);
platform_device_register
(
&
iop3xx_i2c0_device
);
platform_device_register
(
&
iop3xx_i2c1_device
);
...
...
arch/arm/mach-iop32x/glantank.c
View file @
7af2755d
...
...
@@ -34,6 +34,7 @@
#include <asm/mach-types.h>
#include <asm/page.h>
#include <mach/time.h>
#include "gpio-iop32x.h"
/*
* GLAN Tank timer tick configuration.
...
...
@@ -187,6 +188,7 @@ static void glantank_power_off(void)
static
void
__init
glantank_init_machine
(
void
)
{
register_iop32x_gpio
();
platform_device_register
(
&
iop3xx_i2c0_device
);
platform_device_register
(
&
iop3xx_i2c1_device
);
platform_device_register
(
&
glantank_flash_device
);
...
...
arch/arm/mach-iop32x/gpio-iop32x.h
0 → 100644
View file @
7af2755d
static
struct
resource
iop32x_gpio_res
[]
=
{
DEFINE_RES_MEM
((
IOP3XX_PERIPHERAL_PHYS_BASE
+
0x07c4
),
0x10
),
};
static
inline
void
register_iop32x_gpio
(
void
)
{
platform_device_register_simple
(
"gpio-iop"
,
0
,
iop32x_gpio_res
,
ARRAY_SIZE
(
iop32x_gpio_res
));
}
arch/arm/mach-iop32x/include/mach/gpio.h
deleted
100644 → 0
View file @
1dc94272
#ifndef __ASM_ARCH_IOP32X_GPIO_H
#define __ASM_ARCH_IOP32X_GPIO_H
#include <asm/hardware/iop3xx-gpio.h>
#endif
arch/arm/mach-iop32x/include/mach/iop32x.h
View file @
7af2755d
...
...
@@ -19,7 +19,6 @@
* Peripherals that are shared between the iop32x and iop33x but
* located at different addresses.
*/
#define IOP3XX_GPIO_REG(reg) (IOP3XX_PERIPHERAL_VIRT_BASE + 0x07c4 + (reg))
#define IOP3XX_TIMER_REG(reg) (IOP3XX_PERIPHERAL_VIRT_BASE + 0x07e0 + (reg))
#include <asm/hardware/iop3xx.h>
...
...
arch/arm/mach-iop32x/iq31244.c
View file @
7af2755d
...
...
@@ -37,6 +37,7 @@
#include <asm/page.h>
#include <asm/pgtable.h>
#include <mach/time.h>
#include "gpio-iop32x.h"
/*
* Until March of 2007 iq31244 platforms and ep80219 platforms shared the
...
...
@@ -283,6 +284,7 @@ void ep80219_power_off(void)
static
void
__init
iq31244_init_machine
(
void
)
{
register_iop32x_gpio
();
platform_device_register
(
&
iop3xx_i2c0_device
);
platform_device_register
(
&
iop3xx_i2c1_device
);
platform_device_register
(
&
iq31244_flash_device
);
...
...
arch/arm/mach-iop32x/iq80321.c
View file @
7af2755d
...
...
@@ -33,6 +33,7 @@
#include <asm/page.h>
#include <asm/pgtable.h>
#include <mach/time.h>
#include "gpio-iop32x.h"
/*
* IQ80321 timer tick configuration.
...
...
@@ -170,6 +171,7 @@ static struct platform_device iq80321_serial_device = {
static
void
__init
iq80321_init_machine
(
void
)
{
register_iop32x_gpio
();
platform_device_register
(
&
iop3xx_i2c0_device
);
platform_device_register
(
&
iop3xx_i2c1_device
);
platform_device_register
(
&
iq80321_flash_device
);
...
...
arch/arm/mach-iop32x/n2100.c
View file @
7af2755d
...
...
@@ -30,6 +30,7 @@
#include <linux/platform_device.h>
#include <linux/reboot.h>
#include <linux/io.h>
#include <linux/gpio.h>
#include <mach/hardware.h>
#include <asm/irq.h>
#include <asm/mach/arch.h>
...
...
@@ -40,6 +41,7 @@
#include <asm/page.h>
#include <asm/pgtable.h>
#include <mach/time.h>
#include "gpio-iop32x.h"
/*
* N2100 timer tick configuration.
...
...
@@ -288,8 +290,14 @@ static void n2100_power_off(void)
static
void
n2100_restart
(
enum
reboot_mode
mode
,
const
char
*
cmd
)
{
gpio_line_set
(
N2100_HARDWARE_RESET
,
GPIO_LOW
);
gpio_line_config
(
N2100_HARDWARE_RESET
,
GPIO_OUT
);
int
ret
;
ret
=
gpio_direction_output
(
N2100_HARDWARE_RESET
,
0
);
if
(
ret
)
{
pr_crit
(
"could not drive reset GPIO low
\n
"
);
return
;
}
/* Wait for reset to happen */
while
(
1
)
;
}
...
...
@@ -299,7 +307,7 @@ static struct timer_list power_button_poll_timer;
static
void
power_button_poll
(
unsigned
long
dummy
)
{
if
(
gpio_
line_get
(
N2100_POWER_BUTTON
)
==
0
)
{
if
(
gpio_
get_value
(
N2100_POWER_BUTTON
)
==
0
)
{
ctrl_alt_del
();
return
;
}
...
...
@@ -308,9 +316,37 @@ static void power_button_poll(unsigned long dummy)
add_timer
(
&
power_button_poll_timer
);
}
static
int
__init
n2100_request_gpios
(
void
)
{
int
ret
;
if
(
!
machine_is_n2100
())
return
0
;
ret
=
gpio_request
(
N2100_HARDWARE_RESET
,
"reset"
);
if
(
ret
)
pr_err
(
"could not request reset GPIO
\n
"
);
ret
=
gpio_request
(
N2100_POWER_BUTTON
,
"power"
);
if
(
ret
)
pr_err
(
"could not request power GPIO
\n
"
);
else
{
ret
=
gpio_direction_input
(
N2100_POWER_BUTTON
);
if
(
ret
)
pr_err
(
"could not set power GPIO as input
\n
"
);
}
/* Set up power button poll timer */
init_timer
(
&
power_button_poll_timer
);
power_button_poll_timer
.
function
=
power_button_poll
;
power_button_poll_timer
.
expires
=
jiffies
+
(
HZ
/
10
);
add_timer
(
&
power_button_poll_timer
);
return
0
;
}
device_initcall
(
n2100_request_gpios
);
static
void
__init
n2100_init_machine
(
void
)
{
register_iop32x_gpio
();
platform_device_register
(
&
iop3xx_i2c0_device
);
platform_device_register
(
&
n2100_flash_device
);
platform_device_register
(
&
n2100_serial_device
);
...
...
@@ -321,11 +357,6 @@ static void __init n2100_init_machine(void)
ARRAY_SIZE
(
n2100_i2c_devices
));
pm_power_off
=
n2100_power_off
;
init_timer
(
&
power_button_poll_timer
);
power_button_poll_timer
.
function
=
power_button_poll
;
power_button_poll_timer
.
expires
=
jiffies
+
(
HZ
/
10
);
add_timer
(
&
power_button_poll_timer
);
}
MACHINE_START
(
N2100
,
"Thecus N2100"
)
...
...
arch/arm/mach-iop33x/include/mach/gpio.h
deleted
100644 → 0
View file @
1dc94272
#ifndef __ASM_ARCH_IOP33X_GPIO_H
#define __ASM_ARCH_IOP33X_GPIO_H
#include <asm/hardware/iop3xx-gpio.h>
#endif
arch/arm/mach-iop33x/include/mach/iop33x.h
View file @
7af2755d
...
...
@@ -18,7 +18,6 @@
* Peripherals that are shared between the iop32x and iop33x but
* located at different addresses.
*/
#define IOP3XX_GPIO_REG(reg) (IOP3XX_PERIPHERAL_VIRT_BASE + 0x1780 + (reg))
#define IOP3XX_TIMER_REG(reg) (IOP3XX_PERIPHERAL_VIRT_BASE + 0x07d0 + (reg))
#include <asm/hardware/iop3xx.h>
...
...
arch/arm/mach-iop33x/iq80331.c
View file @
7af2755d
...
...
@@ -122,8 +122,15 @@ static struct platform_device iq80331_flash_device = {
.
resource
=
&
iq80331_flash_resource
,
};
static
struct
resource
iq80331_gpio_res
[]
=
{
DEFINE_RES_MEM
((
IOP3XX_PERIPHERAL_PHYS_BASE
+
0x1780
),
0x10
),
};
static
void
__init
iq80331_init_machine
(
void
)
{
platform_device_register_simple
(
"gpio-iop"
,
0
,
iq80331_gpio_res
,
ARRAY_SIZE
(
iq80331_gpio_res
));
platform_device_register
(
&
iop3xx_i2c0_device
);
platform_device_register
(
&
iop3xx_i2c1_device
);
platform_device_register
(
&
iop33x_uart0_device
);
...
...
arch/arm/mach-iop33x/iq80332.c
View file @
7af2755d
...
...
@@ -122,8 +122,15 @@ static struct platform_device iq80332_flash_device = {
.
resource
=
&
iq80332_flash_resource
,
};
static
struct
resource
iq80332_gpio_res
[]
=
{
DEFINE_RES_MEM
((
IOP3XX_PERIPHERAL_PHYS_BASE
+
0x1780
),
0x10
),
};
static
void
__init
iq80332_init_machine
(
void
)
{
platform_device_register_simple
(
"gpio-iop"
,
0
,
iq80332_gpio_res
,
ARRAY_SIZE
(
iq80332_gpio_res
));
platform_device_register
(
&
iop3xx_i2c0_device
);
platform_device_register
(
&
iop3xx_i2c1_device
);
platform_device_register
(
&
iop33x_uart0_device
);
...
...
arch/arm/plat-iop/Makefile
View file @
7af2755d
...
...
@@ -5,7 +5,6 @@
obj-y
:=
# IOP32X
obj-$(CONFIG_ARCH_IOP32X)
+=
gpio.o
obj-$(CONFIG_ARCH_IOP32X)
+=
i2c.o
obj-$(CONFIG_ARCH_IOP32X)
+=
pci.o
obj-$(CONFIG_ARCH_IOP32X)
+=
setup.o
...
...
@@ -16,7 +15,6 @@ obj-$(CONFIG_ARCH_IOP32X) += pmu.o
obj-$(CONFIG_ARCH_IOP32X)
+=
restart.o
# IOP33X
obj-$(CONFIG_ARCH_IOP33X)
+=
gpio.o
obj-$(CONFIG_ARCH_IOP33X)
+=
i2c.o
obj-$(CONFIG_ARCH_IOP33X)
+=
pci.o
obj-$(CONFIG_ARCH_IOP33X)
+=
setup.o
...
...
drivers/gpio/Kconfig
View file @
7af2755d
...
...
@@ -320,6 +320,15 @@ config GPIO_ICH
If unsure, say N.
config GPIO_IOP
tristate "Intel IOP GPIO"
depends on ARM && (ARCH_IOP32X || ARCH_IOP33X)
help
Say yes here to support the GPIO functionality of a number of Intel
IOP32X or IOP33X.
If unsure, say N.
config GPIO_VX855
tristate "VIA VX855/VX875 GPIO"
depends on PCI
...
...
drivers/gpio/Makefile
View file @
7af2755d
...
...
@@ -29,6 +29,7 @@ obj-$(CONFIG_GPIO_F7188X) += gpio-f7188x.o
obj-$(CONFIG_GPIO_GE_FPGA)
+=
gpio-ge.o
obj-$(CONFIG_GPIO_GRGPIO)
+=
gpio-grgpio.o
obj-$(CONFIG_GPIO_ICH)
+=
gpio-ich.o
obj-$(CONFIG_GPIO_IOP)
+=
gpio-iop.o
obj-$(CONFIG_GPIO_IT8761E)
+=
gpio-it8761e.o
obj-$(CONFIG_GPIO_JANZ_TTL)
+=
gpio-janz-ttl.o
obj-$(CONFIG_GPIO_KEMPLD)
+=
gpio-kempld.o
...
...
arch/arm/plat-iop/gpio
.c
→
drivers/gpio/gpio-iop
.c
View file @
7af2755d
...
...
@@ -16,42 +16,61 @@
#include <linux/errno.h>
#include <linux/gpio.h>
#include <linux/export.h>
#include <asm/hardware/iop3xx.h>
#include <mach/gpio.h>
#include <linux/platform_device.h>
#include <linux/bitops.h>
#include <linux/io.h>
void
gpio_line_config
(
int
line
,
int
direction
)
#define IOP3XX_N_GPIOS 8
#define GPIO_IN 0
#define GPIO_OUT 1
#define GPIO_LOW 0
#define GPIO_HIGH 1
/* Memory base offset */
static
void
__iomem
*
base
;
#define IOP3XX_GPIO_REG(reg) (base + (reg))
#define IOP3XX_GPOE IOP3XX_GPIO_REG(0x0000)
#define IOP3XX_GPID IOP3XX_GPIO_REG(0x0004)
#define IOP3XX_GPOD IOP3XX_GPIO_REG(0x0008)
static
void
gpio_line_config
(
int
line
,
int
direction
)
{
unsigned
long
flags
;
u32
val
;
local_irq_save
(
flags
);
val
=
readl
(
IOP3XX_GPOE
);
if
(
direction
==
GPIO_IN
)
{
*
IOP3XX_GPOE
|=
1
<<
line
;
val
|=
BIT
(
line
)
;
}
else
if
(
direction
==
GPIO_OUT
)
{
*
IOP3XX_GPOE
&=
~
(
1
<<
line
);
val
&=
~
BIT
(
line
);
}
writel
(
val
,
IOP3XX_GPOE
);
local_irq_restore
(
flags
);
}
EXPORT_SYMBOL
(
gpio_line_config
);
int
gpio_line_get
(
int
line
)
static
int
gpio_line_get
(
int
line
)
{
return
!!
(
*
IOP3XX_GPID
&
(
1
<<
line
));
return
!!
(
readl
(
IOP3XX_GPID
)
&
BIT
(
line
));
}
EXPORT_SYMBOL
(
gpio_line_get
);
void
gpio_line_set
(
int
line
,
int
value
)
static
void
gpio_line_set
(
int
line
,
int
value
)
{
unsigned
long
flags
;
u32
val
;
local_irq_save
(
flags
);
val
=
readl
(
IOP3XX_GPOD
);
if
(
value
==
GPIO_LOW
)
{
*
IOP3XX_GPOD
&=
~
(
1
<<
line
);
val
&=
~
BIT
(
line
);
}
else
if
(
value
==
GPIO_HIGH
)
{
*
IOP3XX_GPOD
|=
1
<<
line
;
val
|=
BIT
(
line
)
;
}
writel
(
val
,
IOP3XX_GPOD
);
local_irq_restore
(
flags
);
}
EXPORT_SYMBOL
(
gpio_line_set
);
static
int
iop3xx_gpio_direction_input
(
struct
gpio_chip
*
chip
,
unsigned
gpio
)
{
...
...
@@ -86,8 +105,26 @@ static struct gpio_chip iop3xx_chip = {
.
ngpio
=
IOP3XX_N_GPIOS
,
};
static
int
__init
iop3xx_gpio_setup
(
void
)
static
int
iop3xx_gpio_probe
(
struct
platform_device
*
pdev
)
{
struct
resource
*
res
;
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
base
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
return
gpiochip_add
(
&
iop3xx_chip
);
}
arch_initcall
(
iop3xx_gpio_setup
);
static
struct
platform_driver
iop3xx_gpio_driver
=
{
.
driver
=
{
.
name
=
"gpio-iop"
,
.
owner
=
THIS_MODULE
,
},
.
probe
=
iop3xx_gpio_probe
,
};
static
int
__init
iop3xx_gpio_init
(
void
)
{
return
platform_driver_register
(
&
iop3xx_gpio_driver
);
}
arch_initcall
(
iop3xx_gpio_init
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment