All of lore.kernel.org
 help / color / mirror / Atom feed
From: Clark Wang <xiaoning.wang@nxp.com>
To: "broonie@kernel.org" <broonie@kernel.org>
Cc: "linux-spi@vger.kernel.org" <linux-spi@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: [PATCH V2 4/8] spi: lpspi: add the error info of transfer speed setting
Date: Wed, 6 Mar 2019 06:30:41 +0000	[thread overview]
Message-ID: <20190306063020.793-5-xiaoning.wang@nxp.com> (raw)
In-Reply-To: <20190306063020.793-1-xiaoning.wang@nxp.com>

Add a error info when set a speed which greater than half of per-clk of
spi module.

The minimum SCK period is 2 cycles(CCR[SCKDIV]). So the maximum transfer
speed is half of spi per-clk.

Signed-off-by: Clark Wang <xiaoning.wang@nxp.com>
---
V2:
 - No change. Resend for applying.
---
 drivers/spi/spi-fsl-lpspi.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c
index 84dcb9e176b8..69635cde0e22 100644
--- a/drivers/spi/spi-fsl-lpspi.c
+++ b/drivers/spi/spi-fsl-lpspi.c
@@ -255,6 +255,13 @@ static int fsl_lpspi_set_bitrate(struct fsl_lpspi_data *fsl_lpspi)
 	u8 prescale;
 
 	perclk_rate = clk_get_rate(fsl_lpspi->clk_per);
+
+	if (config.speed_hz > perclk_rate / 2) {
+		dev_err(fsl_lpspi->dev,
+		      "per-clk should be at least two times of transfer speed");
+		return -EINVAL;
+	}
+
 	for (prescale = 0; prescale < 8; prescale++) {
 		scldiv = perclk_rate /
 			 (clkdivs[prescale] * config.speed_hz) - 2;
@@ -304,7 +311,7 @@ static int fsl_lpspi_config(struct fsl_lpspi_data *fsl_lpspi)
 	return 0;
 }
 
-static void fsl_lpspi_setup_transfer(struct spi_device *spi,
+static int fsl_lpspi_setup_transfer(struct spi_device *spi,
 				     struct spi_transfer *t)
 {
 	struct fsl_lpspi_data *fsl_lpspi =
@@ -337,7 +344,7 @@ static void fsl_lpspi_setup_transfer(struct spi_device *spi,
 	else
 		fsl_lpspi->watermark = fsl_lpspi->txfifosize;
 
-	fsl_lpspi_config(fsl_lpspi);
+	return fsl_lpspi_config(fsl_lpspi);
 }
 
 static int fsl_lpspi_slave_abort(struct spi_controller *controller)
@@ -429,7 +436,10 @@ static int fsl_lpspi_transfer_one_msg(struct spi_controller *controller,
 	msg->actual_length = 0;
 
 	list_for_each_entry(xfer, &msg->transfers, transfer_list) {
-		fsl_lpspi_setup_transfer(spi, xfer);
+		ret = fsl_lpspi_setup_transfer(spi, xfer);
+		if (ret < 0)
+			goto complete;
+
 		fsl_lpspi_set_cmd(fsl_lpspi, is_first_xfer);
 
 		is_first_xfer = false;
-- 
2.17.1


  parent reply	other threads:[~2019-03-06  6:31 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-06  6:30 [PATCH V2 0/8] spi: lpspi: Fix bugs and Add some functions support Clark Wang
2019-03-06  6:30 ` [PATCH V2 1/8] spi: lpspi: Add i.MX8 boards support for lpspi Clark Wang
2019-03-06  6:30 ` [PATCH V2 2/8] doc: lpspi: Document DT bindings for LPSPI clocks Clark Wang
2019-03-18 14:52   ` Applied "doc: lpspi: Document DT bindings for LPSPI clocks" to the spi tree Mark Brown
2019-03-18 14:52     ` Mark Brown
2019-03-06  6:30 ` [PATCH V2 3/8] spi: lpspi: enable runtime pm for lpspi Clark Wang
2019-03-06  6:30 ` Clark Wang [this message]
2019-03-06  6:30 ` [PATCH V2 5/8] spi: lpspi: use the core way to implement cs-gpio function Clark Wang
2019-03-18 14:52   ` Applied "spi: lpspi: use the core way to implement cs-gpio function" to the spi tree Mark Brown
2019-03-18 14:52     ` Mark Brown
2019-03-06  6:30 ` [PATCH V2 6/8] spi: lpspi: add dma mode support Clark Wang
2019-03-18 14:52   ` Applied "spi: lpspi: add dma mode support" to the spi tree Mark Brown
2019-03-18 14:52     ` Mark Brown
2019-03-06  6:30 ` [PATCH V2 7/8] spi: lpspi: Add the missing NULL check Clark Wang
2019-03-18 14:52   ` Applied "spi: lpspi: Add the missing NULL check" to the spi tree Mark Brown
2019-03-18 14:52     ` Mark Brown
2019-03-06  6:30 ` [PATCH V2 8/8] spi: lpspi: Code cleanup Clark Wang
2019-03-18 14:52   ` Applied "spi: lpspi: Code cleanup" to the spi tree Mark Brown
2019-03-18 14:52     ` Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190306063020.793-5-xiaoning.wang@nxp.com \
    --to=xiaoning.wang@nxp.com \
    --cc=broonie@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-spi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.