| .. | .. |
|---|
| 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: |
|---|