diff options
author | Mark Brown <broonie@kernel.org> | 2015-11-04 06:02:02 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-11-04 06:02:02 -0500 |
commit | 3e7018def475847418596c76997e0708bacda2c0 (patch) | |
tree | a6d256f0198777641486d7a6ab6d71725fee32be | |
parent | 5ba838c97ba143cd971b2cdcbe2c2acbd33e0733 (diff) | |
parent | 243f07be2423efe0b17e8ffafc9a36dad50406d3 (diff) |
Merge remote-tracking branch 'spi/topic/core' into spi-next
-rw-r--r-- | drivers/spi/spi.c | 23 |
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); | |||
270 | static int spi_drv_probe(struct device *dev) | 270 | static 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 | |||
1949 | int spi_setup(struct spi_device *spi) | 1955 | int 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; |