]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/mtd/devices/sst25l.c
Merge branch 'setns'
[karo-tx-linux.git] / drivers / mtd / devices / sst25l.c
index c163e619abc90647d38b45ba0e9799931c1abdd5..1e2c430aaad241b112d4c33a3c90d1db1e3b3efe 100644 (file)
@@ -66,7 +66,7 @@ struct flash_info {
 
 #define to_sst25l_flash(x) container_of(x, struct sst25l_flash, mtd)
 
-static struct flash_info __initdata sst25l_flash_info[] = {
+static struct flash_info __devinitdata sst25l_flash_info[] = {
        {"sst25lf020a", 0xbf43, 256, 1024, 4096},
        {"sst25lf040a", 0xbf44, 256, 2048, 4096},
 };
@@ -381,6 +381,8 @@ static int __devinit sst25l_probe(struct spi_device *spi)
        struct sst25l_flash *flash;
        struct flash_platform_data *data;
        int ret, i;
+       struct mtd_partition *parts = NULL;
+       int nr_parts = 0;
 
        flash_info = sst25l_match_device(spi);
        if (!flash_info)
@@ -420,46 +422,37 @@ static int __devinit sst25l_probe(struct spi_device *spi)
              flash->mtd.erasesize, flash->mtd.erasesize / 1024,
              flash->mtd.numeraseregions);
 
-       if (mtd_has_partitions()) {
-               struct mtd_partition *parts = NULL;
-               int nr_parts = 0;
 
-               if (mtd_has_cmdlinepart()) {
-                       static const char *part_probes[] =
-                               {"cmdlinepart", NULL};
+       if (mtd_has_cmdlinepart()) {
+               static const char *part_probes[] = {"cmdlinepart", NULL};
 
-                       nr_parts = parse_mtd_partitions(&flash->mtd,
-                                                       part_probes,
-                                                       &parts, 0);
-               }
+               nr_parts = parse_mtd_partitions(&flash->mtd,
+                                               part_probes,
+                                               &parts, 0);
+       }
 
-               if (nr_parts <= 0 && data && data->parts) {
-                       parts = data->parts;
-                       nr_parts = data->nr_parts;
-               }
+       if (nr_parts <= 0 && data && data->parts) {
+               parts = data->parts;
+               nr_parts = data->nr_parts;
+       }
 
-               if (nr_parts > 0) {
-                       for (i = 0; i < nr_parts; i++) {
-                               DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = "
-                                     "{.name = %s, .offset = 0x%llx, "
-                                     ".size = 0x%llx (%lldKiB) }\n",
-                                     i, parts[i].name,
-                                     (long long)parts[i].offset,
-                                     (long long)parts[i].size,
-                                     (long long)(parts[i].size >> 10));
-                       }
-
-                       flash->partitioned = 1;
-                       return add_mtd_partitions(&flash->mtd,
-                                                 parts, nr_parts);
+       if (nr_parts > 0) {
+               for (i = 0; i < nr_parts; i++) {
+                       DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = "
+                             "{.name = %s, .offset = 0x%llx, "
+                             ".size = 0x%llx (%lldKiB) }\n",
+                             i, parts[i].name,
+                             (long long)parts[i].offset,
+                             (long long)parts[i].size,
+                             (long long)(parts[i].size >> 10));
                }
 
-       } else if (data && data->nr_parts) {
-               dev_warn(&spi->dev, "ignoring %d default partitions on %s\n",
-                        data->nr_parts, data->name);
+               flash->partitioned = 1;
+               return mtd_device_register(&flash->mtd, parts,
+                                          nr_parts);
        }
 
-       ret = add_mtd_device(&flash->mtd);
+       ret = mtd_device_register(&flash->mtd, NULL, 0);
        if (ret == 1) {
                kfree(flash);
                dev_set_drvdata(&spi->dev, NULL);
@@ -469,15 +462,12 @@ static int __devinit sst25l_probe(struct spi_device *spi)
        return 0;
 }
 
-static int __exit sst25l_remove(struct spi_device *spi)
+static int __devexit sst25l_remove(struct spi_device *spi)
 {
        struct sst25l_flash *flash = dev_get_drvdata(&spi->dev);
        int ret;
 
-       if (mtd_has_partitions() && flash->partitioned)
-               ret = del_mtd_partitions(&flash->mtd);
-       else
-               ret = del_mtd_device(&flash->mtd);
+       ret = mtd_device_unregister(&flash->mtd);
        if (ret == 0)
                kfree(flash);
        return ret;
@@ -490,7 +480,7 @@ static struct spi_driver sst25l_driver = {
                .owner  = THIS_MODULE,
        },
        .probe          = sst25l_probe,
-       .remove         = __exit_p(sst25l_remove),
+       .remove         = __devexit_p(sst25l_remove),
 };
 
 static int __init sst25l_init(void)