Merge tag 'mfd-3.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / mfd / mc13xxx-spi.c
index cb32f69..3032bae 100644 (file)
 static const struct spi_device_id mc13xxx_device_id[] = {
        {
                .name = "mc13783",
-               .driver_data = MC13XXX_ID_MC13783,
+               .driver_data = (kernel_ulong_t)&mc13xxx_variant_mc13783,
        }, {
                .name = "mc13892",
-               .driver_data = MC13XXX_ID_MC13892,
+               .driver_data = (kernel_ulong_t)&mc13xxx_variant_mc13892,
+       }, {
+               .name = "mc34708",
+               .driver_data = (kernel_ulong_t)&mc13xxx_variant_mc34708,
        }, {
                /* sentinel */
        }
@@ -39,8 +42,9 @@ static const struct spi_device_id mc13xxx_device_id[] = {
 MODULE_DEVICE_TABLE(spi, mc13xxx_device_id);
 
 static const struct of_device_id mc13xxx_dt_ids[] = {
-       { .compatible = "fsl,mc13783", .data = (void *) MC13XXX_ID_MC13783, },
-       { .compatible = "fsl,mc13892", .data = (void *) MC13XXX_ID_MC13892, },
+       { .compatible = "fsl,mc13783", .data = &mc13xxx_variant_mc13783, },
+       { .compatible = "fsl,mc13892", .data = &mc13xxx_variant_mc13892, },
+       { .compatible = "fsl,mc34708", .data = &mc13xxx_variant_mc34708, },
        { /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, mc13xxx_dt_ids);
@@ -144,19 +148,18 @@ static int mc13xxx_spi_probe(struct spi_device *spi)
                return ret;
        }
 
-       ret = mc13xxx_common_init(mc13xxx, pdata, spi->irq);
+       if (spi->dev.of_node) {
+               const struct of_device_id *of_id =
+                       of_match_device(mc13xxx_dt_ids, &spi->dev);
 
-       if (ret) {
-               dev_set_drvdata(&spi->dev, NULL);
+               mc13xxx->variant = of_id->data;
        } else {
-               const struct spi_device_id *devid =
-                       spi_get_device_id(spi);
-               if (!devid || devid->driver_data != mc13xxx->ictype)
-                       dev_warn(mc13xxx->dev,
-                               "device id doesn't match auto detection!\n");
+               const struct spi_device_id *id_entry = spi_get_device_id(spi);
+
+               mc13xxx->variant = (void *)id_entry->driver_data;
        }
 
-       return ret;
+       return mc13xxx_common_init(mc13xxx, pdata, spi->irq);
 }
 
 static int mc13xxx_spi_remove(struct spi_device *spi)