Merge tag 'spi-fix-v6.19-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi

Pull spi fixes from Mark Brown:
"One new device ID, plus a few fixes.

The most substantial of the fixes is for the Cadence driver which in
at least some instantiations requires transmit data to drive data
through the IP"

* tag 'spi-fix-v6.19-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi:
spi: intel-pci: Add support for Nova Lake SPI serial flash
spi: spi-cadence: enable SPI_CONTROLLER_MUST_TX
spi: hisi-kunpeng: Fixed the wrong debugfs node name in hisi_spi debugfs initialization
spi: spi-sprd-adi: Fix double free in probe error path

+13 -26
+1
drivers/spi/spi-cadence.c
··· 729 ctlr->unprepare_transfer_hardware = cdns_unprepare_transfer_hardware; 730 ctlr->mode_bits = SPI_CPOL | SPI_CPHA; 731 ctlr->bits_per_word_mask = SPI_BPW_MASK(8); 732 733 if (of_device_is_compatible(pdev->dev.of_node, "cix,sky1-spi-r1p6")) 734 ctlr->bits_per_word_mask |= SPI_BPW_MASK(16) | SPI_BPW_MASK(32);
··· 729 ctlr->unprepare_transfer_hardware = cdns_unprepare_transfer_hardware; 730 ctlr->mode_bits = SPI_CPOL | SPI_CPHA; 731 ctlr->bits_per_word_mask = SPI_BPW_MASK(8); 732 + ctlr->flags = SPI_CONTROLLER_MUST_TX; 733 734 if (of_device_is_compatible(pdev->dev.of_node, "cix,sky1-spi-r1p6")) 735 ctlr->bits_per_word_mask |= SPI_BPW_MASK(16) | SPI_BPW_MASK(32);
+1 -3
drivers/spi/spi-hisi-kunpeng.c
··· 161 static int hisi_spi_debugfs_init(struct hisi_spi *hs) 162 { 163 char name[32]; 164 165 - struct spi_controller *host; 166 - 167 - host = container_of(hs->dev, struct spi_controller, dev); 168 snprintf(name, 32, "hisi_spi%d", host->bus_num); 169 hs->debugfs = debugfs_create_dir(name, NULL); 170 if (IS_ERR(hs->debugfs))
··· 161 static int hisi_spi_debugfs_init(struct hisi_spi *hs) 162 { 163 char name[32]; 164 + struct spi_controller *host = dev_get_drvdata(hs->dev); 165 166 snprintf(name, 32, "hisi_spi%d", host->bus_num); 167 hs->debugfs = debugfs_create_dir(name, NULL); 168 if (IS_ERR(hs->debugfs))
+1
drivers/spi/spi-intel-pci.c
··· 81 { PCI_VDEVICE(INTEL, 0x54a4), (unsigned long)&cnl_info }, 82 { PCI_VDEVICE(INTEL, 0x5794), (unsigned long)&cnl_info }, 83 { PCI_VDEVICE(INTEL, 0x5825), (unsigned long)&cnl_info }, 84 { PCI_VDEVICE(INTEL, 0x7723), (unsigned long)&cnl_info }, 85 { PCI_VDEVICE(INTEL, 0x7a24), (unsigned long)&cnl_info }, 86 { PCI_VDEVICE(INTEL, 0x7aa4), (unsigned long)&cnl_info },
··· 81 { PCI_VDEVICE(INTEL, 0x54a4), (unsigned long)&cnl_info }, 82 { PCI_VDEVICE(INTEL, 0x5794), (unsigned long)&cnl_info }, 83 { PCI_VDEVICE(INTEL, 0x5825), (unsigned long)&cnl_info }, 84 + { PCI_VDEVICE(INTEL, 0x6e24), (unsigned long)&cnl_info }, 85 { PCI_VDEVICE(INTEL, 0x7723), (unsigned long)&cnl_info }, 86 { PCI_VDEVICE(INTEL, 0x7a24), (unsigned long)&cnl_info }, 87 { PCI_VDEVICE(INTEL, 0x7aa4), (unsigned long)&cnl_info },
+10 -23
drivers/spi/spi-sprd-adi.c
··· 528 pdev->id = of_alias_get_id(np, "spi"); 529 num_chipselect = of_get_child_count(np); 530 531 - ctlr = spi_alloc_host(&pdev->dev, sizeof(struct sprd_adi)); 532 if (!ctlr) 533 return -ENOMEM; 534 ··· 536 sadi = spi_controller_get_devdata(ctlr); 537 538 sadi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); 539 - if (IS_ERR(sadi->base)) { 540 - ret = PTR_ERR(sadi->base); 541 - goto put_ctlr; 542 - } 543 544 sadi->slave_vbase = (unsigned long)sadi->base + 545 data->slave_offset; ··· 549 if (ret > 0 || (IS_ENABLED(CONFIG_HWSPINLOCK) && ret == 0)) { 550 sadi->hwlock = 551 devm_hwspin_lock_request_specific(&pdev->dev, ret); 552 - if (!sadi->hwlock) { 553 - ret = -ENXIO; 554 - goto put_ctlr; 555 - } 556 } else { 557 switch (ret) { 558 case -ENOENT: 559 dev_info(&pdev->dev, "no hardware spinlock supplied\n"); 560 break; 561 default: 562 - dev_err_probe(&pdev->dev, ret, "failed to find hwlock id\n"); 563 - goto put_ctlr; 564 } 565 } 566 ··· 574 ctlr->transfer_one = sprd_adi_transfer_one; 575 576 ret = devm_spi_register_controller(&pdev->dev, ctlr); 577 - if (ret) { 578 - dev_err(&pdev->dev, "failed to register SPI controller\n"); 579 - goto put_ctlr; 580 - } 581 582 if (sadi->data->restart) { 583 ret = devm_register_restart_handler(&pdev->dev, 584 sadi->data->restart, 585 sadi); 586 - if (ret) { 587 - dev_err(&pdev->dev, "can not register restart handler\n"); 588 - goto put_ctlr; 589 - } 590 } 591 592 return 0; 593 - 594 - put_ctlr: 595 - spi_controller_put(ctlr); 596 - return ret; 597 } 598 599 static struct sprd_adi_data sc9860_data = {
··· 528 pdev->id = of_alias_get_id(np, "spi"); 529 num_chipselect = of_get_child_count(np); 530 531 + ctlr = devm_spi_alloc_host(&pdev->dev, sizeof(struct sprd_adi)); 532 if (!ctlr) 533 return -ENOMEM; 534 ··· 536 sadi = spi_controller_get_devdata(ctlr); 537 538 sadi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); 539 + if (IS_ERR(sadi->base)) 540 + return PTR_ERR(sadi->base); 541 542 sadi->slave_vbase = (unsigned long)sadi->base + 543 data->slave_offset; ··· 551 if (ret > 0 || (IS_ENABLED(CONFIG_HWSPINLOCK) && ret == 0)) { 552 sadi->hwlock = 553 devm_hwspin_lock_request_specific(&pdev->dev, ret); 554 + if (!sadi->hwlock) 555 + return -ENXIO; 556 } else { 557 switch (ret) { 558 case -ENOENT: 559 dev_info(&pdev->dev, "no hardware spinlock supplied\n"); 560 break; 561 default: 562 + return dev_err_probe(&pdev->dev, ret, "failed to find hwlock id\n"); 563 } 564 } 565 ··· 579 ctlr->transfer_one = sprd_adi_transfer_one; 580 581 ret = devm_spi_register_controller(&pdev->dev, ctlr); 582 + if (ret) 583 + return dev_err_probe(&pdev->dev, ret, "failed to register SPI controller\n"); 584 585 if (sadi->data->restart) { 586 ret = devm_register_restart_handler(&pdev->dev, 587 sadi->data->restart, 588 sadi); 589 + if (ret) 590 + return dev_err_probe(&pdev->dev, ret, "can not register restart handler\n"); 591 } 592 593 return 0; 594 } 595 596 static struct sprd_adi_data sc9860_data = {