mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
mmc: Merge branch fixes into next
Merge the mmc fixes for v7.1-rc[n] into the next branch, to allow them to get tested together with the mmc changes that are targeted for the next release. Signed-off-by: Ulf Hansson <ulfh@kernel.org>
This commit is contained in:
commit
576e40d20e
|
|
@ -441,6 +441,22 @@ static int dw_mci_common_parse_dt(struct dw_mci *host)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dw_mci_rk2928_parse_dt(struct dw_mci *host)
|
||||
{
|
||||
struct dw_mci_rockchip_priv_data *priv;
|
||||
int err;
|
||||
|
||||
err = dw_mci_common_parse_dt(host);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
priv = host->priv;
|
||||
|
||||
priv->internal_phase = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dw_mci_rk3288_parse_dt(struct dw_mci *host)
|
||||
{
|
||||
struct dw_mci_rockchip_priv_data *priv;
|
||||
|
|
@ -514,6 +530,7 @@ static int dw_mci_rockchip_init(struct dw_mci *host)
|
|||
|
||||
static const struct dw_mci_drv_data rk2928_drv_data = {
|
||||
.init = dw_mci_rockchip_init,
|
||||
.parse_dt = dw_mci_rk2928_parse_dt,
|
||||
};
|
||||
|
||||
static const struct dw_mci_drv_data rk3288_drv_data = {
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/iopoll.h>
|
||||
#include <linux/litex.h>
|
||||
#include <linux/math.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
|
@ -68,6 +69,9 @@
|
|||
#define SD_SLEEP_US 5
|
||||
#define SD_TIMEOUT_US 20000
|
||||
|
||||
#define SD_INIT_DELAY_US 1000
|
||||
#define SD_INIT_CLK_HZ 400000
|
||||
|
||||
#define SDIRQ_CARD_DETECT 1
|
||||
#define SDIRQ_SD_TO_MEM_DONE 2
|
||||
#define SDIRQ_MEM_TO_SD_DONE 4
|
||||
|
|
@ -436,11 +440,10 @@ static void litex_mmc_setclk(struct litex_mmc_host *host, unsigned int freq)
|
|||
struct device *dev = mmc_dev(host->mmc);
|
||||
u32 div;
|
||||
|
||||
div = freq ? host->ref_clk / freq : 256U;
|
||||
div = roundup_pow_of_two(div);
|
||||
div = freq ? DIV_ROUND_UP(host->ref_clk, freq) : 256U;
|
||||
div = clamp(div, 2U, 256U);
|
||||
dev_dbg(dev, "sd_clk_freq=%d: set to %d via div=%d\n",
|
||||
freq, host->ref_clk / div, div);
|
||||
freq, host->ref_clk / ((div + 1) & ~1U), div);
|
||||
litex_write16(host->sdphy + LITEX_PHY_CLOCKERDIV, div);
|
||||
host->sd_clk = freq;
|
||||
}
|
||||
|
|
@ -449,6 +452,17 @@ static void litex_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
|
|||
{
|
||||
struct litex_mmc_host *host = mmc_priv(mmc);
|
||||
|
||||
/*
|
||||
* The SD specification requires at least 74 idle clocks before CMD0.
|
||||
* These dummy cycles is generated by writing LITEX_PHY_INITIALIZE.
|
||||
*/
|
||||
if (ios->chip_select == MMC_CS_HIGH) {
|
||||
litex_mmc_setclk(host, SD_INIT_CLK_HZ);
|
||||
litex_write8(host->sdphy + LITEX_PHY_INITIALIZE, 1);
|
||||
fsleep(SD_INIT_DELAY_US);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* NOTE: Ignore any ios->bus_width updates; they occur right after
|
||||
* the mmc core sends its own acmd6 bus-width change notification,
|
||||
|
|
|
|||
|
|
@ -3836,6 +3836,7 @@ int sdhci_resume_host(struct sdhci_host *host)
|
|||
host->pwr = 0;
|
||||
host->clock = 0;
|
||||
host->reinit_uhs = true;
|
||||
mmc->ops->start_signal_voltage_switch(mmc, &mmc->ios);
|
||||
mmc->ops->set_ios(mmc, &mmc->ios);
|
||||
} else {
|
||||
sdhci_init(host, (mmc->pm_flags & MMC_PM_KEEP_POWER));
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user