On 14/11/19 2:54 PM, Ivan Mikhaylov wrote: > Change the default .get_cd callback. Add inverted signal card detection > check. > > Signed-off-by: Ivan Mikhaylov <i.mikhaylov@xxxxxxxxx> > > diff --git a/drivers/mmc/host/sdhci-of-aspeed.c b/drivers/mmc/host/sdhci-of-aspeed.c > index 8962f6664381..186559ee8fcc 100644 > --- a/drivers/mmc/host/sdhci-of-aspeed.c > +++ b/drivers/mmc/host/sdhci-of-aspeed.c > @@ -143,6 +143,19 @@ static inline int aspeed_sdhci_calculate_slot(struct aspeed_sdhci *dev, > return (delta / 0x100) - 1; > } > > +static int aspeed_get_cd(struct mmc_host *mmc) > +{ > + struct sdhci_host *host = mmc_priv(mmc); > + > + int present = !!(sdhci_readl(host, SDHCI_PRESENT_STATE) > + & SDHCI_CARD_PRESENT); > + > + if (mmc->caps2 & MMC_CAP2_CD_ACTIVE_HIGH) > + present = !present; Perhaps safer to flip the bit using CONFIG_MMC_SDHCI_IO_ACCESSORS and ->readl() callback > + > + return present; > +} > + > static int aspeed_sdhci_probe(struct platform_device *pdev) > { > struct sdhci_pltfm_host *pltfm_host; > @@ -183,6 +196,10 @@ static int aspeed_sdhci_probe(struct platform_device *pdev) > goto err_pltfm_free; > } > > + host->mmc_host_ops.get_cd = aspeed_get_cd; > + if (of_property_read_bool(pdev->dev.of_node, "cd-inverted")) > + dev_info(&pdev->dev, "aspeed: sdhci: presence signal inversion enabled\n"); Is this print really needed? > + > ret = mmc_of_parse(host->mmc); > if (ret) > goto err_sdhci_add; >