Commit f75fda37 authored by Marcin Wojtas's avatar Marcin Wojtas Committed by Ulf Hansson
Browse files

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: default avatarMarcin Wojtas <mw@semihalf.com>
Link: https://lore.kernel.org/r/20201204171626.10935-2-mw@semihalf.com


Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 6f56023a
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -651,11 +651,13 @@ static int get_dt_pad_ctrl_data(struct sdhci_host *host,
				struct device_node *np,
				struct xenon_emmc_phy_params *params)
{
	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
	struct xenon_priv *priv = sdhci_pltfm_priv(pltfm_host);
	int ret = 0;
	const char *name;
	struct resource iomem;

	if (of_device_is_compatible(np, "marvell,armada-3700-sdhci"))
	if (priv->hw_version == XENON_A3700)
		params->pad_ctrl.set_soc_pad = armada_3700_soc_pad_voltage_set;
	else
		return 0;
+6 −4
Original line number Diff line number Diff line
@@ -418,7 +418,7 @@ static int xenon_probe_dt(struct platform_device *pdev)
	u32 tuning_count;

	/* Disable HS200 on Armada AP806 */
	if (of_device_is_compatible(np, "marvell,armada-ap806-sdhci"))
	if (priv->hw_version == XENON_AP806)
		host->quirks2 |= SDHCI_QUIRK2_BROKEN_HS200;

	sdhc_id = 0x0;
@@ -495,6 +495,8 @@ static int xenon_probe(struct platform_device *pdev)
	pltfm_host = sdhci_priv(host);
	priv = sdhci_pltfm_priv(pltfm_host);

	priv->hw_version = (unsigned long)device_get_match_data(&pdev->dev);

	/*
	 * Link Xenon specific mmc_host_ops function,
	 * to replace standard ones in sdhci_ops.
@@ -667,9 +669,9 @@ static const struct dev_pm_ops sdhci_xenon_dev_pm_ops = {
};

static const struct of_device_id sdhci_xenon_dt_ids[] = {
	{ .compatible = "marvell,armada-ap806-sdhci",},
	{ .compatible = "marvell,armada-cp110-sdhci",},
	{ .compatible = "marvell,armada-3700-sdhci",},
	{ .compatible = "marvell,armada-ap806-sdhci", .data = (void *)XENON_AP806},
	{ .compatible = "marvell,armada-cp110-sdhci", .data =  (void *)XENON_CP110},
	{ .compatible = "marvell,armada-3700-sdhci", .data =  (void *)XENON_A3700},
	{}
};
MODULE_DEVICE_TABLE(of, sdhci_xenon_dt_ids);
+8 −0
Original line number Diff line number Diff line
@@ -53,6 +53,13 @@
#define XENON_CTRL_HS200			0x5
#define XENON_CTRL_HS400			0x6

enum xenon_variant {
	XENON_A3700,
	XENON_AP806,
	XENON_AP807,
	XENON_CP110
};

struct xenon_priv {
	unsigned char	tuning_count;
	/* idx of SDHC */
@@ -90,6 +97,7 @@ struct xenon_priv {
	void		*phy_params;
	struct xenon_emmc_phy_regs *emmc_phy_regs;
	bool restore_needed;
	enum xenon_variant hw_version;
};

int xenon_phy_adj(struct sdhci_host *host, struct mmc_ios *ios);