static void hdmi_set_clk_regenerator(void) { unsigned int clk_n, clk_cts; clk_n = hdmi_compute_n(sample_rate, pixel_clk_rate, hdmi_ratio); clk_cts = hdmi_compute_cts(sample_rate, pixel_clk_rate, hdmi_ratio); if (clk_cts == 0) { pr_debug("%s: pixel clock not supported: %d\n", __func__, (int)pixel_clk_rate); return; } pr_debug("%s: samplerate=%d ratio=%d pixelclk=%d N=%d cts=%d\n", __func__, sample_rate, hdmi_ratio, (int)pixel_clk_rate, clk_n, clk_cts); hdmi_set_clock_regenerator_cts(clk_cts); hdmi_set_clock_regenerator_n(clk_n); }
static void hdmi_set_clk_regenerator(struct dw_hdmi *hdmi, unsigned long pixel_clk, unsigned int sample_rate, unsigned int ratio) { unsigned int n, cts; 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=%ukHz ratio=%d pixelclk=%luMHz N=%d cts=%d\n", __func__, sample_rate, ratio, pixel_clk, n, cts); spin_lock_irq(&hdmi->audio_lock); hdmi->audio_n = n; hdmi->audio_cts = cts; hdmi_set_cts_n(hdmi, cts, hdmi->audio_enable ? n : 0); spin_unlock_irq(&hdmi->audio_lock); }
static void hdmi_set_clk_regenerator(struct dw_hdmi *hdmi, unsigned long pixel_clk) { unsigned int clk_n, clk_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; } 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); hdmi_set_cts_n(hdmi, clk_cts, clk_n); }
static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk, unsigned int ratio) { unsigned int n = (128 * freq) / 1000; switch (freq) { case 32000: if (pixel_clk == 25174000) n = (ratio == 150) ? 9152 : 4576; else if (pixel_clk == 27020000) n = (ratio == 150) ? 8192 : 4096; else if (pixel_clk == 74170000 || pixel_clk == 148350000) n = 11648; else if (pixel_clk == 297000000) n = (ratio == 150) ? 6144 : 3072; else n = 4096; break; case 44100: if (pixel_clk == 25174000) n = 7007; else if (pixel_clk == 74170000) n = 17836; else if (pixel_clk == 148350000) n = (ratio == 150) ? 17836 : 8918; else if (pixel_clk == 297000000) n = (ratio == 150) ? 9408 : 4704; else n = 6272; break; case 48000: if (pixel_clk == 25174000) n = (ratio == 150) ? 9152 : 6864; else if (pixel_clk == 27020000) n = (ratio == 150) ? 8192 : 6144; else if (pixel_clk == 74170000) n = 11648; else if (pixel_clk == 148350000) n = (ratio == 150) ? 11648 : 5824; else if (pixel_clk == 297000000) n = (ratio == 150) ? 10240 : 5120; else n = 6144; break; case 88200: n = hdmi_compute_n(44100, pixel_clk, ratio) * 2; break; case 96000: n = hdmi_compute_n(48000, pixel_clk, ratio) * 2; break; case 176400: n = hdmi_compute_n(44100, pixel_clk, ratio) * 4; break; case 192000: n = hdmi_compute_n(48000, pixel_clk, ratio) * 4; break; default: break; } return n; }