Re: [PATCH 2/2] mux: rzv2h-vbenctl: Add suspend and resume support
From: Alvin Šipraga
Date: Tue Nov 03 2026 - 10:24:34 EST
On Thu, Oct 08, 2026 at 09:44:47AM +0200, Tommaso Merciai wrote:
> On deep sleep the USB2PHY block loses power and the VBUS_SEL bit is
> cleared. The mux state is read during suspend and stored in the private
> memory of the mux_chip. Then the state is restored during resume.
>
> Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@xxxxxxxxxxxxxx>
Reviewed-by: Alvin Šipraga <alvin.sipraga@xxxxxxxxxx>
> ---
> drivers/mux/rzv2h-vbenctl.c | 24 ++++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
> diff --git a/drivers/mux/rzv2h-vbenctl.c b/drivers/mux/rzv2h-vbenctl.c
> index 2699458045f3..d088ac3cab2a 100644
> --- a/drivers/mux/rzv2h-vbenctl.c
> +++ b/drivers/mux/rzv2h-vbenctl.c
> @@ -15,6 +15,7 @@
>
> struct mux_rzv2h_vbenctl_priv {
> struct regmap_field *field;
> + unsigned int hardware_state;
> };
>
> static int mux_rzv2h_vbenctl_set(struct mux_control *mux, int state)
> @@ -60,9 +61,29 @@ static int mux_rzv2h_vbenctl_probe(struct auxiliary_device *adev,
> if (ret < 0)
> return dev_err_probe(dev, ret, "Failed to register mux chip\n");
>
> + auxiliary_set_drvdata(adev, priv);
> +
> return 0;
> }
>
> +static int mux_rzv2h_vbenctl_suspend(struct device *dev)
> +{
> + struct mux_rzv2h_vbenctl_priv *priv = dev_get_drvdata(dev);
> +
> + return regmap_field_read(priv->field, &priv->hardware_state);
> +}
> +
> +static int mux_rzv2h_vbenctl_resume(struct device *dev)
> +{
> + struct mux_rzv2h_vbenctl_priv *priv = dev_get_drvdata(dev);
> +
> + return regmap_field_write(priv->field, priv->hardware_state);
> +}
> +
> +static DEFINE_SIMPLE_DEV_PM_OPS(mux_rzv2h_vbenctl_pm_ops,
> + mux_rzv2h_vbenctl_suspend,
> + mux_rzv2h_vbenctl_resume);
> +
> static const struct auxiliary_device_id mux_rzv2h_vbenctl_ids[] = {
> { .name = "rzv2h_usb2phy_reset.vbenctl" },
> { /* sentinel */ }
> @@ -73,6 +94,9 @@ static struct auxiliary_driver mux_rzv2h_vbenctl_driver = {
> .name = "vbenctl",
> .probe = mux_rzv2h_vbenctl_probe,
> .id_table = mux_rzv2h_vbenctl_ids,
> + .driver = {
> + .pm = pm_sleep_ptr(&mux_rzv2h_vbenctl_pm_ops),
> + },
> };
> module_auxiliary_driver(mux_rzv2h_vbenctl_driver);
>
> --
> 2.54.0
>