Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mmc: sdhci-xenon: use match data for controllers variants

As a part of the ACPI support preparation resign from checking
compatible strings in the driver. Instead of that use a new
enum and assign the values to match data accordingly.

Signed-off-by: Marcin Wojtas <mw@semihalf.com>
Link: https://lore.kernel.org/r/20201204171626.10935-2-mw@semihalf.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

authored by

Marcin Wojtas and committed by
Ulf Hansson
f75fda37 6f56023a

+17 -5
+3 -1
drivers/mmc/host/sdhci-xenon-phy.c
··· 651 651 struct device_node *np, 652 652 struct xenon_emmc_phy_params *params) 653 653 { 654 + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 655 + struct xenon_priv *priv = sdhci_pltfm_priv(pltfm_host); 654 656 int ret = 0; 655 657 const char *name; 656 658 struct resource iomem; 657 659 658 - if (of_device_is_compatible(np, "marvell,armada-3700-sdhci")) 660 + if (priv->hw_version == XENON_A3700) 659 661 params->pad_ctrl.set_soc_pad = armada_3700_soc_pad_voltage_set; 660 662 else 661 663 return 0;
+6 -4
drivers/mmc/host/sdhci-xenon.c
··· 418 418 u32 tuning_count; 419 419 420 420 /* Disable HS200 on Armada AP806 */ 421 - if (of_device_is_compatible(np, "marvell,armada-ap806-sdhci")) 421 + if (priv->hw_version == XENON_AP806) 422 422 host->quirks2 |= SDHCI_QUIRK2_BROKEN_HS200; 423 423 424 424 sdhc_id = 0x0; ··· 494 494 495 495 pltfm_host = sdhci_priv(host); 496 496 priv = sdhci_pltfm_priv(pltfm_host); 497 + 498 + priv->hw_version = (unsigned long)device_get_match_data(&pdev->dev); 497 499 498 500 /* 499 501 * Link Xenon specific mmc_host_ops function, ··· 669 667 }; 670 668 671 669 static const struct of_device_id sdhci_xenon_dt_ids[] = { 672 - { .compatible = "marvell,armada-ap806-sdhci",}, 673 - { .compatible = "marvell,armada-cp110-sdhci",}, 674 - { .compatible = "marvell,armada-3700-sdhci",}, 670 + { .compatible = "marvell,armada-ap806-sdhci", .data = (void *)XENON_AP806}, 671 + { .compatible = "marvell,armada-cp110-sdhci", .data = (void *)XENON_CP110}, 672 + { .compatible = "marvell,armada-3700-sdhci", .data = (void *)XENON_A3700}, 675 673 {} 676 674 }; 677 675 MODULE_DEVICE_TABLE(of, sdhci_xenon_dt_ids);
+8
drivers/mmc/host/sdhci-xenon.h
··· 53 53 #define XENON_CTRL_HS200 0x5 54 54 #define XENON_CTRL_HS400 0x6 55 55 56 + enum xenon_variant { 57 + XENON_A3700, 58 + XENON_AP806, 59 + XENON_AP807, 60 + XENON_CP110 61 + }; 62 + 56 63 struct xenon_priv { 57 64 unsigned char tuning_count; 58 65 /* idx of SDHC */ ··· 97 90 void *phy_params; 98 91 struct xenon_emmc_phy_regs *emmc_phy_regs; 99 92 bool restore_needed; 93 + enum xenon_variant hw_version; 100 94 }; 101 95 102 96 int xenon_phy_adj(struct sdhci_host *host, struct mmc_ios *ios);