forked from Minki/linux
drm: bridge/dw_hdmi: clean up hdmi_set_clk_regenerator()
Clean up hdmi_set_clk_regenerator() by allowing it to take the audio sample rate and ratio directly, rather than hiding it inside the function. Raise the unsupported pixel clock/sample rate message from debug to error level as this results in audio not working correctly. Tested-by: Yakir Yang <ykk@rock-chips.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
39cc1535fe
commit
f879b38f91
@ -335,39 +335,37 @@ static unsigned int hdmi_compute_cts(unsigned int freq, unsigned long pixel_clk,
|
||||
}
|
||||
|
||||
static void hdmi_set_clk_regenerator(struct dw_hdmi *hdmi,
|
||||
unsigned long pixel_clk)
|
||||
unsigned long pixel_clk, unsigned int sample_rate, unsigned int ratio)
|
||||
{
|
||||
unsigned int clk_n, clk_cts;
|
||||
unsigned int n, cts;
|
||||
|
||||
clk_n = hdmi_compute_n(hdmi->sample_rate, pixel_clk,
|
||||
hdmi->ratio);
|
||||
clk_cts = hdmi_compute_cts(hdmi->sample_rate, pixel_clk,
|
||||
hdmi->ratio);
|
||||
|
||||
if (!clk_cts) {
|
||||
dev_dbg(hdmi->dev, "%s: pixel clock not supported: %lu\n",
|
||||
__func__, pixel_clk);
|
||||
return;
|
||||
n = hdmi_compute_n(sample_rate, pixel_clk, ratio);
|
||||
cts = hdmi_compute_cts(sample_rate, pixel_clk, ratio);
|
||||
if (!cts) {
|
||||
dev_err(hdmi->dev,
|
||||
"%s: pixel clock/sample rate not supported: %luMHz / %ukHz\n",
|
||||
__func__, pixel_clk, sample_rate);
|
||||
}
|
||||
|
||||
dev_dbg(hdmi->dev, "%s: samplerate=%d ratio=%d pixelclk=%lu N=%d cts=%d\n",
|
||||
__func__, hdmi->sample_rate, hdmi->ratio,
|
||||
pixel_clk, clk_n, clk_cts);
|
||||
dev_dbg(hdmi->dev, "%s: samplerate=%ukHz ratio=%d pixelclk=%luMHz N=%d cts=%d\n",
|
||||
__func__, sample_rate, ratio, pixel_clk, n, cts);
|
||||
|
||||
hdmi_set_cts_n(hdmi, clk_cts, clk_n);
|
||||
hdmi_set_cts_n(hdmi, cts, n);
|
||||
}
|
||||
|
||||
static void hdmi_init_clk_regenerator(struct dw_hdmi *hdmi)
|
||||
{
|
||||
mutex_lock(&hdmi->audio_mutex);
|
||||
hdmi_set_clk_regenerator(hdmi, 74250000);
|
||||
hdmi_set_clk_regenerator(hdmi, 74250000, hdmi->sample_rate,
|
||||
hdmi->ratio);
|
||||
mutex_unlock(&hdmi->audio_mutex);
|
||||
}
|
||||
|
||||
static void hdmi_clk_regenerator_update_pixel_clock(struct dw_hdmi *hdmi)
|
||||
{
|
||||
mutex_lock(&hdmi->audio_mutex);
|
||||
hdmi_set_clk_regenerator(hdmi, hdmi->hdmi_data.video_mode.mpixelclock);
|
||||
hdmi_set_clk_regenerator(hdmi, hdmi->hdmi_data.video_mode.mpixelclock,
|
||||
hdmi->sample_rate, hdmi->ratio);
|
||||
mutex_unlock(&hdmi->audio_mutex);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user