|
@@ -270,15 +270,24 @@ EXPORT_SYMBOL_GPL(spi_bus_type);
|
|
|
static int spi_drv_probe(struct device *dev)
|
|
|
{
|
|
|
const struct spi_driver *sdrv = to_spi_driver(dev->driver);
|
|
|
+ struct spi_device *spi = to_spi_device(dev);
|
|
|
int ret;
|
|
|
|
|
|
ret = of_clk_set_defaults(dev->of_node, false);
|
|
|
if (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);
|
|
|
if (ret != -EPROBE_DEFER) {
|
|
|
- ret = sdrv->probe(to_spi_device(dev));
|
|
|
+ ret = sdrv->probe(spi);
|
|
|
if (ret)
|
|
|
dev_pm_domain_detach(dev, true);
|
|
|
}
|
|
@@ -1433,9 +1442,6 @@ of_register_spi_device(struct spi_master *master, struct device_node *nc)
|
|
|
}
|
|
|
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 */
|
|
|
of_node_get(nc);
|
|
|
spi->dev.of_node = nc;
|