From nobody Sun Feb 8 02:21:23 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 60925C6FD1C for ; Thu, 23 Mar 2023 11:54:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231826AbjCWLyW (ORCPT ); Thu, 23 Mar 2023 07:54:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53322 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231781AbjCWLyJ (ORCPT ); Thu, 23 Mar 2023 07:54:09 -0400 Received: from mail-ed1-x531.google.com (mail-ed1-x531.google.com [IPv6:2a00:1450:4864:20::531]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A2A5236460 for ; Thu, 23 Mar 2023 04:54:01 -0700 (PDT) Received: by mail-ed1-x531.google.com with SMTP id ek18so85280361edb.6 for ; Thu, 23 Mar 2023 04:54:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=9elements.com; s=google; t=1679572439; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9YULbMSYLxPrjOJbjLIiUT+ql5Bs2phIk+fP1mRdCa8=; b=TcFd8Nn6UiFY2VCXT9hRi1VRvlS9rzcPIZ9VSygplc26HIB8Q845qFGBv9S/Sbv5uI U3IPgSdjxWT5/SEaaLciLC085M551nRTV8lkIcC653aPiG9Tetrdw5Q0jgOvdErIYnBd PQz1tPKFDhXEmNDDFKoHpUGQRdeC+QHJ6Jqgs5D/8VzzOkaXgVQr6xX/8+5exxmVwg3f GSviUDHe1sF3lIX2Bz6l4cGnobXxP8FGqB1zxDnfd8PicwlYelVbYYdtAe7N5dm9L7zw bNWeQWcBzxPNPahryTzLKafTPiUlNEIxXO9wA6Cv7z+9rInKmbxTPsMy88o5w07TLmev vBMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679572439; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9YULbMSYLxPrjOJbjLIiUT+ql5Bs2phIk+fP1mRdCa8=; b=JV8nWLQ3DiHR4E9JuJFvacs85X3QLOSkHvZ4Q+wLIDIXBWoRNxqYMNq/w0t0URvGcf Qj3z1ng9PVBdbZeLQQipr4OinOBgwFVPCqy3wUGdlpfJ6q+1bEa4r4ANKZZP37yhRs9G q/3Vg8JE4MRUj4nq6wbbmGOTOocUoD1SHy16xmMnT+ngTR5Hwua7OyMDYI+cEvzMC8gz Fitn6aNUnIGib9tzgAAj4eCR10aCjnjqsozNkax5q/lRfWYMRKANu8q9YDGqf2WxDMZP m4CRzxK44yWA+8dbU3uiLU2Rar0AJWK1S5lJJn+fJKfzWnaF+DSLc5KduxLRn+8QGMyi Oe8A== X-Gm-Message-State: AO0yUKXVCwcz9GXRFUIS7mgbNSd0lntPtHx60di2ZW9LqAA5qhOgnDWi LUvOoeJ916rQYRaal9/NeaRycw== X-Google-Smtp-Source: AK7set+KfW62sGRq9jKKBIhbGi/lkFTcIO7ljUkykhExWTWlCT0N//uDSZm0V7NN7RVIW8DXstqQ3Q== X-Received: by 2002:a05:6402:64e:b0:4af:63a7:7474 with SMTP id u14-20020a056402064e00b004af63a77474mr8943128edx.17.1679572439591; Thu, 23 Mar 2023 04:53:59 -0700 (PDT) Received: from fedora.. (ip-095-222-150-251.um34.pools.vodafone-ip.de. [95.222.150.251]) by smtp.gmail.com with ESMTPSA id r5-20020a1709064d0500b00923f05b2931sm8510047eju.118.2023.03.23.04.53.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Mar 2023 04:53:59 -0700 (PDT) From: Patrick Rudolph To: Peter Rosin , Laurent Pinchart Cc: Patrick Rudolph , Rob Herring , Krzysztof Kozlowski , linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v10 1/3] dt-bindings: i2c: Add Maxim MAX735x/MAX736x variants Date: Thu, 23 Mar 2023 12:53:53 +0100 Message-Id: <20230323115356.2602042-2-patrick.rudolph@9elements.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230323115356.2602042-1-patrick.rudolph@9elements.com> References: <20230323115356.2602042-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" Update the pca954x bindings to add support for the Maxim MAX735x/MAX736x chips. The functionality will be provided by the exisintg pca954x driver. While on it make the interrupts support conditionally as not all of the existing chips have interrupts. For chips that are powered off by default add an optional regulator called vdd-supply. Signed-off-by: Patrick Rudolph --- .../bindings/i2c/i2c-mux-pca954x.yaml | 43 ++++++++++++++++--- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml b/D= ocumentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml index 9f1726d0356b..696fdb647f89 100644 --- a/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml +++ b/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml @@ -4,21 +4,29 @@ $id: http://devicetree.org/schemas/i2c/i2c-mux-pca954x.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# =20 -title: NXP PCA954x I2C bus switch +title: NXP PCA954x I2C and compatible bus switches =20 maintainers: - Laurent Pinchart =20 description: - The binding supports NXP PCA954x and PCA984x I2C mux/switch devices. - -allOf: - - $ref: /schemas/i2c/i2c-mux.yaml# + The NXP PCA954x and compatible devices are I2C bus + multiplexer/switches that share the same functionality + and register layout. + The devices usually have 4 or 8 child buses, which are + attached to the parent bus by using the SMBus "Send Byte" + command. =20 properties: compatible: oneOf: - enum: + - maxim,max7356 + - maxim,max7357 + - maxim,max7358 + - maxim,max7367 + - maxim,max7368 + - maxim,max7369 - nxp,pca9540 - nxp,pca9542 - nxp,pca9543 @@ -59,10 +67,33 @@ 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 =20 +allOf: + - $ref: /schemas/i2c/i2c-mux.yaml# + - if: + not: + properties: + compatible: + contains: + enum: + - maxim,max7367 + - maxim,max7369 + - nxp,pca9542 + - nxp,pca9543 + - nxp,pca9544 + - nxp,pca9545 + then: + properties: + interrupts: false + "#interrupt-cells": false + interrupt-controller: false + unevaluatedProperties: false =20 examples: @@ -79,6 +110,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.39.1 From nobody Sun Feb 8 02:21:23 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 941C6C6FD1C for ; Thu, 23 Mar 2023 11:54:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230177AbjCWLyZ (ORCPT ); Thu, 23 Mar 2023 07:54:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52960 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230482AbjCWLyO (ORCPT ); Thu, 23 Mar 2023 07:54:14 -0400 Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 906083646B for ; Thu, 23 Mar 2023 04:54:02 -0700 (PDT) Received: by mail-ed1-x52a.google.com with SMTP id ek18so85280794edb.6 for ; Thu, 23 Mar 2023 04:54:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=9elements.com; s=google; t=1679572441; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sJx9YfDeyzKBmS+bcojKFFVZZqBcaFHf4T+2upySREE=; b=FtfgqKq1/7haJ9WAkfw6+Xy7oPSakVIZVMc/98M9YgKFQY5VfSjbDRnpIspjYE9KKz JtBZhP++MeCavs7Z+oc5nWko5f4TeRY44/bDM2KPelremvLEEE8lyBqV3A+hrn7kHO16 gksD+fPRUyID82NenW91YfMNjXFLbZS19E1qYTjFhndNZl7JTjMa1klSU5jvEuwVMFSP 1fku1SjTMwuLaT0uyV5EL46YAkk7jZ29Xqz7J/3c0ESpWoBgbvwoQf/5oX+MjtBCmF0E 2/dEoMhoMDptGPZBoL+iRJwDIaA5XjlUjF8u+xDH50Gvd8QtoOG3MI2mhhGRLO08SvqW oq3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679572441; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sJx9YfDeyzKBmS+bcojKFFVZZqBcaFHf4T+2upySREE=; b=51frV8z+JVO42DvKjqGLUOdagkO0WVLeyDtONvJ4ZfAiZFxLM+A2i3lQiCeyAY4p/Y DjtaZWNJWpP2iUB6mi7GLKLwvdNymZU05Yth0gIX1BaH3u9A0XxI+Au39NX7YFwRLSED dgGOtYxORmb+sny8KsgKZc5XDIJ3PiZw5R8O7pkXx9bXUNFTTl8AYnjeYHniROug3g1D Hhqq7PO5i8nlmaTdZ2xoOClnhHtvi/PT0cxWVgMnlreLZxGTmNj+n67GF0nIHkcK6aGD pZm3aU9mRB0rAInCkWL3SLtRpIViF9Syjm8wf3Mc/J5bbblrcX2KHPujqVmwpH/9f5bV ktyA== X-Gm-Message-State: AO0yUKXRHhJXiWPRAmvG3BWMFroWNQss/12JBgv6HEHX739eN8gNytko TvW/KwxIbtnCy44m2R5z5uAt8g== X-Google-Smtp-Source: AK7set/NrEbuOHwJpFRQG1FkRG50M/mDWeqRO5IaNseA6sB/foEgSTgtAVk5Nxz23fUc3/wA0wMHOA== X-Received: by 2002:a17:907:d091:b0:939:fb22:c4c7 with SMTP id vc17-20020a170907d09100b00939fb22c4c7mr11180894ejc.43.1679572440877; Thu, 23 Mar 2023 04:54:00 -0700 (PDT) Received: from fedora.. (ip-095-222-150-251.um34.pools.vodafone-ip.de. [95.222.150.251]) by smtp.gmail.com with ESMTPSA id r5-20020a1709064d0500b00923f05b2931sm8510047eju.118.2023.03.23.04.54.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Mar 2023 04:54:00 -0700 (PDT) From: Patrick Rudolph To: Peter Rosin Cc: Patrick Rudolph , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v10 2/3] i2c: muxes: pca954x: Add MAX735x/MAX736x support Date: Thu, 23 Mar 2023 12:53:54 +0100 Message-Id: <20230323115356.2602042-3-patrick.rudolph@9elements.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230323115356.2602042-1-patrick.rudolph@9elements.com> References: <20230323115356.2602042-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. 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. Signed-off-by: Patrick Rudolph --- drivers/i2c/muxes/Kconfig | 6 +-- drivers/i2c/muxes/i2c-mux-pca954x.c | 60 ++++++++++++++++++++++++++++- 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/drivers/i2c/muxes/Kconfig b/drivers/i2c/muxes/Kconfig index ea838dbae32e..db1b9057612a 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. + If you say yes here you get support for NXP PCA954x/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 0ccee2ae5720..39f313658b18 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 9elements GmbH * * 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 @@ -51,6 +58,12 @@ #define PCA954X_IRQ_OFFSET 4 =20 enum pca_type { + max_7367, + max_7368, + max_7369, + max_7356, + max_7357, + max_7358, pca_9540, pca_9542, pca_9543, @@ -90,8 +103,41 @@ struct pca954x { raw_spinlock_t lock; }; =20 -/* Provide specs for the PCA954x types we know about */ +/* Provide specs for the MAX735x, PCA954x and PCA984x 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, + .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 +223,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 +246,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] }, --=20 2.39.1 From nobody Sun Feb 8 02:21:23 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 7AFF7C6FD1D for ; Thu, 23 Mar 2023 11:54:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231276AbjCWLyg (ORCPT ); Thu, 23 Mar 2023 07:54:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53344 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231743AbjCWLyQ (ORCPT ); Thu, 23 Mar 2023 07:54:16 -0400 Received: from mail-ed1-x535.google.com (mail-ed1-x535.google.com [IPv6:2a00:1450:4864:20::535]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9DACE36440 for ; Thu, 23 Mar 2023 04:54:03 -0700 (PDT) Received: by mail-ed1-x535.google.com with SMTP id x3so85203507edb.10 for ; Thu, 23 Mar 2023 04:54:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=9elements.com; s=google; t=1679572442; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xwXKfhhEqm0u3hOwcWnbc9eMv2uIS61iRmPoBGhEqx8=; b=QpVV0iCOdd/v9NX41dCw4Nec0YlnHwzuiVRcNBkX/1oQQe18FO3VBXdP9ICayeP/0F aOsFvgs1DqWdHGV+C0WVQDE2fq/BRFDKnk3iINV+UEeARPHd3X56Nldv77kO4Ulm3+B3 y1TyFlb78uGpFgLMaTtD/0xhrpBxDXzQui7ZPGg3w8OUdpH0LUVvz6346xBwf71kzNrP ciShAqFPG2KfKKVTh6xBa8P3NyaKlj6G1adVAK2D5kXgmfSfxe688SfeDpEU7K7sYv/Q Le7+YxBXk9jT1vD9GXfTKhAbyxP5BGTrdBLWLXr85r6tbKWRL383TmhDVs0gvT5mehiN spcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679572442; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xwXKfhhEqm0u3hOwcWnbc9eMv2uIS61iRmPoBGhEqx8=; b=iAJMAgGOcutDwAdX1eKkIoTnWt530KTlpf67hY+AQobsCiWMFqTDLi9a9m2pEHY+L4 H3jqFXcJZOIH2iV4wRjbGjZSrHs0mxy9Ja8DEaBobi0Fk9dOO4aGYG7hUZtGWPrcs4zP Pd0A3bYqgtqNnl64NAxfz776eAWWHsVhubLviF9CVKsMr8YYiGG0fgRndX5IBM51RIGQ 2FIoRUAcM4hZSXrFUoTDbE6FxR9BUdHgAtrUD64VSYw8u4YieKyI/um/7TDCB1ACigis YP8ZMHMZjThXWIsLPLNrXb1ImjyEG8IiZsrNnWMNoF/xWLEYgoBcWan/yR+IehcPskcI Qe/A== X-Gm-Message-State: AO0yUKXLcZTo9XEcWCPbfzp/NPCcdJNJOS67JMQ/wKhI2yMrtolH2NcI tqLY8RPJbEesIU0x8KM6rTDjsw== X-Google-Smtp-Source: AK7set+PztqGXPY+F39TuHJGfQGLCyOqIjduXiRvi157vwXBlw9c5EWERhFdx4SUk9GPRtPrNrdEoA== X-Received: by 2002:a17:906:3389:b0:8eb:d3a5:b9f0 with SMTP id v9-20020a170906338900b008ebd3a5b9f0mr9977599eja.67.1679572442112; Thu, 23 Mar 2023 04:54:02 -0700 (PDT) Received: from fedora.. (ip-095-222-150-251.um34.pools.vodafone-ip.de. [95.222.150.251]) by smtp.gmail.com with ESMTPSA id r5-20020a1709064d0500b00923f05b2931sm8510047eju.118.2023.03.23.04.54.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Mar 2023 04:54:01 -0700 (PDT) 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 v10 3/3] i2c: muxes: pca954x: Add regulator support Date: Thu, 23 Mar 2023 12:53:55 +0100 Message-Id: <20230323115356.2602042-4-patrick.rudolph@9elements.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230323115356.2602042-1-patrick.rudolph@9elements.com> References: <20230323115356.2602042-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 vdd regulator and enable it for boards that have the mux powered off by default. Signed-off-by: Patrick Rudolph --- drivers/i2c/muxes/i2c-mux-pca954x.c | 35 ++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/drivers/i2c/muxes/i2c-mux-pca954x.c b/drivers/i2c/muxes/i2c-mu= x-pca954x.c index 39f313658b18..0d966a55b727 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 @@ -101,6 +102,7 @@ struct pca954x { struct irq_domain *irq; unsigned int irq_mask; raw_spinlock_t lock; + struct regulator *supply; }; =20 /* Provide specs for the MAX735x, PCA954x and PCA984x types we know about = */ @@ -440,6 +442,9 @@ static void pca954x_cleanup(struct i2c_mux_core *muxc) struct pca954x *data =3D i2c_mux_priv(muxc); int c, irq; =20 + if (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); @@ -492,10 +497,28 @@ static int pca954x_probe(struct i2c_client *client) i2c_set_clientdata(client, muxc); data->client =3D client; =20 + data->supply =3D devm_regulator_get_optional(dev, "vdd"); + if (IS_ERR(data->supply)) { + ret =3D PTR_ERR(data->supply); + if (ret !=3D -ENODEV) + return dev_err_probe(dev, ret, + "Failed to request regulator\n"); + else + data->supply =3D NULL; + } else { + ret =3D regulator_enable(data->supply); + if (ret) { + dev_err(dev, "Failed to enable regulator: %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); @@ -512,7 +535,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 || @@ -520,7 +543,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 @@ -539,7 +563,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.39.1