{"id":2215396,"url":"http://patchwork.ozlabs.org/api/patches/2215396/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-i2c/patch/20260324-i2c-mux-v9-1-5292b0608243@gmail.com/","project":{"id":35,"url":"http://patchwork.ozlabs.org/api/projects/35/?format=json","name":"Linux I2C development","link_name":"linux-i2c","list_id":"linux-i2c.vger.kernel.org","list_email":"linux-i2c@vger.kernel.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260324-i2c-mux-v9-1-5292b0608243@gmail.com>","list_archive_url":null,"date":"2026-03-24T13:54:15","name":"[v9,1/5] i2c: core: add callback to change bus frequency","commit_ref":null,"pull_url":null,"state":"needs-review-ack","archived":false,"hash":"32725e3a0e87eac85b577188a714e515e481d878","submitter":{"id":46679,"url":"http://patchwork.ozlabs.org/api/people/46679/?format=json","name":"Marcus Folkesson","email":"marcus.folkesson@gmail.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-i2c/patch/20260324-i2c-mux-v9-1-5292b0608243@gmail.com/mbox/","series":[{"id":497295,"url":"http://patchwork.ozlabs.org/api/series/497295/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-i2c/list/?series=497295","date":"2026-03-24T13:54:14","name":"I2C Mux per channel bus speed","version":9,"mbox":"http://patchwork.ozlabs.org/series/497295/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2215396/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2215396/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <linux-i2c+bounces-16696-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-i2c@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=qlbRaQAf;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c09:e001:a7::12fc:5321; helo=sto.lore.kernel.org;\n envelope-from=linux-i2c+bounces-16696-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com\n header.b=\"qlbRaQAf\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=209.85.167.51","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=gmail.com"],"Received":["from sto.lore.kernel.org (sto.lore.kernel.org\n [IPv6:2600:3c09:e001:a7::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fgBP91Tb4z1xy1\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 00:54:53 +1100 (AEDT)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sto.lore.kernel.org (Postfix) with ESMTP id 5D45A30172C2\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 24 Mar 2026 13:54:50 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id DD10B3FE354;\n\tTue, 24 Mar 2026 13:54:43 +0000 (UTC)","from mail-lf1-f51.google.com (mail-lf1-f51.google.com\n [209.85.167.51])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 254433EF666\n\tfor <linux-i2c@vger.kernel.org>; Tue, 24 Mar 2026 13:54:42 +0000 (UTC)","by mail-lf1-f51.google.com with SMTP id\n 2adb3069b0e04-5a13e1cfa45so4547604e87.2\n        for <linux-i2c@vger.kernel.org>; Tue, 24 Mar 2026 06:54:41 -0700 (PDT)","from [192.168.1.135] (83-233-6-197.cust.bredband2.com.\n [83.233.6.197])\n        by smtp.gmail.com with ESMTPSA id\n 2adb3069b0e04-5a285207454sm3162823e87.48.2026.03.24.06.54.38\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Tue, 24 Mar 2026 06:54:39 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774360483; cv=none;\n b=ss9Wf5v24dVmcEIiC0WvVzffaw9tVxAsZ4hW9m8Q4xZU5VonCDSxHXG320raTIj6n9GUt1vkqmOxmqlddzJzwOnUyIOhS5V/Q1RcOJ3m50uQSr/Gkg8rI7Gvn1ob+RsTmfItc1nmatA2QjonQMzKBFfw1k3hwdlk84S+D5IK+dQ=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774360483; c=relaxed/simple;\n\tbh=XZVd7p9mIBaNy+NIKUZiBgjkJyYONlNCoWZWgB7A9Zk=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:\n\t In-Reply-To:To:Cc;\n b=RmGQzizjn1IbzHxDaS83Z3IMmTYJAMKMo/6dotOjxkKisDxk4oWGVEmpgpGouAVq3ZmOfIcG+rKcYL6qJM410E3RQvL72aAQBW0k0Fmap1YaRvO2JVQEF8a96KXyWVytdAJM0lhv+lwtE1t3Zh6TVIX0Zk2+qh+Aq6YgnCqjc60=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com;\n spf=pass smtp.mailfrom=gmail.com;\n dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com\n header.b=qlbRaQAf; arc=none smtp.client-ip=209.85.167.51","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=gmail.com; s=20251104; t=1774360480; x=1774965280;\n darn=vger.kernel.org;\n        h=cc:to:in-reply-to:references:message-id:content-transfer-encoding\n         :mime-version:subject:date:from:from:to:cc:subject:date:message-id\n         :reply-to;\n        bh=JdAp6xh8xeBfkhw2oXmLZzz+7TGqiyYSvmIRi8yYlCE=;\n        b=qlbRaQAfd3yZdKfAvSIBHTej0Om9PfcMEdsEWyodiqkxcJPgkOr64OPXFJ45uLyzXK\n         HmbLISv8qj2oGIOsELd7TEqn8+o66IOSBpQ9s3ToIstm29TlSQBT/TJ1aWeYBXW/CdiD\n         PJbQKawXtrSD+pWynqnURmEovpwrvcumzc1Y7tv8l6nphEyhNIIj0V+z4DuvicoyQoZK\n         Ly3XYDEWmaln5fAyNWIuCFikvo6Ex+oDs+0e0UqB5zwGZ3EWIa9GeGyBuVurRCXB5hZx\n         CbYcTFtXq8I1aFnhJK7DDn7a/jpYan9ZsbPAgtF7au6IB1yvjIghOOgrq0CDky+SxjiM\n         W6Hg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1774360480; x=1774965280;\n        h=cc:to:in-reply-to:references:message-id:content-transfer-encoding\n         :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to\n         :cc:subject:date:message-id:reply-to;\n        bh=JdAp6xh8xeBfkhw2oXmLZzz+7TGqiyYSvmIRi8yYlCE=;\n        b=cz38UjpmQo+Jdw0A/QxSGsHvNP3jmlMjn/1n/1016cf360NbCMGCar3dVYTC3CugSC\n         M+yzLVteLTmzgLJOQm73qWR1Q76tPkMub2KmwtZNEaJktt8klIihke6K1Zqh2NFKSS8y\n         n+rI8rhihxCIR2GMXQoZ6EKnxdHIBwdYoz2wgGqg3t+M0Lc4qYFpho8UZROyr7p3zV6p\n         9Xf4MahTntDIeOVaumUJL56/vMLymn5AKaf48N+kgclWpBGvXRu3aDGbXsziThaUMmVD\n         bwcISTbVAVsegKF/2fXusSzZMnaYBOi4xKRzjIMjN+6jhbYnU68eqaERWCAomBSxU2DG\n         W6XA==","X-Gm-Message-State":"AOJu0YzeGKaBT5JTzUX81+j4+hlxxOF5YldpSE1gNd48x8y8o8t76afm\n\t7CCJYjVNJBm/eAUHcDc2Ogc0YHGcw1eYvq4A4qB/21JrSeUqWNfru65K","X-Gm-Gg":"ATEYQzzZQYQhCtv+fHr4ErRQ+A8HuTIYyfgPU2uN9Yh2q48d47VCor5GtTJwhTx/IJh\n\tePj2WH7uWvF+rSFyZMqEGZU0NptkPNoElA57Nwp8oC46l0VaasMzE/71YcwNkFGP0JCMslsgZ85\n\tZFrUnnPeEQ2D26vfU6ZT6pNV647wD7hqyaVjfrSZK2wDqRcue+GdyWfe9XriobHiBxPWBfphGAI\n\t2jt7CkpHdZdp5KUV177EOOlMSpkhZ0qKKrqtIub+ldD3ejrxyMotC7V8LE+z0sRSiGStQpYNj7j\n\tW211X4vmq+zvBLy7NFtmpH7H7gruVS0PkGjqGRBsHxEtiDowlS88oN6wafMFc6rYYutSAHVZDey\n\t1F7J2530pXpo/+UiJSGvAdE/9mh7/Q5YtOEU6nMDOF5sJS51VRyCgBCMjC5lqnrX9VGWGPQIoAP\n\tCTeQANp0pJCIL6o/o8Bn8n1Q8/e3QQeTcLVavkvnz0nh1c1R7pwbni5QLaW3WQIEWqvPip","X-Received":"by 2002:a05:6512:1150:b0:5a2:7eb8:2f9a with SMTP id\n 2adb3069b0e04-5a285b60fa4mr5257979e87.21.1774360479973;\n        Tue, 24 Mar 2026 06:54:39 -0700 (PDT)","From":"Marcus Folkesson <marcus.folkesson@gmail.com>","Date":"Tue, 24 Mar 2026 14:54:15 +0100","Subject":"[PATCH v9 1/5] i2c: core: add callback to change bus frequency","Precedence":"bulk","X-Mailing-List":"linux-i2c@vger.kernel.org","List-Id":"<linux-i2c.vger.kernel.org>","List-Subscribe":"<mailto:linux-i2c+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-i2c+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"7bit","Message-Id":"<20260324-i2c-mux-v9-1-5292b0608243@gmail.com>","References":"<20260324-i2c-mux-v9-0-5292b0608243@gmail.com>","In-Reply-To":"<20260324-i2c-mux-v9-0-5292b0608243@gmail.com>","To":"Wolfram Sang <wsa+renesas@sang-engineering.com>,\n Peter Rosin <peda@axentia.se>,\n Michael Hennerich <michael.hennerich@analog.com>,\n Bartosz Golaszewski <brgl@bgdev.pl>, Andi Shyti <andi.shyti@kernel.org>,\n Andy Shevchenko <andriy.shevchenko@intel.com>,\n Bartosz Golaszewski <brgl@kernel.org>","Cc":"linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org,\n linux-arm-kernel@lists.infradead.org,\n Marcus Folkesson <marcus.folkesson@gmail.com>","X-Mailer":"b4 0.14.3","X-Developer-Signature":"v=1; a=openpgp-sha256; l=2485;\n i=marcus.folkesson@gmail.com; h=from:subject:message-id;\n bh=XZVd7p9mIBaNy+NIKUZiBgjkJyYONlNCoWZWgB7A9Zk=;\n b=owEBbQKS/ZANAwAKAYiATm9ZXVIyAcsmYgBpwpeNI6OmaQ0d2ac8J3iIBGEysEYB0qwzhghkE\n 0W3akq+mXyJAjMEAAEKAB0WIQQFUaLotmy1TWTBLGWIgE5vWV1SMgUCacKXjQAKCRCIgE5vWV1S\n MtN6EADTibXYTvwLToTRixa2sh4rGUbNLanpKU1sKffHdHOLtUuOEo4bHoRHV4E0tjabv595SmY\n 1SMoGPf/phfw7YneGwh/MyGjm/bXChh2E226fW1kkqhRa2OEyU/mVQVKzxuHhD8axJJKo30NYJv\n 79zdaNSTsOHy+Jf7dUytw2FXXwi75TI8dknQ2QCRl5mYIzMpwF6aPerYGnna97pwjvUMngzgTOq\n Ug8wZvq6eMINF8G1LRrblPT2MwedfA5QVaIIzIlgTwIF63Et/o0g1nBNJIq6YEMQX0kwTL+kwSj\n IyD4rGtU5yjFjPQK1qhnWtslh+METP8OL0dJkBHCyZFfQOXo+GyIEif4s+xTQmeqwiaFo3i7aK/\n RAD0r2qN0zfBbE8AhzftKThJCECn/IrRMdgt1F1gFfKsqOnRLexMvdq56g9bNHEUjWxIr5NaS4J\n 65pO+YAXVUpcXp80l341Xq0LF85vejFvK2mlDnQpMqsYS7Sz683IVEQDkOrwFGTaOnEKYM1gB+h\n tfEcw/4Cn9jnke4nbM1av4S2MXAV+fbaPI4+pEPTQNCz0r4yBc12t0G12WoP+fq/WKdTA6yiN3V\n ExYkKdrb8kyorl6UN/JsBiS04Twgaqh6HsC43OrXnbAzqqzSSs6G3ur8jaBryTt8SvCpf5XCVa4\n a8wntfiGesMABpQ==","X-Developer-Key":"i=marcus.folkesson@gmail.com; a=openpgp;\n fpr=AB91D46C7E0F6E6FB2AB640EC0FE25D598F6C127"},"content":"All devices on the same I2C bus share the same clock line and the bus\nfrequency has therefor be chosen so that all attached devices are able\nto tolarate that clock rate. IOW, the bus speed must be set for the\nslowest attached device.\n\nWith I2C multiplexers/switches on the other hand, it would be possible\nto have different \"domains\" that runs with different speeds.\n\nPrepare for such a feature by provide an optional callback function to\nchange bus frequency.\n\nAs a side effect, several bus drivers keep the bus speed in a\nprivate structure and can now have this value stored in a uniform way\ninstead.\n\nSigned-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>\n---\n include/linux/i2c.h | 35 +++++++++++++++++++++++++++++++++++\n 1 file changed, 35 insertions(+)","diff":"diff --git a/include/linux/i2c.h b/include/linux/i2c.h\nindex 20fd41b51d5c..712f9608108e 100644\n--- a/include/linux/i2c.h\n+++ b/include/linux/i2c.h\n@@ -742,6 +742,8 @@ struct i2c_adapter {\n \tstruct rt_mutex mux_lock;\n \n \tint timeout;\t\t\t/* in jiffies */\n+\tu32 clock_hz;\t\t\t/* bus clock speed */\n+\tint (*set_clk_freq)(struct i2c_adapter *adap, u32 clock_hz); /* Optional */\n \tint retries;\n \tstruct device dev;\t\t/* the adapter device */\n \tunsigned long locked_flags;\t/* owned by the I2C core */\n@@ -835,6 +837,39 @@ i2c_unlock_bus(struct i2c_adapter *adapter, unsigned int flags)\n \tadapter->lock_ops->unlock_bus(adapter, flags);\n }\n \n+static inline int\n+__i2c_adapter_set_clk_freq(struct i2c_adapter *adapter, u32 clock_hz)\n+{\n+\tif (adapter->set_clk_freq)\n+\t\treturn adapter->set_clk_freq(adapter, clock_hz);\n+\n+\t/*\n+\t * If the adapter is a root adapter without .set_clk_freq() implemented, this feature is not\n+\t * supported.\n+\t */\n+\tif (!i2c_parent_is_i2c_adapter(adapter))\n+\t\treturn -EOPNOTSUPP;\n+\n+\t/*\n+\t * Update the clock_hz for non-root adapters, even if .set_clk_freq() is not implemented,\n+\t * to allow the clock frequency to be propagated to root adapters that do support it.\n+\t */\n+\tadapter->clock_hz = clock_hz;\n+\treturn 0;\n+}\n+\n+static inline int\n+i2c_adapter_set_clk_freq(struct i2c_adapter *adapter, u32 clock_hz)\n+{\n+\tint ret;\n+\n+\ti2c_lock_bus(adapter, I2C_LOCK_SEGMENT);\n+\tret = __i2c_adapter_set_clk_freq(adapter, clock_hz);\n+\ti2c_unlock_bus(adapter, I2C_LOCK_SEGMENT);\n+\n+\treturn ret;\n+}\n+\n /**\n  * i2c_mark_adapter_suspended - Report suspended state of the adapter to the core\n  * @adap: Adapter to mark as suspended\n","prefixes":["v9","1/5"]}