Module Name:    src
Committed By:   jmcneill
Date:           Sat Nov 23 12:28:44 UTC 2019

Modified Files:
        src/sys/dev/ic: dw_hdmi.c dw_hdmi.h

Log Message:
Allow bus glue to setup DDC clocks


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/ic/dw_hdmi.c src/sys/dev/ic/dw_hdmi.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/ic/dw_hdmi.c
diff -u src/sys/dev/ic/dw_hdmi.c:1.4 src/sys/dev/ic/dw_hdmi.c:1.5
--- src/sys/dev/ic/dw_hdmi.c:1.4	Sat Nov 16 13:10:07 2019
+++ src/sys/dev/ic/dw_hdmi.c	Sat Nov 23 12:28:44 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: dw_hdmi.c,v 1.4 2019/11/16 13:10:07 jmcneill Exp $ */
+/* $NetBSD: dw_hdmi.c,v 1.5 2019/11/23 12:28:44 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dw_hdmi.c,v 1.4 2019/11/16 13:10:07 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dw_hdmi.c,v 1.5 2019/11/23 12:28:44 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -239,6 +239,8 @@ __KERNEL_RCSID(0, "$NetBSD: dw_hdmi.c,v 
 #define	HDMI_I2CM_SOFTRSTZ	0x7e09
 #define	 HDMI_I2CM_SOFTRSTZ_I2C_SOFTRST		__BIT(0)
 #define	HDMI_I2CM_SEGPTR	0x7e0a
+#define	HDMI_I2CM_SS_SCL_HCNT_0_ADDR 0x730c
+#define	HDMI_I2CM_SS_SCL_LCNT_0_ADDR 0x730e
 
 enum dwhdmi_dai_mixer_ctrl {
 	DWHDMI_DAI_OUTPUT_CLASS,
@@ -291,6 +293,10 @@ dwhdmi_ddc_exec(void *priv, i2c_op_t op,
 
 	dwhdmi_write(sc, HDMI_I2CM_SOFTRSTZ, 0);
 	dwhdmi_write(sc, HDMI_IH_I2CM_STAT0, dwhdmi_read(sc, HDMI_IH_I2CM_STAT0));
+	if (sc->sc_scl_hcnt)
+		dwhdmi_write(sc, HDMI_I2CM_SS_SCL_HCNT_0_ADDR, sc->sc_scl_hcnt);
+	if (sc->sc_scl_lcnt)
+		dwhdmi_write(sc, HDMI_I2CM_SS_SCL_LCNT_0_ADDR, sc->sc_scl_lcnt);
 	dwhdmi_write(sc, HDMI_I2CM_DIV, 0);
 	dwhdmi_write(sc, HDMI_I2CM_SLAVE, DDC_ADDR);
 	dwhdmi_write(sc, HDMI_I2CM_SEGADDR, DDC_SEGMENT_ADDR);
@@ -299,6 +305,8 @@ dwhdmi_ddc_exec(void *priv, i2c_op_t op,
 	operation = block ? HDMI_I2CM_OPERATION_RD_EXT : HDMI_I2CM_OPERATION_RD;
 	off = (block & 1) ? 128 : 0;
 
+	dwhdmi_write(sc, HDMI_I2CM_SEGPTR, block >> 1);
+
 	for (n = 0; n < len; n++) {
 		dwhdmi_write(sc, HDMI_I2CM_ADDRESS, n + off);
 		dwhdmi_write(sc, HDMI_I2CM_OPERATION, operation);
Index: src/sys/dev/ic/dw_hdmi.h
diff -u src/sys/dev/ic/dw_hdmi.h:1.4 src/sys/dev/ic/dw_hdmi.h:1.5
--- src/sys/dev/ic/dw_hdmi.h:1.4	Sat Nov 16 13:10:07 2019
+++ src/sys/dev/ic/dw_hdmi.h	Sat Nov 23 12:28:44 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: dw_hdmi.h,v 1.4 2019/11/16 13:10:07 jmcneill Exp $ */
+/* $NetBSD: dw_hdmi.h,v 1.5 2019/11/23 12:28:44 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill <jmcne...@invisible.ca>
@@ -67,6 +67,8 @@ struct dwhdmi_softc {
 	u_int			sc_reg_width;
 	u_int			sc_flags;
 #define	DWHDMI_USE_INTERNAL_PHY	__BIT(0)
+	u_int			sc_scl_hcnt;
+	u_int			sc_scl_lcnt;
 
 	u_int			sc_phytype;
 	u_int			sc_version;

Reply via email to