|
|
@@ -75,6 +75,7 @@ struct fsl_spdif_priv {
|
|
|
struct platform_device *pdev;
|
|
|
struct regmap *regmap;
|
|
|
bool dpll_locked;
|
|
|
+ u16 txrate[SPDIF_TXRATE_MAX];
|
|
|
u8 txclk_df[SPDIF_TXRATE_MAX];
|
|
|
u8 sysclk_df[SPDIF_TXRATE_MAX];
|
|
|
u8 txclk_src[SPDIF_TXRATE_MAX];
|
|
|
@@ -418,7 +419,8 @@ clk_set_bypass:
|
|
|
regmap_update_bits(regmap, REG_SPDIF_STC,
|
|
|
STC_SYSCLK_DF_MASK, STC_SYSCLK_DF(sysclk_df));
|
|
|
|
|
|
- dev_dbg(&pdev->dev, "set sample rate to %d\n", sample_rate);
|
|
|
+ dev_dbg(&pdev->dev, "set sample rate to %dHz for %dHz playback\n",
|
|
|
+ spdif_priv->txrate[rate], sample_rate);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -1049,6 +1051,7 @@ static u32 fsl_spdif_txclk_caldiv(struct fsl_spdif_priv *spdif_priv,
|
|
|
savesub = 0;
|
|
|
spdif_priv->txclk_df[index] = txclk_df;
|
|
|
spdif_priv->sysclk_df[index] = sysclk_df;
|
|
|
+ spdif_priv->txrate[index] = arate;
|
|
|
goto out;
|
|
|
} else if (arate / rate[index] == 1) {
|
|
|
/* A little bigger than expect */
|
|
|
@@ -1059,6 +1062,7 @@ static u32 fsl_spdif_txclk_caldiv(struct fsl_spdif_priv *spdif_priv,
|
|
|
savesub = sub;
|
|
|
spdif_priv->txclk_df[index] = txclk_df;
|
|
|
spdif_priv->sysclk_df[index] = sysclk_df;
|
|
|
+ spdif_priv->txrate[index] = arate;
|
|
|
} else if (rate[index] / arate == 1) {
|
|
|
/* A little smaller than expect */
|
|
|
sub = (rate[index] - arate) * 100000;
|
|
|
@@ -1068,6 +1072,7 @@ static u32 fsl_spdif_txclk_caldiv(struct fsl_spdif_priv *spdif_priv,
|
|
|
savesub = sub;
|
|
|
spdif_priv->txclk_df[index] = txclk_df;
|
|
|
spdif_priv->sysclk_df[index] = sysclk_df;
|
|
|
+ spdif_priv->txrate[index] = arate;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -1118,6 +1123,8 @@ static int fsl_spdif_probe_txclk(struct fsl_spdif_priv *spdif_priv,
|
|
|
if (spdif_priv->txclk[index] == spdif_priv->sysclk)
|
|
|
dev_dbg(&pdev->dev, "use sysclk df %d for %dHz sample rate\n",
|
|
|
spdif_priv->sysclk_df[index], rate[index]);
|
|
|
+ dev_dbg(&pdev->dev, "the best rate for %dHz sample rate is %dHz\n",
|
|
|
+ rate[index], spdif_priv->txrate[index]);
|
|
|
|
|
|
return 0;
|
|
|
}
|