mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 18:24:14 +08:00
drm: bridge/dw_hdmi: remove ratio support from ACR code
We never set the ratio for CTS/N calculation for the audio clock regenerator (ACR) to anything but 100, so this adds pointless complexity. Should we support pixel repetition, we should update the CTS/N calculation code to use those parameters or the actual TMDS clock rate instead of a ratio. Tested-by: Fabio Estevam <fabio.estevam@freescale.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
426701d0cc
commit
b195fbdbdf
@ -140,7 +140,6 @@ struct dw_hdmi {
|
|||||||
unsigned int audio_cts;
|
unsigned int audio_cts;
|
||||||
unsigned int audio_n;
|
unsigned int audio_n;
|
||||||
bool audio_enable;
|
bool audio_enable;
|
||||||
int ratio;
|
|
||||||
|
|
||||||
void (*write)(struct dw_hdmi *hdmi, u8 val, int offset);
|
void (*write)(struct dw_hdmi *hdmi, u8 val, int offset);
|
||||||
u8 (*read)(struct dw_hdmi *hdmi, int offset);
|
u8 (*read)(struct dw_hdmi *hdmi, int offset);
|
||||||
@ -217,8 +216,7 @@ static void hdmi_set_cts_n(struct dw_hdmi *hdmi, unsigned int cts,
|
|||||||
hdmi_writeb(hdmi, n & 0xff, HDMI_AUD_N1);
|
hdmi_writeb(hdmi, n & 0xff, HDMI_AUD_N1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
|
static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk)
|
||||||
unsigned int ratio)
|
|
||||||
{
|
{
|
||||||
unsigned int n = (128 * freq) / 1000;
|
unsigned int n = (128 * freq) / 1000;
|
||||||
unsigned int mult = 1;
|
unsigned int mult = 1;
|
||||||
@ -231,9 +229,9 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
|
|||||||
switch (freq) {
|
switch (freq) {
|
||||||
case 32000:
|
case 32000:
|
||||||
if (pixel_clk == 25175000)
|
if (pixel_clk == 25175000)
|
||||||
n = (ratio == 150) ? 9152 : 4576;
|
n = 4576;
|
||||||
else if (pixel_clk == 27027000)
|
else if (pixel_clk == 27027000)
|
||||||
n = (ratio == 150) ? 8192 : 4096;
|
n = 4096;
|
||||||
else if (pixel_clk == 74176000 || pixel_clk == 148352000)
|
else if (pixel_clk == 74176000 || pixel_clk == 148352000)
|
||||||
n = 11648;
|
n = 11648;
|
||||||
else
|
else
|
||||||
@ -247,7 +245,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
|
|||||||
else if (pixel_clk == 74176000)
|
else if (pixel_clk == 74176000)
|
||||||
n = 17836;
|
n = 17836;
|
||||||
else if (pixel_clk == 148352000)
|
else if (pixel_clk == 148352000)
|
||||||
n = (ratio == 150) ? 17836 : 8918;
|
n = 8918;
|
||||||
else
|
else
|
||||||
n = 6272;
|
n = 6272;
|
||||||
n *= mult;
|
n *= mult;
|
||||||
@ -255,13 +253,13 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
|
|||||||
|
|
||||||
case 48000:
|
case 48000:
|
||||||
if (pixel_clk == 25175000)
|
if (pixel_clk == 25175000)
|
||||||
n = (ratio == 150) ? 9152 : 6864;
|
n = 6864;
|
||||||
else if (pixel_clk == 27027000)
|
else if (pixel_clk == 27027000)
|
||||||
n = (ratio == 150) ? 8192 : 6144;
|
n = 6144;
|
||||||
else if (pixel_clk == 74176000)
|
else if (pixel_clk == 74176000)
|
||||||
n = 11648;
|
n = 11648;
|
||||||
else if (pixel_clk == 148352000)
|
else if (pixel_clk == 148352000)
|
||||||
n = (ratio == 150) ? 11648 : 5824;
|
n = 5824;
|
||||||
else
|
else
|
||||||
n = 6144;
|
n = 6144;
|
||||||
n *= mult;
|
n *= mult;
|
||||||
@ -274,13 +272,11 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int hdmi_compute_cts(unsigned int freq, unsigned long pixel_clk,
|
static unsigned int hdmi_compute_cts(unsigned int freq, unsigned long pixel_clk)
|
||||||
unsigned int ratio)
|
|
||||||
{
|
{
|
||||||
unsigned int cts = 0;
|
unsigned int cts = 0;
|
||||||
|
|
||||||
pr_debug("%s: freq: %d pixel_clk: %ld ratio: %d\n", __func__, freq,
|
pr_debug("%s: freq: %d pixel_clk: %ld\n", __func__, freq, pixel_clk);
|
||||||
pixel_clk, ratio);
|
|
||||||
|
|
||||||
switch (freq) {
|
switch (freq) {
|
||||||
case 32000:
|
case 32000:
|
||||||
@ -341,26 +337,24 @@ static unsigned int hdmi_compute_cts(unsigned int freq, unsigned long pixel_clk,
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (ratio == 100)
|
|
||||||
return cts;
|
return cts;
|
||||||
return (cts * ratio) / 100;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hdmi_set_clk_regenerator(struct dw_hdmi *hdmi,
|
static void hdmi_set_clk_regenerator(struct dw_hdmi *hdmi,
|
||||||
unsigned long pixel_clk, unsigned int sample_rate, unsigned int ratio)
|
unsigned long pixel_clk, unsigned int sample_rate)
|
||||||
{
|
{
|
||||||
unsigned int n, cts;
|
unsigned int n, cts;
|
||||||
|
|
||||||
n = hdmi_compute_n(sample_rate, pixel_clk, ratio);
|
n = hdmi_compute_n(sample_rate, pixel_clk);
|
||||||
cts = hdmi_compute_cts(sample_rate, pixel_clk, ratio);
|
cts = hdmi_compute_cts(sample_rate, pixel_clk);
|
||||||
if (!cts) {
|
if (!cts) {
|
||||||
dev_err(hdmi->dev,
|
dev_err(hdmi->dev,
|
||||||
"%s: pixel clock/sample rate not supported: %luMHz / %ukHz\n",
|
"%s: pixel clock/sample rate not supported: %luMHz / %ukHz\n",
|
||||||
__func__, pixel_clk, sample_rate);
|
__func__, pixel_clk, sample_rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_dbg(hdmi->dev, "%s: samplerate=%ukHz ratio=%d pixelclk=%luMHz N=%d cts=%d\n",
|
dev_dbg(hdmi->dev, "%s: samplerate=%ukHz pixelclk=%luMHz N=%d cts=%d\n",
|
||||||
__func__, sample_rate, ratio, pixel_clk, n, cts);
|
__func__, sample_rate, pixel_clk, n, cts);
|
||||||
|
|
||||||
spin_lock_irq(&hdmi->audio_lock);
|
spin_lock_irq(&hdmi->audio_lock);
|
||||||
hdmi->audio_n = n;
|
hdmi->audio_n = n;
|
||||||
@ -372,8 +366,7 @@ static void hdmi_set_clk_regenerator(struct dw_hdmi *hdmi,
|
|||||||
static void hdmi_init_clk_regenerator(struct dw_hdmi *hdmi)
|
static void hdmi_init_clk_regenerator(struct dw_hdmi *hdmi)
|
||||||
{
|
{
|
||||||
mutex_lock(&hdmi->audio_mutex);
|
mutex_lock(&hdmi->audio_mutex);
|
||||||
hdmi_set_clk_regenerator(hdmi, 74250000, hdmi->sample_rate,
|
hdmi_set_clk_regenerator(hdmi, 74250000, hdmi->sample_rate);
|
||||||
hdmi->ratio);
|
|
||||||
mutex_unlock(&hdmi->audio_mutex);
|
mutex_unlock(&hdmi->audio_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,7 +374,7 @@ static void hdmi_clk_regenerator_update_pixel_clock(struct dw_hdmi *hdmi)
|
|||||||
{
|
{
|
||||||
mutex_lock(&hdmi->audio_mutex);
|
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);
|
hdmi->sample_rate);
|
||||||
mutex_unlock(&hdmi->audio_mutex);
|
mutex_unlock(&hdmi->audio_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -390,7 +383,7 @@ void dw_hdmi_set_sample_rate(struct dw_hdmi *hdmi, unsigned int rate)
|
|||||||
mutex_lock(&hdmi->audio_mutex);
|
mutex_lock(&hdmi->audio_mutex);
|
||||||
hdmi->sample_rate = rate;
|
hdmi->sample_rate = rate;
|
||||||
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);
|
hdmi->sample_rate);
|
||||||
mutex_unlock(&hdmi->audio_mutex);
|
mutex_unlock(&hdmi->audio_mutex);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(dw_hdmi_set_sample_rate);
|
EXPORT_SYMBOL_GPL(dw_hdmi_set_sample_rate);
|
||||||
@ -1746,7 +1739,6 @@ int dw_hdmi_bind(struct device *dev, struct device *master,
|
|||||||
hdmi->dev = dev;
|
hdmi->dev = dev;
|
||||||
hdmi->dev_type = plat_data->dev_type;
|
hdmi->dev_type = plat_data->dev_type;
|
||||||
hdmi->sample_rate = 48000;
|
hdmi->sample_rate = 48000;
|
||||||
hdmi->ratio = 100;
|
|
||||||
hdmi->encoder = encoder;
|
hdmi->encoder = encoder;
|
||||||
hdmi->disabled = true;
|
hdmi->disabled = true;
|
||||||
hdmi->rxsense = true;
|
hdmi->rxsense = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user