You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'i2c/for-4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
Pull i2c updates from Wolfram Sang: "Here is the 4.9 pull request from I2C including: - centralized error messages when registering to the core - improved lockdep annotations to prevent false positives - DT support for muxes, gates, and arbitrators - bus speeds can now be obtained from ACPI - i2c-octeon got refactored and now supports ThunderX SoCs, too - i2c-tegra and i2c-designware got a bigger bunch of updates - a couple of standard driver fixes and improvements" * 'i2c/for-4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (71 commits) i2c: axxia: disable clks in case of failure in probe i2c: octeon: thunderx: Limit register access retries i2c: uniphier-f: fix misdetection of incomplete STOP condition gpio: pca953x: variable 'id' was used twice i2c: i801: Add support for Kaby Lake PCH-H gpio: pca953x: fix an incorrect lockdep warning i2c: add a warning to i2c_adapter_depth() lockdep: make MAX_LOCKDEP_SUBCLASSES unconditionally visible i2c: export i2c_adapter_depth() i2c: rk3x: Fix variable 'min_total_ns' unused warning i2c: rk3x: Fix sparse warning i2c / ACPI: Do not touch an I2C device if it belongs to another adapter i2c: octeon: Fix high-level controller status check i2c: octeon: Avoid sending STOP during recovery i2c: octeon: Fix set SCL recovery function i2c: rcar: add support for r8a7796 (R-Car M3-W) i2c: imx: make bus recovery through pinctrl optional i2c: meson: add gxbb compatible string i2c: uniphier-f: set the adapter to master mode when probing i2c: uniphier-f: avoid WARN_ON() of clk_disable() in failure path ...
This commit is contained in:
@@ -44,8 +44,7 @@ Required properties:
|
|||||||
- our-claim-gpio: The GPIO that we use to claim the bus.
|
- our-claim-gpio: The GPIO that we use to claim the bus.
|
||||||
- their-claim-gpios: The GPIOs that the other sides use to claim the bus.
|
- their-claim-gpios: The GPIOs that the other sides use to claim the bus.
|
||||||
Note that some implementations may only support a single other master.
|
Note that some implementations may only support a single other master.
|
||||||
- Standard I2C mux properties. See i2c-mux.txt in this directory.
|
- I2C arbitration bus node. See i2c-arb.txt in this directory.
|
||||||
- Single I2C child bus node at reg 0. See i2c-mux.txt in this directory.
|
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
- slew-delay-us: microseconds to wait for a GPIO to go high. Default is 10 us.
|
- slew-delay-us: microseconds to wait for a GPIO to go high. Default is 10 us.
|
||||||
@@ -63,8 +62,6 @@ Example:
|
|||||||
|
|
||||||
i2c-arbitrator {
|
i2c-arbitrator {
|
||||||
compatible = "i2c-arb-gpio-challenge";
|
compatible = "i2c-arb-gpio-challenge";
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
i2c-parent = <&{/i2c@12CA0000}>;
|
i2c-parent = <&{/i2c@12CA0000}>;
|
||||||
|
|
||||||
@@ -74,8 +71,7 @@ Example:
|
|||||||
wait-retry-us = <3000>;
|
wait-retry-us = <3000>;
|
||||||
wait-free-us = <50000>;
|
wait-free-us = <50000>;
|
||||||
|
|
||||||
i2c@0 {
|
i2c-arb {
|
||||||
reg = <0>;
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
Common i2c arbitration bus properties.
|
||||||
|
|
||||||
|
- i2c-arb child node
|
||||||
|
|
||||||
|
Required properties for the i2c-arb child node:
|
||||||
|
- #address-cells = <1>;
|
||||||
|
- #size-cells = <0>;
|
||||||
|
|
||||||
|
Optional properties for i2c-arb child node:
|
||||||
|
- Child nodes conforming to i2c bus binding
|
||||||
|
|
||||||
|
|
||||||
|
Example :
|
||||||
|
|
||||||
|
/*
|
||||||
|
An NXP pca9541 I2C bus master selector at address 0x74
|
||||||
|
with a NXP pca8574 GPIO expander attached.
|
||||||
|
*/
|
||||||
|
|
||||||
|
arb@74 {
|
||||||
|
compatible = "nxp,pca9541";
|
||||||
|
reg = <0x74>;
|
||||||
|
|
||||||
|
i2c-arb {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
gpio@38 {
|
||||||
|
compatible = "nxp,pca8574";
|
||||||
|
reg = <0x38>;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
gpio-controller;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
An i2c gate is useful to e.g. reduce the digital noise for RF tuners connected
|
||||||
|
to the i2c bus. Gates are similar to arbitrators in that you need to perform
|
||||||
|
some kind of operation to access the i2c bus past the arbitrator/gate, but
|
||||||
|
there are no competing masters to consider for gates and therefore there is
|
||||||
|
no arbitration happening for gates.
|
||||||
|
|
||||||
|
Common i2c gate properties.
|
||||||
|
|
||||||
|
- i2c-gate child node
|
||||||
|
|
||||||
|
Required properties for the i2c-gate child node:
|
||||||
|
- #address-cells = <1>;
|
||||||
|
- #size-cells = <0>;
|
||||||
|
|
||||||
|
Optional properties for i2c-gate child node:
|
||||||
|
- Child nodes conforming to i2c bus binding
|
||||||
|
|
||||||
|
|
||||||
|
Example :
|
||||||
|
|
||||||
|
/*
|
||||||
|
An Invensense mpu9150 at address 0x68 featuring an on-chip Asahi
|
||||||
|
Kasei ak8975 compass behind a gate.
|
||||||
|
*/
|
||||||
|
|
||||||
|
mpu9150@68 {
|
||||||
|
compatible = "invensense,mpu9150";
|
||||||
|
reg = <0x68>;
|
||||||
|
interrupt-parent = <&gpio1>;
|
||||||
|
interrupts = <18 1>;
|
||||||
|
|
||||||
|
i2c-gate {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
ax8975@c {
|
||||||
|
compatible = "ak,ak8975";
|
||||||
|
reg = <0x0c>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
Amlogic Meson I2C controller
|
Amlogic Meson I2C controller
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible: must be "amlogic,meson6-i2c"
|
- compatible: must be "amlogic,meson6-i2c" or "amlogic,meson-gxbb-i2c"
|
||||||
- reg: physical address and length of the device registers
|
- reg: physical address and length of the device registers
|
||||||
- interrupts: a single interrupt specifier
|
- interrupts: a single interrupt specifier
|
||||||
- clocks: clock for the device
|
- clocks: clock for the device
|
||||||
|
|||||||
@@ -2,19 +2,32 @@ Common i2c bus multiplexer/switch properties.
|
|||||||
|
|
||||||
An i2c bus multiplexer/switch will have several child busses that are
|
An i2c bus multiplexer/switch will have several child busses that are
|
||||||
numbered uniquely in a device dependent manner. The nodes for an i2c bus
|
numbered uniquely in a device dependent manner. The nodes for an i2c bus
|
||||||
multiplexer/switch will have one child node for each child
|
multiplexer/switch will have one child node for each child bus.
|
||||||
bus.
|
|
||||||
|
|
||||||
Required properties:
|
Optional properties:
|
||||||
|
- #address-cells = <1>;
|
||||||
|
This property is required is the i2c-mux child node does not exist.
|
||||||
|
|
||||||
|
- #size-cells = <0>;
|
||||||
|
This property is required is the i2c-mux child node does not exist.
|
||||||
|
|
||||||
|
- i2c-mux
|
||||||
|
For i2c multiplexers/switches that have child nodes that are a mixture
|
||||||
|
of both i2c child busses and other child nodes, the 'i2c-mux' subnode
|
||||||
|
can be used for populating the i2c child busses. If an 'i2c-mux'
|
||||||
|
subnode is present, only subnodes of this will be considered as i2c
|
||||||
|
child busses.
|
||||||
|
|
||||||
|
Required properties for the i2c-mux child node:
|
||||||
- #address-cells = <1>;
|
- #address-cells = <1>;
|
||||||
- #size-cells = <0>;
|
- #size-cells = <0>;
|
||||||
|
|
||||||
Required properties for child nodes:
|
Required properties for i2c child bus nodes:
|
||||||
- #address-cells = <1>;
|
- #address-cells = <1>;
|
||||||
- #size-cells = <0>;
|
- #size-cells = <0>;
|
||||||
- reg : The sub-bus number.
|
- reg : The sub-bus number.
|
||||||
|
|
||||||
Optional properties for child nodes:
|
Optional properties for i2c child bus nodes:
|
||||||
- Other properties specific to the multiplexer/switch hardware.
|
- Other properties specific to the multiplexer/switch hardware.
|
||||||
- Child nodes conforming to i2c bus binding
|
- Child nodes conforming to i2c bus binding
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ Required properties:
|
|||||||
"renesas,i2c-r8a7793"
|
"renesas,i2c-r8a7793"
|
||||||
"renesas,i2c-r8a7794"
|
"renesas,i2c-r8a7794"
|
||||||
"renesas,i2c-r8a7795"
|
"renesas,i2c-r8a7795"
|
||||||
|
"renesas,i2c-r8a7796"
|
||||||
- reg: physical base address of the controller and length of memory mapped
|
- reg: physical base address of the controller and length of memory mapped
|
||||||
region.
|
region.
|
||||||
- interrupts: interrupt specifier.
|
- interrupts: interrupt specifier.
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
* NXP PCA9541 I2C bus master selector
|
||||||
|
|
||||||
|
Required Properties:
|
||||||
|
|
||||||
|
- compatible: Must be "nxp,pca9541"
|
||||||
|
|
||||||
|
- reg: The I2C address of the device.
|
||||||
|
|
||||||
|
The following required properties are defined externally:
|
||||||
|
|
||||||
|
- I2C arbitration bus node. See i2c-arb.txt in this directory.
|
||||||
|
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
i2c-arbitrator@74 {
|
||||||
|
compatible = "nxp,pca9541";
|
||||||
|
reg = <0x74>;
|
||||||
|
|
||||||
|
i2c-arb {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
eeprom@54 {
|
||||||
|
compatible = "at,24c08";
|
||||||
|
reg = <0x54>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
+10
@@ -2908,6 +2908,14 @@ S: Maintained
|
|||||||
F: drivers/iio/light/cm*
|
F: drivers/iio/light/cm*
|
||||||
F: Documentation/devicetree/bindings/i2c/trivial-devices.txt
|
F: Documentation/devicetree/bindings/i2c/trivial-devices.txt
|
||||||
|
|
||||||
|
CAVIUM I2C DRIVER
|
||||||
|
M: Jan Glauber <jglauber@cavium.com>
|
||||||
|
M: David Daney <david.daney@cavium.com>
|
||||||
|
W: http://www.cavium.com
|
||||||
|
S: Supported
|
||||||
|
F: drivers/i2c/busses/i2c-octeon*
|
||||||
|
F: drivers/i2c/busses/i2c-thunderx*
|
||||||
|
|
||||||
CAVIUM LIQUIDIO NETWORK DRIVER
|
CAVIUM LIQUIDIO NETWORK DRIVER
|
||||||
M: Derek Chickles <derek.chickles@caviumnetworks.com>
|
M: Derek Chickles <derek.chickles@caviumnetworks.com>
|
||||||
M: Satanand Burla <satananda.burla@caviumnetworks.com>
|
M: Satanand Burla <satananda.burla@caviumnetworks.com>
|
||||||
@@ -5788,6 +5796,8 @@ S: Maintained
|
|||||||
F: Documentation/i2c/i2c-topology
|
F: Documentation/i2c/i2c-topology
|
||||||
F: Documentation/i2c/muxes/
|
F: Documentation/i2c/muxes/
|
||||||
F: Documentation/devicetree/bindings/i2c/i2c-mux*
|
F: Documentation/devicetree/bindings/i2c/i2c-mux*
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-arb*
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-gate*
|
||||||
F: drivers/i2c/i2c-mux.c
|
F: drivers/i2c/i2c-mux.c
|
||||||
F: drivers/i2c/muxes/
|
F: drivers/i2c/muxes/
|
||||||
F: include/linux/i2c-mux.h
|
F: include/linux/i2c-mux.h
|
||||||
|
|||||||
@@ -732,7 +732,7 @@ out:
|
|||||||
static const struct of_device_id pca953x_dt_ids[];
|
static const struct of_device_id pca953x_dt_ids[];
|
||||||
|
|
||||||
static int pca953x_probe(struct i2c_client *client,
|
static int pca953x_probe(struct i2c_client *client,
|
||||||
const struct i2c_device_id *id)
|
const struct i2c_device_id *i2c_id)
|
||||||
{
|
{
|
||||||
struct pca953x_platform_data *pdata;
|
struct pca953x_platform_data *pdata;
|
||||||
struct pca953x_chip *chip;
|
struct pca953x_chip *chip;
|
||||||
@@ -773,27 +773,29 @@ static int pca953x_probe(struct i2c_client *client,
|
|||||||
}
|
}
|
||||||
chip->regulator = reg;
|
chip->regulator = reg;
|
||||||
|
|
||||||
if (id) {
|
if (i2c_id) {
|
||||||
chip->driver_data = id->driver_data;
|
chip->driver_data = i2c_id->driver_data;
|
||||||
} else {
|
} else {
|
||||||
const struct acpi_device_id *id;
|
const struct acpi_device_id *acpi_id;
|
||||||
const struct of_device_id *match;
|
const struct of_device_id *match;
|
||||||
|
|
||||||
match = of_match_device(pca953x_dt_ids, &client->dev);
|
match = of_match_device(pca953x_dt_ids, &client->dev);
|
||||||
if (match) {
|
if (match) {
|
||||||
chip->driver_data = (int)(uintptr_t)match->data;
|
chip->driver_data = (int)(uintptr_t)match->data;
|
||||||
} else {
|
} else {
|
||||||
id = acpi_match_device(pca953x_acpi_ids, &client->dev);
|
acpi_id = acpi_match_device(pca953x_acpi_ids, &client->dev);
|
||||||
if (!id) {
|
if (!acpi_id) {
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto err_exit;
|
goto err_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
chip->driver_data = id->driver_data;
|
chip->driver_data = acpi_id->driver_data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_init(&chip->i2c_lock);
|
mutex_init(&chip->i2c_lock);
|
||||||
|
lockdep_set_subclass(&chip->i2c_lock,
|
||||||
|
i2c_adapter_depth(client->adapter));
|
||||||
|
|
||||||
/* initialize cached registers from their original values.
|
/* initialize cached registers from their original values.
|
||||||
* we can't share this chip with another i2c master.
|
* we can't share this chip with another i2c master.
|
||||||
|
|||||||
@@ -790,6 +790,12 @@ static void unlock_bus(struct i2c_adapter *i2c, unsigned int flags)
|
|||||||
mutex_unlock(&i2c_to_aux(i2c)->hw_mutex);
|
mutex_unlock(&i2c_to_aux(i2c)->hw_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct i2c_lock_operations drm_dp_i2c_lock_ops = {
|
||||||
|
.lock_bus = lock_bus,
|
||||||
|
.trylock_bus = trylock_bus,
|
||||||
|
.unlock_bus = unlock_bus,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* drm_dp_aux_init() - minimally initialise an aux channel
|
* drm_dp_aux_init() - minimally initialise an aux channel
|
||||||
* @aux: DisplayPort AUX channel
|
* @aux: DisplayPort AUX channel
|
||||||
@@ -807,9 +813,7 @@ void drm_dp_aux_init(struct drm_dp_aux *aux)
|
|||||||
aux->ddc.algo_data = aux;
|
aux->ddc.algo_data = aux;
|
||||||
aux->ddc.retries = 3;
|
aux->ddc.retries = 3;
|
||||||
|
|
||||||
aux->ddc.lock_bus = lock_bus;
|
aux->ddc.lock_ops = &drm_dp_i2c_lock_ops;
|
||||||
aux->ddc.trylock_bus = trylock_bus;
|
|
||||||
aux->ddc.unlock_bus = unlock_bus;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_dp_aux_init);
|
EXPORT_SYMBOL(drm_dp_aux_init);
|
||||||
|
|
||||||
|
|||||||
@@ -836,7 +836,7 @@ config I2C_SH7760
|
|||||||
config I2C_SH_MOBILE
|
config I2C_SH_MOBILE
|
||||||
tristate "SuperH Mobile I2C Controller"
|
tristate "SuperH Mobile I2C Controller"
|
||||||
depends on HAS_DMA
|
depends on HAS_DMA
|
||||||
depends on SUPERH || ARCH_RENESAS || COMPILE_TEST
|
depends on ARCH_SHMOBILE || ARCH_RENESAS || COMPILE_TEST
|
||||||
help
|
help
|
||||||
If you say yes to this option, support will be included for the
|
If you say yes to this option, support will be included for the
|
||||||
built-in I2C interface on the Renesas SH-Mobile processor.
|
built-in I2C interface on the Renesas SH-Mobile processor.
|
||||||
@@ -956,6 +956,17 @@ config I2C_OCTEON
|
|||||||
This driver can also be built as a module. If so, the module
|
This driver can also be built as a module. If so, the module
|
||||||
will be called i2c-octeon.
|
will be called i2c-octeon.
|
||||||
|
|
||||||
|
config I2C_THUNDERX
|
||||||
|
tristate "Cavium ThunderX I2C bus support"
|
||||||
|
depends on 64BIT && PCI && (ARM64 || COMPILE_TEST)
|
||||||
|
select I2C_SMBUS
|
||||||
|
help
|
||||||
|
Say yes if you want to support the I2C serial bus on Cavium
|
||||||
|
ThunderX SOC.
|
||||||
|
|
||||||
|
This driver can also be built as a module. If so, the module
|
||||||
|
will be called i2c-thunderx.
|
||||||
|
|
||||||
config I2C_XILINX
|
config I2C_XILINX
|
||||||
tristate "Xilinx I2C Controller"
|
tristate "Xilinx I2C Controller"
|
||||||
depends on HAS_IOMEM
|
depends on HAS_IOMEM
|
||||||
|
|||||||
@@ -91,7 +91,10 @@ obj-$(CONFIG_I2C_UNIPHIER) += i2c-uniphier.o
|
|||||||
obj-$(CONFIG_I2C_UNIPHIER_F) += i2c-uniphier-f.o
|
obj-$(CONFIG_I2C_UNIPHIER_F) += i2c-uniphier-f.o
|
||||||
obj-$(CONFIG_I2C_VERSATILE) += i2c-versatile.o
|
obj-$(CONFIG_I2C_VERSATILE) += i2c-versatile.o
|
||||||
obj-$(CONFIG_I2C_WMT) += i2c-wmt.o
|
obj-$(CONFIG_I2C_WMT) += i2c-wmt.o
|
||||||
|
i2c-octeon-objs := i2c-octeon-core.o i2c-octeon-platdrv.o
|
||||||
obj-$(CONFIG_I2C_OCTEON) += i2c-octeon.o
|
obj-$(CONFIG_I2C_OCTEON) += i2c-octeon.o
|
||||||
|
i2c-thunderx-objs := i2c-octeon-core.o i2c-thunderx-pcidrv.o
|
||||||
|
obj-$(CONFIG_I2C_THUNDERX) += i2c-thunderx.o
|
||||||
obj-$(CONFIG_I2C_XILINX) += i2c-xiic.o
|
obj-$(CONFIG_I2C_XILINX) += i2c-xiic.o
|
||||||
obj-$(CONFIG_I2C_XLR) += i2c-xlr.o
|
obj-$(CONFIG_I2C_XLR) += i2c-xlr.o
|
||||||
obj-$(CONFIG_I2C_XLP9XX) += i2c-xlp9xx.o
|
obj-$(CONFIG_I2C_XLP9XX) += i2c-xlp9xx.o
|
||||||
|
|||||||
@@ -378,11 +378,8 @@ static int amd756_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||||||
amd756_ioport);
|
amd756_ioport);
|
||||||
|
|
||||||
error = i2c_add_adapter(&amd756_smbus);
|
error = i2c_add_adapter(&amd756_smbus);
|
||||||
if (error) {
|
if (error)
|
||||||
dev_err(&pdev->dev,
|
|
||||||
"Adapter registration failed, module not inserted\n");
|
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
@@ -1122,8 +1122,6 @@ static int at91_twi_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
rc = i2c_add_numbered_adapter(&dev->adapter);
|
rc = i2c_add_numbered_adapter(&dev->adapter);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
dev_err(dev->dev, "Adapter %s registration failed\n",
|
|
||||||
dev->adapter.name);
|
|
||||||
clk_disable_unprepare(dev->clk);
|
clk_disable_unprepare(dev->clk);
|
||||||
|
|
||||||
pm_runtime_disable(dev->dev);
|
pm_runtime_disable(dev->dev);
|
||||||
|
|||||||
@@ -545,7 +545,11 @@ static int axxia_i2c_probe(struct platform_device *pdev)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
clk_prepare_enable(idev->i2c_clk);
|
ret = clk_prepare_enable(idev->i2c_clk);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(&pdev->dev, "failed to enable clock\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
i2c_set_adapdata(&idev->adapter, idev);
|
i2c_set_adapdata(&idev->adapter, idev);
|
||||||
strlcpy(idev->adapter.name, pdev->name, sizeof(idev->adapter.name));
|
strlcpy(idev->adapter.name, pdev->name, sizeof(idev->adapter.name));
|
||||||
@@ -560,7 +564,7 @@ static int axxia_i2c_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
ret = i2c_add_adapter(&idev->adapter);
|
ret = i2c_add_adapter(&idev->adapter);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&pdev->dev, "failed to add adapter\n");
|
clk_disable_unprepare(idev->i2c_clk);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -488,13 +488,7 @@ static int bcm_iproc_i2c_probe(struct platform_device *pdev)
|
|||||||
adap->dev.parent = &pdev->dev;
|
adap->dev.parent = &pdev->dev;
|
||||||
adap->dev.of_node = pdev->dev.of_node;
|
adap->dev.of_node = pdev->dev.of_node;
|
||||||
|
|
||||||
ret = i2c_add_adapter(adap);
|
return i2c_add_adapter(adap);
|
||||||
if (ret) {
|
|
||||||
dev_err(iproc_i2c->device, "failed to add adapter\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bcm_iproc_i2c_remove(struct platform_device *pdev)
|
static int bcm_iproc_i2c_remove(struct platform_device *pdev)
|
||||||
|
|||||||
@@ -858,10 +858,8 @@ static int bcm_kona_i2c_probe(struct platform_device *pdev)
|
|||||||
adap->dev.of_node = pdev->dev.of_node;
|
adap->dev.of_node = pdev->dev.of_node;
|
||||||
|
|
||||||
rc = i2c_add_adapter(adap);
|
rc = i2c_add_adapter(adap);
|
||||||
if (rc) {
|
if (rc)
|
||||||
dev_err(dev->device, "failed to add adapter\n");
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
|
||||||
|
|
||||||
dev_info(dev->device, "device registered successfully\n");
|
dev_info(dev->device, "device registered successfully\n");
|
||||||
|
|
||||||
|
|||||||
@@ -685,10 +685,8 @@ static int i2c_bfin_twi_probe(struct platform_device *pdev)
|
|||||||
write_CONTROL(iface, read_CONTROL(iface) | TWI_ENA);
|
write_CONTROL(iface, read_CONTROL(iface) | TWI_ENA);
|
||||||
|
|
||||||
rc = i2c_add_numbered_adapter(p_adap);
|
rc = i2c_add_numbered_adapter(p_adap);
|
||||||
if (rc < 0) {
|
if (rc < 0)
|
||||||
dev_err(&pdev->dev, "Can't add i2c adapter!\n");
|
|
||||||
goto out_error;
|
goto out_error;
|
||||||
}
|
|
||||||
|
|
||||||
platform_set_drvdata(pdev, iface);
|
platform_set_drvdata(pdev, iface);
|
||||||
|
|
||||||
|
|||||||
@@ -648,10 +648,8 @@ static int brcmstb_i2c_probe(struct platform_device *pdev)
|
|||||||
adap->dev.parent = &pdev->dev;
|
adap->dev.parent = &pdev->dev;
|
||||||
adap->dev.of_node = pdev->dev.of_node;
|
adap->dev.of_node = pdev->dev.of_node;
|
||||||
rc = i2c_add_adapter(adap);
|
rc = i2c_add_adapter(adap);
|
||||||
if (rc) {
|
if (rc)
|
||||||
dev_err(dev->device, "failed to add adapter\n");
|
|
||||||
goto probe_errorout;
|
goto probe_errorout;
|
||||||
}
|
|
||||||
|
|
||||||
dev_info(dev->device, "%s@%dhz registered in %s mode\n",
|
dev_info(dev->device, "%s@%dhz registered in %s mode\n",
|
||||||
int_name ? int_name : " ", dev->clk_freq_hz,
|
int_name ? int_name : " ", dev->clk_freq_hz,
|
||||||
|
|||||||
@@ -963,10 +963,8 @@ static int cdns_i2c_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret = i2c_add_adapter(&id->adap);
|
ret = i2c_add_adapter(&id->adap);
|
||||||
if (ret < 0) {
|
if (ret < 0)
|
||||||
dev_err(&pdev->dev, "reg adap failed: %d\n", ret);
|
|
||||||
goto err_clk_dis;
|
goto err_clk_dis;
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Cadence I2C controller has a bug wherein it generates
|
* Cadence I2C controller has a bug wherein it generates
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user