mmc: atmel-mci: correct data timeout computation
The HSMCI operates at a rate of up to Master Clock divided by two. Moreover previous calculation can cause overflows and so wrong timeouts. Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> Cc: <stable@vger.kernel.org> Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
parent
9f4e8151db
commit
66292ad92c
1 changed files with 8 additions and 1 deletions
|
@ -482,7 +482,14 @@ err:
|
||||||
static inline unsigned int atmci_ns_to_clocks(struct atmel_mci *host,
|
static inline unsigned int atmci_ns_to_clocks(struct atmel_mci *host,
|
||||||
unsigned int ns)
|
unsigned int ns)
|
||||||
{
|
{
|
||||||
return (ns * (host->bus_hz / 1000000) + 999) / 1000;
|
/*
|
||||||
|
* It is easier here to use us instead of ns for the timeout,
|
||||||
|
* it prevents from overflows during calculation.
|
||||||
|
*/
|
||||||
|
unsigned int us = DIV_ROUND_UP(ns, 1000);
|
||||||
|
|
||||||
|
/* Maximum clock frequency is host->bus_hz/2 */
|
||||||
|
return us * (DIV_ROUND_UP(host->bus_hz, 2000000));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void atmci_set_timeout(struct atmel_mci *host,
|
static void atmci_set_timeout(struct atmel_mci *host,
|
||||||
|
|
Loading…
Add table
Reference in a new issue