Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Mar 2020 14:55:56 +0900 (JST)
From:      Mori Hiroki <yamori813@yahoo.co.jp>
To:        "freebsd-arm@freebsd.org" <freebsd-arm@freebsd.org>
Subject:   Re: A10 HDMI support
Message-ID:  <2128278973.2661650.1583474156629.JavaMail.yahoo@mail.yahoo.co.jp>
In-Reply-To: <1989879823.835082.1583057147228.JavaMail.yahoo@mail.yahoo.co.jp>
References:  <1989879823.835082.1583057147228.JavaMail.yahoo.ref@mail.yahoo.co.jp> <1989879823.835082.1583057147228.JavaMail.yahoo@mail.yahoo.co.jp>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi

I seem clkng don't have this method.


#define TCON_PLL_WORST =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A01000000
#define TCON_PLL_N_MIN =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A01
#define TCON_PLL_N_MAX =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A015
#define TCON_PLL_M_MIN =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A09
#define TCON_PLL_M_MAX =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0127
#define TCON_PLLREF_SINGLE =C2=A0 =C2=A0 =C2=A03000 =C2=A0 =C2=A0/* kHz */
#define TCON_PLLREF_DOUBLE =C2=A0 =C2=A0 =C2=A06000 =C2=A0 =C2=A0/* kHz */
#define TCON_RATE_KHZ(rate_hz) =C2=A0((rate_hz) / 1000)
#define TCON_RATE_HZ(rate_khz) =C2=A0((rate_khz) * 1000)
#define HDMI_DEFAULT_RATE =C2=A0 =C2=A0 =C2=A0 297000000
#define DEBE_DEFAULT_RATE =C2=A0 =C2=A0 =C2=A0 300000000

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

=C2=A0 =C2=A0 =C2=A0 =C2=A0 best =3D TCON_PLL_WORST;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 for (n =3D TCON_PLL_N_MIN; n <=3D TCON_PLL_N_MA=
X; n++) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 for (m =3D TCON_PLL=
_M_MIN; m <=3D TCON_PLL_M_MAX; m++) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 f_cur =3D (m * f_ref) / n;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 diff =3D f_out - f_cur;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 if (diff > 0 && diff < best) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 best =3D diff;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 *pm =3D m;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 *pn =3D n;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 }
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }
}

int
a10_clk_tcon_activate(unsigned int freq)
{
=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct a10_ccm_softc *sc;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 int m, n, m2, n2, f_single, f_double, dbl, src_=
sel;

=C2=A0 =C2=A0 =C2=A0 =C2=A0 sc =3D a10_ccm_sc;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (sc =3D=3D NULL)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (ENXIO);

=C2=A0 =C2=A0 =C2=A0 =C2=A0 m =3D n =3D m2 =3D n2 =3D 0;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 dbl =3D 0;

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

=C2=A0 =C2=A0 =C2=A0 =C2=A0 f_single =3D n ? (m * TCON_PLLREF_SINGLE) / n :=
 0;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 f_double =3D n2 ? (m2 * TCON_PLLREF_DOUBLE) / n=
2 : 0;

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

=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (n =3D=3D 0 || m =3D=3D 0)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (EINVAL);

=C2=A0 =C2=A0 =C2=A0 =C2=A0 /* Set PLL3 to the closest possible rate */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 a10_clk_pll3_set_rate(TCON_RATE_HZ(m * TCON_PLL=
REF_SINGLE));

=C2=A0 =C2=A0 =C2=A0 =C2=A0 /* Enable LCD0 CH1 clock */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ccm_write_4(sc, CCM_LCD0_CH1_CLK,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 CCM_LCD_CH1_SCLK2_GATING | CCM_LC=
D_CH1_SCLK1_GATING |
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (src_sel << CCM_LCD_CH1_SRC_SEL_S=
HIFT) | (n - 1));

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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2128278973.2661650.1583474156629.JavaMail.yahoo>