Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc3a5959 authored by Philipp Zabel's avatar Philipp Zabel Committed by Russell King
Browse files

[ARM] 5075/1: i2c-pxa: move i2c pin setup and PCFR_PI2CEN handling into arch/arm/mach-pxa



This fixes a build error introduced when the power manager
register definitions were moved into pxa2xx-regs.h.

Signed-off-by: default avatarPhilipp Zabel <philipp.zabel@gmail.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent ffdf7862
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -10,11 +10,13 @@
#include <asm/arch/mmc.h>
#include <asm/arch/irda.h>
#include <asm/arch/i2c.h>
#include <asm/arch/mfp-pxa27x.h>
#include <asm/arch/ohci.h>
#include <asm/arch/pxa27x_keypad.h>
#include <asm/arch/camera.h>

#include "devices.h"
#include "generic.h"

void __init pxa_register_device(struct platform_device *dev, void *data)
{
@@ -233,8 +235,15 @@ struct platform_device pxa_device_i2c = {
	.num_resources	= ARRAY_SIZE(pxai2c_resources),
};

static unsigned long pxa27x_i2c_mfp_cfg[] = {
	GPIO117_I2C_SCL,
	GPIO118_I2C_SDA,
};

void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info)
{
	if (cpu_is_pxa27x())
		pxa2xx_mfp_config(ARRAY_AND_SIZE(pxa27x_i2c_mfp_cfg));
	pxa_register_device(&pxa_device_i2c, info);
}

+3 −0
Original line number Diff line number Diff line
@@ -349,6 +349,9 @@ struct platform_device pxa27x_device_i2c_power = {

void __init pxa_set_i2c_power_info(struct i2c_pxa_platform_data *info)
{
	local_irq_disable();
	PCFR |= PCFR_PI2CEN;
	local_irq_enable();
	pxa27x_device_i2c_power.dev.platform_data = info;
}

+0 −29
Original line number Diff line number Diff line
@@ -945,32 +945,6 @@ static const struct i2c_algorithm i2c_pxa_pio_algorithm = {
	.functionality	= i2c_pxa_functionality,
};

static void i2c_pxa_enable(struct platform_device *dev)
{
	if (cpu_is_pxa27x()) {
		switch (dev->id) {
		case 0:
			pxa_gpio_mode(GPIO117_I2CSCL_MD);
			pxa_gpio_mode(GPIO118_I2CSDA_MD);
			break;
		case 1:
			local_irq_disable();
			PCFR |= PCFR_PI2CEN;
			local_irq_enable();
			break;
		}
	}
}

static void i2c_pxa_disable(struct platform_device *dev)
{
	if (cpu_is_pxa27x() && dev->id == 1) {
		local_irq_disable();
		PCFR &= ~PCFR_PI2CEN;
		local_irq_enable();
	}
}

#define res_len(r)		((r)->end - (r)->start + 1)
static int i2c_pxa_probe(struct platform_device *dev)
{
@@ -1036,7 +1010,6 @@ static int i2c_pxa_probe(struct platform_device *dev)
#endif

	clk_enable(i2c->clk);
	i2c_pxa_enable(dev);

	if (plat) {
		i2c->adap.class = plat->class;
@@ -1080,7 +1053,6 @@ static int i2c_pxa_probe(struct platform_device *dev)
		free_irq(irq, i2c);
ereqirq:
	clk_disable(i2c->clk);
	i2c_pxa_disable(dev);
	iounmap(i2c->reg_base);
eremap:
	clk_put(i2c->clk);
@@ -1103,7 +1075,6 @@ static int __exit i2c_pxa_remove(struct platform_device *dev)

	clk_disable(i2c->clk);
	clk_put(i2c->clk);
	i2c_pxa_disable(dev);

	iounmap(i2c->reg_base);
	release_mem_region(i2c->iobase, i2c->iosize);