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

Commit 4ff895bc authored by Jean-Hugues Deschenes's avatar Jean-Hugues Deschenes Committed by Ben Dooks
Browse files

i2c-designware: Check component type register



Designware component type register is checked before attaching to the device.

Signed-off-by: default avatarJean-Hugues Deschenes <jean-hugues.deschenes@octasic.com>
Signed-off-by: default avatarDirk Brandewie <dirk.brandewie@gmail.com>
Signed-off-by: default avatarBen Dooks <ben-linux@fluff.org>
parent 7f279601
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@
#define DW_IC_TXFLR		0x74
#define DW_IC_RXFLR		0x78
#define DW_IC_COMP_PARAM_1	0xf4
#define DW_IC_COMP_TYPE		0xfc
#define DW_IC_TX_ABRT_SOURCE	0x80

#define DW_IC_CON_MASTER		0x1
@@ -710,6 +711,7 @@ static int __devinit dw_i2c_probe(struct platform_device *pdev)
	struct i2c_adapter *adap;
	struct resource *mem, *ioarea;
	int irq, r;
	u32 reg;

	/* NOTE: driver uses the static register mapping */
	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -756,12 +758,19 @@ static int __devinit dw_i2c_probe(struct platform_device *pdev)
		r = -EBUSY;
		goto err_unuse_clocks;
	}
	{
		u32 param1 = dw_readl(dev, DW_IC_COMP_PARAM_1);

		dev->tx_fifo_depth = ((param1 >> 16) & 0xff) + 1;
		dev->rx_fifo_depth = ((param1 >> 8)  & 0xff) + 1;
	reg = dw_readl(dev, DW_IC_COMP_TYPE);
	if (reg != 0x44570140) {
		dev_err(&pdev->dev, "Unknown Synopsys component type: "
				"0x%08x\n",	reg);
		r = -ENODEV;
		goto err_iounmap;
	}

	reg = dw_readl(dev, DW_IC_COMP_PARAM_1);
	dev->tx_fifo_depth = ((reg >> 16) & 0xff) + 1;
	dev->rx_fifo_depth = ((reg >> 8)  & 0xff) + 1;

	i2c_dw_init(dev);

	dw_writel(dev, 0, DW_IC_INTR_MASK); /* disable IRQ */