All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josua Mayer <josua@solid-run.com>
To: Marc Kleine-Budde <mkl@pengutronix.de>,
	Vincent Mailhol <mailhol@kernel.org>,
	Vinod Koul <vkoul@kernel.org>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	Peter Rosin <peda@axentia.se>,
	Aaro Koskinen <aaro.koskinen@iki.fi>,
	Andreas Kemnade <andreas@kemnade.info>,
	Kevin Hilman <khilman@baylibre.com>,
	Roger Quadros <rogerq@kernel.org>,
	Tony Lindgren <tony@atomide.com>,
	Janusz Krzysztofik <jmkrzyszt@gmail.com>,
	Vignesh R <vigneshr@ti.com>, Andi Shyti <andi.shyti@kernel.org>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	Magnus Damm <magnus.damm@gmail.com>,
	Wolfram Sang <wsa+renesas@sang-engineering.com>
Cc: Yazan Shhady <yazan.shhady@solid-run.com>,
	Jon Nettleton <jon@solid-run.com>,
	Mikhail Anikin <mikhail.anikin@solid-run.com>,
	"linux-can@vger.kernel.org" <linux-can@vger.kernel.org>,
	"linux-phy@lists.infradead.org" <linux-phy@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
	"linux-i2c@vger.kernel.org" <linux-i2c@vger.kernel.org>,
	"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-renesas-soc@vger.kernel.org"
	<linux-renesas-soc@vger.kernel.org>,
	Dan Carpenter <dan.carpenter@linaro.org>
Subject: Re: [PATCH v8 2/7] mux: Add helper functions for getting optional and selected mux-state
Date: Tue, 3 Feb 2026 15:35:37 +0000	[thread overview]
Message-ID: <e6bccab9-79ce-4b9b-942e-01c504228d7b@solid-run.com> (raw)
In-Reply-To: <20260203-rz-sdio-mux-v8-2-024ea405863e@solid-run.com>

On 03/02/2026 15:01, Josua Mayer wrote:
> In-tree phy-can-transceiver driver has already implemented a local
> version of devm_mux_state_get_optional.
>
> The omap-i2c driver gets and selects an optional mux in its probe
> function without using any helper.
>
> Add new helper functions covering both aforementioned use-cases:
>
> - mux_control_get_optional:
>    Get a mux-control if specified in dt, return NULL otherwise.
> - devm_mux_state_get_optional:
>    Get a mux-state if specified in dt, return NULL otherwise.
> - devm_mux_state_get_selected:
>    Get and select a mux-state specified in dt, return error otherwise.
> - devm_mux_state_get_optional_selected:
>    Get and select a mux-state if specified in dt, return error or NULL.
>
> Existing mux_get helper function is changed to take an extra argument
> indicating whether the mux is optional.
> In this case no error is printed, and NULL returned in case of ENOENT.
>
> Calling code is adapted to handle NULL return case, and to pass optional
> argument as required.
>
> To support automatic deselect for _selected helper, a new structure is
> created storing an exit pointer similar to clock core which is called on
> release.
>
> To facilitate code sharing between optional/mandatory/selected helpers,
> a new internal helper function is added to handle quiet (optional) and
> verbose (mandatory) errors, as well as storing the correct callback for
> devm release: __devm_mux_state_get
>
> Due to this structure devm_mux_state_get_*_selected can no longer print
> a useful error message when select fails. Instead callers should print
> errors where needed.
>
> Commit e153fdea9db04 ("phy: can-transceiver: Re-instate "mux-states"
> property presence check") noted that "mux_get() always prints an error
> message in case of an error, including when the property is not present,
> confusing the user."
>
> The first error message covers the case that a mux name is not matched
> in dt. The second error message is based on of_parse_phandle_with_args
> return value.
>
> In optional case no error is printed and NULL is returned.
> This ensures that the new helper functions will not confuse the user
> either.
>
> With the addition of optional helper functions it became clear that
> drivers should compile and link even if CONFIG_MULTIPLEXER was not enabled.
> Add stubs for all symbols exported by mux core.
>
> Signed-off-by: Josua Mayer <josua@solid-run.com>
> ---
>   drivers/mux/core.c           | 205 ++++++++++++++++++++++++++++++++++++-------
>   include/linux/mux/consumer.h | 108 ++++++++++++++++++++++-
>   2 files changed, 278 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/mux/core.c b/drivers/mux/core.c
> index a3840fe0995f..2e8295e3aabe 100644
> --- a/drivers/mux/core.c
> +++ b/drivers/mux/core.c
> @@ -46,6 +46,16 @@ static const struct class mux_class = {
>   	.name = "mux",
>   };
>   
> +/**
> + * struct devm_mux_state_state -	Tracks managed resources for mux-state objects.
> + * @mstate:				Pointer to a mux state.
> + * @exit:				An optional callback to execute before free.
> + */
> +struct devm_mux_state_state {
> +	struct mux_state *mstate;
> +	int (*exit)(struct mux_state *mstate);
> +};
> +
>   static DEFINE_IDA(mux_ida);
>   
>   static int __init mux_init(void)
> @@ -516,17 +526,19 @@ static struct mux_chip *of_find_mux_chip_by_node(struct device_node *np)
>   	return dev ? to_mux_chip(dev) : NULL;
>   }
>   
> -/*
> +/**
>    * mux_get() - Get the mux-control for a device.
>    * @dev: The device that needs a mux-control.
>    * @mux_name: The name identifying the mux-control.
>    * @state: Pointer to where the requested state is returned, or NULL when
>    *         the required multiplexer states are handled by other means.
> + * @optional: Whether to return NULL and silence errors when mux doesn't exist.
>    *
> - * Return: A pointer to the mux-control, or an ERR_PTR with a negative errno.
> + * Return: Pointer to the mux-control on success, an ERR_PTR with a negative errno on error,
> + * or NULL if optional is true and mux doesn't exist.
>    */
>   static struct mux_control *mux_get(struct device *dev, const char *mux_name,
> -				   unsigned int *state)
> +				   unsigned int *state, bool optional)
>   {
>   	struct device_node *np = dev->of_node;
>   	struct of_phandle_args args;
> @@ -542,7 +554,9 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name,
>   		else
>   			index = of_property_match_string(np, "mux-control-names",
>   							 mux_name);
> -		if (index < 0) {
> +		if (index < 0 && optional) {
> +			return NULL;
> +		} else if (index < 0) {
>   			dev_err(dev, "mux controller '%s' not found\n",
>   				mux_name);
>   			return ERR_PTR(index);
> @@ -558,8 +572,12 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name,
>   						 "mux-controls", "#mux-control-cells",
>   						 index, &args);
>   	if (ret) {
> +		if (optional && ret == -ENOENT)
> +			return NULL;
> +
>   		dev_err(dev, "%pOF: failed to get mux-%s %s(%i)\n",
> -			np, state ? "state" : "control", mux_name ?: "", index);
> +			np, state ? "state" : "control",
> +			mux_name ?: "", index);
>   		return ERR_PTR(ret);
>   	}
>   
> @@ -617,10 +635,28 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name,
>    */
>   struct mux_control *mux_control_get(struct device *dev, const char *mux_name)
>   {
> -	return mux_get(dev, mux_name, NULL);
> +	struct mux_control *mux = mux_get(dev, mux_name, NULL, false);
> +
> +	if (!mux)
> +		return ERR_PTR(-ENOENT);
> +
> +	return mux;
>   }
>   EXPORT_SYMBOL_GPL(mux_control_get);
>   
> +/**
> + * mux_control_get_optional() - Get the optional mux-control for a device.
> + * @dev: The device that needs a mux-control.
> + * @mux_name: The name identifying the mux-control.
> + *
> + * Return: A pointer to the mux-control, an ERR_PTR with a negative errno.
  * Return: Pointer to the mux-state on success, an ERR_PTR with a 
negative errno on error,
  * or NULL if mux doesn't exist.

If there will be v9, I shall change this to be more precise similar to 
other functions.
> + */
> +struct mux_control *mux_control_get_optional(struct device *dev, const char *mux_name)
> +{
> +	return mux_get(dev, mux_name, NULL, true);
> +}
> +EXPORT_SYMBOL_GPL(mux_control_get_optional);
> +
>   /**
>    * mux_control_put() - Put away the mux-control for good.
>    * @mux: The mux-control to put away.
> @@ -657,10 +693,13 @@ struct mux_control *devm_mux_control_get(struct device *dev,
>   	if (!ptr)
>   		return ERR_PTR(-ENOMEM);
>   
> -	mux = mux_control_get(dev, mux_name);
> +	mux = mux_get(dev, mux_name, NULL, false);
>   	if (IS_ERR(mux)) {
>   		devres_free(ptr);
>   		return mux;
> +	} else if (!mux) {
> +		devres_free(ptr);
> +		return ERR_PTR(-ENOENT);
>   	}
>   
>   	*ptr = mux;
> @@ -670,14 +709,16 @@ struct mux_control *devm_mux_control_get(struct device *dev,
>   }
>   EXPORT_SYMBOL_GPL(devm_mux_control_get);
>   
> -/*
> +/**
>    * mux_state_get() - Get the mux-state for a device.
>    * @dev: The device that needs a mux-state.
>    * @mux_name: The name identifying the mux-state.
> + * @optional: Whether to return NULL and silence errors when mux doesn't exist.
>    *
> - * Return: A pointer to the mux-state, or an ERR_PTR with a negative errno.
> + * Return: Pointer to the mux-state on success, an ERR_PTR with a negative errno on error,
> + * or NULL if optional is true and mux doesn't exist.
>    */
> -static struct mux_state *mux_state_get(struct device *dev, const char *mux_name)
> +static struct mux_state *mux_state_get(struct device *dev, const char *mux_name, bool optional)
>   {
>   	struct mux_state *mstate;
>   
...

WARNING: multiple messages have this Message-ID (diff)
From: Josua Mayer <josua@solid-run.com>
To: Marc Kleine-Budde <mkl@pengutronix.de>,
	Vincent Mailhol <mailhol@kernel.org>,
	Vinod Koul <vkoul@kernel.org>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	Peter Rosin <peda@axentia.se>,
	Aaro Koskinen <aaro.koskinen@iki.fi>,
	Andreas Kemnade <andreas@kemnade.info>,
	Kevin Hilman <khilman@baylibre.com>,
	Roger Quadros <rogerq@kernel.org>,
	Tony Lindgren <tony@atomide.com>,
	Janusz Krzysztofik <jmkrzyszt@gmail.com>,
	Vignesh R <vigneshr@ti.com>, Andi Shyti <andi.shyti@kernel.org>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	Magnus Damm <magnus.damm@gmail.com>,
	Wolfram Sang <wsa+renesas@sang-engineering.com>
Cc: Yazan Shhady <yazan.shhady@solid-run.com>,
	Jon Nettleton <jon@solid-run.com>,
	Mikhail Anikin <mikhail.anikin@solid-run.com>,
	"linux-can@vger.kernel.org" <linux-can@vger.kernel.org>,
	"linux-phy@lists.infradead.org" <linux-phy@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
	"linux-i2c@vger.kernel.org" <linux-i2c@vger.kernel.org>,
	"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-renesas-soc@vger.kernel.org"
	<linux-renesas-soc@vger.kernel.org>,
	Dan Carpenter <dan.carpenter@linaro.org>
Subject: Re: [PATCH v8 2/7] mux: Add helper functions for getting optional and selected mux-state
Date: Tue, 3 Feb 2026 15:35:37 +0000	[thread overview]
Message-ID: <e6bccab9-79ce-4b9b-942e-01c504228d7b@solid-run.com> (raw)
In-Reply-To: <20260203-rz-sdio-mux-v8-2-024ea405863e@solid-run.com>

On 03/02/2026 15:01, Josua Mayer wrote:
> In-tree phy-can-transceiver driver has already implemented a local
> version of devm_mux_state_get_optional.
>
> The omap-i2c driver gets and selects an optional mux in its probe
> function without using any helper.
>
> Add new helper functions covering both aforementioned use-cases:
>
> - mux_control_get_optional:
>    Get a mux-control if specified in dt, return NULL otherwise.
> - devm_mux_state_get_optional:
>    Get a mux-state if specified in dt, return NULL otherwise.
> - devm_mux_state_get_selected:
>    Get and select a mux-state specified in dt, return error otherwise.
> - devm_mux_state_get_optional_selected:
>    Get and select a mux-state if specified in dt, return error or NULL.
>
> Existing mux_get helper function is changed to take an extra argument
> indicating whether the mux is optional.
> In this case no error is printed, and NULL returned in case of ENOENT.
>
> Calling code is adapted to handle NULL return case, and to pass optional
> argument as required.
>
> To support automatic deselect for _selected helper, a new structure is
> created storing an exit pointer similar to clock core which is called on
> release.
>
> To facilitate code sharing between optional/mandatory/selected helpers,
> a new internal helper function is added to handle quiet (optional) and
> verbose (mandatory) errors, as well as storing the correct callback for
> devm release: __devm_mux_state_get
>
> Due to this structure devm_mux_state_get_*_selected can no longer print
> a useful error message when select fails. Instead callers should print
> errors where needed.
>
> Commit e153fdea9db04 ("phy: can-transceiver: Re-instate "mux-states"
> property presence check") noted that "mux_get() always prints an error
> message in case of an error, including when the property is not present,
> confusing the user."
>
> The first error message covers the case that a mux name is not matched
> in dt. The second error message is based on of_parse_phandle_with_args
> return value.
>
> In optional case no error is printed and NULL is returned.
> This ensures that the new helper functions will not confuse the user
> either.
>
> With the addition of optional helper functions it became clear that
> drivers should compile and link even if CONFIG_MULTIPLEXER was not enabled.
> Add stubs for all symbols exported by mux core.
>
> Signed-off-by: Josua Mayer <josua@solid-run.com>
> ---
>   drivers/mux/core.c           | 205 ++++++++++++++++++++++++++++++++++++-------
>   include/linux/mux/consumer.h | 108 ++++++++++++++++++++++-
>   2 files changed, 278 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/mux/core.c b/drivers/mux/core.c
> index a3840fe0995f..2e8295e3aabe 100644
> --- a/drivers/mux/core.c
> +++ b/drivers/mux/core.c
> @@ -46,6 +46,16 @@ static const struct class mux_class = {
>   	.name = "mux",
>   };
>   
> +/**
> + * struct devm_mux_state_state -	Tracks managed resources for mux-state objects.
> + * @mstate:				Pointer to a mux state.
> + * @exit:				An optional callback to execute before free.
> + */
> +struct devm_mux_state_state {
> +	struct mux_state *mstate;
> +	int (*exit)(struct mux_state *mstate);
> +};
> +
>   static DEFINE_IDA(mux_ida);
>   
>   static int __init mux_init(void)
> @@ -516,17 +526,19 @@ static struct mux_chip *of_find_mux_chip_by_node(struct device_node *np)
>   	return dev ? to_mux_chip(dev) : NULL;
>   }
>   
> -/*
> +/**
>    * mux_get() - Get the mux-control for a device.
>    * @dev: The device that needs a mux-control.
>    * @mux_name: The name identifying the mux-control.
>    * @state: Pointer to where the requested state is returned, or NULL when
>    *         the required multiplexer states are handled by other means.
> + * @optional: Whether to return NULL and silence errors when mux doesn't exist.
>    *
> - * Return: A pointer to the mux-control, or an ERR_PTR with a negative errno.
> + * Return: Pointer to the mux-control on success, an ERR_PTR with a negative errno on error,
> + * or NULL if optional is true and mux doesn't exist.
>    */
>   static struct mux_control *mux_get(struct device *dev, const char *mux_name,
> -				   unsigned int *state)
> +				   unsigned int *state, bool optional)
>   {
>   	struct device_node *np = dev->of_node;
>   	struct of_phandle_args args;
> @@ -542,7 +554,9 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name,
>   		else
>   			index = of_property_match_string(np, "mux-control-names",
>   							 mux_name);
> -		if (index < 0) {
> +		if (index < 0 && optional) {
> +			return NULL;
> +		} else if (index < 0) {
>   			dev_err(dev, "mux controller '%s' not found\n",
>   				mux_name);
>   			return ERR_PTR(index);
> @@ -558,8 +572,12 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name,
>   						 "mux-controls", "#mux-control-cells",
>   						 index, &args);
>   	if (ret) {
> +		if (optional && ret == -ENOENT)
> +			return NULL;
> +
>   		dev_err(dev, "%pOF: failed to get mux-%s %s(%i)\n",
> -			np, state ? "state" : "control", mux_name ?: "", index);
> +			np, state ? "state" : "control",
> +			mux_name ?: "", index);
>   		return ERR_PTR(ret);
>   	}
>   
> @@ -617,10 +635,28 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name,
>    */
>   struct mux_control *mux_control_get(struct device *dev, const char *mux_name)
>   {
> -	return mux_get(dev, mux_name, NULL);
> +	struct mux_control *mux = mux_get(dev, mux_name, NULL, false);
> +
> +	if (!mux)
> +		return ERR_PTR(-ENOENT);
> +
> +	return mux;
>   }
>   EXPORT_SYMBOL_GPL(mux_control_get);
>   
> +/**
> + * mux_control_get_optional() - Get the optional mux-control for a device.
> + * @dev: The device that needs a mux-control.
> + * @mux_name: The name identifying the mux-control.
> + *
> + * Return: A pointer to the mux-control, an ERR_PTR with a negative errno.
  * Return: Pointer to the mux-state on success, an ERR_PTR with a 
negative errno on error,
  * or NULL if mux doesn't exist.

If there will be v9, I shall change this to be more precise similar to 
other functions.
> + */
> +struct mux_control *mux_control_get_optional(struct device *dev, const char *mux_name)
> +{
> +	return mux_get(dev, mux_name, NULL, true);
> +}
> +EXPORT_SYMBOL_GPL(mux_control_get_optional);
> +
>   /**
>    * mux_control_put() - Put away the mux-control for good.
>    * @mux: The mux-control to put away.
> @@ -657,10 +693,13 @@ struct mux_control *devm_mux_control_get(struct device *dev,
>   	if (!ptr)
>   		return ERR_PTR(-ENOMEM);
>   
> -	mux = mux_control_get(dev, mux_name);
> +	mux = mux_get(dev, mux_name, NULL, false);
>   	if (IS_ERR(mux)) {
>   		devres_free(ptr);
>   		return mux;
> +	} else if (!mux) {
> +		devres_free(ptr);
> +		return ERR_PTR(-ENOENT);
>   	}
>   
>   	*ptr = mux;
> @@ -670,14 +709,16 @@ struct mux_control *devm_mux_control_get(struct device *dev,
>   }
>   EXPORT_SYMBOL_GPL(devm_mux_control_get);
>   
> -/*
> +/**
>    * mux_state_get() - Get the mux-state for a device.
>    * @dev: The device that needs a mux-state.
>    * @mux_name: The name identifying the mux-state.
> + * @optional: Whether to return NULL and silence errors when mux doesn't exist.
>    *
> - * Return: A pointer to the mux-state, or an ERR_PTR with a negative errno.
> + * Return: Pointer to the mux-state on success, an ERR_PTR with a negative errno on error,
> + * or NULL if optional is true and mux doesn't exist.
>    */
> -static struct mux_state *mux_state_get(struct device *dev, const char *mux_name)
> +static struct mux_state *mux_state_get(struct device *dev, const char *mux_name, bool optional)
>   {
>   	struct mux_state *mstate;
>   
...
-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

  reply	other threads:[~2026-02-03 15:35 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-03 13:01 [PATCH v8 0/7] mmc: host: renesas_sdhi_core: support configuring an optional sdio mux Josua Mayer
2026-02-03 13:01 ` Josua Mayer
2026-02-03 13:01 ` [PATCH v8 1/7] phy: can-transceiver: rename temporary helper function to avoid conflict Josua Mayer
2026-02-03 13:01   ` Josua Mayer
2026-02-04 15:18   ` Wolfram Sang
2026-02-04 15:18     ` Wolfram Sang
2026-02-03 13:01 ` [PATCH v8 2/7] mux: Add helper functions for getting optional and selected mux-state Josua Mayer
2026-02-03 13:01   ` Josua Mayer
2026-02-03 15:35   ` Josua Mayer [this message]
2026-02-03 15:35     ` Josua Mayer
2026-02-04 14:21     ` Ulf Hansson
2026-02-04 14:21       ` Ulf Hansson
2026-02-04 15:19   ` Wolfram Sang
2026-02-04 15:19     ` Wolfram Sang
2026-02-03 13:01 ` [PATCH v8 3/7] mux: add help text for MULTIPLEXER config option Josua Mayer
2026-02-03 13:01   ` Josua Mayer
2026-02-04 15:19   ` Wolfram Sang
2026-02-04 15:19     ` Wolfram Sang
2026-02-08 15:16   ` Josua Mayer
2026-02-08 15:16     ` Josua Mayer
2026-02-09  8:06     ` Geert Uytterhoeven
2026-02-09  8:06       ` Geert Uytterhoeven
2026-02-09 10:12       ` Josua Mayer
2026-02-09 10:12         ` Josua Mayer
2026-02-09 10:17         ` Geert Uytterhoeven
2026-02-09 10:17           ` Geert Uytterhoeven
2026-02-09 10:47           ` Josua Mayer
2026-02-09 10:47             ` Josua Mayer
2026-02-09 11:03             ` Geert Uytterhoeven
2026-02-09 11:03               ` Geert Uytterhoeven
2026-02-03 13:01 ` [PATCH v8 4/7] phy: can-transceiver: drop temporary helper getting optional mux-state Josua Mayer
2026-02-03 13:01   ` Josua Mayer
2026-02-04 15:19   ` Wolfram Sang
2026-02-04 15:19     ` Wolfram Sang
2026-02-03 13:01 ` [PATCH v8 5/7] i2c: omap: switch to new generic helper for getting selected mux-state Josua Mayer
2026-02-03 13:01   ` Josua Mayer
2026-02-04 15:20   ` Wolfram Sang
2026-02-04 15:20     ` Wolfram Sang
2026-02-03 13:01 ` [PATCH v8 6/7] dt-bindings: mmc: renesas,sdhi: Add mux-states property Josua Mayer
2026-02-03 13:01   ` Josua Mayer
2026-02-04 15:20   ` Wolfram Sang
2026-02-04 15:20     ` Wolfram Sang
2026-02-03 13:01 ` [PATCH v8 7/7] mmc: host: renesas_sdhi_core: support selecting an optional mux Josua Mayer
2026-02-03 13:01   ` Josua Mayer
2026-02-04 15:20   ` Wolfram Sang
2026-02-04 15:20     ` Wolfram Sang
2026-02-04 15:47   ` Wolfram Sang
2026-02-04 15:47     ` Wolfram Sang
2026-02-04 15:33 ` [PATCH v8 0/7] mmc: host: renesas_sdhi_core: support configuring an optional sdio mux Ulf Hansson
2026-02-04 15:33   ` Ulf Hansson
2026-02-12 10:54   ` Ulf Hansson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e6bccab9-79ce-4b9b-942e-01c504228d7b@solid-run.com \
    --to=josua@solid-run.com \
    --cc=aaro.koskinen@iki.fi \
    --cc=andi.shyti@kernel.org \
    --cc=andreas@kemnade.info \
    --cc=conor+dt@kernel.org \
    --cc=dan.carpenter@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=geert+renesas@glider.be \
    --cc=jmkrzyszt@gmail.com \
    --cc=jon@solid-run.com \
    --cc=khilman@baylibre.com \
    --cc=krzk+dt@kernel.org \
    --cc=linux-can@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-phy@lists.infradead.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=magnus.damm@gmail.com \
    --cc=mailhol@kernel.org \
    --cc=mikhail.anikin@solid-run.com \
    --cc=mkl@pengutronix.de \
    --cc=neil.armstrong@linaro.org \
    --cc=peda@axentia.se \
    --cc=robh@kernel.org \
    --cc=rogerq@kernel.org \
    --cc=tony@atomide.com \
    --cc=ulf.hansson@linaro.org \
    --cc=vigneshr@ti.com \
    --cc=vkoul@kernel.org \
    --cc=wsa+renesas@sang-engineering.com \
    --cc=yazan.shhady@solid-run.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.