Unverified Commit 0fde3187 authored by Mark Brown's avatar Mark Brown
Browse files

RZ/G2L SSI: Update interrupt numbers

Merge series from Prabhakar <prabhakar.csengg@gmail.com>:

Hi All,

This patch series aims to fix interrupt numbers for SSI channels and updates
the DT binding and the driver accordingly.

Note, this patch series applies on top of [0].

[0] https://patchwork.kernel.org/project/linux-renesas-soc/cover/20230131223529.11905-1-prabhakar.mahadev-lad.rj@bp.renesas.com/

Cheers,
Prabhakar

Lad Prabhakar (4):
  ASoC: dt-bindings: renesas,rz-ssi: Update interrupts and
    interrupt-names properties
  ASoC: sh: rz-ssi: Update interrupt handling for half duplex channels
  arm64: dts: renesas: r9a07g044: Update IRQ numbers for SSI channels
  arm64: dts: renesas: r9a07g043: Update IRQ numbers for SSI channels

 .../bindings/sound/renesas,rz-ssi.yaml        | 21 ++++---
 arch/arm64/boot/dts/renesas/r9a07g043.dtsi    | 19 +++---
 arch/arm64/boot/dts/renesas/r9a07g044.dtsi    | 19 +++---
 sound/soc/sh/rz-ssi.c                         | 63 +++++++++++++------
 4 files changed, 70 insertions(+), 52 deletions(-)

--
2.25.1
parents 7ae87d3c 38c042b5
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -25,13 +25,17 @@ properties:
    maxItems: 1

  interrupts:
    maxItems: 4
    minItems: 2
    maxItems: 3

  interrupt-names:
    items:
    oneOf:
      - items:
          - const: int_req
          - const: dma_rx
          - const: dma_tx
      - items:
          - const: int_req
          - const: dma_rt

  clocks:
@@ -106,9 +110,8 @@ examples:
            reg = <0x10049c00 0x400>;
            interrupts = <GIC_SPI 326 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 327 IRQ_TYPE_EDGE_RISING>,
                         <GIC_SPI 328 IRQ_TYPE_EDGE_RISING>,
                         <GIC_SPI 329 IRQ_TYPE_EDGE_RISING>;
            interrupt-names = "int_req", "dma_rx", "dma_tx", "dma_rt";
                         <GIC_SPI 328 IRQ_TYPE_EDGE_RISING>;
            interrupt-names = "int_req", "dma_rx", "dma_tx";
            clocks = <&cpg CPG_MOD R9A07G044_SSI0_PCLK2>,
                     <&cpg CPG_MOD R9A07G044_SSI0_PCLK_SFR>,
                     <&audio_clk1>,
+44 −19
Original line number Diff line number Diff line
@@ -109,6 +109,7 @@ struct rz_ssi_priv {
	int irq_int;
	int irq_tx;
	int irq_rx;
	int irq_rt;

	spinlock_t lock;

@@ -565,6 +566,17 @@ static irqreturn_t rz_ssi_interrupt(int irq, void *data)
		rz_ssi_reg_mask_setl(ssi, SSIFSR, SSIFSR_RDF, 0);
	}

	if (irq == ssi->irq_rt) {
		struct snd_pcm_substream *substream = strm->substream;

		if (rz_ssi_stream_is_play(ssi, substream)) {
			strm->transfer(ssi, &ssi->playback);
		} else {
			strm->transfer(ssi, &ssi->capture);
			rz_ssi_reg_mask_setl(ssi, SSIFSR, SSIFSR_RDF, 0);
		}
	}

	return IRQ_HANDLED;
}

@@ -993,20 +1005,32 @@ static int rz_ssi_probe(struct platform_device *pdev)
	if (!rz_ssi_is_dma_enabled(ssi)) {
		/* Tx and Rx interrupts (pio only) */
		ssi->irq_tx = platform_get_irq_byname(pdev, "dma_tx");
		if (ssi->irq_tx < 0)
			return ssi->irq_tx;
		ssi->irq_rx = platform_get_irq_byname(pdev, "dma_rx");
		if (ssi->irq_tx == -ENXIO && ssi->irq_rx == -ENXIO) {
			ssi->irq_rt = platform_get_irq_byname(pdev, "dma_rt");
			if (ssi->irq_rt < 0)
				return ssi->irq_rt;

		ret = devm_request_irq(&pdev->dev, ssi->irq_tx,
			ret = devm_request_irq(&pdev->dev, ssi->irq_rt,
					       &rz_ssi_interrupt, 0,
					       dev_name(&pdev->dev), ssi);
			if (ret < 0)
				return dev_err_probe(&pdev->dev, ret,
						"irq request error (dma_tx)\n");
		} else {
			if (ssi->irq_tx < 0)
				return ssi->irq_tx;

		ssi->irq_rx = platform_get_irq_byname(pdev, "dma_rx");
			if (ssi->irq_rx < 0)
				return ssi->irq_rx;

			ret = devm_request_irq(&pdev->dev, ssi->irq_tx,
					       &rz_ssi_interrupt, 0,
					       dev_name(&pdev->dev), ssi);
			if (ret < 0)
				return dev_err_probe(&pdev->dev, ret,
						"irq request error (dma_tx)\n");

			ret = devm_request_irq(&pdev->dev, ssi->irq_rx,
					       &rz_ssi_interrupt, 0,
					       dev_name(&pdev->dev), ssi);
@@ -1014,6 +1038,7 @@ static int rz_ssi_probe(struct platform_device *pdev)
				return dev_err_probe(&pdev->dev, ret,
						"irq request error (dma_rx)\n");
		}
	}

	ssi->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
	if (IS_ERR(ssi->rstc)) {