~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to drivers/mtd/devices/sst25l.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
66
66
 
67
67
#define to_sst25l_flash(x) container_of(x, struct sst25l_flash, mtd)
68
68
 
69
 
static struct flash_info __initdata sst25l_flash_info[] = {
 
69
static struct flash_info __devinitdata sst25l_flash_info[] = {
70
70
        {"sst25lf020a", 0xbf43, 256, 1024, 4096},
71
71
        {"sst25lf040a", 0xbf44, 256, 2048, 4096},
72
72
};
381
381
        struct sst25l_flash *flash;
382
382
        struct flash_platform_data *data;
383
383
        int ret, i;
 
384
        struct mtd_partition *parts = NULL;
 
385
        int nr_parts = 0;
384
386
 
385
387
        flash_info = sst25l_match_device(spi);
386
388
        if (!flash_info)
420
422
              flash->mtd.erasesize, flash->mtd.erasesize / 1024,
421
423
              flash->mtd.numeraseregions);
422
424
 
423
 
        if (mtd_has_partitions()) {
424
 
                struct mtd_partition *parts = NULL;
425
 
                int nr_parts = 0;
426
 
 
427
 
                if (mtd_has_cmdlinepart()) {
428
 
                        static const char *part_probes[] =
429
 
                                {"cmdlinepart", NULL};
430
 
 
431
 
                        nr_parts = parse_mtd_partitions(&flash->mtd,
432
 
                                                        part_probes,
433
 
                                                        &parts, 0);
434
 
                }
435
 
 
436
 
                if (nr_parts <= 0 && data && data->parts) {
437
 
                        parts = data->parts;
438
 
                        nr_parts = data->nr_parts;
439
 
                }
440
 
 
441
 
                if (nr_parts > 0) {
442
 
                        for (i = 0; i < nr_parts; i++) {
443
 
                                DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = "
444
 
                                      "{.name = %s, .offset = 0x%llx, "
445
 
                                      ".size = 0x%llx (%lldKiB) }\n",
446
 
                                      i, parts[i].name,
447
 
                                      (long long)parts[i].offset,
448
 
                                      (long long)parts[i].size,
449
 
                                      (long long)(parts[i].size >> 10));
450
 
                        }
451
 
 
452
 
                        flash->partitioned = 1;
453
 
                        return add_mtd_partitions(&flash->mtd,
454
 
                                                  parts, nr_parts);
455
 
                }
456
 
 
457
 
        } else if (data && data->nr_parts) {
458
 
                dev_warn(&spi->dev, "ignoring %d default partitions on %s\n",
459
 
                         data->nr_parts, data->name);
460
 
        }
461
 
 
462
 
        ret = add_mtd_device(&flash->mtd);
 
425
 
 
426
        if (mtd_has_cmdlinepart()) {
 
427
                static const char *part_probes[] = {"cmdlinepart", NULL};
 
428
 
 
429
                nr_parts = parse_mtd_partitions(&flash->mtd,
 
430
                                                part_probes,
 
431
                                                &parts, 0);
 
432
        }
 
433
 
 
434
        if (nr_parts <= 0 && data && data->parts) {
 
435
                parts = data->parts;
 
436
                nr_parts = data->nr_parts;
 
437
        }
 
438
 
 
439
        if (nr_parts > 0) {
 
440
                for (i = 0; i < nr_parts; i++) {
 
441
                        DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = "
 
442
                              "{.name = %s, .offset = 0x%llx, "
 
443
                              ".size = 0x%llx (%lldKiB) }\n",
 
444
                              i, parts[i].name,
 
445
                              (long long)parts[i].offset,
 
446
                              (long long)parts[i].size,
 
447
                              (long long)(parts[i].size >> 10));
 
448
                }
 
449
 
 
450
                flash->partitioned = 1;
 
451
                return mtd_device_register(&flash->mtd, parts,
 
452
                                           nr_parts);
 
453
        }
 
454
 
 
455
        ret = mtd_device_register(&flash->mtd, NULL, 0);
463
456
        if (ret == 1) {
464
457
                kfree(flash);
465
458
                dev_set_drvdata(&spi->dev, NULL);
469
462
        return 0;
470
463
}
471
464
 
472
 
static int __exit sst25l_remove(struct spi_device *spi)
 
465
static int __devexit sst25l_remove(struct spi_device *spi)
473
466
{
474
467
        struct sst25l_flash *flash = dev_get_drvdata(&spi->dev);
475
468
        int ret;
476
469
 
477
 
        if (mtd_has_partitions() && flash->partitioned)
478
 
                ret = del_mtd_partitions(&flash->mtd);
479
 
        else
480
 
                ret = del_mtd_device(&flash->mtd);
 
470
        ret = mtd_device_unregister(&flash->mtd);
481
471
        if (ret == 0)
482
472
                kfree(flash);
483
473
        return ret;
490
480
                .owner  = THIS_MODULE,
491
481
        },
492
482
        .probe          = sst25l_probe,
493
 
        .remove         = __exit_p(sst25l_remove),
 
483
        .remove         = __devexit_p(sst25l_remove),
494
484
};
495
485
 
496
486
static int __init sst25l_init(void)