• Home
  • Raw
  • Download

Lines Matching +full:clk +full:- +full:delay +full:- +full:cycles

1 // SPDX-License-Identifier: GPL-2.0-only
14 #include <linux/clk.h>
25 #include "sdhci-pltfm.h"
46 struct platform_device *pdev = to_platform_device(mmc_dev(host->mmc)); in pxav2_reset()
47 struct sdhci_pxa_platdata *pdata = pdev->dev.platform_data; in pxav2_reset()
58 if (pdata && pdata->clk_delay_sel == 1) { in pxav2_reset()
59 tmp = readw(host->ioaddr + SD_CLOCK_BURST_SIZE_SETUP); in pxav2_reset()
62 tmp |= (pdata->clk_delay_cycles & SDCLK_DELAY_MASK) in pxav2_reset()
67 writew(tmp, host->ioaddr + SD_CLOCK_BURST_SIZE_SETUP); in pxav2_reset()
70 if (pdata && (pdata->flags & PXA_FLAG_ENABLE_CLOCK_GATING)) { in pxav2_reset()
71 tmp = readw(host->ioaddr + SD_FIFO_PARAM); in pxav2_reset()
73 writew(tmp, host->ioaddr + SD_FIFO_PARAM); in pxav2_reset()
75 tmp = readw(host->ioaddr + SD_FIFO_PARAM); in pxav2_reset()
78 writew(tmp, host->ioaddr + SD_FIFO_PARAM); in pxav2_reset()
88 ctrl = readb(host->ioaddr + SDHCI_HOST_CONTROL); in pxav2_mmc_set_bus_width()
89 tmp = readw(host->ioaddr + SD_CE_ATA_2); in pxav2_mmc_set_bus_width()
100 writew(tmp, host->ioaddr + SD_CE_ATA_2); in pxav2_mmc_set_bus_width()
101 writeb(ctrl, host->ioaddr + SDHCI_HOST_CONTROL); in pxav2_mmc_set_bus_width()
115 .compatible = "mrvl,pxav2-mmc",
124 struct device_node *np = dev->of_node; in pxav2_get_mmc_pdata()
132 if (of_find_property(np, "non-removable", NULL)) in pxav2_get_mmc_pdata()
133 pdata->flags |= PXA_FLAG_CARD_PERMANENT; in pxav2_get_mmc_pdata()
135 of_property_read_u32(np, "bus-width", &bus_width); in pxav2_get_mmc_pdata()
137 pdata->flags |= PXA_FLAG_SD_8_BIT_CAPABLE_SLOT; in pxav2_get_mmc_pdata()
139 of_property_read_u32(np, "mrvl,clk-delay-cycles", &clk_delay_cycles); in pxav2_get_mmc_pdata()
141 pdata->clk_delay_sel = 1; in pxav2_get_mmc_pdata()
142 pdata->clk_delay_cycles = clk_delay_cycles; in pxav2_get_mmc_pdata()
157 struct sdhci_pxa_platdata *pdata = pdev->dev.platform_data; in sdhci_pxav2_probe()
158 struct device *dev = &pdev->dev; in sdhci_pxav2_probe()
163 struct clk *clk; in sdhci_pxav2_probe() local
171 clk = devm_clk_get(dev, "PXA-SDHCLK"); in sdhci_pxav2_probe()
172 if (IS_ERR(clk)) { in sdhci_pxav2_probe()
174 ret = PTR_ERR(clk); in sdhci_pxav2_probe()
177 pltfm_host->clk = clk; in sdhci_pxav2_probe()
178 ret = clk_prepare_enable(clk); in sdhci_pxav2_probe()
180 dev_err(&pdev->dev, "failed to enable io clock\n"); in sdhci_pxav2_probe()
184 host->quirks = SDHCI_QUIRK_BROKEN_ADMA in sdhci_pxav2_probe()
188 match = of_match_device(of_match_ptr(sdhci_pxav2_of_match), &pdev->dev); in sdhci_pxav2_probe()
193 if (pdata->flags & PXA_FLAG_CARD_PERMANENT) { in sdhci_pxav2_probe()
194 /* on-chip device */ in sdhci_pxav2_probe()
195 host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION; in sdhci_pxav2_probe()
196 host->mmc->caps |= MMC_CAP_NONREMOVABLE; in sdhci_pxav2_probe()
200 if (pdata->flags & PXA_FLAG_SD_8_BIT_CAPABLE_SLOT) in sdhci_pxav2_probe()
201 host->mmc->caps |= MMC_CAP_8_BIT_DATA; in sdhci_pxav2_probe()
203 if (pdata->quirks) in sdhci_pxav2_probe()
204 host->quirks |= pdata->quirks; in sdhci_pxav2_probe()
205 if (pdata->host_caps) in sdhci_pxav2_probe()
206 host->mmc->caps |= pdata->host_caps; in sdhci_pxav2_probe()
207 if (pdata->pm_caps) in sdhci_pxav2_probe()
208 host->mmc->pm_caps |= pdata->pm_caps; in sdhci_pxav2_probe()
211 host->ops = &pxav2_sdhci_ops; in sdhci_pxav2_probe()
220 clk_disable_unprepare(clk); in sdhci_pxav2_probe()
228 .name = "sdhci-pxav2",