Commit dacec3e7 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull i2c fixes from Wolfram Sang:
 "Some driver updates, a MAINTAINERS fix, and additions to COMPILE_TEST
  (so we won't miss build problems again)"

* 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
  MAINTAINERS: remove duplicate entry for i2c-qcom-geni
  i2c: brcmstb: fix support for DSL and CM variants
  i2c: qup: allow COMPILE_TEST
  i2c: imx: allow COMPILE_TEST
  i2c: cadence: allow COMPILE_TEST
  i2c: qcom-cci: don't put a device tree node before i2c_add_adapter()
  i2c: qcom-cci: don't delete an unregistered adapter
  i2c: bcm2835: Avoid clock stretching timeouts
parents 961af9db 2428766e
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -16008,14 +16008,6 @@ F: Documentation/devicetree/bindings/misc/qcom,fastrpc.txt
F:	drivers/misc/fastrpc.c
F:	include/uapi/misc/fastrpc.h
QUALCOMM GENERIC INTERFACE I2C DRIVER
M:	Akash Asthana <akashast@codeaurora.org>
M:	Mukesh Savaliya <msavaliy@codeaurora.org>
L:	linux-i2c@vger.kernel.org
L:	linux-arm-msm@vger.kernel.org
S:	Supported
F:	drivers/i2c/busses/i2c-qcom-geni.c
QUALCOMM HEXAGON ARCHITECTURE
M:	Brian Cain <bcain@codeaurora.org>
L:	linux-hexagon@vger.kernel.org
+3 −3
Original line number Diff line number Diff line
@@ -488,7 +488,7 @@ config I2C_BRCMSTB

config I2C_CADENCE
	tristate "Cadence I2C Controller"
	depends on ARCH_ZYNQ || ARM64 || XTENSA
	depends on ARCH_ZYNQ || ARM64 || XTENSA || COMPILE_TEST
	help
	  Say yes here to select Cadence I2C Host Controller. This controller is
	  e.g. used by Xilinx Zynq.
@@ -680,7 +680,7 @@ config I2C_IMG

config I2C_IMX
	tristate "IMX I2C interface"
	depends on ARCH_MXC || ARCH_LAYERSCAPE || COLDFIRE
	depends on ARCH_MXC || ARCH_LAYERSCAPE || COLDFIRE || COMPILE_TEST
	select I2C_SLAVE
	help
	  Say Y here if you want to use the IIC bus controller on
@@ -935,7 +935,7 @@ config I2C_QCOM_GENI

config I2C_QUP
	tristate "Qualcomm QUP based I2C controller"
	depends on ARCH_QCOM
	depends on ARCH_QCOM || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  built-in I2C interface on the Qualcomm SoCs.
+11 −0
Original line number Diff line number Diff line
@@ -23,6 +23,11 @@
#define BCM2835_I2C_FIFO	0x10
#define BCM2835_I2C_DIV		0x14
#define BCM2835_I2C_DEL		0x18
/*
 * 16-bit field for the number of SCL cycles to wait after rising SCL
 * before deciding the slave is not responding. 0 disables the
 * timeout detection.
 */
#define BCM2835_I2C_CLKT	0x1c

#define BCM2835_I2C_C_READ	BIT(0)
@@ -474,6 +479,12 @@ static int bcm2835_i2c_probe(struct platform_device *pdev)
	adap->dev.of_node = pdev->dev.of_node;
	adap->quirks = of_device_get_match_data(&pdev->dev);

	/*
	 * Disable the hardware clock stretching timeout. SMBUS
	 * specifies a limit for how long the device can stretch the
	 * clock, but core I2C doesn't.
	 */
	bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_CLKT, 0);
	bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, 0);

	ret = i2c_add_adapter(adap);
+1 −1
Original line number Diff line number Diff line
@@ -673,7 +673,7 @@ static int brcmstb_i2c_probe(struct platform_device *pdev)

	/* set the data in/out register size for compatible SoCs */
	if (of_device_is_compatible(dev->device->of_node,
				    "brcmstb,brcmper-i2c"))
				    "brcm,brcmper-i2c"))
		dev->data_regsz = sizeof(u8);
	else
		dev->data_regsz = sizeof(u32);
+11 −5
Original line number Diff line number Diff line
@@ -558,7 +558,7 @@ static int cci_probe(struct platform_device *pdev)
		cci->master[idx].adap.quirks = &cci->data->quirks;
		cci->master[idx].adap.algo = &cci_algo;
		cci->master[idx].adap.dev.parent = dev;
		cci->master[idx].adap.dev.of_node = child;
		cci->master[idx].adap.dev.of_node = of_node_get(child);
		cci->master[idx].master = idx;
		cci->master[idx].cci = cci;

@@ -643,9 +643,11 @@ static int cci_probe(struct platform_device *pdev)
			continue;

		ret = i2c_add_adapter(&cci->master[i].adap);
		if (ret < 0)
		if (ret < 0) {
			of_node_put(cci->master[i].adap.dev.of_node);
			goto error_i2c;
		}
	}

	pm_runtime_set_autosuspend_delay(dev, MSEC_PER_SEC);
	pm_runtime_use_autosuspend(dev);
@@ -655,9 +657,11 @@ static int cci_probe(struct platform_device *pdev)
	return 0;

error_i2c:
	for (; i >= 0; i--) {
		if (cci->master[i].cci)
	for (--i ; i >= 0; i--) {
		if (cci->master[i].cci) {
			i2c_del_adapter(&cci->master[i].adap);
			of_node_put(cci->master[i].adap.dev.of_node);
		}
	}
error:
	disable_irq(cci->irq);
@@ -673,8 +677,10 @@ static int cci_remove(struct platform_device *pdev)
	int i;

	for (i = 0; i < cci->data->num_masters; i++) {
		if (cci->master[i].cci)
		if (cci->master[i].cci) {
			i2c_del_adapter(&cci->master[i].adap);
			of_node_put(cci->master[i].adap.dev.of_node);
		}
		cci_halt(cci, i);
	}