tifm_sd: fix hardware timeout setup
The register access order when setting hardware timeout was incorrect and causing problems (wrong timeout intervals). This is now fixed. Signed-off-by: Alex Dubov <oakad@yahoo.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
This commit is contained in:
parent
0803dd0c25
commit
83d420ba92
1 changed files with 7 additions and 8 deletions
|
@ -442,22 +442,21 @@ static void tifm_sd_set_data_timeout(struct tifm_sd *host,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
data_timeout += data->timeout_ns /
|
data_timeout += data->timeout_ns /
|
||||||
((1000000000 / host->clk_freq) * host->clk_div);
|
((1000000000UL / host->clk_freq) * host->clk_div);
|
||||||
data_timeout *= 10; // call it fudge factor for now
|
|
||||||
|
|
||||||
if (data_timeout < 0xffff) {
|
if (data_timeout < 0xffff) {
|
||||||
writel((~TIFM_MMCSD_DPE) &
|
|
||||||
readl(sock->addr + SOCK_MMCSD_SDIO_MODE_CONFIG),
|
|
||||||
sock->addr + SOCK_MMCSD_SDIO_MODE_CONFIG);
|
|
||||||
writel(data_timeout, sock->addr + SOCK_MMCSD_DATA_TO);
|
writel(data_timeout, sock->addr + SOCK_MMCSD_DATA_TO);
|
||||||
|
writel((~TIFM_MMCSD_DPE)
|
||||||
|
& readl(sock->addr + SOCK_MMCSD_SDIO_MODE_CONFIG),
|
||||||
|
sock->addr + SOCK_MMCSD_SDIO_MODE_CONFIG);
|
||||||
} else {
|
} else {
|
||||||
writel(TIFM_MMCSD_DPE |
|
|
||||||
readl(sock->addr + SOCK_MMCSD_SDIO_MODE_CONFIG),
|
|
||||||
sock->addr + SOCK_MMCSD_SDIO_MODE_CONFIG);
|
|
||||||
data_timeout = (data_timeout >> 10) + 1;
|
data_timeout = (data_timeout >> 10) + 1;
|
||||||
if(data_timeout > 0xffff)
|
if(data_timeout > 0xffff)
|
||||||
data_timeout = 0; /* set to unlimited */
|
data_timeout = 0; /* set to unlimited */
|
||||||
writel(data_timeout, sock->addr + SOCK_MMCSD_DATA_TO);
|
writel(data_timeout, sock->addr + SOCK_MMCSD_DATA_TO);
|
||||||
|
writel(TIFM_MMCSD_DPE
|
||||||
|
| readl(sock->addr + SOCK_MMCSD_SDIO_MODE_CONFIG),
|
||||||
|
sock->addr + SOCK_MMCSD_SDIO_MODE_CONFIG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue