Commit a5e21900 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'i2c-for-6.4-rc1-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux

Pull more i2c updates from Wolfram Sang:
 "Some more driver bugfixes and a DT binding conversion"

* tag 'i2c-for-6.4-rc1-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
  dt-bindings: i2c: brcm,kona-i2c: convert to YAML
  i2c: gxp: fix build failure without CONFIG_I2C_SLAVE
  i2c: imx-lpi2c: avoid taking clk_prepare mutex in PM callbacks
  i2c: omap: Fix standard mode false ACK readings
  i2c: tegra: Fix PEC support for SMBUS block read
parents c12753d5 1bd92287
Loading
Loading
Loading
Loading
+0 −35
Original line number Diff line number Diff line
Broadcom Kona Family I2C
=========================

This I2C controller is used in the following Broadcom SoCs:

  BCM11130
  BCM11140
  BCM11351
  BCM28145
  BCM28155

Required Properties
-------------------
- compatible: "brcm,bcm11351-i2c", "brcm,kona-i2c"
- reg: Physical base address and length of controller registers
- interrupts: The interrupt number used by the controller
- clocks: clock specifier for the kona i2c external clock
- clock-frequency: The I2C bus frequency in Hz
- #address-cells: Should be <1>
- #size-cells: Should be <0>

Refer to clocks/clock-bindings.txt for generic clock consumer
properties.

Example:

i2c@3e016000 {
	compatible = "brcm,bcm11351-i2c","brcm,kona-i2c";
	reg = <0x3e016000 0x80>;
	interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
	clocks = <&bsc1_clk>;
	clock-frequency = <400000>;
	#address-cells = <1>;
	#size-cells = <0>;
};
+59 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/i2c/brcm,kona-i2c.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Broadcom Kona family I2C controller

maintainers:
  - Florian Fainelli <f.fainelli@gmail.com>

allOf:
  - $ref: /schemas/i2c/i2c-controller.yaml#

properties:
  compatible:
    items:
      - enum:
          - brcm,bcm11351-i2c
          - brcm,bcm21664-i2c
          - brcm,bcm23550-i2c
      - const: brcm,kona-i2c

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    maxItems: 1

  clock-frequency:
    enum: [ 100000, 400000, 1000000, 3400000 ]

required:
  - compatible
  - reg
  - interrupts
  - clocks
  - clock-frequency

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    i2c@3e016000 {
        compatible = "brcm,bcm11351-i2c", "brcm,kona-i2c";
        reg = <0x3e016000 0x80>;
        interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&bsc1_clk>;
        clock-frequency = <400000>;
        #address-cells = <1>;
        #size-cells = <0>;
    };
...
+0 −2
Original line number Diff line number Diff line
@@ -353,7 +353,6 @@ static void gxp_i2c_chk_data_ack(struct gxp_i2c_drvdata *drvdata)
	writew(value, drvdata->base + GXP_I2CMCMD);
}

#if IS_ENABLED(CONFIG_I2C_SLAVE)
static bool gxp_i2c_slave_irq_handler(struct gxp_i2c_drvdata *drvdata)
{
	u8 value;
@@ -437,7 +436,6 @@ static bool gxp_i2c_slave_irq_handler(struct gxp_i2c_drvdata *drvdata)

	return true;
}
#endif

static irqreturn_t gxp_i2c_irq_handler(int irq, void *_drvdata)
{
+2 −2
Original line number Diff line number Diff line
@@ -639,7 +639,7 @@ static int __maybe_unused lpi2c_runtime_suspend(struct device *dev)
{
	struct lpi2c_imx_struct *lpi2c_imx = dev_get_drvdata(dev);

	clk_bulk_disable_unprepare(lpi2c_imx->num_clks, lpi2c_imx->clks);
	clk_bulk_disable(lpi2c_imx->num_clks, lpi2c_imx->clks);
	pinctrl_pm_select_sleep_state(dev);

	return 0;
@@ -651,7 +651,7 @@ static int __maybe_unused lpi2c_runtime_resume(struct device *dev)
	int ret;

	pinctrl_pm_select_default_state(dev);
	ret = clk_bulk_prepare_enable(lpi2c_imx->num_clks, lpi2c_imx->clks);
	ret = clk_bulk_enable(lpi2c_imx->num_clks, lpi2c_imx->clks);
	if (ret) {
		dev_err(dev, "failed to enable I2C clock, ret=%d\n", ret);
		return ret;
+1 −1
Original line number Diff line number Diff line
@@ -1058,7 +1058,7 @@ omap_i2c_isr(int irq, void *dev_id)
	u16 stat;

	stat = omap_i2c_read_reg(omap, OMAP_I2C_STAT_REG);
	mask = omap_i2c_read_reg(omap, OMAP_I2C_IE_REG);
	mask = omap_i2c_read_reg(omap, OMAP_I2C_IE_REG) & ~OMAP_I2C_STAT_NACK;

	if (stat & mask)
		ret = IRQ_WAKE_THREAD;
Loading