Commit 6fac1139 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull soundwire updates from Vinod Koul:
 "A couple of small core changes and driver updates:

   - Core: handling of nesting irqs to outside the lock, stream
     parameters handing on port prep failures.

   - AMD driver support for ACP 7.2 platforms and improved handing of
     slave alerts and resume sequences

   - Qualcomm updating driver debug spew

   - Intel BPT message length limitations, rt721 codec as wake capable
     etc"

* tag 'soundwire-6.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire:
  soundwire: amd: Add support for acp7.2 platform
  soundwire: stream: restore params when prepare ports fail
  soundwire: debugfs: move debug statement outside of error handling
  soundwire: amd: add check for status update registers
  soundwire: intel_auxdevice: add rt721 codec to wake_capable_list
  soundwire: Correct some property names
  soundwire: update Intel BPT message length limitation
  soundwire: intel_ace2.x: Use str_read_write() helper
  soundwire: amd: cancel pending slave status handling workqueue during remove sequence
  soundwire: amd: serialize amd manager resume sequence during pm_prepare
  soundwire: qcom: demote probe registration printk
  ASoC: cs42l43: Remove unnecessary work functions
  soundwire: Move handle_nested_irq outside of sdw_dev_lock
  MAINTAINERS: Remove Sanyog Kale as reviewer on SoundWire
parents d6f38c12 34b1cb4e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -333,4 +333,4 @@ FIFO sizes to avoid xruns.

Alignment requirements are currently not enforced at the core level
but at the platform-level, e.g. for Intel the data sizes must be
multiples of 32 bytes.
equal to or larger than 16 bytes.
+0 −1
Original line number Diff line number Diff line
@@ -23637,7 +23637,6 @@ SOUNDWIRE SUBSYSTEM
M:	Vinod Koul <vkoul@kernel.org>
M:	Bard Liao <yung-chuan.liao@linux.intel.com>
R:	Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
R:	Sanyog Kale <sanyog.r.kale@intel.com>
L:	linux-sound@vger.kernel.org
S:	Supported
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire.git
+11 −3
Original line number Diff line number Diff line
@@ -499,6 +499,7 @@ static int amd_sdw_port_params(struct sdw_bus *bus, struct sdw_port_params *p_pa
		break;
	case ACP70_PCI_REV_ID:
	case ACP71_PCI_REV_ID:
	case ACP72_PCI_REV_ID:
		frame_fmt_reg = acp70_sdw_dp_reg[p_params->num].frame_fmt_reg;
		break;
	default:
@@ -551,6 +552,7 @@ static int amd_sdw_transport_params(struct sdw_bus *bus,
		break;
	case ACP70_PCI_REV_ID:
	case ACP71_PCI_REV_ID:
	case ACP72_PCI_REV_ID:
		frame_fmt_reg = acp70_sdw_dp_reg[params->port_num].frame_fmt_reg;
		sample_int_reg = acp70_sdw_dp_reg[params->port_num].sample_int_reg;
		hctrl_dp0_reg = acp70_sdw_dp_reg[params->port_num].hctrl_dp0_reg;
@@ -614,6 +616,7 @@ static int amd_sdw_port_enable(struct sdw_bus *bus,
		break;
	case ACP70_PCI_REV_ID:
	case ACP71_PCI_REV_ID:
	case ACP72_PCI_REV_ID:
		lane_ctrl_ch_en_reg = acp70_sdw_dp_reg[enable_ch->port_num].lane_ctrl_ch_en_reg;
		break;
	default:
@@ -931,6 +934,9 @@ static void amd_sdw_irq_thread(struct work_struct *work)

	status_change_8to11 = readl(amd_manager->mmio + ACP_SW_STATE_CHANGE_STATUS_8TO11);
	status_change_0to7 = readl(amd_manager->mmio + ACP_SW_STATE_CHANGE_STATUS_0TO7);
	if (!status_change_0to7 && !status_change_8to11)
		return;

	dev_dbg(amd_manager->dev, "[SDW%d] SDW INT: 0to7=0x%x, 8to11=0x%x\n",
		amd_manager->instance, status_change_0to7, status_change_8to11);
	if (status_change_8to11 & AMD_SDW_WAKE_STAT_MASK)
@@ -1035,6 +1041,7 @@ static int amd_sdw_manager_probe(struct platform_device *pdev)
		break;
	case ACP70_PCI_REV_ID:
	case ACP71_PCI_REV_ID:
	case ACP72_PCI_REV_ID:
		amd_manager->num_dout_ports = AMD_ACP70_SDW_MAX_TX_PORTS;
		amd_manager->num_din_ports = AMD_ACP70_SDW_MAX_RX_PORTS;
		break;
@@ -1074,6 +1081,7 @@ static void amd_sdw_manager_remove(struct platform_device *pdev)
	int ret;

	pm_runtime_disable(&pdev->dev);
	cancel_work_sync(&amd_manager->amd_sdw_work);
	amd_disable_sdw_interrupts(amd_manager);
	sdw_bus_master_delete(&amd_manager->bus);
	ret = amd_disable_sdw_manager(amd_manager);
@@ -1178,10 +1186,10 @@ static int __maybe_unused amd_pm_prepare(struct device *dev)
	 * device is not in runtime suspend state, observed that device alerts are missing
	 * without pm_prepare on AMD platforms in clockstop mode0.
	 */
	if (amd_manager->power_mode_mask & AMD_SDW_CLK_STOP_MODE) {
		ret = pm_request_resume(dev);
	if (amd_manager->power_mode_mask) {
		ret = pm_runtime_resume(dev);
		if (ret < 0) {
			dev_err(bus->dev, "pm_request_resume failed: %d\n", ret);
			dev_err(bus->dev, "pm_runtime_resume failed: %d\n", ret);
			return 0;
		}
	}
+3 −3
Original line number Diff line number Diff line
@@ -1753,15 +1753,15 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)

		/* Update the Slave driver */
		if (slave_notify) {
			if (slave->prop.use_domain_irq && slave->irq)
				handle_nested_irq(slave->irq);

			mutex_lock(&slave->sdw_dev_lock);

			if (slave->probed) {
				struct device *dev = &slave->dev;
				struct sdw_driver *drv = drv_to_sdw_driver(dev->driver);

				if (slave->prop.use_domain_irq && slave->irq)
					handle_nested_irq(slave->irq);

				if (drv->ops && drv->ops->interrupt_callback) {
					slave_intr.sdca_cascade = sdca_cascade;
					slave_intr.control_port = clear;
+3 −3
Original line number Diff line number Diff line
@@ -291,6 +291,9 @@ static int cmd_go(void *data, u64 value)

	finish_t = ktime_get();

	dev_dbg(&slave->dev, "command completed, num_byte %zu status %d, time %lld ms\n",
		num_bytes, ret, div_u64(finish_t - start_t, NSEC_PER_MSEC));

out:
	if (fw)
		release_firmware(fw);
@@ -298,9 +301,6 @@ static int cmd_go(void *data, u64 value)
	pm_runtime_mark_last_busy(&slave->dev);
	pm_runtime_put(&slave->dev);

	dev_dbg(&slave->dev, "command completed, num_byte %zu status %d, time %lld ms\n",
		num_bytes, ret, div_u64(finish_t - start_t, NSEC_PER_MSEC));

	return ret;
}
DEFINE_DEBUGFS_ATTRIBUTE(cmd_go_fops, NULL,
Loading