Commit 3e7018de authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branch 'spi/topic/core' into spi-next

parents 5ba838c9 243f07be
...@@ -270,15 +270,24 @@ EXPORT_SYMBOL_GPL(spi_bus_type); ...@@ -270,15 +270,24 @@ EXPORT_SYMBOL_GPL(spi_bus_type);
static int spi_drv_probe(struct device *dev) static int spi_drv_probe(struct device *dev)
{ {
const struct spi_driver *sdrv = to_spi_driver(dev->driver); const struct spi_driver *sdrv = to_spi_driver(dev->driver);
struct spi_device *spi = to_spi_device(dev);
int ret; int ret;
ret = of_clk_set_defaults(dev->of_node, false); ret = of_clk_set_defaults(dev->of_node, false);
if (ret) if (ret)
return ret; return ret;
if (dev->of_node) {
spi->irq = of_irq_get(dev->of_node, 0);
if (spi->irq == -EPROBE_DEFER)
return -EPROBE_DEFER;
if (spi->irq < 0)
spi->irq = 0;
}
ret = dev_pm_domain_attach(dev, true); ret = dev_pm_domain_attach(dev, true);
if (ret != -EPROBE_DEFER) { if (ret != -EPROBE_DEFER) {
ret = sdrv->probe(to_spi_device(dev)); ret = sdrv->probe(spi);
if (ret) if (ret)
dev_pm_domain_detach(dev, true); dev_pm_domain_detach(dev, true);
} }
...@@ -597,7 +606,7 @@ static void spi_set_cs(struct spi_device *spi, bool enable) ...@@ -597,7 +606,7 @@ static void spi_set_cs(struct spi_device *spi, bool enable)
if (spi->mode & SPI_CS_HIGH) if (spi->mode & SPI_CS_HIGH)
enable = !enable; enable = !enable;
if (spi->cs_gpio >= 0) if (gpio_is_valid(spi->cs_gpio))
gpio_set_value(spi->cs_gpio, !enable); gpio_set_value(spi->cs_gpio, !enable);
else if (spi->master->set_cs) else if (spi->master->set_cs)
spi->master->set_cs(spi, !enable); spi->master->set_cs(spi, !enable);
...@@ -1433,9 +1442,6 @@ of_register_spi_device(struct spi_master *master, struct device_node *nc) ...@@ -1433,9 +1442,6 @@ of_register_spi_device(struct spi_master *master, struct device_node *nc)
} }
spi->max_speed_hz = value; spi->max_speed_hz = value;
/* IRQ */
spi->irq = irq_of_parse_and_map(nc, 0);
/* Store a pointer to the node in the device structure */ /* Store a pointer to the node in the device structure */
of_node_get(nc); of_node_get(nc);
spi->dev.of_node = nc; spi->dev.of_node = nc;
...@@ -1949,7 +1955,7 @@ static int __spi_validate_bits_per_word(struct spi_master *master, u8 bits_per_w ...@@ -1949,7 +1955,7 @@ static int __spi_validate_bits_per_word(struct spi_master *master, u8 bits_per_w
int spi_setup(struct spi_device *spi) int spi_setup(struct spi_device *spi)
{ {
unsigned bad_bits, ugly_bits; unsigned bad_bits, ugly_bits;
int status = 0; int status;
/* check mode to prevent that DUAL and QUAD set at the same time /* check mode to prevent that DUAL and QUAD set at the same time
*/ */
...@@ -1986,8 +1992,9 @@ int spi_setup(struct spi_device *spi) ...@@ -1986,8 +1992,9 @@ int spi_setup(struct spi_device *spi)
if (!spi->bits_per_word) if (!spi->bits_per_word)
spi->bits_per_word = 8; spi->bits_per_word = 8;
if (__spi_validate_bits_per_word(spi->master, spi->bits_per_word)) status = __spi_validate_bits_per_word(spi->master, spi->bits_per_word);
return -EINVAL; if (status)
return status;
if (!spi->max_speed_hz) if (!spi->max_speed_hz)
spi->max_speed_hz = spi->master->max_speed_hz; spi->max_speed_hz = spi->master->max_speed_hz;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment