| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Driver for 93xx46 EEPROMs |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * (C) 2011 DENX Software Engineering, Anatolij Gustschin <agust@denx.de> |
|---|
| 5 | | - * |
|---|
| 6 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 7 | | - * it under the terms of the GNU General Public License version 2 as |
|---|
| 8 | | - * published by the Free Software Foundation. |
|---|
| 9 | 6 | */ |
|---|
| 10 | 7 | |
|---|
| 11 | 8 | #include <linux/delay.h> |
|---|
| .. | .. |
|---|
| 454 | 451 | return -ENODEV; |
|---|
| 455 | 452 | } |
|---|
| 456 | 453 | |
|---|
| 457 | | - edev = kzalloc(sizeof(*edev), GFP_KERNEL); |
|---|
| 454 | + edev = devm_kzalloc(&spi->dev, sizeof(*edev), GFP_KERNEL); |
|---|
| 458 | 455 | if (!edev) |
|---|
| 459 | 456 | return -ENOMEM; |
|---|
| 460 | 457 | |
|---|
| .. | .. |
|---|
| 464 | 461 | edev->addrlen = 6; |
|---|
| 465 | 462 | else { |
|---|
| 466 | 463 | dev_err(&spi->dev, "unspecified address type\n"); |
|---|
| 467 | | - err = -EINVAL; |
|---|
| 468 | | - goto fail; |
|---|
| 464 | + return -EINVAL; |
|---|
| 469 | 465 | } |
|---|
| 470 | 466 | |
|---|
| 471 | 467 | mutex_init(&edev->lock); |
|---|
| .. | .. |
|---|
| 474 | 470 | edev->pdata = pd; |
|---|
| 475 | 471 | |
|---|
| 476 | 472 | edev->size = 128; |
|---|
| 473 | + edev->nvmem_config.type = NVMEM_TYPE_EEPROM; |
|---|
| 477 | 474 | edev->nvmem_config.name = dev_name(&spi->dev); |
|---|
| 478 | 475 | edev->nvmem_config.dev = &spi->dev; |
|---|
| 479 | 476 | edev->nvmem_config.read_only = pd->flags & EE_READONLY; |
|---|
| .. | .. |
|---|
| 488 | 485 | edev->nvmem_config.word_size = 1; |
|---|
| 489 | 486 | edev->nvmem_config.size = edev->size; |
|---|
| 490 | 487 | |
|---|
| 491 | | - edev->nvmem = nvmem_register(&edev->nvmem_config); |
|---|
| 492 | | - if (IS_ERR(edev->nvmem)) { |
|---|
| 493 | | - err = PTR_ERR(edev->nvmem); |
|---|
| 494 | | - goto fail; |
|---|
| 495 | | - } |
|---|
| 488 | + edev->nvmem = devm_nvmem_register(&spi->dev, &edev->nvmem_config); |
|---|
| 489 | + if (IS_ERR(edev->nvmem)) |
|---|
| 490 | + return PTR_ERR(edev->nvmem); |
|---|
| 496 | 491 | |
|---|
| 497 | 492 | dev_info(&spi->dev, "%d-bit eeprom %s\n", |
|---|
| 498 | 493 | (pd->flags & EE_ADDR8) ? 8 : 16, |
|---|
| .. | .. |
|---|
| 505 | 500 | |
|---|
| 506 | 501 | spi_set_drvdata(spi, edev); |
|---|
| 507 | 502 | return 0; |
|---|
| 508 | | -fail: |
|---|
| 509 | | - kfree(edev); |
|---|
| 510 | | - return err; |
|---|
| 511 | 503 | } |
|---|
| 512 | 504 | |
|---|
| 513 | 505 | static int eeprom_93xx46_remove(struct spi_device *spi) |
|---|
| 514 | 506 | { |
|---|
| 515 | 507 | struct eeprom_93xx46_dev *edev = spi_get_drvdata(spi); |
|---|
| 516 | 508 | |
|---|
| 517 | | - nvmem_unregister(edev->nvmem); |
|---|
| 518 | | - |
|---|
| 519 | 509 | if (!(edev->pdata->flags & EE_READONLY)) |
|---|
| 520 | 510 | device_remove_file(&spi->dev, &dev_attr_erase); |
|---|
| 521 | 511 | |
|---|
| 522 | | - kfree(edev); |
|---|
| 523 | 512 | return 0; |
|---|
| 524 | 513 | } |
|---|
| 525 | 514 | |
|---|