diff --git a/sound/soc/fsl/fsl_spdif.c b/sound/soc/fsl/fsl_spdif.c
index 386c459aaa5e594d87c378092e17ebda45c3523f..25dea5a9e3c22840d45eb91f6a10f5549bd4ff5e 100644
--- a/sound/soc/fsl/fsl_spdif.c
+++ b/sound/soc/fsl/fsl_spdif.c
@@ -58,6 +58,7 @@ struct fsl_spdif_soc_data {
 	u32 rx_burst;
 	u32 interrupts;
 	u64 tx_formats;
+	u64 rx_rates;
 };
 
 /*
@@ -139,6 +140,7 @@ static struct fsl_spdif_soc_data fsl_spdif_vf610 = {
 	.rx_burst = FSL_SPDIF_RXFIFO_WML,
 	.interrupts = 1,
 	.tx_formats = FSL_SPDIF_FORMATS_PLAYBACK,
+	.rx_rates = FSL_SPDIF_RATES_CAPTURE,
 	.constrain_period_size = false,
 };
 
@@ -149,6 +151,7 @@ static struct fsl_spdif_soc_data fsl_spdif_imx35 = {
 	.rx_burst = FSL_SPDIF_RXFIFO_WML,
 	.interrupts = 1,
 	.tx_formats = FSL_SPDIF_FORMATS_PLAYBACK,
+	.rx_rates = FSL_SPDIF_RATES_CAPTURE,
 	.constrain_period_size = false,
 };
 
@@ -164,6 +167,7 @@ static struct fsl_spdif_soc_data fsl_spdif_imx8qxp_v1 = {
 	.rx_burst = 2,
 	.interrupts = 2,
 	.tx_formats = SNDRV_PCM_FMTBIT_S24_LE,
+	.rx_rates = FSL_SPDIF_RATES_CAPTURE,
 	.constrain_period_size = true,
 };
 
@@ -174,6 +178,7 @@ static struct fsl_spdif_soc_data fsl_spdif_imx8qm = {
 	.rx_burst = 2,
 	.interrupts = 2,
 	.tx_formats = SNDRV_PCM_FMTBIT_S24_LE,
+	.rx_rates = (FSL_SPDIF_RATES_CAPTURE | SNDRV_PCM_RATE_192000),
 	.constrain_period_size = true,
 };
 
@@ -1423,6 +1428,8 @@ static int fsl_spdif_probe(struct platform_device *pdev)
 	spdif_priv->cpu_dai_drv.name = dev_name(&pdev->dev);
 	spdif_priv->cpu_dai_drv.playback.formats =
 				spdif_priv->soc->tx_formats;
+	spdif_priv->cpu_dai_drv.capture.rates =
+				spdif_priv->soc->rx_rates;
 
 	/* Get the addresses and IRQ */
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);