mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 11:03:43 +02:00
ASoC: fsl_xcvr: get channel status data in two cases
Merge series from Shengjiu Wang <shengjiu.wang@nxp.com>: There is two different cases for getting channel status data: 1. With PHY exists, there is firmware running on M core, the firmware should fill the channel status to RAM space, driver need to read them from RAM. 2. Without PHY, the channel status need to be obtained from registers.
This commit is contained in:
commit
7379907e24
|
|
@ -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,
|
||||
|
|
@ -1423,6 +1423,26 @@ static irqreturn_t irq0_isr(int irq, void *devid)
|
|||
/* clear CS control register */
|
||||
memset_io(reg_ctrl, 0, sizeof(val));
|
||||
}
|
||||
} else {
|
||||
regmap_read(xcvr->regmap, FSL_XCVR_RX_CS_DATA_0,
|
||||
(u32 *)&xcvr->rx_iec958.status[0]);
|
||||
regmap_read(xcvr->regmap, FSL_XCVR_RX_CS_DATA_1,
|
||||
(u32 *)&xcvr->rx_iec958.status[4]);
|
||||
regmap_read(xcvr->regmap, FSL_XCVR_RX_CS_DATA_2,
|
||||
(u32 *)&xcvr->rx_iec958.status[8]);
|
||||
regmap_read(xcvr->regmap, FSL_XCVR_RX_CS_DATA_3,
|
||||
(u32 *)&xcvr->rx_iec958.status[12]);
|
||||
regmap_read(xcvr->regmap, FSL_XCVR_RX_CS_DATA_4,
|
||||
(u32 *)&xcvr->rx_iec958.status[16]);
|
||||
regmap_read(xcvr->regmap, FSL_XCVR_RX_CS_DATA_5,
|
||||
(u32 *)&xcvr->rx_iec958.status[20]);
|
||||
for (i = 0; i < 6; i++) {
|
||||
val = *(u32 *)(xcvr->rx_iec958.status + i * 4);
|
||||
*(u32 *)(xcvr->rx_iec958.status + i * 4) =
|
||||
bitrev32(val);
|
||||
}
|
||||
regmap_set_bits(xcvr->regmap, FSL_XCVR_RX_DPTH_CTRL,
|
||||
FSL_XCVR_RX_DPTH_CTRL_CSA);
|
||||
}
|
||||
}
|
||||
if (isr & FSL_XCVR_IRQ_NEW_UD) {
|
||||
|
|
@ -1497,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,
|
||||
|
|
@ -1786,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");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user