Skip to content

Commit

Permalink
ASoC: cros_ec_codec: Reset I2S RX when probing
Browse files Browse the repository at this point in the history
It is not guaranteed that I2S RX is disabled when the kernel booting.
For example, if the kernel crashes while it is enabled, it will keep
enabled until the next time EC reboots. Reset I2S RX when probing to
fix this issue.

Signed-off-by: Yu-Hsuan Hsu <yuhsuan@chromium.org>
Reviewed-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Link: https://lore.kernel.org/r/20210115075301.47995-2-yuhsuan@chromium.org
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Yu-Hsuan Hsu authored and Mark Brown committed Jan 19, 2021
1 parent f4d3bd8 commit 7f1f7ae
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions sound/soc/codecs/cros_ec_codec.c
Original file line number Diff line number Diff line change
Expand Up @@ -1011,6 +1011,18 @@ static int cros_ec_codec_platform_probe(struct platform_device *pdev)
}
priv->ec_capabilities = r.capabilities;

/* Reset EC codec i2s rx. */
p.cmd = EC_CODEC_I2S_RX_RESET;
ret = send_ec_host_command(priv->ec_device, EC_CMD_EC_CODEC_I2S_RX,
(uint8_t *)&p, sizeof(p), NULL, 0);
if (ret == -ENOPROTOOPT) {
dev_info(dev,
"Missing reset command. Please update EC firmware.\n");
} else if (ret) {
dev_err(dev, "failed to EC_CODEC_I2S_RESET: %d\n", ret);
return ret;
}

platform_set_drvdata(pdev, priv);

ret = devm_snd_soc_register_component(dev, &i2s_rx_component_driver,
Expand Down

0 comments on commit 7f1f7ae

Please sign in to comment.