| From e557d9739120cebf3918c98c4f3ff21867b19580 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 10 Jul 2025 11:04:05 +0800 |
| Subject: ASoC: fsl_xcvr: get channel status data with firmware exists |
| |
| From: Shengjiu Wang <shengjiu.wang@nxp.com> |
| |
| [ Upstream commit 6776ecc9dd587c08a6bb334542f9f8821a091013 ] |
| |
| For the XCVR module on i.MX95, even though it only supports SPDIF, the |
| channel status needs to be obtained from RAM space, which is processed |
| by firmware. Firmware is necessary to trigger the FSL_XCVR_IRQ_NEW_CS |
| interrupt. |
| |
| This change also applies for the SPDIF & ARC function on i.MX8MP which |
| has the firmware. |
| |
| Fixes: e6a9750a346b ("ASoC: fsl_xcvr: Add suspend and resume support") |
| Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com> |
| Link: https://patch.msgid.link/20250710030405.3370671-3-shengjiu.wang@nxp.com |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| sound/soc/fsl/fsl_xcvr.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| diff --git a/sound/soc/fsl/fsl_xcvr.c b/sound/soc/fsl/fsl_xcvr.c |
| index 5b1e5f377426..f877dcb2570a 100644 |
| --- a/sound/soc/fsl/fsl_xcvr.c |
| +++ b/sound/soc/fsl/fsl_xcvr.c |
| @@ -1395,7 +1395,7 @@ static irqreturn_t irq0_isr(int irq, void *devid) |
| if (isr & FSL_XCVR_IRQ_NEW_CS) { |
| dev_dbg(dev, "Received new CS block\n"); |
| isr_clr |= FSL_XCVR_IRQ_NEW_CS; |
| - if (!xcvr->soc_data->spdif_only) { |
| + if (xcvr->soc_data->fw_name) { |
| /* Data RAM is 4KiB, last two pages: 8 and 9. Select page 8. */ |
| regmap_update_bits(xcvr->regmap, FSL_XCVR_EXT_CTRL, |
| FSL_XCVR_EXT_CTRL_PAGE_MASK, |
| @@ -1517,6 +1517,7 @@ static const struct fsl_xcvr_soc_data fsl_xcvr_imx93_data = { |
| }; |
| |
| static const struct fsl_xcvr_soc_data fsl_xcvr_imx95_data = { |
| + .fw_name = "imx/xcvr/xcvr-imx95.bin", |
| .spdif_only = true, |
| .use_phy = true, |
| .use_edma = true, |
| @@ -1806,7 +1807,7 @@ static int fsl_xcvr_runtime_resume(struct device *dev) |
| } |
| } |
| |
| - if (xcvr->mode == FSL_XCVR_MODE_EARC) { |
| + if (xcvr->soc_data->fw_name) { |
| ret = fsl_xcvr_load_firmware(xcvr); |
| if (ret) { |
| dev_err(dev, "failed to load firmware.\n"); |
| -- |
| 2.39.5 |
| |