aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@ingics.com>2014-02-03 22:05:50 -0500
committerMark Brown <broonie@linaro.org>2014-02-07 07:20:00 -0500
commitb52a37f517d62c92d7d5bffb0fab0b025a51b9eb (patch)
treea83f675bb86a8e772c9d31f186bbcdbd88a81aee
parent1647138df66c695eb16f4a6bce7f088f817ab26d (diff)
spi: orion: Let spi core handle checking transfer speed
Since commit a2fd4f9fa3b9 'spi: Support transfer speed checking in the core', the SPI core validates the desired speed of a given transfer against the minimum and maximum speeds supported by the controller. So we can remove the same code in this driver and let spi core handle checking the desired speed of a given transfer. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--drivers/spi/spi-orion.c39
1 files changed, 2 insertions, 37 deletions
diff --git a/drivers/spi/spi-orion.c b/drivers/spi/spi-orion.c
index 75871d444ff4..20f174ee06ec 100644
--- a/drivers/spi/spi-orion.c
+++ b/drivers/spi/spi-orion.c
@@ -43,8 +43,6 @@
43struct orion_spi { 43struct orion_spi {
44 struct spi_master *master; 44 struct spi_master *master;
45 void __iomem *base; 45 void __iomem *base;
46 unsigned int max_speed;
47 unsigned int min_speed;
48 struct clk *clk; 46 struct clk *clk;
49}; 47};
50 48
@@ -319,16 +317,6 @@ static int orion_spi_transfer_one_message(struct spi_master *master,
319 goto msg_done; 317 goto msg_done;
320 } 318 }
321 319
322 if (t->speed_hz && t->speed_hz < orion_spi->min_speed) {
323 dev_err(&spi->dev,
324 "message rejected : "
325 "device min speed (%d Hz) exceeds "
326 "required transfer speed (%d Hz)\n",
327 orion_spi->min_speed, t->speed_hz);
328 status = -EIO;
329 goto msg_done;
330 }
331
332 if (par_override || t->speed_hz || t->bits_per_word) { 320 if (par_override || t->speed_hz || t->bits_per_word) {
333 par_override = 1; 321 par_override = 1;
334 status = orion_spi_setup_transfer(spi, t); 322 status = orion_spi_setup_transfer(spi, t);
@@ -373,28 +361,6 @@ static int orion_spi_reset(struct orion_spi *orion_spi)
373 return 0; 361 return 0;
374} 362}
375 363
376static int orion_spi_setup(struct spi_device *spi)
377{
378 struct orion_spi *orion_spi;
379
380 orion_spi = spi_master_get_devdata(spi->master);
381
382 if ((spi->max_speed_hz == 0)
383 || (spi->max_speed_hz > orion_spi->max_speed))
384 spi->max_speed_hz = orion_spi->max_speed;
385
386 if (spi->max_speed_hz < orion_spi->min_speed) {
387 dev_err(&spi->dev, "setup: requested speed too low %d Hz\n",
388 spi->max_speed_hz);
389 return -EINVAL;
390 }
391
392 /*
393 * baudrate & width will be set orion_spi_setup_transfer
394 */
395 return 0;
396}
397
398static int orion_spi_probe(struct platform_device *pdev) 364static int orion_spi_probe(struct platform_device *pdev)
399{ 365{
400 struct spi_master *master; 366 struct spi_master *master;
@@ -423,7 +389,6 @@ static int orion_spi_probe(struct platform_device *pdev)
423 /* we support only mode 0, and no options */ 389 /* we support only mode 0, and no options */
424 master->mode_bits = SPI_CPHA | SPI_CPOL; 390 master->mode_bits = SPI_CPHA | SPI_CPOL;
425 391
426 master->setup = orion_spi_setup;
427 master->transfer_one_message = orion_spi_transfer_one_message; 392 master->transfer_one_message = orion_spi_transfer_one_message;
428 master->num_chipselect = ORION_NUM_CHIPSELECTS; 393 master->num_chipselect = ORION_NUM_CHIPSELECTS;
429 394
@@ -441,8 +406,8 @@ static int orion_spi_probe(struct platform_device *pdev)
441 clk_prepare(spi->clk); 406 clk_prepare(spi->clk);
442 clk_enable(spi->clk); 407 clk_enable(spi->clk);
443 tclk_hz = clk_get_rate(spi->clk); 408 tclk_hz = clk_get_rate(spi->clk);
444 spi->max_speed = DIV_ROUND_UP(tclk_hz, 4); 409 master->max_speed_hz = DIV_ROUND_UP(tclk_hz, 4);
445 spi->min_speed = DIV_ROUND_UP(tclk_hz, 30); 410 master->min_speed_hz = DIV_ROUND_UP(tclk_hz, 30);
446 411
447 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 412 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
448 spi->base = devm_ioremap_resource(&pdev->dev, r); 413 spi->base = devm_ioremap_resource(&pdev->dev, r);