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

Commit c46c9482 authored by Jonathan Cameron's avatar Jonathan Cameron Committed by Russell King
Browse files

[ARM] 5278/1: i2c-pxa fast mode support



Add fast_mode option to i2c_pxa_platform_data and use it to set the
ICR_FM bit appropriately when i2c_pxa_reset is called. Parameter
called fast_mode rather than frequency as this driver is also used
for the i2c_pxa_pwr bus which has different normal and fast frequencies.

Signed-off-by: default avatarJonathan Cameron <jic23@cam.ac.uk>
Acked-by: default avatarEric Miao <eric.miao@marvell.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 73b610af
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -65,7 +65,8 @@ struct i2c_pxa_platform_data {
	unsigned int		slave_addr;
	struct i2c_slave_client	*slave;
	unsigned int		class;
	int			use_pio;
	unsigned int		use_pio :1;
	unsigned int		fast_mode :1;
};

extern void pxa_set_i2c_info(struct i2c_pxa_platform_data *info);
+1 −0
Original line number Diff line number Diff line
@@ -448,6 +448,7 @@
#define ICR_ALDIE	(1 << 12)	   /* enable arbitration interrupt */
#define ICR_SADIE	(1 << 13)	   /* slave address detected int enable */
#define ICR_UR		(1 << 14)	   /* unit reset */
#define ICR_FM		(1 << 15)	   /* fast mode */

#define ISR_RWM		(1 << 0)	   /* read/write mode */
#define ISR_ACKNAK	(1 << 1)	   /* ack/nak status */
+4 −2
Original line number Diff line number Diff line
@@ -66,7 +66,8 @@ struct pxa_i2c {
	unsigned long		iosize;

	int			irq;
	int			use_pio;
	unsigned int		use_pio :1;
	unsigned int		fast_mode :1;
};

#define _IBMR(i2c)	((i2c)->reg_base + (0x0 << (i2c)->reg_shift))
@@ -366,7 +367,7 @@ static void i2c_pxa_reset(struct pxa_i2c *i2c)
	writel(i2c->slave_addr, _ISAR(i2c));

	/* set control register values */
	writel(I2C_ICR_INIT, _ICR(i2c));
	writel(I2C_ICR_INIT | (i2c->fast_mode ? ICR_FM : 0), _ICR(i2c));

#ifdef CONFIG_I2C_PXA_SLAVE
	dev_info(&i2c->adap.dev, "Enabling slave mode\n");
@@ -1010,6 +1011,7 @@ static int i2c_pxa_probe(struct platform_device *dev)
	if (plat) {
		i2c->adap.class = plat->class;
		i2c->use_pio = plat->use_pio;
		i2c->fast_mode = plat->fast_mode;
	}

	if (i2c->use_pio) {