.. | .. |
---|
625 | 625 | return ERR_PTR(rval); |
---|
626 | 626 | } |
---|
627 | 627 | |
---|
| 628 | + nvmem->id = rval; |
---|
| 629 | + |
---|
628 | 630 | if (config->wp_gpio) |
---|
629 | 631 | nvmem->wp_gpio = config->wp_gpio; |
---|
630 | 632 | else |
---|
.. | .. |
---|
640 | 642 | kref_init(&nvmem->refcnt); |
---|
641 | 643 | INIT_LIST_HEAD(&nvmem->cells); |
---|
642 | 644 | |
---|
643 | | - nvmem->id = rval; |
---|
644 | 645 | nvmem->owner = config->owner; |
---|
645 | 646 | if (!nvmem->owner && config->dev->driver) |
---|
646 | 647 | nvmem->owner = config->dev->driver->owner; |
---|
.. | .. |
---|
660 | 661 | |
---|
661 | 662 | switch (config->id) { |
---|
662 | 663 | case NVMEM_DEVID_NONE: |
---|
663 | | - dev_set_name(&nvmem->dev, "%s", config->name); |
---|
| 664 | + rval = dev_set_name(&nvmem->dev, "%s", config->name); |
---|
664 | 665 | break; |
---|
665 | 666 | case NVMEM_DEVID_AUTO: |
---|
666 | | - dev_set_name(&nvmem->dev, "%s%d", config->name, nvmem->id); |
---|
| 667 | + rval = dev_set_name(&nvmem->dev, "%s%d", config->name, nvmem->id); |
---|
667 | 668 | break; |
---|
668 | 669 | default: |
---|
669 | | - dev_set_name(&nvmem->dev, "%s%d", |
---|
| 670 | + rval = dev_set_name(&nvmem->dev, "%s%d", |
---|
670 | 671 | config->name ? : "nvmem", |
---|
671 | 672 | config->name ? config->id : nvmem->id); |
---|
672 | 673 | break; |
---|
| 674 | + } |
---|
| 675 | + |
---|
| 676 | + if (rval) { |
---|
| 677 | + ida_free(&nvmem_ida, nvmem->id); |
---|
| 678 | + kfree(nvmem); |
---|
| 679 | + return ERR_PTR(rval); |
---|
673 | 680 | } |
---|
674 | 681 | |
---|
675 | 682 | nvmem->read_only = device_property_present(config->dev, "read-only") || |
---|
.. | .. |
---|
694 | 701 | if (config->cells) { |
---|
695 | 702 | rval = nvmem_add_cells(nvmem, config->cells, config->ncells); |
---|
696 | 703 | if (rval) |
---|
697 | | - goto err_teardown_compat; |
---|
| 704 | + goto err_remove_cells; |
---|
698 | 705 | } |
---|
699 | 706 | |
---|
700 | 707 | rval = nvmem_add_cells_from_table(nvmem); |
---|
.. | .. |
---|
711 | 718 | |
---|
712 | 719 | err_remove_cells: |
---|
713 | 720 | nvmem_device_remove_all_cells(nvmem); |
---|
714 | | -err_teardown_compat: |
---|
715 | 721 | if (config->compat) |
---|
716 | 722 | nvmem_sysfs_remove_compat(nvmem, config); |
---|
717 | 723 | err_device_del: |
---|