From nobody Wed Dec 17 20:07:14 2025 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) (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 E034D306485 for ; Tue, 2 Dec 2025 08:11:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764663072; cv=none; b=oWczcNjg5J+ql3cavEs9PEM0BVqAbALfks/aATxu6CQ25oL4ste6MCklnxcwh5z3Sw8+mo6LcNCoKbmJV3NJaFQdNk5CHVdlbqJWrkpGwmD2Du7CI+G+jrN7d6T+u2bRp2ImQuRftKnhoue/S1sqfraSk49k2bJzunCMN6FnAeE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764663072; c=relaxed/simple; bh=Nc5M9Z8FNun2aD78Xc5NFxJfLrb5FZRGRBm8Kv/u2lM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bCfl9vk3+aFwmHc9BP4/NKlFjsrWVKUNFfx4bhNbTk8M18aQDxsSvDyiAUsXTveWbL6i3v6SQ1kuoynrZQct10HMkjCRQTF8u2QLgCWSMCCYgK3qKd5kUQxywVyJxFtRUdRNtpCskzxK/yREWpe4a/d9aEvgmKxvC7UxGp5dPQI= 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=e2tR9mKs; arc=none smtp.client-ip=209.85.167.42 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="e2tR9mKs" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-59581e32163so4947138e87.1 for ; Tue, 02 Dec 2025 00:11:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764663069; x=1765267869; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Hjv89plBIlsGmTTvLKA+ZN//B9WD1brqNLmFgcY68x8=; b=e2tR9mKsSb3foVun4gGi2NWsDtprehBo1pCozywJCR4YRlYCpcuuPnbKs5dm6/plfm Wi/EugFyazTqwMgmcSLpdgRNCgqD0tqmSZIkU/bISq/aliaXUL+FZubGSbOLMCrvXmda 416M6B+9v5twQSjo8VNgxIniUbyDNfSIYhcyRnHz2ikxX6bNFwpTVrGGH8F6R7oEnoEY pWNZlVy987/MakkMcGyP5vssYBUS+/c2IGOs2na3Qx4cpwyibElZd8cXnZ7jU6gBqL5p LmCpEx1kyRKJksshQCcVursoX0xiPvz3fwF44HcLetsHtN3IqX7eZh9BiSC/GXuWjtXD TIfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764663069; x=1765267869; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Hjv89plBIlsGmTTvLKA+ZN//B9WD1brqNLmFgcY68x8=; b=BTsTuRfMhAAJqCvMvH5WEwBbRKW5nSJziCHiLTBJ48stdLFm9sIoJC4NpVcYQyzyVp SnmOG3tHho5A1tNv6hLyXBVsK4G3S6Dq3DzB+adVWxQkYv+2o/QHvSHPJ0OWky1bzpO3 MRPmrYySy7rceX3X3jv0EUYf38CAueijXVUj9oejSLzBPBHVVFotm8S6HiFHfC6n60rn /qxLknWnb5W4CX42MaiIJxTKxeYO4czQGKhcfPeWL4g3O4W8sn5OEPrs7DWOQzGcygKs 3QA4DpHLdzv4Ew7oMiCWpd458hPkYmbY5zhhQ7RB8qESiTeyrb4mjwkG+QtaZeqswKGV K9Tw== X-Forwarded-Encrypted: i=1; AJvYcCXZOCqEw09W/ATL0rFu0IITvLWtMA+oAr7D3FWtyj2/ecJ/1YcTQOsJsZ4UrKs13SWkkjjmpu7FjuT3Vtw=@vger.kernel.org X-Gm-Message-State: AOJu0Yyto9PDQxoNRZHm9WUeRU0rCUiFroXzcsA2vJIdveA7ByInaZBX 0wtg7KhbDACbA3alg2oD3AU8s12jbNiPyNlX9XNcsWU71adFfp/ceyF0 X-Gm-Gg: ASbGnctRtRi4Le2TXdzPxZXP9iW+0TSai0M4hAKf1bjYySl4aglcjTEKxMCdI05sse4 v9JLI/+atyvilIeVZ7PiVlCDfdAqNR4H0sgfvfvzk+Jg84ClQD+BMlHNYm0gXfo2RH/fWdRnlJi 3HqTuSBocVhBOvlV7wQPi/ywnn6Ij2umFwgqUaUsspbW8xa2JX/eoBV+xRON775hU16pESVDgJx 29P56UDpNsJNq2MpDnZILvAPJZ2IZ5JfXWU6d7dFG3nJkgcCbS8bwsTtmRcgi8dRIUqV2063eCB T+aIzrQUWNQKLQEph2I+Igk1M1oOewB+/xZsTwK7phkzzgxwghhv/oVvs/23ZYSZTgtHBhPpyOh JALv9sCsXLoXCQJ6lyXWIKp6i2hJLCCR3n9QB5Ujijh+i6881HNvx+hYdR0UWlqqfqu52GnAxav yGnXhvpymzGz4+XcQi8EwZ/s18Phg7fgOsIwXHqHl8XwMhqKgNeAsszn1y/BRhxCCfwa0= X-Google-Smtp-Source: AGHT+IE1iJj7SbJwoQiYcFUkDL5bk6OUrmSnL1kBvIgwjRcUBEEuS/lPd1BXU/0MQqrPwB2wqvR9Vg== X-Received: by 2002:a05:6512:3e1b:b0:594:25e6:8a61 with SMTP id 2adb3069b0e04-596b4e58cd7mr9910048e87.16.1764663068727; Tue, 02 Dec 2025 00:11:08 -0800 (PST) Received: from [192.168.1.168] (83-233-6-197.cust.bredband2.com. [83.233.6.197]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-596bfa4f8a2sm4342412e87.88.2025.12.02.00.11.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Dec 2025 00:11:07 -0800 (PST) From: Marcus Folkesson Date: Tue, 02 Dec 2025 09:09:48 +0100 Subject: [PATCH RESEND v3 1/5] i2c: core: add callback to change bus frequency 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: quoted-printable Message-Id: <20251202-i2c-mux-v3-1-877dcf478a9f@gmail.com> References: <20251202-i2c-mux-v3-0-877dcf478a9f@gmail.com> In-Reply-To: <20251202-i2c-mux-v3-0-877dcf478a9f@gmail.com> To: Wolfram Sang , Peter Rosin , Michael Hennerich , Bartosz Golaszewski , Andi Shyti Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Marcus Folkesson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1616; i=marcus.folkesson@gmail.com; h=from:subject:message-id; bh=Nc5M9Z8FNun2aD78Xc5NFxJfLrb5FZRGRBm8Kv/u2lM=; b=owEBbQKS/ZANAwAKAYiATm9ZXVIyAcsmYgBpLp8BuoM+ud571wc8WeRvvqmjI7EUERjmmX1g/ 2H3AuZw3zOJAjMEAAEKAB0WIQQFUaLotmy1TWTBLGWIgE5vWV1SMgUCaS6fAQAKCRCIgE5vWV1S MrdHEACMzdOg6XFCeOjNi/bb7yWReiTy65HGhwvQgttKUfXWESp20pbKKcalCYnCq1wkYhfE/SW BrPuXoltmEYqeSCWcQ566RR2Zhfvi7/EA8234WwAkPyjRs5IxYr521xbt1iQuKo4q9+jv4ANBnR 0dxWN4jmjdSdEtoH/aDkTec9/SuHZV3rZJbXdep3p7LFZ45Zj0vklwC87WUPfFNTjlC6B+islG8 pM92OG5ld0on7Bc7tcSbFx0hSsFK+aRLPJ6Gw3XLNNVvQ0I91/TVJVBMn9rwbW+gkFLB9dVTBYz lY5kR4bZVTqxsOCDhqnYWSKxp52lZHbv+wYJDXhtwQTIcvkL4q0eBcB0UVU+QBAZopZbyYfbZaA YsffxVwpsKKZr45SRziL9Y7Kun5JiFHLM+GT7rBBvYep4fOikfw0PZ9am70zczzkRwAB/EvRzS8 IywYCdkGDl8Yzxq3SWWcBK+aVs0HpL8+Zp7CHa9Tr5hXVPK3FgqL1CKBaQI3Rn0bkHcvTJj+TDR 5q8DNHeh64aOmCGGoo7NhD6k3SYsTg91V5NUm5+UxVyyPqVF79DfHtbfpYvNObQSlYEacz3yyX5 0U98NyxEQtdw0a9o9kpoUr7DIFBxoawrYo/8E8aPG0jMCCf72Pl8mpzDEOzctRiGP81bTYQkMFw eiDjGlwptz58ttQ== X-Developer-Key: i=marcus.folkesson@gmail.com; a=openpgp; fpr=AB91D46C7E0F6E6FB2AB640EC0FE25D598F6C127 All devices on the same I2C bus share the same clock line and the bus frequency has therefor be chosen so that all attached devices are able to tolarate that clock rate. IOW, the bus speed must be set for the slowest attached device. With I2C multiplexers/switches on the other hand, it would be possible to have different "domains" that runs with different speeds. Prepare for such a feature by provide an optional callback function to change bus frequency. Signed-off-by: Marcus Folkesson --- include/linux/i2c.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 20fd41b51d5c..d147e388dbab 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h @@ -742,6 +742,8 @@ struct i2c_adapter { struct rt_mutex mux_lock; =20 int timeout; /* in jiffies */ + int clock_hz; + int (*set_clk_freq)(struct i2c_adapter *adap, u32 clock_hz); /* Optional = */ int retries; struct device dev; /* the adapter device */ unsigned long locked_flags; /* owned by the I2C core */ @@ -835,6 +837,17 @@ i2c_unlock_bus(struct i2c_adapter *adapter, unsigned i= nt flags) adapter->lock_ops->unlock_bus(adapter, flags); } =20 +static inline int +i2c_adapter_set_clk_freq(struct i2c_adapter *adapter, u32 clock_hz) +{ + int ret =3D -EOPNOTSUPP; + + if (adapter->set_clk_freq) + ret =3D adapter->set_clk_freq(adapter, clock_hz); + + return ret; +} + /** * i2c_mark_adapter_suspended - Report suspended state of the adapter to t= he core * @adap: Adapter to mark as suspended --=20 2.51.2 From nobody Wed Dec 17 20:07:14 2025 Received: from mail-lf1-f43.google.com (mail-lf1-f43.google.com [209.85.167.43]) (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 66B72306497 for ; Tue, 2 Dec 2025 08:11:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764663074; cv=none; b=toVXpkJSOr2H2VJusA72qvvFA4Ft77VEhTFOoifHjipvOKe8SLfHkXaeKvKaUY5FFSepHTT4Da1qWLxgZKJ+BDgDOvjWupcDJD/S2R3FEXXFzl5R9P1Jo9PunJJcu+k4YWbXZizUg53Wt7s7ih9nFOTHBAFZO0xINg/BqGfl0fQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764663074; c=relaxed/simple; bh=o4Zt8X+zyI6wUYVNms/IgvHSL1cE9RhNZwSvJA7JohU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tpQaBiTKmqDo9QyzPGyN569Zjs0+CIL3Aycd3cmcgA8pgLM0EpR7aDITgJpNfb2yq1NCTpzGkyVvfOSNDhce+BHjas4bjcVsLFkLunepn9JWa8REAPAkj0TaapthJpMVO5dKrFR+Cae42NEP7f1bQCWWpNrFKAce2OeJ4d1h0ak= 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=V5waOg13; arc=none smtp.client-ip=209.85.167.43 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="V5waOg13" Received: by mail-lf1-f43.google.com with SMTP id 2adb3069b0e04-5943d20f352so4117417e87.0 for ; Tue, 02 Dec 2025 00:11:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764663070; x=1765267870; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=4Isv7N56R7GLLyxOJRI4a7jcx/LSO3hI5hjNg+m1oWY=; b=V5waOg13nm7q7PMQUHQnwix1WcxKrZB3EXDgGXAYMjDgiIwBILVlL0+G52ByL+nP39 2eD/ID6Mn1wGhK7/HkFNIb9vPWgMAhtqd+Z4Fzgq16XfU44q2/td1PzuRoPSjBCuwA7a mbDztkLQXn08A055ZkYkcInu9Ai4ZqQDbNdWD6A/sF8XPs2qFq+LHd6yZT2dJvzP2Wru oy88tRJpMyEGh39tZXOa17V4+AYO5yjxADgs1MSpbYuak9Hw8ToNn+5j4XFDDG5Tc+9g /MQGrvDAE31JjZc26dA9fKU/CkJjw4i3Dzk5XMbl+foEPhoIOWtFYvUdKP7oFTMSLaqr FojA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764663070; x=1765267870; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=4Isv7N56R7GLLyxOJRI4a7jcx/LSO3hI5hjNg+m1oWY=; b=PEv+Qr9r5RFs3fZPxmLIIvpycK8nVo1nXbYerKNu2I5K6xzfiobz+vHUyeeMkqUvrq 5lmXVCIVMXTsnrw9pG02WQtvF2M8cqWpWP771LrFVE6m9QJSgXt6xmo+Dn0XdLofBFn8 8XeJuR0yLdx4pm02sIqNC72XV+tb1va0JZUBTtKUOcraaiRFzDr1AWefiJ9zVB2E5cqZ X/drkqjc7PNktw7fBM3NC9ZHeokChIUSQeODNp3a/u5wAYArUQjmbY2QhJUh4FQpSJi3 FZCQqzm3Jg0eqppr0EsYypx+6sfysw62fqWIY0SVDp6hTxrjQDnu7OZIvI5m2gMn/jhS JS7g== X-Forwarded-Encrypted: i=1; AJvYcCX57Qsg6PvswqkqxOkDqzU/bpW8RRLx0lXN1XNBLR12FRxE6DMcRsBgDWa1ISxbQj2dkhZtrYZI0HX3eWw=@vger.kernel.org X-Gm-Message-State: AOJu0YxB1E06TANEBRL6GwSHPlPVlyZnJL3TSNqgDBZdib6YKUrL9pBH mZxQt5hwW4O2Epblmz3FYM9C9V+eeyj+sL3nvgMaCBhda5Y4VMZVxWLB X-Gm-Gg: ASbGnctGqA/KoOcb2yKhIGtMU5KdagUBug6wmx4X9Rcx9GnWsvyT0uyiA5KKKrOP/4j XwdpakzlZjaeo1lnxew6t7js6bUYjVz8dre3DQkRBbtP3xsWPNW4bu7/iIXebxOZj2ychz5Ajfd 9uNJcOwPiEyMzehapRrXYMt1dDBEnUExzom1z87oXkLkYF0WBVCDUbcir8XWQJdQJUC4tTmFiGW bZKrFI97TFyDQjr9tvT9MSZ0tHFnkhWZ/UCcUfhuSItuaB4qodmZVR7e1t7Fi0ivojQA+I1a1iS /9ztgR0YGQWuOIPKnEdJ5obijC/bs1lIdvYyE6+ARP0oHkJHJ76rnuCLtOSl0iV4xs7iFfwnidq ZvvWZIu71Vf4Zw9BkP+DNMuMnkUreer+CwWcwHW6n+6CDimIBrWGqvJ2XjslNV+TIeW6QdcQ0fj 4Hzmru0HXUSWBPLAhqwUUHhPXnNW8EG4hiWp8APVagxS3sJgK/IKpRG3QR X-Google-Smtp-Source: AGHT+IHkt5mBmHjh8rKVDEwEazUYb3LbQJH9Zf4gjO1RvE5cDpXQpDFmQNw8GIcrE1CEb2c7kqd9CQ== X-Received: by 2002:a05:6512:696:b0:595:81e1:2d00 with SMTP id 2adb3069b0e04-596a3e565b8mr17685671e87.0.1764663070131; Tue, 02 Dec 2025 00:11:10 -0800 (PST) Received: from [192.168.1.168] (83-233-6-197.cust.bredband2.com. [83.233.6.197]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-596bfa4f8a2sm4342412e87.88.2025.12.02.00.11.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Dec 2025 00:11:09 -0800 (PST) From: Marcus Folkesson Date: Tue, 02 Dec 2025 09:09:49 +0100 Subject: [PATCH RESEND v3 2/5] i2c: mux: add support for per channel bus frequency 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: quoted-printable Message-Id: <20251202-i2c-mux-v3-2-877dcf478a9f@gmail.com> References: <20251202-i2c-mux-v3-0-877dcf478a9f@gmail.com> In-Reply-To: <20251202-i2c-mux-v3-0-877dcf478a9f@gmail.com> To: Wolfram Sang , Peter Rosin , Michael Hennerich , Bartosz Golaszewski , Andi Shyti Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Marcus Folkesson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=7461; i=marcus.folkesson@gmail.com; h=from:subject:message-id; bh=o4Zt8X+zyI6wUYVNms/IgvHSL1cE9RhNZwSvJA7JohU=; b=owEBbQKS/ZANAwAKAYiATm9ZXVIyAcsmYgBpLp8GR85xUVqPcFCzvjQEr/w1FRhbGmHJa4NlI JK1I2W1EvaJAjMEAAEKAB0WIQQFUaLotmy1TWTBLGWIgE5vWV1SMgUCaS6fBgAKCRCIgE5vWV1S MkYxD/45TAxdHFF8XrvCWZ7OBTehcN0YcL1u2e8zUHg+1dKZkoOEaCpyNIqpNfT49w62Psid0rC Iybl0QZLD2w46eRd2booPOZ/n4LnRaFLPGFfQSa41W2JmUFO0a8n5TqeLrUmNbi0kUtOVAnEL89 S2nN7rMbp5QFFJ/l7Zq/RAm81mwUBz79mw3NJht8N2qC/xvw2KXVnAs0YmiAOIdXPfPiP5iu2RL RUJMIt3IPz6VRkxR1BLvr6wp6Uvwg6+DseVerX6J8bcWMh80yM7AYIVcu0MMj9EX88Bnjsqo0eN 3LFgiIu1CsvOExEuqr+CkV78Joi6kaiJJ8AVompM7kFF7bSOGxJza/NsBMXuPhqFpCSDLdP33cn 4I0urkVV4oeukp9fU5NK6+jAehTRoETVvYAUWFggjaulf3FLK3acl7/QMBOEnsqXyqoexO3fMOR r9oksT2jly2JEOmmnJ1CeqIeE8zQHaqlGLjfGj4G/uqY62M+S+TC1Dre2dXGVLyBRoKrtilEfHG LRBtlObeenMVd9SVpByUcJIgQ1sRqmouM1qNJBd59kBN4md+6P0U9nFjtRurlQuqpM4sRoiXVzL qZb50k9f3VTkAf7b21Vw3mnPLzaigHwKaNkirDgFsSYkXEynpioQTJhYzEAww9WPxyG29yHkswk rq6omxzUuVey4xg== X-Developer-Key: i=marcus.folkesson@gmail.com; a=openpgp; fpr=AB91D46C7E0F6E6FB2AB640EC0FE25D598F6C127 There may be several reasons why you may need to use a certain speed on an I2C bus. E.g. - When several devices are attached to the bus, the speed must be selected according to the slowest device. - Electrical conditions may limit the usuable speed on the bus for different reasons. With an I2C multiplexer, it is possible to group the attached devices after their preferred speed by e.g. put all "slow" devices on a separate channel on the multiplexer. Consider the following topology: .----------. 100kHz .--------. .--------. 400kHz | |--------| dev D1 | | root |--+-----| I2C MUX | '--------' '--------' | | |--. 400kHz .--------. | '----------' '-------| dev D2 | | .--------. '--------' '--| dev D3 | '--------' One requirement with this design is that a multiplexer may only use the same or lower bus speed as its parent. Otherwise, if the multiplexer would have to increase the bus frequency, then all siblings (D3 in this case) would run into a clock speed it may not support. The bus frequency for each channel is set in the devicetree. As the i2c-mux bindings import the i2c-controller schema, the clock-frequency property is already allowed. If no clock-frequency property is set, the channel inherit their parent bus speed. The following example uses dt bindings to illustrate the topology above: i2c { clock-frequency =3D <400000>; i2c-mux { i2c@0 { clock-frequency =3D <100000>; D1 { ... }; }; i2c@1 { D2 { ... }; }; }; D3 { ... } }; Signed-off-by: Marcus Folkesson --- drivers/i2c/i2c-mux.c | 116 ++++++++++++++++++++++++++++++++++++++++++++--= ---- 1 file changed, 104 insertions(+), 12 deletions(-) diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c index 4d8690981a55..67ba33a13dde 100644 --- a/drivers/i2c/i2c-mux.c +++ b/drivers/i2c/i2c-mux.c @@ -36,6 +36,72 @@ struct i2c_mux_priv { u32 chan_id; }; =20 +static int i2c_mux_select_chan(struct i2c_adapter *adap, u32 chan_id) +{ + struct i2c_mux_priv *priv =3D adap->algo_data; + struct i2c_mux_core *muxc =3D priv->muxc; + struct i2c_adapter *parent =3D muxc->parent; + struct i2c_adapter *root; + int ret; + + if (priv->adap.clock_hz && priv->adap.clock_hz !=3D parent->clock_hz) { + root =3D i2c_root_adapter(&adap->dev); + + /* if we are parent-locked and the root adapter is our parent, + * we already have the lock we need. Otherwise take the bus lock for the= root + * adaper before changing bus clock. + */ + if ((root !=3D parent && !muxc->mux_locked) || muxc->mux_locked) + i2c_lock_bus(parent, I2C_LOCK_ROOT_ADAPTER); + + ret =3D i2c_adapter_set_clk_freq(root, priv->adap.clock_hz); + + if ((root !=3D parent && !muxc->mux_locked) || muxc->mux_locked) + i2c_unlock_bus(parent, I2C_LOCK_ROOT_ADAPTER); + + if (ret < 0) { + dev_err(&adap->dev, + "Failed to set clock frequency %dHz on root adapter %s: %d\n", + priv->adap.clock_hz, root->name, ret); + + return ret; + } + } + + return muxc->select(muxc, priv->chan_id); +} + +static void i2c_mux_deselect_chan(struct i2c_adapter *adap, u32 chan_id) +{ + struct i2c_mux_priv *priv =3D adap->algo_data; + struct i2c_mux_core *muxc =3D priv->muxc; + struct i2c_adapter *parent =3D muxc->parent; + struct i2c_adapter *root; + int ret; + + if (parent->clock_hz && parent->clock_hz !=3D priv->adap.clock_hz) { + root =3D i2c_root_adapter(&parent->dev); + + /* if we are parent-locked and the root adapter is our parent, + * we already have the lock we need. Otherwise take the bus lock for the= root + * adaper before changing bus clock. + */ + if ((root !=3D parent && !muxc->mux_locked) || muxc->mux_locked) + i2c_lock_bus(parent, I2C_LOCK_ROOT_ADAPTER); + + ret =3D i2c_adapter_set_clk_freq(root, parent->clock_hz); + + if ((root !=3D parent && !muxc->mux_locked) || muxc->mux_locked) + i2c_unlock_bus(parent, I2C_LOCK_ROOT_ADAPTER); + + if (ret < 0) + return; + } + + if (muxc->deselect) + muxc->deselect(muxc, priv->chan_id); +} + static int __i2c_mux_master_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) { @@ -46,11 +112,11 @@ static int __i2c_mux_master_xfer(struct i2c_adapter *a= dap, =20 /* Switch to the right mux port and perform the transfer. */ =20 - ret =3D muxc->select(muxc, priv->chan_id); + ret =3D i2c_mux_select_chan(adap, priv->chan_id); if (ret >=3D 0) ret =3D __i2c_transfer(parent, msgs, num); - if (muxc->deselect) - muxc->deselect(muxc, priv->chan_id); + + i2c_mux_deselect_chan(adap, priv->chan_id); =20 return ret; } @@ -65,11 +131,11 @@ static int i2c_mux_master_xfer(struct i2c_adapter *ada= p, =20 /* Switch to the right mux port and perform the transfer. */ =20 - ret =3D muxc->select(muxc, priv->chan_id); + ret =3D i2c_mux_select_chan(adap, priv->chan_id); if (ret >=3D 0) ret =3D i2c_transfer(parent, msgs, num); - if (muxc->deselect) - muxc->deselect(muxc, priv->chan_id); + + i2c_mux_deselect_chan(adap, priv->chan_id); =20 return ret; } @@ -86,12 +152,12 @@ static int __i2c_mux_smbus_xfer(struct i2c_adapter *ad= ap, =20 /* Select the right mux port and perform the transfer. */ =20 - ret =3D muxc->select(muxc, priv->chan_id); + ret =3D i2c_mux_select_chan(adap, priv->chan_id); if (ret >=3D 0) ret =3D __i2c_smbus_xfer(parent, addr, flags, read_write, command, size, data); - if (muxc->deselect) - muxc->deselect(muxc, priv->chan_id); + + i2c_mux_deselect_chan(adap, priv->chan_id); =20 return ret; } @@ -108,12 +174,12 @@ static int i2c_mux_smbus_xfer(struct i2c_adapter *ada= p, =20 /* Select the right mux port and perform the transfer. */ =20 - ret =3D muxc->select(muxc, priv->chan_id); + ret =3D i2c_mux_select_chan(adap, priv->chan_id); if (ret >=3D 0) ret =3D i2c_smbus_xfer(parent, addr, flags, read_write, command, size, data); - if (muxc->deselect) - muxc->deselect(muxc, priv->chan_id); + + i2c_mux_deselect_chan(adap, priv->chan_id); =20 return ret; } @@ -365,6 +431,32 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc, } } =20 + of_property_read_u32(child, "clock-frequency", &priv->adap.clock_hz); + + /* + * Warn if the mux adapter is not parent-locked as + * this may cause issues for some hardware topologies. + */ + if ((priv->adap.clock_hz < parent->clock_hz) && muxc->mux_locked) + dev_warn(muxc->dev, + "channel %u is slower than parent on a non parent-locked mux\n", + chan_id); + + /* If the mux adapter has no clock-frequency property, inherit from pare= nt */ + if (!priv->adap.clock_hz) + priv->adap.clock_hz =3D parent->clock_hz; + + /* We don't support mux adapters faster than their parent */ + if (priv->adap.clock_hz > parent->clock_hz) { + dev_err(muxc->dev, + "channel (%u) is faster (%u) than parent (%u)\n", + chan_id, priv->adap.clock_hz, parent->clock_hz); + + of_node_put(mux_node); + ret =3D -EINVAL; + goto err_free_priv; + } + priv->adap.dev.of_node =3D child; of_node_put(mux_node); } --=20 2.51.2 From nobody Wed Dec 17 20:07:14 2025 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 7744330748C for ; Tue, 2 Dec 2025 08:11:14 +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=1764663076; cv=none; b=VZZ07UWlBoNb/TFu2w8a201tfHI1ylY6UJhwte+tGNclFpEgPMB/UEgN728zA/i21j+1KOImWfMuQNHaikho6s3hX9/z24EGg+cg4kisyxKsll+zv+vdJ/k2HJW/PkBtppqHgRWkCa0cZDSpmAsCkGBqWdsudAfOUXhBVF91xg8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764663076; c=relaxed/simple; bh=v2z8hyK1XpH9sRNEh0FTDATeNOoSf0j273yYmUHhCVg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dM56+SIOF9ijk81VmfVmdScDaP5GPzjNBZbq++mh4tzJAci98V9Y0QoEgHi14Xcteok0Lh7I/qhFqifZuKkBKT1ULBID7Q3hSBfX6k7Z0IZgeLNTOAsrF/iqoXgM9h46wL6VQu+fG6kAqLSDgjW4JvMacY0ZmCmVDVDfCgWtmgY= 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=nTBzYCMW; 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="nTBzYCMW" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-596ba05aaecso4539345e87.0 for ; Tue, 02 Dec 2025 00:11:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764663072; x=1765267872; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=pPjU1ecCTuWGBAgFie+Qqi/4OOu+1k326jCWsM9etTg=; b=nTBzYCMWSHogjJy8A22Fr4sRNYgQelVAubOMgu97Dl4l+0ezrz1McxIPQkPn3W8jfG OMEZDaK8xfuzjbtHM9Es5lxfbvOVeoSNjtZL1Vlm3VEZH0rdK6O8YKm7O2AymzwqigH1 L7DFixvgLUy07Uh6m2LYmzpgqjQIC3POFR6ry6ibI03jgPUg+ruI8txcYPfvQyXAHrhR V5xF/aZfMplHpsV2yhy88NutnuzlCAzi+CPFPAXW0B+K//694LybivOLHLpxj26tuP+S OZKw1zb/znoyKXE6sokE2Pk8g2TWzV1yejdz52AZ/ihxFboOGXVJociRmiYQIYRbDV7Z wvig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764663073; x=1765267873; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=pPjU1ecCTuWGBAgFie+Qqi/4OOu+1k326jCWsM9etTg=; b=WQx+Sy7sKI+k3AYGm41FETSe0pxLDEX+SFUU1mK0Uod1tfP9LxIe0gOSzojTvhVE5j WRbijsVjUL6T8L9v79591eGQDahCDF0jkEaLrGRvccvVtQr1yl1mQH4QR8pj1GcGsKfE qd1/rnSPalAC1bwnAhoRg6VqqL/fvpkSOI0/UR7T4xLh3CntzgjvlyP5Y9JMc+nBpYEJ M1TOzUvrAxIi5SUmwNuv2JxwzviT3xwMiLgUpTnYBGbd69nusX8G2oD4pCzL/aybOcen OelaiGJtiydbRyx6J4OxiyGwR7tG1rf/MIl1HbDAUObiamnKnjVAKhHvvSC9i0cGKV1k x/lg== X-Forwarded-Encrypted: i=1; AJvYcCV/tCLMtJ1LfKntvEztWKOCfum2V/KRA8+RO0LJ/xsvvaVqUbvPLgv6By3nseOLhfRpYNgYr0DQW6gumcI=@vger.kernel.org X-Gm-Message-State: AOJu0YxYcRchqZ4845cVHL+/uPt6NkA1KTDl0lz/+SZOvz9n1HuLS2Vm Y0YQuXdxFrZSRBRwmlx40uvuMZvyip6KywVEyoWKYYStfO2+AdEFosOJ X-Gm-Gg: ASbGncsL1sxxcN2cIOEQgNDdcnZkhkE3ut9KlgJZqLMWSiaaE7+ZqxvG3c2mi1VU9Jd OfnXfNP5Wf7gwzDD7VAHWOfbRG4oCiUXGmp52dIqrcFrBjZ/a/etVI2hZIOVrgmzYzRaQTTfT5p wVE4+J+cerUY+VTGylHAAVPfKgHY71pGowCoG0ygDTR0Hdax7oWV1XtUGwRBdVrj/97JunN3jMZ a+JBxfx4Dv7C+IkG9UfiaxRE4U4EJkYck2JSyoIKDFNRyNXCIzrK0U7Z2u6HpFYk8JQ2GeMzaCI zJcwPKpFDNbaDfDXoq6xoefZXKFYe24xKx8K7y7NWW20QP2TCxT0JBvRj4Mv/j/7e/d8cc8N8c0 +CsNSvFgfWNSbUMmEujc5cyXiEjEu9IVn11XqW3nUqZNXLOGrEY0iz7v9cJRBb5VlL4i0XFOlQd E1XbJjpbyFFnTuG88Qh0f2i3+y2HzB6kKuDbCtU7b7Ba3N1xq/hIi5Ef/C X-Google-Smtp-Source: AGHT+IGPFRnF1JlsylxIguYCMgo0UnvFghOw9F7rpNrbszZotcQLK1KLhFurv2Yk69urNHDaAj27Yw== X-Received: by 2002:a05:6512:e9d:b0:595:7e2f:cc61 with SMTP id 2adb3069b0e04-596a3e987abmr15387967e87.3.1764663072367; Tue, 02 Dec 2025 00:11:12 -0800 (PST) Received: from [192.168.1.168] (83-233-6-197.cust.bredband2.com. [83.233.6.197]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-596bfa4f8a2sm4342412e87.88.2025.12.02.00.11.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Dec 2025 00:11:11 -0800 (PST) From: Marcus Folkesson Date: Tue, 02 Dec 2025 09:09:50 +0100 Subject: [PATCH RESEND v3 3/5] i2c: davinci: calculate bus freq from Hz instead of kHz 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: quoted-printable Message-Id: <20251202-i2c-mux-v3-3-877dcf478a9f@gmail.com> References: <20251202-i2c-mux-v3-0-877dcf478a9f@gmail.com> In-Reply-To: <20251202-i2c-mux-v3-0-877dcf478a9f@gmail.com> To: Wolfram Sang , Peter Rosin , Michael Hennerich , Bartosz Golaszewski , Andi Shyti Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Marcus Folkesson , Bartosz Golaszewski X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2849; i=marcus.folkesson@gmail.com; h=from:subject:message-id; bh=v2z8hyK1XpH9sRNEh0FTDATeNOoSf0j273yYmUHhCVg=; b=owEBbQKS/ZANAwAKAYiATm9ZXVIyAcsmYgBpLp8LfCH80Z2/O1kVVMD9letrKwmIKdAN6JBZI KxyKBifmRaJAjMEAAEKAB0WIQQFUaLotmy1TWTBLGWIgE5vWV1SMgUCaS6fCwAKCRCIgE5vWV1S MoSfEADZmQbGCD7jr8sNaQSRLQ3o92mH9KkrlHwUSmibVB3H7pggLXptlMozSNW95T1ztcjqJGK uk6pkcWjE6PQJw75ekICw7EFDv1jtt8I/+377dGiLM2/hLTm2yKHkErWvbJze8hUCKzFZNTzBCx zJoCorS5lOAMvQzbAG7/u/LGgqc1jBnj3l9uliynlRUq4tp8LqCNn+mv03IjVvLvimVBWnzxzbd cp7KxdVlhcyB0NJt4BeYcLSDL86JCK3NzZKE+e74y0mjhiVNHWIrYBlem1NdkMye4d7FjHWYmv1 eiBRDFCr1oIaz8GbUdlsmsc/FgXRoNfP+7IJ7R44c2bFZiFOX7Nj0/p6oJZw5qheehGcM6FakrN 0yooDdWcZkbitZDC8DpH3UMnhDXZ8CL8p/BHaeRTALTSRD4JjGKU9C85KHgZK9iyENebYUc4YFM dz/6T8nkuYgIUamE2cKGxkcWcs4+aAtXkuGSVjOc0C29UW/40Mps2MjcxZ9+//rvEZGssM6OLgP VCoeGDuhz3ljdxbAiTJK6bAiOtLYrbV6Tc8p3LVM3DqtnAwIZpnYzlTGgv871I1lP3NsAUtDQ43 mAHSkuhFrEiWSlcUa+F6lDBfscbw7f0NcJ9jgHejzdWoa6bJlYXeVXespdx7YVYJKA1pSgKQUEu UW8CC8AOTMTCH4w== X-Developer-Key: i=marcus.folkesson@gmail.com; a=openpgp; fpr=AB91D46C7E0F6E6FB2AB640EC0FE25D598F6C127 The bus frequency is unnecessarily converted between Hz and kHz in several places. This is probably an old legacy from the old times (pre-devicetrees) when the davinci_i2c_platform_data took the bus_freq in kHz. Stick to Hz. Reviewed-by: Bartosz Golaszewski Signed-off-by: Marcus Folkesson --- drivers/i2c/busses/i2c-davinci.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davi= nci.c index 6a3d4e9e07f4..82f295619c4d 100644 --- a/drivers/i2c/busses/i2c-davinci.c +++ b/drivers/i2c/busses/i2c-davinci.c @@ -117,8 +117,6 @@ /* timeout for pm runtime autosuspend */ #define DAVINCI_I2C_PM_TIMEOUT 1000 /* ms */ =20 -#define DAVINCI_I2C_DEFAULT_BUS_FREQ 100 - struct davinci_i2c_dev { struct device *dev; void __iomem *base; @@ -134,8 +132,8 @@ struct davinci_i2c_dev { #ifdef CONFIG_CPU_FREQ struct notifier_block freq_transition; #endif - /* standard bus frequency (kHz) */ - unsigned int bus_freq; + /* standard bus frequency */ + unsigned int bus_freq_hz; /* Chip has a ICPFUNC register */ bool has_pfunc; }; @@ -209,16 +207,16 @@ static void i2c_davinci_calc_clk_dividers(struct davi= nci_i2c_dev *dev) if (device_is_compatible(dev->dev, "ti,keystone-i2c")) d =3D 6; =20 - clk =3D ((input_clock / (psc + 1)) / (dev->bus_freq * 1000)); + clk =3D ((input_clock / (psc + 1)) / (dev->bus_freq_hz)); /* Avoid driving the bus too fast because of rounding errors above */ - if (input_clock / (psc + 1) / clk > dev->bus_freq * 1000) + if (input_clock / (psc + 1) / clk > dev->bus_freq_hz) clk++; /* * According to I2C-BUS Spec 2.1, in FAST-MODE LOW period should be at * least 1.3uS, which is not the case with 50% duty cycle. Driving HIGH * to LOW ratio as 1 to 2 is more safe. */ - if (dev->bus_freq > 100) + if (dev->bus_freq_hz > 100000) clkl =3D (clk << 1) / 3; else clkl =3D (clk >> 1); @@ -269,7 +267,7 @@ static int i2c_davinci_init(struct davinci_i2c_dev *dev) davinci_i2c_read_reg(dev, DAVINCI_I2C_CLKL_REG)); dev_dbg(dev->dev, "CLKH =3D %d\n", davinci_i2c_read_reg(dev, DAVINCI_I2C_CLKH_REG)); - dev_dbg(dev->dev, "bus_freq =3D %dkHz\n", dev->bus_freq); + dev_dbg(dev->dev, "bus_freq_hz =3D %dHz\n", dev->bus_freq_hz); =20 =20 /* Take the I2C module out of reset: */ @@ -761,9 +759,9 @@ static int davinci_i2c_probe(struct platform_device *pd= ev) =20 r =3D device_property_read_u32(&pdev->dev, "clock-frequency", &prop); if (r) - prop =3D DAVINCI_I2C_DEFAULT_BUS_FREQ; + prop =3D I2C_MAX_STANDARD_MODE_FREQ; =20 - dev->bus_freq =3D prop / 1000; + dev->bus_freq_hz =3D prop; =20 dev->has_pfunc =3D device_property_present(&pdev->dev, "ti,has-pfunc"); =20 --=20 2.51.2 From nobody Wed Dec 17 20:07:14 2025 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) (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 D7773307AF0 for ; Tue, 2 Dec 2025 08:11:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764663078; cv=none; b=KCdfY94dJKKluST/akpJjrVfxaxZv0bkADACrY8r6oaq5+qlO0UYAv/Omg9ifwNDvsFjUSIvTC75dej7/Ep1HQbe7XxubMB7jmx4GORQx1VqAVqFmXRyZXdL5GgIdJRoo/4+h1207hawZ4c5oog5i68U7pwSJ9h0zpgJ60wV0Lc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764663078; c=relaxed/simple; bh=PGfDlWvGSscBxbVs8v8ZTNXGs8v6TwzoMOGQNHx4lNY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QKfYThxs1gxGAq+ZsBHWgj78jl4I9gxJWvlI+lc6pWYaRyRq6WdwUcGYlj5KG/4uqMy5JvdRVrihPn+i8wk8rQoWM7au7kSWmH3Ff7NDXnDjflWfmsx37gv0P8zImhk6wp1GzT+dUeQpiyRQFvPRfPXp7yDjjVVCc3jNgSxuDaI= 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=iY2WeCmh; arc=none smtp.client-ip=209.85.167.42 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="iY2WeCmh" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-59583505988so6586304e87.1 for ; Tue, 02 Dec 2025 00:11:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764663075; x=1765267875; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=adLvNDTeiStKP0eZHWwvkkAFK5IxR7T1lQU7JiLOZOA=; b=iY2WeCmhyd+DnNMSZxA1rcJvk+9gdq4L32wCgBallVVXM6FSowsBhrckaYj+S9YN1O FWkXXGHx72Ng3ZCcisJYG045Qa1MdvxeVs/GZ3zKa1fgKll1Uf1fa//5qcUaTJHa0Nm/ Xvg0z6SqOEe8ZSmcb3pARBDHxvkSgiCNJ0a+iqs8vy3yiKDim8yimTx46NksPJjU8kBg s9TltZ0gG38g7Kdm8SVIA+5sWrdK01UN6fDIINHRNyU40W3dPwNPazxxkisq0xnY44E/ tIrA0Oxw3nfc/SFKRN0KLmP6t2JilZ3h+VZyUYRpbK3ZAbUH00rZTMDBR74UeyohrhLp 48yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764663075; x=1765267875; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=adLvNDTeiStKP0eZHWwvkkAFK5IxR7T1lQU7JiLOZOA=; b=MXJHV7rN3y5UcQ4Va8gkcVs+nq6NebtL+l8Y+olvJ09PSzTY4bcbWtpYE+8EYLK2uy FhJvOZyefVmyQ3WWdRMb82MZIKIDHV4uvkBKAq/pcPTIA6h3CzOVajv3z3iEviq8iUk1 J/4rvlzY8+6VDlaTWmtUyYGgo+9qL+0RGoDkw+XG0tWz4+wcD1Zzgz/ilu1LsULjErzu tahN+cJAKXwaQNv5i2JRFTaeS8Du2fRA381IefCX2LQXUB0qmigGJYDXt8biEfNOOnUX 2FjAm1yAJQX74KF1afyCDFXPS1W8ilrZAfFwTXKMNxKRjvXVzK+xGT87QDXUcgz4eSDF gCgQ== X-Forwarded-Encrypted: i=1; AJvYcCWNd8fvbvtxCzW7ver8RWI2ZDDOM+siCS/n5iCOFBMl1MulRtUCrX3BIqgT5eFTeAREtoT9tGDjBgpMbQo=@vger.kernel.org X-Gm-Message-State: AOJu0YwbLofrDYcWiai3yZgzddjDK9y9Vp0edWuhWhdexVN8GBVKMSpL Vt3NPZHYiTCr3wOPURVeR8LM40w+STj9f1juU4lfZZde9GYeeZiRJ0rs X-Gm-Gg: ASbGncuBECW6iCYvPIbejw4o5FewijHgbnMd+D/ixNhxpHQXgaeRN3DLSHXPVIAUHZX 53ve1z/RMdXiQmS4p0YnRkWK+szomclTNk9Ar95e/dg+zVHgh/h1jEiEbOAQ1or81L/je4lWRRY 8RuEb44fVgsQ+p6vSU1FmgeBNudzOsVTXjTQg0yrZBJr1HUx6d8g57slckdyr40hUM+qYQsdg8G 5yjv4RSyqcOSLE2NYrtL+ehvoOakB5E1JASQBEwIxEgJpAlnR8pAu2N/VFQGFJ8U97uleX5bUfc UyuZRMoBT95jVT8Q2kVe7UtiVOl6/v7a704eOFwWp3JX5IryieHuVu3AebOttNx+oEVKpWPAa6Y foTsI5KRjHUJseOm9MLPksneT6vzaZqU1RUhE7THPisOXb3uJAUiIPWjE06WVNDfLr2TpwUgwCq L++NUYDd9WtqG6TL39E+pOR9ee6ETRd6Rv4fK+efPYsZs9t4xhB66eAk66 X-Google-Smtp-Source: AGHT+IE/6Ujf/ndJP175kyG+RcorUj0UCUQD+EBcycMSfGLIB/MQTBPPzYVUYN1vTXHMq+R8Z5NnZw== X-Received: by 2002:a05:6512:1081:b0:594:27de:77e7 with SMTP id 2adb3069b0e04-597cfb0430dmr577541e87.15.1764663074635; Tue, 02 Dec 2025 00:11:14 -0800 (PST) Received: from [192.168.1.168] (83-233-6-197.cust.bredband2.com. [83.233.6.197]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-596bfa4f8a2sm4342412e87.88.2025.12.02.00.11.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Dec 2025 00:11:13 -0800 (PST) From: Marcus Folkesson Date: Tue, 02 Dec 2025 09:09:51 +0100 Subject: [PATCH RESEND v3 4/5] i2c: davinci: add support for setting bus frequency 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: quoted-printable Message-Id: <20251202-i2c-mux-v3-4-877dcf478a9f@gmail.com> References: <20251202-i2c-mux-v3-0-877dcf478a9f@gmail.com> In-Reply-To: <20251202-i2c-mux-v3-0-877dcf478a9f@gmail.com> To: Wolfram Sang , Peter Rosin , Michael Hennerich , Bartosz Golaszewski , Andi Shyti Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Marcus Folkesson , Bartosz Golaszewski X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1624; i=marcus.folkesson@gmail.com; h=from:subject:message-id; bh=PGfDlWvGSscBxbVs8v8ZTNXGs8v6TwzoMOGQNHx4lNY=; b=owEBbQKS/ZANAwAKAYiATm9ZXVIyAcsmYgBpLp8Qi2I962N48ZEi7OQaJbPonP2RofpIcDdIF Qc2stjpsfaJAjMEAAEKAB0WIQQFUaLotmy1TWTBLGWIgE5vWV1SMgUCaS6fEAAKCRCIgE5vWV1S MpjuD/9HEkKWHOP0IZvSLXAbb4TgULotS/GvAHKuELjbV+pQuEp20j6vtDCA6wZCj06iSNZ9ePR ek8ISCZzlQIutSBTaZNKOu4nQdehiSt2CksmXna0GE9ZQykzpoBaaxqgUF5GPGIjKO3l2CYbKXo 0xU0lSoXtu1g0nHau5Pmh5YiAq8ATCyfGmIrdZ2xvadty8mnbmjsoZjzs0IorM8vBw2TnsaRGqo 2HlE8c9ZsuGKLMe2qsea1LyC+keoiQJYwaDta95B6Ertzb8SSlgQYebIt5lDQwwi2O0TkRgO8jY emFyvKGvc7LDIkUwT/0Op48swG7+Fq1NFoeDyDjzTbBqqMXdGnCP7/W5P3/UFA4Q+VBdLI2McOs PvO0M9Px1ZizYBOG3fhDr2y62s8FEQ8tolg3sdnPqYreWGVzpyMhP6rVGtL7jcClL/uyKX+X604 2Cd5p8n6skJuD8+mFxR+l/+dA9w58wrEQ/6VoTFIc1JH5neJ7JJZ+B9gEJ3onGZS9vweV6PrXRY nIM8FBphBbhuasC/rr9G+v+S7R/az0xJg0Lf6fp7l05klJGTKWM1U0rU/tMOp9EcurPPYNKc7hy x3WAJmuNP5NFXrcYPb57XNRuBE87aDHZYe/Y4tMclQPW0488mVo46NRjY2qXDnqZ8eICurOxJja qVdsLXxWV4ZU6WA== X-Developer-Key: i=marcus.folkesson@gmail.com; a=openpgp; fpr=AB91D46C7E0F6E6FB2AB640EC0FE25D598F6C127 Populate adapter with clock_hz and set_clk_freq to enable support for dynamic bus frequency. Acked-by: Bartosz Golaszewski Signed-off-by: Marcus Folkesson --- drivers/i2c/busses/i2c-davinci.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davi= nci.c index 82f295619c4d..fdde573eb59d 100644 --- a/drivers/i2c/busses/i2c-davinci.c +++ b/drivers/i2c/busses/i2c-davinci.c @@ -279,6 +279,27 @@ static int i2c_davinci_init(struct davinci_i2c_dev *de= v) return 0; } =20 +static int davinci_i2c_set_clk(struct i2c_adapter *adap, u32 clock_hz) +{ + struct davinci_i2c_dev *dev =3D i2c_get_adapdata(adap); + + if (dev->bus_freq_hz =3D=3D clock_hz) + return 0; + + dev->bus_freq_hz =3D clock_hz; + + /* put I2C into reset */ + davinci_i2c_reset_ctrl(dev, 0); + + /* compute clock dividers */ + i2c_davinci_calc_clk_dividers(dev); + + /* Take the I2C module out of reset: */ + davinci_i2c_reset_ctrl(dev, 1); + + return 0; +} + /* * This routine does i2c bus recovery by using i2c_generic_scl_recovery * which is provided by I2C Bus recovery infrastructure. @@ -810,6 +831,8 @@ static int davinci_i2c_probe(struct platform_device *pd= ev) adap->dev.parent =3D &pdev->dev; adap->timeout =3D DAVINCI_I2C_TIMEOUT; adap->dev.of_node =3D dev_of_node(&pdev->dev); + adap->clock_hz =3D dev->bus_freq_hz; + adap->set_clk_freq =3D davinci_i2c_set_clk; =20 if (dev->has_pfunc) adap->bus_recovery_info =3D &davinci_i2c_scl_recovery_info; --=20 2.51.2 From nobody Wed Dec 17 20:07:14 2025 Received: from mail-lf1-f47.google.com (mail-lf1-f47.google.com [209.85.167.47]) (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 1F71F3081C2 for ; Tue, 2 Dec 2025 08:11:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764663080; cv=none; b=nODDsV2fmdnSkVmZiviVv6bwWGwwiFGTX8tlMRyl27wBzhjeuX4VadXTqWpcCRubunSZLzUBHtjZcDBilQhq1J4vaLEo49GIf3cAuzp+e0wikBM/zCQzBDstkkLVQW9boAWafW9IwKmdiejvwoO4ZU/+GB1EQRj9dgOEgG/Vps8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764663080; c=relaxed/simple; bh=Pi8rg8aDh1DzKC60rhi2IjK0Atc4BXPx6hzEn3Z2p8o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OhZ5BbIRghB8mahmfDvk2aZqobxte6uNn60nk4ixBbSuaN2xaTCiP+7uoZuMlgjzwkcXi67z9x8mbV8ZKZkZQIkPORZ3jRCa4XZpD75sLrm7p6e7EVuHJhAvwn79w711XF4pJTQlyeXB0HViKbdiZ6SgYlmU3454rUFRj/Kx/Ik= 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=L5AZlVFO; arc=none smtp.client-ip=209.85.167.47 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="L5AZlVFO" Received: by mail-lf1-f47.google.com with SMTP id 2adb3069b0e04-5942b58ac81so2785134e87.2 for ; Tue, 02 Dec 2025 00:11:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764663076; x=1765267876; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=IqroyQdOYaFGXyI0EFoglrlTY6uLJckjii9oPbBz5cs=; b=L5AZlVFO1hun0/pgujLeRqPc6RYmDhDG26/fO4iAfwpN0x5B67DPR75Q1B00LCsULf mcLuoYn2neVl7Fawgz0VDyyJOLQ9phLePSjt3Sk+Vk4clqrvjwcO215F3lAbGFUyfT58 s8ryKQ3a40eqbJ0O8j10AdQcxtR8KSj4s0vVAT4rFK/WWC91nspEJmW3XDPsotDu2qx7 qpFxuPOnliJxhLwn0sFiwIm96Ik7ExHuXBeXbBlL1OxupDJ1f/aZxfCQmMHypIbdx0XH XE0wJHfyIgYjqwnI7mzRyldLiGPN8uWCy7Ti+vR+/nMza3opOr23VsrLOtvK4ZvovKzq P/pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764663076; x=1765267876; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=IqroyQdOYaFGXyI0EFoglrlTY6uLJckjii9oPbBz5cs=; b=AIqDel/VIO6zX25pImT58rSudm0kCcE1TLyouEI0+6uQeVhopCxSvqJh7+VDMGlOUi ShqJKfmJjY7//wPq20a4tDSFOFE+Wt1ZjUlaGwMeE0W4Uid4RRt6FIBoBwHMOIrEIAf+ nsQsPW01jLDgPj8IhdnIDielaGN8SILtfDgnedAuGRPnKh+9xU7paPpkVpae1hn064Ur Jg5i0EeDoBmm452XJgracgKxNf0+7Kq/VfsajVXJB67UjoYOxvJXCYORgNpx7M7tyMiu PJML402OA/rsfXwiLbSaLM2RGldkMFnlfgmfGFhb+uveC4qjp1aNfra6YgSu4njLdM+5 UM4g== X-Forwarded-Encrypted: i=1; AJvYcCXmZXvoXzj5FhI1ur+fE7NPtKjd0Zmt3O844CVA1z0EBq480mZxY6mXmCzpp0Ns73ZTOR0eR9bJjmGx/kw=@vger.kernel.org X-Gm-Message-State: AOJu0YxxUu5hgg5AZ+UfjMKBWueho+YoAl6gAzBKRUGsFLiU3ZPta6Vg rWDLDrnvEODJzDdsqOfDD06rKadz6XDMHjgsdX9gQI5HOSImEqFJoB2w X-Gm-Gg: ASbGncvTBBAoLGOyA8t0MXsD4Ml9Jv2Eg/Wa18oAD5biRsL4Yu3s8KKcxs4WBeXnxys XDZB/5XFDUSy0p8S9uZWXXHSBpz2IiI4/eUP/xGPZewJMabheYAEjPsiXymH8zcIpqxunxKXrfW wB5M3MAAjgHjhIYl0kz3YX7Y2Xoc2xyUGP34zbEqLmdXgken4lTXIgi+hyMiLapSnwabqDwKlQW Hwm3CKF7x2SjZ+xiWlfhurhuhCELqkREtVQ4R+95AgMMcUffpYBZcQF02XyzWV0Myv5ZG7H6Ig2 RF213vp/KctPcI1ws4YkePBKyu1q0otUc+E1lFwyZnd2j1ssgiL3ucXh0JjV+sHZhoS7bFU1gEh hjwroP2H99hEGtbGTVLjlQ0avdfL/r99wgUfTUmPN5f9d50VYZ6N9mlrODTsxaek/Id6mKbExXm WRDWR+TPgQALcQg41pG68HBHFLnWI8b53YS/+F51DU0T/XlWzJEylsuG2U X-Google-Smtp-Source: AGHT+IEb+VBCVNyagDT5gPRiB5WmDm7HGOACR9Uni4jwKE/gsWWylWuJbEZZd03WMkUc4VFrHJiujA== X-Received: by 2002:a05:6512:b05:b0:595:7fa2:acf with SMTP id 2adb3069b0e04-596a3ec5f2dmr14180182e87.31.1764663075934; Tue, 02 Dec 2025 00:11:15 -0800 (PST) Received: from [192.168.1.168] (83-233-6-197.cust.bredband2.com. [83.233.6.197]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-596bfa4f8a2sm4342412e87.88.2025.12.02.00.11.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Dec 2025 00:11:15 -0800 (PST) From: Marcus Folkesson Date: Tue, 02 Dec 2025 09:09:52 +0100 Subject: [PATCH RESEND v3 5/5] docs: i2c: i2c-topology: add section about bus speed 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: quoted-printable Message-Id: <20251202-i2c-mux-v3-5-877dcf478a9f@gmail.com> References: <20251202-i2c-mux-v3-0-877dcf478a9f@gmail.com> In-Reply-To: <20251202-i2c-mux-v3-0-877dcf478a9f@gmail.com> To: Wolfram Sang , Peter Rosin , Michael Hennerich , Bartosz Golaszewski , Andi Shyti Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Marcus Folkesson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=8159; i=marcus.folkesson@gmail.com; h=from:subject:message-id; bh=Pi8rg8aDh1DzKC60rhi2IjK0Atc4BXPx6hzEn3Z2p8o=; b=owEBbQKS/ZANAwAKAYiATm9ZXVIyAcsmYgBpLp8VLTl5xCyf2EQf7wT9s/dzhWz/rFWA8dubB OV3UgpqHRqJAjMEAAEKAB0WIQQFUaLotmy1TWTBLGWIgE5vWV1SMgUCaS6fFQAKCRCIgE5vWV1S MkUVEAChVEaAjhda0fCwByquOerUJWkhKRl4FGW3qXonGb3Ma7D4RdRzBLV93voH998w5p/MqTs lYhAPv2qInDSlEBmMVsR96vh1dv5gTW7yi8R+ti2X5za1pfp5nTVgYixDAsqsBa3oNyjAGCTkcz qstgqqCFe+/7Ya6pMq9QkyhufY5oi5yU6Ag69RNlhc+NHRq5m3E/Ay+wiTqrxxQGRBImQOS562P MuHX/W/OmtmVUA1U5sfr4bKBHgo5UnNsYBIUFLXOV0lrGsqIRWHE4kWxfP1l1AfBXVjUxHTWYwr n9+nZg74gQ0Xvr6Dz5VTNGKfsEJYO+/4EOx55Bl8fYeIDVzyjHTjONSZkdh/Zw5RQLupBzIudov KFqdUq7VUK53B4AbufrtYN5sF8om0HqSuqMFoBrNTDjBrUKOoFyRLU2hfrS5C9rWb0Ibdm0Ufah 1ym7vrKv325JS3g28QuNQTWWfbjSgKi7YCfM0pd8c0xYGdfnsUgN1gXBWahGz6QSS+8dLyHF5dQ mSyuDYziGbAxw8SDCDwgoWsBH+by9XfM//CHpvGNgw6ps7HVlRcRGVmhlI5shgyUXC/9QCu3kXT rY6lFqOtgBwZibw0nPHJvvxj1cyof4If/1e34OetFiY3h3Nj/x85DsEis4QI5v6UyK5tXMKPcN7 EYvlva3XGyvKwmQ== X-Developer-Key: i=marcus.folkesson@gmail.com; a=openpgp; fpr=AB91D46C7E0F6E6FB2AB640EC0FE25D598F6C127 Describe what needs to be consideraed and taken into account when using different bus speeds for different mux channels. Signed-off-by: Marcus Folkesson --- Documentation/i2c/i2c-topology.rst | 176 +++++++++++++++++++++++++++++++++= ++++ 1 file changed, 176 insertions(+) diff --git a/Documentation/i2c/i2c-topology.rst b/Documentation/i2c/i2c-top= ology.rst index 48fce0f7491b..2c4a1364ce82 100644 --- a/Documentation/i2c/i2c-topology.rst +++ b/Documentation/i2c/i2c-topology.rst @@ -367,6 +367,182 @@ When D1 or D2 are accessed, accesses to D3 and D4 are= locked out while accesses to D5 may interleave. When D3 or D4 are accessed, accesses to all other devices are locked out. =20 +Bus Speed and I2C Multiplexers +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D + +I2C bus multiplexers allows multiple downstream channels to be exposed +as separate I2C adapters which also could set their own bus speed. + +The multiplexer itself cannot change the bus speed as it use the upstream +clock and data lines to communicate with the downstream devices. The speed +is therfor changed in the root adapter resulting in that the whole bus is +affected. + +This increases the complexity of the topology and some considerations must +be taken into. + +Bus speed +---------- + +Downstream channels of an I2C multiplexer can only operate at the same or +lower bus speed as the upstream bus. This is because the upstream bus may +have devices that cannot operate at higher speeds and those will be affect= ed +by the speed change. + +The example below illustrates the problem. +The root adapter is operating at 100kHz. D2 can only operate with 100kHz, +but D2 can operate at 400kHz. When D1 is selected, the bus speed of the +root adapter would have to be is set to 400kHz, a speed that D2 may not su= pport. + +This topology is therefor not allowed: :: + + .----------. 400kHz .--------. + .--------. 100kHz | mux- |--------| dev D1 | + | root |--+-----| locked | '--------' + '--------' | | mux M1 | + | '----------' + | .--------. + '--| dev D2 | + '--------' + + +This topology is allowed: :: + + .----------. 100kHz .--------. + .--------. 400kHz | mux- |--------| dev D2 | + | root |--+-----| locked | '--------' + '--------' | mux M1 |--. 400kHz .--------. + '----------' '--------| dev D1 | + '--------' + +Preferred topology +------------------- + +The preferred topology when using different bus speeds is to have the mult= iplexer +connected directly to the root adapter without any devices as siblings. +By this arrangement, the bus speed can be changed without affecting any ot= her devices +and many of the caveats are avoided. + +Other multiplexers in parallell is still okay as those are locked out duri= ng transfers. + +This is the preferred topology: :: + + .----------. 100kHz .--------. + .--------. 400kHz | mux- |--------| dev D2 | + | root |--+-----| locked | '--------' + '--------' | mux M1 |--. 400kHz .--------. + '----------' '--------| dev D1 | + '--------' +Locking +-------- + +If the multiplexer is mux-locked, transfers to D3 may interleave between t= he +select-transfer-deselect to D1 or D2. +This results in a situation where the bus speed to D3 may be lower than it +is supposed to be. This is usually not a problem. + +This topology is allowed but some transfers to D3 may be at 100kHz: :: + + .----------. 100kHz .--------. + .--------. 400kHz | mux- |--------| dev D1 | + | root |--+-----| locked | '--------' + '--------' | | mux M1 |--. 400kHz .--------. + | '----------' '--------| dev D2 | + | .--------. '--------' + '--| dev D3 | + '--------' + +Multiple muxes in series +-------------------------- + +When multiple muxes are used in series the same rules applies. + +Transfers to D3 may interleave between select-transfer-deselect to D1, whi= ch +results that the bus speed to D2 or D3 will be at 100KHz. + +Transfers to D2 may interleave between select-transfer-deselect to D1, whi= ch +results in that the bus speed to D1 may be at 400kHz as the transfer to D2 +will set the bus speed to before the transfer to D1 starts. + +This is probably a bad topology :: + + .----------. 400kHz .----------. 100kHz .--------. + .--------.400kHz | mux- |--------| mux- |--------| dev D1 | + | root |--+----| locked | 400kHz | locked | '--------' + '--------' | | mux M1 |--. | mux M2 | + | '----------' | '----------' + | .--------. | .--------. + '--| dev D3 | '--| dev D2 | + '--------' '--------' + +Multiple muxes in parallell +---------------------------- + +When multiple muxes are used in parallell all access to other muxes are lo= cked out +so this is not a problem. + +If the muxes are mux-locked, access to D3 may still interleave though. + +In the example below, D3 may not interleave between select-transfer-desele= ct for D1 +or D2 as both muxes are parent-locked: :: + + + .----------. 100kHz .--------. + | parent- |----------| dev D1 | + .--| locked | '--------' + | | mux M1 | + | '----------' + | .----------. 400KHz .--------. + .--------. 400kHz | parent- |---------| dev D2 | + | root |--+------| locked | '--------' + '--------' | | mux M2 | + | '----------' + | .--------. + '--| dev D3 | + '--------' + +Idle state +----------- + +Muxes have an idle state, which is the state the channels is put into when= no channel +is active. The state is typically one of the following: + +- All channels are disconnected +- The last selected channel is left as-is +- A predefined channel is selected + +Muxes that support an idle state where all channels are disconnected are p= referred when using +different bus speeds. Otherwise high bus speeds may "leak" through to devi= ces that +may not support that higher speed. + +Consider the following example: :: + + .----------. 100kHz .--------. + .--------. 400kHz | mux- |--------| dev D1 | + | root |--+-----| locked | '--------' + '--------' | | mux M1 |--. 400kHz .--------. + | '----------' '--------| dev D2 | + | .--------. '--------' + '--| dev D3 | + '--------' + +If the idle state of M1 is: +- All channels disconnected: No problem, D1 and D2 are not affected by com= munication + to D3. +- Last selected channel: Problem if D1 was the last selected channel. High= speed + communication to D3 will be "leaked" to D1. +- Predefined channel: Problem, if the predefined channel D1. Set predefine= d channel + to D2 as D2 may handle 400kHz. + +Supported controllers +----------------------- + +Not all I2C controllers support setting the bus speed dynamically. +At the time of writint, the following controllers has support: + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +i2c-davinci Supports dynamic bus speed +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 Mux type of existing device drivers =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --=20 2.51.2