Re: [PATCH] mmc: host: sdhci-esdhc-imx: let usr to config the wakeup for gpio cd pin through sysfs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 18 Oct 2023 at 04:07, Bough Chen <haibo.chen@xxxxxxx> wrote:
>
> > -----Original Message-----
> > From: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
> > Sent: 2023年10月17日 19:35
> > To: Bough Chen <haibo.chen@xxxxxxx>
> > Cc: adrian.hunter@xxxxxxxxx; linux-mmc@xxxxxxxxxxxxxxx; dl-linux-imx
> > <linux-imx@xxxxxxx>; shawnguo@xxxxxxxxxx; s.hauer@xxxxxxxxxxxxxx;
> > kernel@xxxxxxxxxxxxxx; festevam@xxxxxxxxx
> > Subject: Re: [PATCH] mmc: host: sdhci-esdhc-imx: let usr to config the wakeup
> > for gpio cd pin through sysfs
> >
> > On Tue, 17 Oct 2023 at 09:26, <haibo.chen@xxxxxxx> wrote:
> > >
> > > From: Haibo Chen <haibo.chen@xxxxxxx>
> > >
> > > Currently default enable the gpio cd pin wakeup, this will waste power
> > > after system suspend if usr do not need this cd pin wakeup feature.
> > > Now let usr to config the wakeup for gpio cd pin through sysfs.
> > >
> > > Signed-off-by: Haibo Chen <haibo.chen@xxxxxxx>
> > > ---
> > >  drivers/mmc/host/sdhci-esdhc-imx.c | 14 ++++++++++----
> > >  1 file changed, 10 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c
> > > b/drivers/mmc/host/sdhci-esdhc-imx.c
> > > index 40a6e2f8145a..2e46648344ba 100644
> > > --- a/drivers/mmc/host/sdhci-esdhc-imx.c
> > > +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
> > > @@ -1797,9 +1797,12 @@ static int sdhci_esdhc_imx_probe(struct
> > platform_device *pdev)
> > >         /*
> > >          * Setup the wakeup capability here, let user to decide
> > >          * whether need to enable this wakeup through sysfs interface.
> > > +        * First check the SDIO device, second check the gpio CD pin.
> > >          */
> > > -       if ((host->mmc->pm_caps & MMC_PM_KEEP_POWER) &&
> > > -                       (host->mmc->pm_caps &
> > MMC_PM_WAKE_SDIO_IRQ))
> > > +       if (((host->mmc->pm_caps & MMC_PM_KEEP_POWER) &&
> > > +                       (host->mmc->pm_caps &
> > MMC_PM_WAKE_SDIO_IRQ)) ||
> > > +           ((host->mmc->caps & MMC_CAP_CD_WAKE) &&
> > > +                        host->mmc->slot.cd_irq >= 0))
> > >                 device_set_wakeup_capable(&pdev->dev, true);
> >
> > If the wakeup is GPIO based, it doesn't mean that the device is wakeup capable,
> > so this is wrong.
> >
> > In principle this must be managed through the GPIO irqchip driver instead.
>
> Yes, I know GPIO and USDHC are different device, combine GPIO wakeup to USDHC is not that reasonable.
> I send this patch because I notice there is similar code in sdhci-pci-core.c, refer to sdhci_pci_suspend_host()
>
> Seems PCI subsystem combine GPIO wakeup to PCI controller.

Good point! I am not sure that is the correct way to do it either, but
maybe it's fine for PCI based devices. Adrian probably knows this
better.

The main problem I see with your approach, is that it may prevent a PM
domain (genpd), if the USDHC device is attached to one, from being
powered-off during system suspend. That would be wrong as the USDHC
device doesn't need to stay powered-on to allow a GPIO to be
configured as a system wakeup irq.

>
> Anyway, I will try to implement this in GPIO irqchip driver.

That sounds like the right thing to do.

Although, it does mean that we won't be able to allow userspace to
decide on a per GPIO pin/irq basis, if system wakeup should be enabled
or disabled. As far as I know, we don't have a solution in place to
support that.

[...]

Kind regards
Uffe




[Index of Archives]     [Linux Memonry Technology]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux