From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 41D592C3245 for ; Sun, 19 Jul 2026 15:17:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784474245; cv=none; b=icHjtbCnpN8VgmNCy9SVLaqORh69Ri233YKpFYvqGhwOocXcYBwr2DA0+ynSvC4DYEcFect4Qlco2V3f/6KCoD4lEhFw5yj0VwzwsYuJsPKwiZMw5G3/CFVayG6Y0T42t9FZ3PYidUK+FCQRurPCGHn5XC5M/ueWRRhCJUy0leU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784474245; c=relaxed/simple; bh=y4CWJt16YdZrTCn8rdj1CNouLpjIWr3Jrm21zLmgNMc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mNC+Z0NJI9blazwqpRDfy3WLLLF1G6y5HPLmFHlNr7pLeklJnuJ5/IG+9PEA6gzp/sTMz1p3Ni9WmR3fU9m1a2fDQ+f2bgY5r+mVu5BZcW0EvlzTflaSSmExQcG1rrTEkVjcVDFqJss6umhlM/5JNyMZYz8j1/06dC93PraY3Yg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=IxywBAR1; arc=none smtp.client-ip=209.85.167.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IxywBAR1" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-5b28c91fba5so3466762e87.1 for ; Sun, 19 Jul 2026 08:17:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784474242; x=1785079042; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/8qLIUHsL4QgH657kTC3Y7xhccUy2MxOta7XG4RiyEQ=; b=IxywBAR1FgiIhjb1MO+wyTiZAY2GlaH82I8V+V8jl3oOlgS1Q1gRRGA3bvamD6J6xt kXjaVLdO7UjVIGesQ4hHMgfES9Z2I/RDDkC2Pbj2fkGaS9QmGJJnECr/Tfi9M2DG3pLF YEvRnWobfSAdn8Q7L2yWXjXnR4TR8RO9HjNsMsi1VNUxfsEfAlf3WFtWH6SBl7aVWdKZ 0KZwqCFgG5bDv5HmmUKkbMd+qsOaNilvyA/L/ZDUW+RG6BD17Ij2p1p8D9CtUsDTRLK0 ob4QmA6hTOlTKsV1l3J/i56QFVLXmh/9SCOvr22mAnqqhnziU1ctL/sEDqcXnSZUrazX ijwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784474242; x=1785079042; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=/8qLIUHsL4QgH657kTC3Y7xhccUy2MxOta7XG4RiyEQ=; b=HFTe5Wql7BETKWACPti235w7RWiezPlOuhk1ZJ4sxaOdhGuBB0llVc88Mzk2zhz9cF FlP3mS7ltcqhBuaUS+JZ4+5Jg+KsJ8tmtBMZ0NASoekYrIWFVR65mkgQ4KEC8Rr/6Zuw 6AXe3ut53jRUYlxR5I3KWneEBpN0X+5PjwtA4cf6/RxvtA+NFZYxvbLL/YY7Xak3tmyR 89aPc1Cd5u+X8p93UzS4W8WXW3AomzyU5qqMJBVz0EYNMeQBVrPoQjPN/NZvyaMs3alP Jl1OtgzAzaZq0jylDTN/juL4NDX2QMTLY+ozdA120UfE3KfOfHtJlEVftF9vaNekGZJX 72vQ== X-Forwarded-Encrypted: i=1; AHgh+RpACmI4pxYyurkaXD8SbvqZfTQ6ojmXss2WtlIEDj3ELnYsVgxkI1v8oQJvKkpuFWui7vXg5bpzqPvDRjA=@vger.kernel.org X-Gm-Message-State: AOJu0YzNPoyQ+ej0QfBzlQa6yPmYoIjf3Fpt/sy7ex5cDndZsm1wZmRe l/RJn1dczLtHqTRTtBz4CPbkQPhDrH0POjZd00BrVpvbCis76lTNklR4 X-Gm-Gg: AfdE7ckdydu/0zbH0Od4mK4uBb2yZ4DxAzyXj/RBQK4ePUUJCRUbCE1iLDLJsLorteP 1QAAT38yb3gG31bFrdR+/GcRdSqWEaMRDO3z8Yn1gDXCNzycxWvXSTR51QxkqOCGTkQtfSyIj2R S2HXeA1m71SKrktw4jr6CM6UkGbSVECere0ZZxA9XXU8itBX25CNZ6tKKT8tmZhpa2UYOKWoGEM 7AwJLV7VBIWt23vL2i9UjFNHSx4l6jEb8Z0IIBr8Nmr4iWTS9JKSqcc3s0spBW5A7p+bGMLKFO5 FcYxvAJB/iWuUxhv2VGFJ+uI695z7Pl3lsl6+27+KfZbauOkdqy2l5M71xnRR1qIcjlr9NjBz09 TcemrxdIkbcuRrsnp12UuSdf33mvtldbQmHspZb/zfeRIA1JcN0SHD7qt0OUIaYiww8kBeUcz8C 4ZdHLSzhaHKlU9rJs7KzgQNdqcgxXYzIjftmkvnvaF0w35kH4= X-Received: by 2002:a05:6512:608c:b0:5ae:c2ea:b3f1 with SMTP id 2adb3069b0e04-5b28a1681bdmr2552035e87.10.1784474242005; Sun, 19 Jul 2026 08:17:22 -0700 (PDT) Received: from [192.168.1.135] (83-233-6-197.cust.bredband2.com. [83.233.6.197]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b291e26e5fsm1835096e87.80.2026.07.19.08.17.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Jul 2026 08:17:20 -0700 (PDT) From: Marcus Folkesson Date: Sun, 19 Jul 2026 16:59:45 +0200 Subject: [PATCH v12 2/7] i2c: mux: add idle_state property to i2c_mux_core Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260719-i2c-mux-v12-2-a5010d623a57@gmail.com> References: <20260719-i2c-mux-v12-0-a5010d623a57@gmail.com> In-Reply-To: <20260719-i2c-mux-v12-0-a5010d623a57@gmail.com> To: Wolfram Sang , Michael Hennerich , Bartosz Golaszewski , Andi Shyti , Andy Shevchenko , Bartosz Golaszewski , Peter Rosin , Peter Rosin Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Marcus Folkesson X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2781; i=marcus.folkesson@gmail.com; h=from:subject:message-id; bh=y4CWJt16YdZrTCn8rdj1CNouLpjIWr3Jrm21zLmgNMc=; b=owEBbQKS/ZANAwAKAYiATm9ZXVIyAcsmYgBqXOp7WFi6OrXLhmafy952YX+tICQUAvJ64aqCl Vj2SS1Nh5qJAjMEAAEKAB0WIQQFUaLotmy1TWTBLGWIgE5vWV1SMgUCalzqewAKCRCIgE5vWV1S MkUvEACBhKgPGGuR3qHycC2u24eW23zFyI1Ka1kJ15o928/alNJoCF3E2vkSsJV4VO5HlIYSk41 zqiZk/1/NYlEorRIdrRZtru7cocnd5lvayoiFDAHbbnDagGn8dATvnwbnNaRS68e/fs2hatNr7p V1TC1e4Md6L3gecHbpOafI2p0RCVCi7z0Ashi0+vkc6eNk7up8gDQQ6nq+vHhWw0PGGL3WWqkxx vIQCC2JEr+CkU5+srA5H9HXSJIe/L6Vm6cPgiGPv/A77TNNsqhsy4694qp56yMbqNrIUh+H49/G zFIZcV+ObnEU8tPDX26wQp7O8+Oh4dpHMEy1L+PdgjcHkZp3bI34jol4oTMYDz5A8QgW0OikWNk 2GKObd44wxpSQP+ycs/vbJGz4Llwzc/UJqj5fpwmgrgVS1GKgJccx9J+dRo0OR+K2v3jX8eS1yK ++ZnzcuP2gDUocLAS0bQBvGXgbesOHGLeZd9ofSaS1VmzPNuJQfEXQBYgi7iCfvwAs2247KZ2MP E8KDM1988ewRpD5W7LXCisjddvDw1saTLeyE7lesX1A4UWvar614kDCgua0vf2nZTYdRE/1s2V9 jAc6Ne0iJa51R8vfiImtgKzfkgBlO7B/S7sDmf1hcTFpLM0aKvGbHSZ8ubUgwi4Nqa1nkqCzRQX dLQM/h0YMYzrSKg== X-Developer-Key: i=marcus.folkesson@gmail.com; a=openpgp; fpr=AB91D46C7E0F6E6FB2AB640EC0FE25D598F6C127 Muxes treat their channels differently when idle. Let the mux core have this information to make it available for internal use. Possible idle states are: - I2C_MUX_IDLE_AS_IS: Leave channels as is when idle - I2C_MUX_IDLE_DISCONNECT: Disconnect channel (set HiZ when idle) - I2C_MUX_IDLE_UNKNOWN: Unknown idle state - : Enable channel n (starting from 0) when idle" Default value is set to I2C_MUX_IDLE_UNKNOWN. Reviewed-by: Andy Shevchenko Signed-off-by: Marcus Folkesson --- drivers/i2c/i2c-mux.c | 1 + include/linux/i2c-mux.h | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c index 681a201c239b..b126ce7338c2 100644 --- a/drivers/i2c/i2c-mux.c +++ b/drivers/i2c/i2c-mux.c @@ -247,6 +247,7 @@ struct i2c_mux_core *i2c_mux_alloc(struct i2c_adapter *parent, muxc->select = select; muxc->deselect = deselect; muxc->max_adapters = max_adapters; + muxc->idle_state = I2C_MUX_IDLE_UNKNOWN; return muxc; } diff --git a/include/linux/i2c-mux.h b/include/linux/i2c-mux.h index 1784ac7afb11..a348f81e7a90 100644 --- a/include/linux/i2c-mux.h +++ b/include/linux/i2c-mux.h @@ -15,6 +15,10 @@ #include +#define I2C_MUX_IDLE_AS_IS (-1) +#define I2C_MUX_IDLE_DISCONNECT (-2) +#define I2C_MUX_IDLE_UNKNOWN (-3) + struct i2c_mux_core { struct i2c_adapter *parent; struct device *dev; @@ -22,6 +26,18 @@ struct i2c_mux_core { unsigned int arbitrator:1; unsigned int gate:1; + /* + * The mux state used by the driver when idle. + * Possible idle states are: + * - I2C_MUX_IDLE_AS_IS: Leave channels as is when idle + * - I2C_MUX_IDLE_DISCONNECT: Disconnect channel (set HiZ when idle) + * - I2C_MUX_IDLE_UNKNOWN: Unknown idle state + * - : Enable channel n (starting from 0) when idle" + * + * Default value is set to I2C_MUX_IDLE_UNKNOWN. + */ + int idle_state; + void *priv; int (*select)(struct i2c_mux_core *, u32 chan_id); @@ -38,6 +54,20 @@ struct i2c_mux_core *i2c_mux_alloc(struct i2c_adapter *parent, int (*select)(struct i2c_mux_core *, u32), int (*deselect)(struct i2c_mux_core *, u32)); +/* + * Mux drivers may only change idle_state, and may only do so + * between allocation and registration of the mux controller. + */ +static inline void i2c_mux_set_idle_state(struct i2c_mux_core *muxc, int state) +{ + muxc->idle_state = state; +} + +static inline int i2c_mux_idle_state(struct i2c_mux_core *muxc) +{ + return muxc->idle_state; +} + /* flags for i2c_mux_alloc */ #define I2C_MUX_LOCKED BIT(0) #define I2C_MUX_ARBITRATOR BIT(1) -- 2.54.0