aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2015-11-04 06:02:02 -0500
committerMark Brown <broonie@kernel.org>2015-11-04 06:02:02 -0500
commit3e7018def475847418596c76997e0708bacda2c0 (patch)
treea6d256f0198777641486d7a6ab6d71725fee32be
parent5ba838c97ba143cd971b2cdcbe2c2acbd33e0733 (diff)
parent243f07be2423efe0b17e8ffafc9a36dad50406d3 (diff)
Merge remote-tracking branch 'spi/topic/core' into spi-next
-rw-r--r--drivers/spi/spi.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index bf989f6a80e0..6a306340dd25 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -270,15 +270,24 @@ EXPORT_SYMBOL_GPL(spi_bus_type);
270static int spi_drv_probe(struct device *dev) 270static int spi_drv_probe(struct device *dev)
271{ 271{
272 const struct spi_driver *sdrv = to_spi_driver(dev->driver); 272 const struct spi_driver *sdrv = to_spi_driver(dev->driver);
273 struct spi_device *spi = to_spi_device(dev);
273 int ret; 274 int ret;
274 275
275 ret = of_clk_set_defaults(dev->of_node, false); 276 ret = of_clk_set_defaults(dev->of_node, false);
276 if (ret) 277 if (ret)
277 return ret; 278 return ret;
278 279
280 if (dev->of_node) {
281 spi->irq = of_irq_get(dev->of_node, 0);
282 if (spi->irq == -EPROBE_DEFER)
283 return -EPROBE_DEFER;
284 if (spi->irq < 0)
285 spi->irq = 0;
286 }
287
279 ret = dev_pm_domain_attach(dev, true); 288 ret = dev_pm_domain_attach(dev, true);
280 if (ret != -EPROBE_DEFER) { 289 if (ret != -EPROBE_DEFER) {
281 ret = sdrv->probe(to_spi_device(dev)); 290 ret = sdrv->probe(spi);
282 if (ret) 291 if (ret)
283 dev_pm_domain_detach(dev, true); 292 dev_pm_domain_detach(dev, true);
284 } 293 }
@@ -597,7 +606,7 @@ static void spi_set_cs(struct spi_device *spi, bool enable)
597 if (spi->mode & SPI_CS_HIGH) 606 if (spi->mode & SPI_CS_HIGH)
598 enable = !enable; 607 enable = !enable;
599 608
600 if (spi->cs_gpio >= 0) 609 if (gpio_is_valid(spi->cs_gpio))
601 gpio_set_value(spi->cs_gpio, !enable); 610 gpio_set_value(spi->cs_gpio, !enable);
602 else if (spi->master->set_cs) 611 else if (spi->master->set_cs)
603 spi->master->set_cs(spi, !enable); 612 spi->master->set_cs(spi, !enable);
@@ -1433,9 +1442,6 @@ of_register_spi_device(struct spi_master *master, struct device_node *nc)
1433 } 1442 }
1434 spi->max_speed_hz = value; 1443 spi->max_speed_hz = value;
1435 1444
1436 /* IRQ */
1437 spi->irq = irq_of_parse_and_map(nc, 0);
1438
1439 /* Store a pointer to the node in the device structure */ 1445 /* Store a pointer to the node in the device structure */
1440 of_node_get(nc); 1446 of_node_get(nc);
1441 spi->dev.of_node = nc; 1447 spi->dev.of_node = nc;
@@ -1949,7 +1955,7 @@ static int __spi_validate_bits_per_word(struct spi_master *master, u8 bits_per_w
1949int spi_setup(struct spi_device *spi) 1955int spi_setup(struct spi_device *spi)
1950{ 1956{
1951 unsigned bad_bits, ugly_bits; 1957 unsigned bad_bits, ugly_bits;
1952 int status = 0; 1958 int status;
1953 1959
1954 /* check mode to prevent that DUAL and QUAD set at the same time 1960 /* check mode to prevent that DUAL and QUAD set at the same time
1955 */ 1961 */
@@ -1986,8 +1992,9 @@ int spi_setup(struct spi_device *spi)
1986 if (!spi->bits_per_word) 1992 if (!spi->bits_per_word)
1987 spi->bits_per_word = 8; 1993 spi->bits_per_word = 8;
1988 1994
1989 if (__spi_validate_bits_per_word(spi->master, spi->bits_per_word)) 1995 status = __spi_validate_bits_per_word(spi->master, spi->bits_per_word);
1990 return -EINVAL; 1996 if (status)
1997 return status;
1991 1998
1992 if (!spi->max_speed_hz) 1999 if (!spi->max_speed_hz)
1993 spi->max_speed_hz = spi->master->max_speed_hz; 2000 spi->max_speed_hz = spi->master->max_speed_hz;