A10 HDMI support

Mori Hiroki yamori813 at yahoo.co.jp
Fri Mar 6 05:56:05 UTC 2020


Hi

I seem clkng don't have this method.


#define TCON_PLL_WORST          1000000
#define TCON_PLL_N_MIN          1
#define TCON_PLL_N_MAX          15
#define TCON_PLL_M_MIN          9
#define TCON_PLL_M_MAX          127
#define TCON_PLLREF_SINGLE      3000    /* kHz */
#define TCON_PLLREF_DOUBLE      6000    /* kHz */
#define TCON_RATE_KHZ(rate_hz)  ((rate_hz) / 1000)
#define TCON_RATE_HZ(rate_khz)  ((rate_khz) * 1000)
#define HDMI_DEFAULT_RATE       297000000
#define DEBE_DEFAULT_RATE       300000000

static void
calc_tcon_pll(int f_ref, int f_out, int *pm, int *pn)
{
        int best, m, n, f_cur, diff;

        best = TCON_PLL_WORST;
        for (n = TCON_PLL_N_MIN; n <= TCON_PLL_N_MAX; n++) {
                for (m = TCON_PLL_M_MIN; m <= TCON_PLL_M_MAX; m++) {
                        f_cur = (m * f_ref) / n;
                        diff = f_out - f_cur;
                        if (diff > 0 && diff < best) {
                                best = diff;
                                *pm = m;
                                *pn = n;
                        }
                }
        }
}

int
a10_clk_tcon_activate(unsigned int freq)
{
        struct a10_ccm_softc *sc;
        int m, n, m2, n2, f_single, f_double, dbl, src_sel;

        sc = a10_ccm_sc;
        if (sc == NULL)
                return (ENXIO);

        m = n = m2 = n2 = 0;
        dbl = 0;

        calc_tcon_pll(TCON_PLLREF_SINGLE, TCON_RATE_KHZ(freq), &m, &n);
        calc_tcon_pll(TCON_PLLREF_DOUBLE, TCON_RATE_KHZ(freq), &m2, &n2);

        f_single = n ? (m * TCON_PLLREF_SINGLE) / n : 0;
        f_double = n2 ? (m2 * TCON_PLLREF_DOUBLE) / n2 : 0;

        if (f_double > f_single) {
                dbl = 1;
                m = m2;
                n = n2;
        }
        src_sel = dbl ? CCM_LCD_CH1_SRC_SEL_PLL3_2X : CCM_LCD_CH1_SRC_SEL_PLL3;

        if (n == 0 || m == 0)
                return (EINVAL);

        /* Set PLL3 to the closest possible rate */
        a10_clk_pll3_set_rate(TCON_RATE_HZ(m * TCON_PLLREF_SINGLE));

        /* Enable LCD0 CH1 clock */
        ccm_write_4(sc, CCM_LCD0_CH1_CLK,
            CCM_LCD_CH1_SCLK2_GATING | CCM_LCD_CH1_SCLK1_GATING |
            (src_sel << CCM_LCD_CH1_SRC_SEL_SHIFT) | (n - 1));

        return (0);
}
----- Original Message -----
> From: Mori Hiroki <yamori813 at yahoo.co.jp>
> To: "freebsd-arm at freebsd.org" <freebsd-arm at freebsd.org>
> Cc: 
> Date: 2020/3/1, Sun 19:05
> Subject: A10 HDMI support
> 
> Hi
> 
> I have A10 PCduino. 
> 
> I try to use a10_hdmi.c and a10_fb.c
> 
> This code may be work at first implementation
> at 2016. 
> 
> But change to dts away modify and chkng change
> complete broken this code.
> 
> I modify dts and code on 12-Stable then almost
> detect. But not work.
> 
> http://dmesgd.nycbug.org/index.cgi?do=view&id=5402
> 
> 
> Dose some body repair this code?
> 
> Thanks
> 
> Hiroki Mori
> 
> _______________________________________________
> freebsd-arm at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-arm
> To unsubscribe, send any mail to "freebsd-arm-unsubscribe at freebsd.org"
> 



More information about the freebsd-arm mailing list