Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+55 -27
+12 -9
Documentation/devicetree/bindings/sound/renesas,rz-ssi.yaml
··· 25 25 maxItems: 1 26 26 27 27 interrupts: 28 - maxItems: 4 28 + minItems: 2 29 + maxItems: 3 29 30 30 31 interrupt-names: 31 - items: 32 - - const: int_req 33 - - const: dma_rx 34 - - const: dma_tx 35 - - const: dma_rt 32 + oneOf: 33 + - items: 34 + - const: int_req 35 + - const: dma_rx 36 + - const: dma_tx 37 + - items: 38 + - const: int_req 39 + - const: dma_rt 36 40 37 41 clocks: 38 42 maxItems: 4 ··· 110 106 reg = <0x10049c00 0x400>; 111 107 interrupts = <GIC_SPI 326 IRQ_TYPE_LEVEL_HIGH>, 112 108 <GIC_SPI 327 IRQ_TYPE_EDGE_RISING>, 113 - <GIC_SPI 328 IRQ_TYPE_EDGE_RISING>, 114 - <GIC_SPI 329 IRQ_TYPE_EDGE_RISING>; 115 - interrupt-names = "int_req", "dma_rx", "dma_tx", "dma_rt"; 109 + <GIC_SPI 328 IRQ_TYPE_EDGE_RISING>; 110 + interrupt-names = "int_req", "dma_rx", "dma_tx"; 116 111 clocks = <&cpg CPG_MOD R9A07G044_SSI0_PCLK2>, 117 112 <&cpg CPG_MOD R9A07G044_SSI0_PCLK_SFR>, 118 113 <&audio_clk1>,
+43 -18
sound/soc/sh/rz-ssi.c
··· 109 109 int irq_int; 110 110 int irq_tx; 111 111 int irq_rx; 112 + int irq_rt; 112 113 113 114 spinlock_t lock; 114 115 ··· 566 565 rz_ssi_reg_mask_setl(ssi, SSIFSR, SSIFSR_RDF, 0); 567 566 } 568 567 568 + if (irq == ssi->irq_rt) { 569 + struct snd_pcm_substream *substream = strm->substream; 570 + 571 + if (rz_ssi_stream_is_play(ssi, substream)) { 572 + strm->transfer(ssi, &ssi->playback); 573 + } else { 574 + strm->transfer(ssi, &ssi->capture); 575 + rz_ssi_reg_mask_setl(ssi, SSIFSR, SSIFSR_RDF, 0); 576 + } 577 + } 578 + 569 579 return IRQ_HANDLED; 570 580 } 571 581 ··· 1005 993 if (!rz_ssi_is_dma_enabled(ssi)) { 1006 994 /* Tx and Rx interrupts (pio only) */ 1007 995 ssi->irq_tx = platform_get_irq_byname(pdev, "dma_tx"); 1008 - if (ssi->irq_tx < 0) 1009 - return ssi->irq_tx; 1010 - 1011 - ret = devm_request_irq(&pdev->dev, ssi->irq_tx, 1012 - &rz_ssi_interrupt, 0, 1013 - dev_name(&pdev->dev), ssi); 1014 - if (ret < 0) 1015 - return dev_err_probe(&pdev->dev, ret, 1016 - "irq request error (dma_tx)\n"); 1017 - 1018 996 ssi->irq_rx = platform_get_irq_byname(pdev, "dma_rx"); 1019 - if (ssi->irq_rx < 0) 1020 - return ssi->irq_rx; 997 + if (ssi->irq_tx == -ENXIO && ssi->irq_rx == -ENXIO) { 998 + ssi->irq_rt = platform_get_irq_byname(pdev, "dma_rt"); 999 + if (ssi->irq_rt < 0) 1000 + return ssi->irq_rt; 1021 1001 1022 - ret = devm_request_irq(&pdev->dev, ssi->irq_rx, 1023 - &rz_ssi_interrupt, 0, 1024 - dev_name(&pdev->dev), ssi); 1025 - if (ret < 0) 1026 - return dev_err_probe(&pdev->dev, ret, 1027 - "irq request error (dma_rx)\n"); 1002 + ret = devm_request_irq(&pdev->dev, ssi->irq_rt, 1003 + &rz_ssi_interrupt, 0, 1004 + dev_name(&pdev->dev), ssi); 1005 + if (ret < 0) 1006 + return dev_err_probe(&pdev->dev, ret, 1007 + "irq request error (dma_tx)\n"); 1008 + } else { 1009 + if (ssi->irq_tx < 0) 1010 + return ssi->irq_tx; 1011 + 1012 + if (ssi->irq_rx < 0) 1013 + return ssi->irq_rx; 1014 + 1015 + ret = devm_request_irq(&pdev->dev, ssi->irq_tx, 1016 + &rz_ssi_interrupt, 0, 1017 + dev_name(&pdev->dev), ssi); 1018 + if (ret < 0) 1019 + return dev_err_probe(&pdev->dev, ret, 1020 + "irq request error (dma_tx)\n"); 1021 + 1022 + ret = devm_request_irq(&pdev->dev, ssi->irq_rx, 1023 + &rz_ssi_interrupt, 0, 1024 + dev_name(&pdev->dev), ssi); 1025 + if (ret < 0) 1026 + return dev_err_probe(&pdev->dev, ret, 1027 + "irq request error (dma_rx)\n"); 1028 + } 1028 1029 } 1029 1030 1030 1031 ssi->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);