[PATCH v6 2/5] i2c: mux: add support for per channel bus frequency

Marcus Folkesson marcus.folkesson at gmail.com
Mon Feb 16 10:50:16 PST 2026


Hi Peter!

On Mon, Feb 16, 2026 at 05:40:37PM +0100, Peter Rosin wrote:
> Hi!
> 
> > +static struct i2c_mux_core *i2c_mux_first_mux_locked(struct i2c_adapter *adap)
> > +{
> > +	struct i2c_adapter *parent;
> > +
> > +	while ((parent = i2c_parent_is_i2c_adapter(adap)) != NULL) {
> > +		struct i2c_mux_priv *priv = adap->algo_data;
> 
> This assumption does not hold, making the cast pretty wild indeed. There
> are other i2c_adapters with a parent besides muxes. See e.g. i2c_atr.c

I see. Hrm, not sure how to decide if it is a mux or not. The best I
could come up with is to look at the i2c_adapter.lock_ops. E.g.


	while ((parent = i2c_parent_is_i2c_adapter(adap)) != NULL) {
		/*
		 * Check if this adapter is a mux channel by verifying its
		 * lock_ops. Only mux channels use these specific lock operations.
		 */
		if (adap->lock_ops == &i2c_mux_lock_ops ||
		    adap->lock_ops == &i2c_parent_lock_ops) {
			struct i2c_mux_priv *priv = adap->algo_data;

			if (priv->muxc->mux_locked)
				return priv->muxc;
		}
		adap = parent;
	}

Or do you have a better idea?


> 
> Cheers,
> Peter


Thank you in advance,
Marcus Folkesson
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20260216/c01765df/attachment.sig>


More information about the linux-arm-kernel mailing list