Merge remote-tracking branch 'spi/fix/core' into spi-linus
authorMark Brown <broonie@linaro.org>
Thu, 28 Nov 2013 11:31:35 +0000 (11:31 +0000)
committerMark Brown <broonie@linaro.org>
Thu, 28 Nov 2013 11:31:35 +0000 (11:31 +0000)
1  2 
drivers/spi/spi.c

diff --combined drivers/spi/spi.c
index 18cc625d887f796aed4b082eb2366262aec8aaa8,481e13f0db54e202a88fedd1a52533f9244ec7b6..349ebba4b1992afdf703e689022dfbf67b07f626
@@@ -245,27 -245,15 +245,27 @@@ 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;
 +
 +      acpi_dev_pm_attach(&spi->dev, true);
 +      ret = sdrv->probe(spi);
 +      if (ret)
 +              acpi_dev_pm_detach(&spi->dev, true);
  
 -      return sdrv->probe(to_spi_device(dev));
 +      return ret;
  }
  
  static int spi_drv_remove(struct device *dev)
  {
        const struct spi_driver         *sdrv = to_spi_driver(dev->driver);
 +      struct spi_device               *spi = to_spi_device(dev);
 +      int ret;
  
 -      return sdrv->remove(to_spi_device(dev));
 +      ret = sdrv->remove(spi);
 +      acpi_dev_pm_detach(&spi->dev, true);
 +
 +      return ret;
  }
  
  static void spi_drv_shutdown(struct device *dev)
@@@ -357,19 -345,6 +357,19 @@@ struct spi_device *spi_alloc_device(str
  }
  EXPORT_SYMBOL_GPL(spi_alloc_device);
  
 +static void spi_dev_set_name(struct spi_device *spi)
 +{
 +      struct acpi_device *adev = ACPI_COMPANION(&spi->dev);
 +
 +      if (adev) {
 +              dev_set_name(&spi->dev, "spi-%s", acpi_dev_name(adev));
 +              return;
 +      }
 +
 +      dev_set_name(&spi->dev, "%s.%u", dev_name(&spi->master->dev),
 +                   spi->chip_select);
 +}
 +
  /**
   * spi_add_device - Add spi_device allocated with spi_alloc_device
   * @spi: spi_device to register
@@@ -396,7 -371,9 +396,7 @@@ int spi_add_device(struct spi_device *s
        }
  
        /* Set the bus ID string */
 -      dev_set_name(&spi->dev, "%s.%u", dev_name(&spi->master->dev),
 -                      spi->chip_select);
 -
 +      spi_dev_set_name(spi);
  
        /* We need to make sure there's no other device with this
         * chipselect **BEFORE** we call setup(), else we'll trash
@@@ -582,7 -559,7 +582,7 @@@ static int spi_transfer_one_message(str
        list_for_each_entry(xfer, &msg->transfers, transfer_list) {
                trace_spi_transfer_start(msg, xfer);
  
 -              INIT_COMPLETION(master->xfer_completion);
 +              reinit_completion(&master->xfer_completion);
  
                ret = master->transfer_one(master, msg->spi, xfer);
                if (ret < 0) {
@@@ -1155,7 -1132,7 +1155,7 @@@ static acpi_status acpi_spi_add_device(
                return AE_NO_MEMORY;
        }
  
 -      ACPI_HANDLE_SET(&spi->dev, handle);
 +      ACPI_COMPANION_SET(&spi->dev, adev);
        spi->irq = -1;
  
        INIT_LIST_HEAD(&resource_list);
                return AE_OK;
        }
  
 +      adev->power.flags.ignore_parent = true;
        strlcpy(spi->modalias, acpi_device_hid(adev), sizeof(spi->modalias));
        if (spi_add_device(spi)) {
 +              adev->power.flags.ignore_parent = false;
                dev_err(&master->dev, "failed to add SPI device %s from ACPI\n",
                        dev_name(&adev->dev));
                spi_dev_put(spi);
@@@ -1415,7 -1390,7 +1415,7 @@@ int devm_spi_register_master(struct dev
                return -ENOMEM;
  
        ret = spi_register_master(master);
-       if (ret != 0) {
+       if (!ret) {
                *ptr = master;
                devres_add(dev, ptr);
        } else {