From nobody Tue Jun 30 21:21:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EF3ECC433FE for ; Sat, 8 Jan 2022 18:59:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232429AbiAHS7F (ORCPT ); Sat, 8 Jan 2022 13:59:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54132 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234928AbiAHS7B (ORCPT ); Sat, 8 Jan 2022 13:59:01 -0500 Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 40C8DC061401 for ; Sat, 8 Jan 2022 10:59:01 -0800 (PST) Received: by mail-wm1-x32b.google.com with SMTP id a83-20020a1c9856000000b00344731e044bso4834554wme.1 for ; Sat, 08 Jan 2022 10:59:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=9elements.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=i/XnX4LvOKf03NVrK2E1YM4blzOEve5FKIYcO5OhaUw=; b=NKY0+8dkPQ38m8wGW/yFygAhWzgh7bkcFRk18qwBUIYxeiONcvGdboj/huloC933bn wYVOtyX4tb62H0YAPzwPyKuBqXnzDGTXWbhVRlHim00lk7f3DiSP22KpBAUV0gQ0Mt+d e3hTQ2eg10alEpGPcUi6BUuXfYKMUvgtj/5ILrMq+d0UeHNaxvaBfc2XY05Eha8MXC9C pjfHv87dYaimzO+KZ1qzK04vWZuZhZoym1v++fCcmgCEdz43/kPRbstiQV2a5myVFGWV 81ynvDQoweLtkWHVcELZhC6d2bKxEB12/EOqRbtHdppflz0bxcz0ZyOjDIuy/Zn+otsU 016A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=i/XnX4LvOKf03NVrK2E1YM4blzOEve5FKIYcO5OhaUw=; b=Br6yxy66LQWIg/T7pMR3O9e3nCGgDpjRMgeztp9CaTsHcXAuZGTgZwrm7z6Qx1Wsbt PWPLoCQDBWl3CXP0vSea4Cnkrld+EVJYoks8eXoyT7txJ5HVbjk9iNNElr576vImWDGi UFpX0Kq9Oo5+7bdajWjHxJ0qhbYBfgFcnpsbLyX6EINJ+itMRT3KIXQt31KB7Z/YfvdU 3DUBJW7TerDE1M7vc9JVAdVOWUU8l6OTik+ei4kmWwGf8eLj205CsuNHaFv3fJIW3Xf9 PYL6/7N3Eiz0JKSLlMw8lkHpeC0FM0Cyu6A+lI78VeSflNfTyTCVDuTGmFZQTPR47ta9 0gPw== X-Gm-Message-State: AOAM531E4TYyNGKbSU2WOICbFAGJ2bGS6Kl8OpdrFOCblV9KNjsXw/GE auk5ikaplJyCzXqdEgAdI1yhBg== X-Google-Smtp-Source: ABdhPJwG3QwqAwlKdmrV9zXjoZmsbMsSSNDRLxL69JPLAtemTOWGQcSh+L10PD0AZrH4z5a+/8g6hA== X-Received: by 2002:a05:600c:4f91:: with SMTP id n17mr15748298wmq.195.1641668339713; Sat, 08 Jan 2022 10:58:59 -0800 (PST) Received: from fedora.sec.9e.network (ip-88-153-139-166.hsi04.unitymediagroup.de. [88.153.139.166]) by smtp.gmail.com with ESMTPSA id bg12sm2886209wmb.5.2022.01.08.10.58.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Jan 2022 10:58:59 -0800 (PST) From: Patrick Rudolph To: Peter Rosin , Laurent Pinchart Cc: Patrick Rudolph , Rob Herring , linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/4] dt-bindings: i2c: Add Maxim MAX735x/MAX736x variants Date: Sat, 8 Jan 2022 19:57:55 +0100 Message-Id: <20220108185759.2086347-2-patrick.rudolph@9elements.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20220108185759.2086347-1-patrick.rudolph@9elements.com> References: <20220108185759.2086347-1-patrick.rudolph@9elements.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add the Maxim MAX735x/MAX736x as supported chip and give an example how to use it. The functionality will be provided by the exisintg pca954x driver. Signed-off-by: Patrick Rudolph --- .../bindings/i2c/i2c-mux-max735x.yaml | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 Documentation/devicetree/bindings/i2c/i2c-mux-max735x.y= aml diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux-max735x.yaml b/D= ocumentation/devicetree/bindings/i2c/i2c-mux-max735x.yaml new file mode 100644 index 000000000000..dc924ec934ca --- /dev/null +++ b/Documentation/devicetree/bindings/i2c/i2c-mux-max735x.yaml @@ -0,0 +1,101 @@ +# SPDX-License-Identifier: GPL-2.0 +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/i2c/i2c-mux-max735x.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Maxim MAX735x/MAX736x I2C bus switch + +maintainers: + - Laurent Pinchart + +description: + The binding supports Maxim MAX735x and MAX736x I2C mux/switch devices. + +allOf: + - $ref: /schemas/i2c/i2c-mux.yaml# + - if: + properties: + compatible: + contains: + enum: + - maxim,max7367 + - maxim,max7369 + then: + properties: + interrupts: true + + "#interrupt-cells": + const: 2 + + interrupt-controller: true + +properties: + compatible: + oneOf: + - enum: + - maxim,max7356 + - maxim,max7357 + - maxim,max7358 + - maxim,max7367 + - maxim,max7368 + - maxim,max7369 + + reg: + maxItems: 1 + + reset-gpios: + maxItems: 1 + + i2c-mux-idle-disconnect: + type: boolean + description: Forces mux to disconnect all children in idle state. This= is + necessary for example, if there are several multiplexers on the bus = and + the devices behind them use same I2C addresses. + + idle-state: + description: if present, overrides i2c-mux-idle-disconnect + $ref: /schemas/mux/mux-controller.yaml#/properties/idle-state + +required: + - compatible + - reg + +unevaluatedProperties: false + +examples: + - | + i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + + i2c-mux@74 { + compatible =3D "maxim,max7357"; + #address-cells =3D <1>; + #size-cells =3D <0>; + reg =3D <0x74>; + + i2c@1 { + #address-cells =3D <1>; + #size-cells =3D <0>; + reg =3D <1>; + + eeprom@54 { + compatible =3D "atmel,24c08"; + reg =3D <0x54>; + }; + }; + + i2c@7 { + #address-cells =3D <1>; + #size-cells =3D <0>; + reg =3D <7>; + + rtc@51 { + compatible =3D "nxp,pcf8563"; + reg =3D <0x51>; + }; + }; + }; + }; +... --=20 2.33.1 From nobody Tue Jun 30 21:21:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B6EBAC433FE for ; Sat, 8 Jan 2022 18:59:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234928AbiAHS7J (ORCPT ); Sat, 8 Jan 2022 13:59:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54150 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234926AbiAHS7G (ORCPT ); Sat, 8 Jan 2022 13:59:06 -0500 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 24CB0C06173F for ; Sat, 8 Jan 2022 10:59:06 -0800 (PST) Received: by mail-wm1-x32c.google.com with SMTP id v123so6136482wme.2 for ; Sat, 08 Jan 2022 10:59:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=9elements.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kF+izw0yp+8vgsWvsa7OrMXU1HXOMrqleusNEamTjHA=; b=Fmu143lH0NZ9juPHXy6N99hmtYjgj1AN1f0uhdE58cgqhYRlydMUSM8nqgDHW3Olpn zRHjbSTvSPNnikiI2M8kV6w6fpTTFIeqIMfwGbcCbGwnkg1cHg+O96GJ6HYX+FnEkJ43 4L7uIaEABl6CWk/7hzAWjg1TnSy6n5aYuq69MI86TLGY0AhvLGvqD0MiE3HVOAgq6BuN d7RskuCi8qWGBtarQxELFvkcMOYmmm/OmTIc05k9jY9LMhqMK3zCFZcWS2XTJH8VFLu0 xEpEywzdxBx/w4XpAc+sLb1uakpSUeIaHwe56kApYp2dgwA9PQ1QasbkUASZh4m4Kw1l A8Fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kF+izw0yp+8vgsWvsa7OrMXU1HXOMrqleusNEamTjHA=; b=c8SKsxHXIBzzU7ypnk47n/T+tDOBgbTDG+mdtjI0SsuGAEywa1iwjnzDR9QWrqPlUP mVCsICUcKFTb+LIfKI4fGYjgsz4RmXLYeIiJelgW6rN71TOvkvMlIclZqj1x2fL8pEqt rhbXyPHjmyhXs+EQtE7mb3zffPODshnvQ943IS+DuyOyF8wXEq2fcAhVJo8VcqQwQWFQ 3AX1EE5jJBcOoe+O507hTns4St5Vy+/fJK7hA4QqocW5O4r/9VjZn3cM7UaD6oQPbN43 3j0Qt6HwLRYlQjmKScd/LZZA+D96DGgzZJXSoKl8sNd2lpNmtyss+DvWFfwDVFxOXtQ2 vpBQ== X-Gm-Message-State: AOAM531uP/ZfAxWXb1DPXaM+C6dePQmUNYbvQLEgWI+JK9fMLtDPerZ5 if1Wq+O+YNupRXzJfg+Go+o7z1pGzfiS6A== X-Google-Smtp-Source: ABdhPJzmNk7m+kSkBal05lkCCeEmMBVDC5tpDyDG85pcRY+MweOK1jCHa7YShQdkSBIVNYTVuewWrg== X-Received: by 2002:a1c:7c17:: with SMTP id x23mr15897342wmc.187.1641668344699; Sat, 08 Jan 2022 10:59:04 -0800 (PST) Received: from fedora.sec.9e.network (ip-88-153-139-166.hsi04.unitymediagroup.de. [88.153.139.166]) by smtp.gmail.com with ESMTPSA id bg12sm2886209wmb.5.2022.01.08.10.59.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Jan 2022 10:59:04 -0800 (PST) From: Patrick Rudolph To: Peter Rosin Cc: Patrick Rudolph , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/4] i2c: muxes: pca954x: Add MAX735x/MAX736x support Date: Sat, 8 Jan 2022 19:57:56 +0100 Message-Id: <20220108185759.2086347-3-patrick.rudolph@9elements.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20220108185759.2086347-1-patrick.rudolph@9elements.com> References: <20220108185759.2086347-1-patrick.rudolph@9elements.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add support for the following Maxim chips using the existing PCA954x driver: - MAX7356 - MAX7357 - MAX7358 - MAX7367 - MAX7368 - MAX7369 All added Maxim chips behave like the PCA954x, where a single SMBUS byte write selects up to 8 channels to be bridged to the primary bus. The MAX7357 exposes 6 additional registers at Power-On-Reset and is configured to: - Disabled interrupts on bus locked up detection - Enable bus locked-up clearing - Disconnect only locked bus instead of all channels While the MAX7357/MAX7358 have interrupt support, they don't act as interrupt controller like the PCA9545 does. Thus don't enable IRQ support and handle them like the PCA9548. Tested using the MAX7357 and verified that the stalled bus is disconnected while the other channels remain operational. Signed-off-by: Patrick Rudolph --- drivers/i2c/muxes/Kconfig | 4 +- drivers/i2c/muxes/i2c-mux-pca954x.c | 92 +++++++++++++++++++++++++++-- 2 files changed, 90 insertions(+), 6 deletions(-) diff --git a/drivers/i2c/muxes/Kconfig b/drivers/i2c/muxes/Kconfig index 1708b1a82da2..2ac99d044199 100644 --- a/drivers/i2c/muxes/Kconfig +++ b/drivers/i2c/muxes/Kconfig @@ -65,11 +65,11 @@ config I2C_MUX_PCA9541 will be called i2c-mux-pca9541. =20 config I2C_MUX_PCA954x - tristate "NXP PCA954x and PCA984x I2C Mux/switches" + tristate "NXP PCA954x/PCA984x and Maxim MAX735x/MAX736x I2C Mux/switches" depends on GPIOLIB || COMPILE_TEST help If you say yes here you get support for the NXP PCA954x - and PCA984x I2C mux/switch devices. + and PCA984x and Maxim MAX735x/MAX736x I2C mux/switch devices. =20 This driver can also be built as a module. If so, the module will be called i2c-mux-pca954x. diff --git a/drivers/i2c/muxes/i2c-mux-pca954x.c b/drivers/i2c/muxes/i2c-mu= x-pca954x.c index 4ad665757dd8..33b9a6a1fffa 100644 --- a/drivers/i2c/muxes/i2c-mux-pca954x.c +++ b/drivers/i2c/muxes/i2c-mux-pca954x.c @@ -4,6 +4,7 @@ * * Copyright (c) 2008-2009 Rodolfo Giometti * Copyright (c) 2008-2009 Eurotech S.p.A. + * Copyright (c) 2022 Patrick Rudolph * * This module supports the PCA954x and PCA984x series of I2C multiplexer/= switch * chips made by NXP Semiconductors. @@ -11,6 +12,12 @@ * PCA9540, PCA9542, PCA9543, PCA9544, PCA9545, PCA9546, PCA9547, * PCA9548, PCA9846, PCA9847, PCA9848 and PCA9849. * + * It's also compatible to Maxims MAX735x I2C switch chips, which are cont= rolled + * as the NXP PCA9548 and the MAX736x chips that act like the PCA9544. + * + * This includes the: + * MAX7356, MAX7357, MAX7358, MAX7367, MAX7368 and MAX7369 + * * These chips are all controlled via the I2C bus itself, and all have a * single 8-bit register. The upstream "parent" bus fans out to two, * four, or eight downstream busses or channels; which of these @@ -50,7 +57,30 @@ =20 #define PCA954X_IRQ_OFFSET 4 =20 +/* + * MAX7357 exposes 7 registers on POR which allow to configure additional + * features. Disable interrupts, enable bus locked-up clearing, + * isolate only the locked channel instead of all channels. + */ +#define MAX7357_CONF_INT_ENABLE BIT(0) +#define MAX7357_CONF_FLUSH_OUT BIT(1) +#define MAX7357_CONF_RELEASE_INT BIT(2) +#define MAX7357_CONF_LOCK_UP_CLEAR BIT(3) +#define MAX7357_CONF_DISCON_SINGLE_CHAN BIT(4) +#define MAX7357_CONF_BUS_LOCKUP_DETECTION BIT(5) +#define MAX7357_CONF_ENABLE_BASIC_MODE BIT(6) +#define MAX7357_CONF_PRECONNECT_TEST BIT(7) + +#define MAX7357_CONF_DEFAULTS (MAX7357_CONF_FLUSH_OUT | \ + MAX7357_CONF_DISCON_SINGLE_CHAN) + enum pca_type { + max_7367, + max_7368, + max_7369, + max_7356, + max_7357, + max_7358, pca_9540, pca_9542, pca_9543, @@ -69,6 +99,7 @@ struct chip_desc { u8 nchans; u8 enable; /* used for muxes only */ u8 has_irq; + u8 max7357; enum muxtype { pca954x_ismux =3D 0, pca954x_isswi @@ -90,8 +121,42 @@ struct pca954x { raw_spinlock_t lock; }; =20 -/* Provide specs for the PCA954x types we know about */ +/* Provide specs for the PCA954x and MAX735x types we know about */ static const struct chip_desc chips[] =3D { + [max_7356] =3D { + .nchans =3D 8, + .muxtype =3D pca954x_isswi, + .id =3D { .manufacturer_id =3D I2C_DEVICE_ID_NONE }, + }, + [max_7357] =3D { + .nchans =3D 8, + .muxtype =3D pca954x_isswi, + .max7357 =3D 1, + .id =3D { .manufacturer_id =3D I2C_DEVICE_ID_NONE }, + }, + [max_7358] =3D { + .nchans =3D 8, + .muxtype =3D pca954x_isswi, + .id =3D { .manufacturer_id =3D I2C_DEVICE_ID_NONE }, + }, + [max_7367] =3D { + .nchans =3D 4, + .muxtype =3D pca954x_isswi, + .has_irq =3D 1, + .id =3D { .manufacturer_id =3D I2C_DEVICE_ID_NONE }, + }, + [max_7368] =3D { + .nchans =3D 4, + .muxtype =3D pca954x_isswi, + .id =3D { .manufacturer_id =3D I2C_DEVICE_ID_NONE }, + }, + [max_7369] =3D { + .nchans =3D 4, + .enable =3D 0x4, + .muxtype =3D pca954x_ismux, + .has_irq =3D 1, + .id =3D { .manufacturer_id =3D I2C_DEVICE_ID_NONE }, + }, [pca_9540] =3D { .nchans =3D 2, .enable =3D 0x4, @@ -177,6 +242,12 @@ static const struct chip_desc chips[] =3D { }; =20 static const struct i2c_device_id pca954x_id[] =3D { + { "max7356", max_7356 }, + { "max7357", max_7357 }, + { "max7358", max_7358 }, + { "max7367", max_7367 }, + { "max7368", max_7368 }, + { "max7369", max_7369 }, { "pca9540", pca_9540 }, { "pca9542", pca_9542 }, { "pca9543", pca_9543 }, @@ -194,6 +265,12 @@ static const struct i2c_device_id pca954x_id[] =3D { MODULE_DEVICE_TABLE(i2c, pca954x_id); =20 static const struct of_device_id pca954x_of_match[] =3D { + { .compatible =3D "maxim,max7356", .data =3D &chips[max_7356] }, + { .compatible =3D "maxim,max7357", .data =3D &chips[max_7357] }, + { .compatible =3D "maxim,max7358", .data =3D &chips[max_7358] }, + { .compatible =3D "maxim,max7367", .data =3D &chips[max_7367] }, + { .compatible =3D "maxim,max7368", .data =3D &chips[max_7368] }, + { .compatible =3D "maxim,max7369", .data =3D &chips[max_7369] }, { .compatible =3D "nxp,pca9540", .data =3D &chips[pca_9540] }, { .compatible =3D "nxp,pca9542", .data =3D &chips[pca_9542] }, { .compatible =3D "nxp,pca9543", .data =3D &chips[pca_9543] }, @@ -401,9 +478,16 @@ static int pca954x_init(struct i2c_client *client, str= uct pca954x *data) else data->last_chan =3D 0; /* Disconnect multiplexer */ =20 - ret =3D i2c_smbus_write_byte(client, data->last_chan); - if (ret < 0) - data->last_chan =3D 0; + if (data->chip->max7357) { + ret =3D i2c_smbus_write_byte_data(client, data->last_chan, + MAX7357_CONF_DEFAULTS); + if (ret < 0) + data->last_chan =3D 0; + } else { + ret =3D i2c_smbus_write_byte(client, data->last_chan); + if (ret < 0) + data->last_chan =3D 0; + } =20 return ret; } --=20 2.33.1 From nobody Tue Jun 30 21:21:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AF566C433F5 for ; Sat, 8 Jan 2022 18:59:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234944AbiAHS7N (ORCPT ); Sat, 8 Jan 2022 13:59:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54178 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234926AbiAHS7K (ORCPT ); Sat, 8 Jan 2022 13:59:10 -0500 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 36470C061746 for ; Sat, 8 Jan 2022 10:59:10 -0800 (PST) Received: by mail-wm1-x333.google.com with SMTP id p1-20020a1c7401000000b00345c2d068bdso7298040wmc.3 for ; Sat, 08 Jan 2022 10:59:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=9elements.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nYh2HXtJRHDLyiqHjumy8SGr/ilHKwnU20CoAfLk/k4=; b=W0BLse+MIvxhQMBBTpCdSM81w9hDph/TF393Uus+VnlaAyGIBKw5sj4Qq6TpAaHVGO Av1SLjUcdjJpb6NV8PqyyPs6HplO4pIPK3YuIC7U5h0vUBQhLLIqNzLiMdfVpeNegvR6 6PqOCxZk3bVj+UNaPGE0pY9XlbA/AO2rpAMSSb0YpOW0RRybmSSaMLU56+6e1vGP5UAR 1ZQOPGEepjFq8XBOErp0vRdRN5n+3EOTMu5pPnPHwOwrEPGKjbYB2yvMjHpt5KAjhaIR xP9FP3T5nLOv8VhC4HIFNUwH+6uiQWnCFt23fVBU02b0qSOp4/bgW8CXvH47cfVmB5NV t6pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nYh2HXtJRHDLyiqHjumy8SGr/ilHKwnU20CoAfLk/k4=; b=E2jCDomQ0h7Z3nB4H4z81WY7OPgFMDSCtOuy1QEaX0mb7A/EkFvLxSq/j2z8PNYsqy qo47RQ035ITz7EADwBLnfRVirpxFOqmXYoYL2cCTMTkZ3fYQjCeMK3vDsCoG4JA+dJGD wKXacCL2PBLDfdyspV1yAUOYAu4U39V9yJP1HboxTPmAqAaqNJFRsJZ7Vnqq7U8mjXcB vwosgiefBX0ydaIO5vbvNWZEBwnP9I183HZtaCBI80aB85nli6UqT8tBPU9MmSCfDINm bfCNvjflzSzIn1azr6ZLv0HBVTvgisez3A1fvJmXqLhe9GXTv59F2U0DDG0ZmifJ8/0I oIZg== X-Gm-Message-State: AOAM5305X1fQvD/rnHrkrdj5M3XixLxf7m6x8BmqIX/x+mBkX+Ms53rr MemFh0K5eDOQnRIWcnwZrdAYJw== X-Google-Smtp-Source: ABdhPJwQn6yYUwxfhwSA0o1WBiGl15jl2VyPd2YfD7g3pyifIUlNmazaPnzAHEbGAKkr+lCZ90bOHA== X-Received: by 2002:a1c:4b10:: with SMTP id y16mr15036595wma.185.1641668348732; Sat, 08 Jan 2022 10:59:08 -0800 (PST) Received: from fedora.sec.9e.network (ip-88-153-139-166.hsi04.unitymediagroup.de. [88.153.139.166]) by smtp.gmail.com with ESMTPSA id bg12sm2886209wmb.5.2022.01.08.10.59.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Jan 2022 10:59:08 -0800 (PST) From: Patrick Rudolph To: Peter Rosin , Laurent Pinchart Cc: Patrick Rudolph , Rob Herring , linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/4] dt-bindings: i2c: Add regulator to pca954x and max735x Date: Sat, 8 Jan 2022 19:57:57 +0100 Message-Id: <20220108185759.2086347-4-patrick.rudolph@9elements.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20220108185759.2086347-1-patrick.rudolph@9elements.com> References: <20220108185759.2086347-1-patrick.rudolph@9elements.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add a regulator called vdd also present in datasheets of PCA954x and MAX735x and update the examples. Signed-off-by: Patrick Rudolph Reviewed-by: Laurent Pinchart --- Documentation/devicetree/bindings/i2c/i2c-mux-max735x.yaml | 5 +++++ Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux-max735x.yaml b/D= ocumentation/devicetree/bindings/i2c/i2c-mux-max735x.yaml index dc924ec934ca..93eda07718e8 100644 --- a/Documentation/devicetree/bindings/i2c/i2c-mux-max735x.yaml +++ b/Documentation/devicetree/bindings/i2c/i2c-mux-max735x.yaml @@ -57,6 +57,9 @@ properties: description: if present, overrides i2c-mux-idle-disconnect $ref: /schemas/mux/mux-controller.yaml#/properties/idle-state =20 + vdd-supply: + description: A voltage regulator supplying power to the chip. + required: - compatible - reg @@ -75,6 +78,8 @@ examples: #size-cells =3D <0>; reg =3D <0x74>; =20 + vdd-supply =3D <&p3v3>; + i2c@1 { #address-cells =3D <1>; #size-cells =3D <0>; diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml b/D= ocumentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml index 9f1726d0356b..b28d05dc956d 100644 --- a/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml +++ b/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml @@ -59,6 +59,9 @@ properties: description: if present, overrides i2c-mux-idle-disconnect $ref: /schemas/mux/mux-controller.yaml#/properties/idle-state =20 + vdd-supply: + description: A voltage regulator supplying power to the chip. + required: - compatible - reg @@ -79,6 +82,8 @@ examples: #size-cells =3D <0>; reg =3D <0x74>; =20 + vdd-supply =3D <&p3v3>; + interrupt-parent =3D <&ipic>; interrupts =3D <17 IRQ_TYPE_LEVEL_LOW>; interrupt-controller; --=20 2.33.1 From nobody Tue Jun 30 21:21:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2500DC433EF for ; Sat, 8 Jan 2022 18:59:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234977AbiAHS7Q (ORCPT ); Sat, 8 Jan 2022 13:59:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54200 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234952AbiAHS7O (ORCPT ); Sat, 8 Jan 2022 13:59:14 -0500 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 50464C061746 for ; Sat, 8 Jan 2022 10:59:13 -0800 (PST) Received: by mail-wr1-x42a.google.com with SMTP id e9so16572629wra.2 for ; Sat, 08 Jan 2022 10:59:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=9elements.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wVci9hDIUum1CaWFskqxuebySsxpSvZQ92hsaUOsz8M=; b=ZgNccUywDjeJ4PolBeKQ/wkVAkXxywpmj5GN8ru0s0xVzh1ZhLASEzTRVvu/Al1yQp M/rWDusqKtGboxTQP78JNXDgp8WU5Ep0HpFSSkCxwVjvvYsvPwc46LTSOUC+orsuTB1e uzt4oDyEUAlu70CV99Du4+42LLgcsJbWN9/Xpi6GN7cO1966ewDejNeSUVnyjlhQ83mI d+VPIwpLA5xT+Wgi/ZrVLiB3Jt+ABbJ/Icu+kqv7eSBBXDmO/7VrMLqC1GPApy9xo26s j6kWN8GmzhmABs7EVb6S+iSlAE7Z2Yozko303Y622v+8saUVqZ2L5mIsztes2ZSU+p3c 1JuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wVci9hDIUum1CaWFskqxuebySsxpSvZQ92hsaUOsz8M=; b=QDsgftkf4EJUySDrtVSl6Nuow8oyb65ftPcdRTrfCGP21tJ0Gh1Vvnwlb7WDJ/zEgw PrfPRE7JonMYw3ATnyIxwVaXkZzXJlnfHMMVf8m2oacPLldMkEBLNeupvpuoBr/vWAyT dykkcx7F62OfFr22Y7GgjNtkYsVQap6f7e2DadJcGLnLqepuzjQbd6VOJEQPqo+Zlq4s 4tolhI/Y7g5bbIVtrMHw/bEebXeIlre7SryvR4BoCaC3gjRZDUqA8Tqs5BSV43j/V477 k1OqUgZe50InmiIdiCBVci6f5BAeIax7HaWbIZzqeKc0QE3bG/Gbr2QfyHM9gqhC/hcG FT1A== X-Gm-Message-State: AOAM531Dy7meB/ZrkQTXuwzGj31V/x7cO6WZ5/WpB1/6oD+URUvF0PxQ Gu6CwrqOU/SCPEMeZBYlHVF7WtMWfV4+Mg== X-Google-Smtp-Source: ABdhPJyxsfk3LCvBXW1V6tGZuo65QQDfAf8eKtuEJb9UO3umDfjmrzntmjHlRpV2TjSABKlCRwolWQ== X-Received: by 2002:adf:db0c:: with SMTP id s12mr27402866wri.429.1641668351948; Sat, 08 Jan 2022 10:59:11 -0800 (PST) Received: from fedora.sec.9e.network (ip-88-153-139-166.hsi04.unitymediagroup.de. [88.153.139.166]) by smtp.gmail.com with ESMTPSA id bg12sm2886209wmb.5.2022.01.08.10.59.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Jan 2022 10:59:11 -0800 (PST) From: Patrick Rudolph To: Peter Rosin , Liam Girdwood , Mark Brown Cc: Patrick Rudolph , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 4/4] i2c: muxes: pca954x: Add regulator support Date: Sat, 8 Jan 2022 19:57:58 +0100 Message-Id: <20220108185759.2086347-5-patrick.rudolph@9elements.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20220108185759.2086347-1-patrick.rudolph@9elements.com> References: <20220108185759.2086347-1-patrick.rudolph@9elements.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add an optional vdd regulator and enable it when found for devices that are powered off by default. Signed-off-by: Patrick Rudolph --- drivers/i2c/muxes/i2c-mux-pca954x.c | 32 ++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/drivers/i2c/muxes/i2c-mux-pca954x.c b/drivers/i2c/muxes/i2c-mu= x-pca954x.c index 33b9a6a1fffa..086647193ea9 100644 --- a/drivers/i2c/muxes/i2c-mux-pca954x.c +++ b/drivers/i2c/muxes/i2c-mux-pca954x.c @@ -49,6 +49,7 @@ #include #include #include +#include #include #include #include @@ -119,6 +120,7 @@ struct pca954x { struct irq_domain *irq; unsigned int irq_mask; raw_spinlock_t lock; + struct regulator *supply; }; =20 /* Provide specs for the PCA954x and MAX735x types we know about */ @@ -459,6 +461,9 @@ static void pca954x_cleanup(struct i2c_mux_core *muxc) struct pca954x *data =3D i2c_mux_priv(muxc); int c, irq; =20 + if (!IS_ERR_OR_NULL(data->supply)) + regulator_disable(data->supply); + if (data->irq) { for (c =3D 0; c < data->chip->nchans; c++) { irq =3D irq_find_mapping(data->irq, c); @@ -513,15 +518,30 @@ static int pca954x_probe(struct i2c_client *client, pca954x_select_chan, pca954x_deselect_mux); if (!muxc) return -ENOMEM; + data =3D i2c_mux_priv(muxc); =20 i2c_set_clientdata(client, muxc); data->client =3D client; =20 + data->supply =3D devm_regulator_get_optional(dev, "vdd"); + if (IS_ERR(data->supply)) { + if ((PTR_ERR(data->supply) =3D=3D -EPROBE_DEFER)) + return -EPROBE_DEFER; + } else { + ret =3D regulator_enable(data->supply); + if (ret) { + dev_err(dev, "Failed to enable regulator vdd: %d\n", ret); + return ret; + } + } + /* Reset the mux if a reset GPIO is specified. */ gpio =3D devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); - if (IS_ERR(gpio)) - return PTR_ERR(gpio); + if (IS_ERR(gpio)) { + ret =3D PTR_ERR(gpio); + goto fail_cleanup; + } if (gpio) { udelay(1); gpiod_set_value_cansleep(gpio, 0); @@ -538,7 +558,7 @@ static int pca954x_probe(struct i2c_client *client, =20 ret =3D i2c_get_device_id(client, &id); if (ret && ret !=3D -EOPNOTSUPP) - return ret; + goto fail_cleanup; =20 if (!ret && (id.manufacturer_id !=3D data->chip->id.manufacturer_id || @@ -546,7 +566,8 @@ static int pca954x_probe(struct i2c_client *client, dev_warn(dev, "unexpected device id %03x-%03x-%x\n", id.manufacturer_id, id.part_id, id.die_revision); - return -ENODEV; + ret =3D -ENODEV; + goto fail_cleanup; } } =20 @@ -565,7 +586,8 @@ static int pca954x_probe(struct i2c_client *client, ret =3D pca954x_init(client, data); if (ret < 0) { dev_warn(dev, "probe failed\n"); - return -ENODEV; + ret =3D -ENODEV; + goto fail_cleanup; } =20 ret =3D pca954x_irq_setup(muxc); --=20 2.33.1