Received: by 2002:a05:6359:c8b:b0:c7:702f:21d4 with SMTP id go11csp600045rwb; Fri, 7 Oct 2022 01:16:24 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4touXF4awYuVEnEEKQ5nSgeoXPmzLMfV2YFeMN1YWdlPFnv/SsvTd6PC4L/Q0a0Ztn3mFM X-Received: by 2002:a17:907:a047:b0:78d:3ac7:ed73 with SMTP id gz7-20020a170907a04700b0078d3ac7ed73mr3147138ejc.237.1665130583840; Fri, 07 Oct 2022 01:16:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1665130583; cv=none; d=google.com; s=arc-20160816; b=m62loVmUi0EBEf1F2fdq+Eh8jMZ9JrobckULACpgWsj4qIxlo7YQ0rE/YNW0FOhATa dPDrDXUykY3MTWMUiUXGW7Cu8YOWm7sEXPjgdjoKjCFHnh1gD3V43zcDgnuqbCfosLJj PYL3YpZpCfZDx5VXxgqKaP+CMafSYb1SqcPvss2B6VPUx2JT992OKJDck3nbeJU8TKh5 PRXua5QHoBSSqxy1ALV5y6blZjWsBPYBb/XJV69BrrlKO11YNqUG9Zj85ltPx4ySoZNz WqbRJDc8GWofICFVfEM2qk/DGKHd8+6BJy2fCKFXbNg4bRCF+1eUMibwtYXiDxCEsvoh p1/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=yKgH3a6XYZYRbdYUiD+yjslcikmARUMCSXz+IUE2mjY=; b=YG9ji3JG3dhTAEAh5RCDUBc8nqJlYHh8ueNaiCr9BN95J6/pXyjlRIZOJArPqhAxKN QZNddJrAD5Th/hSB3f5Xmawlz56gPsbbcG65CAKN0evlArHmpYP5wN7cFyWRzKtmb4rI uPWticwTN/jCUyObXVxI2uKNgiVwyKL4dzhcEHCowSYv1Z5we0kaZnm5c58ygpX7/z0+ HR7VrElo6o29WtqOA1NRljufNVHu27rIwlRQjzAkSa3mv2jbaVHNP99K7qOs1LB+kR6Y tNO5XoF5fnN3pH5siyLHgJgiTBx+DLxjg+kn0HVgtuI7sd9/887CjYh1Gzi9NHz070wk hqkg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@9elements.com header.s=google header.b=bwc+GsmP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=9elements.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ht21-20020a170907609500b0078c070898a2si2003402ejc.112.2022.10.07.01.15.57; Fri, 07 Oct 2022 01:16:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@9elements.com header.s=google header.b=bwc+GsmP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=9elements.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229942AbiJGHzj (ORCPT + 99 others); Fri, 7 Oct 2022 03:55:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52048 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229836AbiJGHzY (ORCPT ); Fri, 7 Oct 2022 03:55:24 -0400 Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 185FE371A9 for ; Fri, 7 Oct 2022 00:55:21 -0700 (PDT) Received: by mail-ej1-x636.google.com with SMTP id qw20so8937979ejc.8 for ; Fri, 07 Oct 2022 00:55:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=9elements.com; s=google; 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=yKgH3a6XYZYRbdYUiD+yjslcikmARUMCSXz+IUE2mjY=; b=bwc+GsmPqEKE2JavSCnG7kb0QRlT45LpS7yZfHbDFLm8iiAsyElSdR8KxzLNxCoY4Z zoidpYBSW+Htnr+DNqaKLW8Gm9yROR1T/P4lz1kXHjBnjhZKP7eME8s0WVanFYyeksIN hhHIteAeE6nBWaf1dsen12Dk/SIfgtGScuTqQjTweBe90FaCFB6gZWeQ41BcSZ3JLzX+ f9lDILNUaHKhF4oOPU6715qgizEm6vCCvKYZiRM3y21BL5ZZC9wp8h2gbW5+U4sqUyoQ g7k+l4wDMlU6SY92AB5dPoz9Er7UM8AlLBM3Kk7zpVHoIjwGIDFAPMz0OUkCs4yJMW3L cGNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=yKgH3a6XYZYRbdYUiD+yjslcikmARUMCSXz+IUE2mjY=; b=jM5X1kI7qFtx4SmsKu0+AJe9H+Al8/MhYhW+X80rbLN26mnDrBWwNgYeLqGSap9yLT F2kPz2/AcUpCBtRFU105dF8W+o6XguMizjmCRdOJghAFMawN3WACezbFeXBCCLX3zvaU iu7SF26gtoCmZGOeHiENf7Rq1dhaRRts2Wi86d6T+UkWjIWMfPGjM8evMfzWKmBriLXr Y0fJUc6OwSLM6sXnK2T66je4YZ+Gx5QKlTOX47zfhEN7LBuBJ+Z/fc8o6qKwmoRHb7j+ eeESIFGajbhKZ3aY7+E4X2atBRyfLSLIQXq4xdM8hATAJZQ/XuyXjvzonWQiyFPLJ0jF gt1Q== X-Gm-Message-State: ACrzQf1nRz5gl4doqcnpJ3jPIXJPCs6VoMRpseW3wIAEVND3qtGac5K0 Se9dX+Dq7iwCY7DCV7w8+2wEiQ== X-Received: by 2002:a17:907:2cee:b0:779:d10c:25a5 with SMTP id hz14-20020a1709072cee00b00779d10c25a5mr3138695ejc.678.1665129320346; Fri, 07 Oct 2022 00:55:20 -0700 (PDT) Received: from fedora.sec.9e.network (ip-094-114-232-236.um31.pools.vodafone-ip.de. [94.114.232.236]) by smtp.gmail.com with ESMTPSA id hv13-20020a17090760cd00b00741a0c3f4cdsm782281ejc.189.2022.10.07.00.55.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Oct 2022 00:55:20 -0700 (PDT) From: Patrick Rudolph To: Peter Rosin Cc: robh@kernel.org, laurent.pinchart@ideasonboard.com, wsa@kernel.org, Patrick Rudolph , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [v9 2/4] i2c: muxes: pca954x: Add MAX735x/MAX736x support Date: Fri, 7 Oct 2022 09:53:51 +0200 Message-Id: <20221007075354.568752-3-patrick.rudolph@9elements.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221007075354.568752-1-patrick.rudolph@9elements.com> References: <20221007075354.568752-1-patrick.rudolph@9elements.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 and verified that the stalled bus is disconnected while the other channels remain operational. 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. 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. 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-mux-pca954x.c index a5f458b635df..4b63b1eb669e 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 controlled + * 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 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; }; -/* 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[] = { + [max_7356] = { + .nchans = 8, + .muxtype = pca954x_isswi, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, + }, + [max_7357] = { + .nchans = 8, + .muxtype = pca954x_isswi, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, + }, + [max_7358] = { + .nchans = 8, + .muxtype = pca954x_isswi, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, + }, + [max_7367] = { + .nchans = 4, + .muxtype = pca954x_isswi, + .has_irq = 1, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, + }, + [max_7368] = { + .nchans = 4, + .muxtype = pca954x_isswi, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, + }, + [max_7369] = { + .nchans = 4, + .enable = 0x4, + .muxtype = pca954x_ismux, + .has_irq = 1, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, + }, [pca_9540] = { .nchans = 2, .enable = 0x4, @@ -177,6 +223,12 @@ static const struct chip_desc chips[] = { }; static const struct i2c_device_id pca954x_id[] = { + { "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[] = { MODULE_DEVICE_TABLE(i2c, pca954x_id); static const struct of_device_id pca954x_of_match[] = { + { .compatible = "maxim,max7356", .data = &chips[max_7356] }, + { .compatible = "maxim,max7357", .data = &chips[max_7357] }, + { .compatible = "maxim,max7358", .data = &chips[max_7358] }, + { .compatible = "maxim,max7367", .data = &chips[max_7367] }, + { .compatible = "maxim,max7368", .data = &chips[max_7368] }, + { .compatible = "maxim,max7369", .data = &chips[max_7369] }, { .compatible = "nxp,pca9540", .data = &chips[pca_9540] }, { .compatible = "nxp,pca9542", .data = &chips[pca_9542] }, { .compatible = "nxp,pca9543", .data = &chips[pca_9543] }, -- 2.37.3