X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=drivers%2Fspi%2Fspi.c;h=200ca228d8851980d5e755eed5a82c6df4c6dc9b;hb=ae4860b5333586b60ca1798f3f83b8b37520904c;hp=57179d5eea9a7d40bf66bdffdd96561a85dbd845;hpb=764f21665a12e99f03124b4c8de722cdbff92213;p=cascardo%2Flinux.git diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 57179d5eea9a..200ca228d885 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -960,7 +960,7 @@ static int spi_transfer_one_message(struct spi_master *master, struct spi_transfer *xfer; bool keep_cs = false; int ret = 0; - unsigned long ms = 1; + unsigned long long ms = 1; struct spi_statistics *statm = &master->statistics; struct spi_statistics *stats = &msg->spi->statistics; @@ -991,9 +991,13 @@ static int spi_transfer_one_message(struct spi_master *master, if (ret > 0) { ret = 0; - ms = xfer->len * 8 * 1000 / xfer->speed_hz; + ms = 8LL * 1000LL * xfer->len; + do_div(ms, xfer->speed_hz); ms += ms + 100; /* some tolerance */ + if (ms > UINT_MAX) + ms = UINT_MAX; + ms = wait_for_completion_timeout(&master->xfer_completion, msecs_to_jiffies(ms)); }