···358358 return 0;359359}360360361361-static void cs35l56_set_asp_slot_positions(struct cs35l56_private *cs35l56,362362- unsigned int reg, unsigned long mask)361361+static unsigned int cs35l56_make_tdm_config_word(unsigned int reg_val, unsigned long mask)363362{364364- unsigned int reg_val, channel_shift;363363+ unsigned int channel_shift;365364 int bit_num;366366-367367- /* Init all slots to 63 */368368- switch (reg) {369369- case CS35L56_ASP1_FRAME_CONTROL1:370370- reg_val = 0x3f3f3f3f;371371- break;372372- case CS35L56_ASP1_FRAME_CONTROL5:373373- reg_val = 0x3f3f3f;374374- break;375375- }376365377366 /* Enable consecutive TX1..TXn for each of the slots set in mask */378367 channel_shift = 0;···371382 channel_shift += 8;372383 }373384374374- regmap_write(cs35l56->base.regmap, reg, reg_val);385385+ return reg_val;375386}376387377388static int cs35l56_asp_dai_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,···407418 if (rx_mask == 0)408419 rx_mask = 0xf; // ASPTX1..TX4 in slots 0..3409420410410- cs35l56_set_asp_slot_positions(cs35l56, CS35L56_ASP1_FRAME_CONTROL1, rx_mask);411411- cs35l56_set_asp_slot_positions(cs35l56, CS35L56_ASP1_FRAME_CONTROL5, tx_mask);421421+ /* Default unused slots to 63 */422422+ regmap_write(cs35l56->base.regmap, CS35L56_ASP1_FRAME_CONTROL1,423423+ cs35l56_make_tdm_config_word(0x3f3f3f3f, rx_mask));424424+ regmap_write(cs35l56->base.regmap, CS35L56_ASP1_FRAME_CONTROL5,425425+ cs35l56_make_tdm_config_word(0x3f3f3f, tx_mask));412426413427 dev_dbg(cs35l56->base.dev, "tdm slot width: %u count: %u tx_mask: %#x rx_mask: %#x\n",414428 cs35l56->asp_slot_width, cs35l56->asp_slot_count, tx_mask, rx_mask);···952960953961 dev_dbg(dev, "system_resume\n");954962963963+ /*964964+ * We might have done a hard reset or the CS35L56 was power-cycled965965+ * so wait for control port to be ready.966966+ */967967+ cs35l56_wait_control_port_ready();968968+955969 /* Undo pm_runtime_force_suspend() before re-enabling the irq */956970 ret = pm_runtime_force_resume(dev);957971 if (cs35l56->base.irq)···976978 return ret;977979978980 cs35l56->base.fw_patched = false;981981+ wm_adsp_power_down(&cs35l56->dsp);979982 queue_work(cs35l56->dsp_wq, &cs35l56->dsp_work);980983981984 /*···10761077 return dev_err_probe(cs35l56->base.dev, ret, "Failed to enable supplies\n");1077107810781079 if (cs35l56->base.reset_gpio) {10801080+ /* ACPI can override GPIOD_OUT_LOW flag so force it to start low */10811081+ gpiod_set_value_cansleep(cs35l56->base.reset_gpio, 0);10791082 cs35l56_wait_min_reset_pulse();10801083 gpiod_set_value_cansleep(cs35l56->base.reset_gpio, 1);10811084 }