|
@@ -14,9 +14,12 @@
|
|
|
#include <drm/drm_atomic_helper.h>
|
|
|
#include <drm/drm_crtc.h>
|
|
|
#include <drm/drm_crtc_helper.h>
|
|
|
+#include <drm/drm_encoder.h>
|
|
|
#include <drm/drm_modes.h>
|
|
|
#include <drm/drm_of.h>
|
|
|
|
|
|
+#include <uapi/drm/drm_mode.h>
|
|
|
+
|
|
|
#include <linux/component.h>
|
|
|
#include <linux/ioport.h>
|
|
|
#include <linux/of_address.h>
|
|
@@ -112,23 +115,13 @@ EXPORT_SYMBOL(sun4i_tcon_enable_vblank);
|
|
|
void sun4i_tcon_set_mux(struct sun4i_tcon *tcon, int channel,
|
|
|
struct drm_encoder *encoder)
|
|
|
{
|
|
|
- u32 val;
|
|
|
-
|
|
|
- if (!tcon->quirks->has_unknown_mux)
|
|
|
- return;
|
|
|
+ int ret = -ENOTSUPP;
|
|
|
|
|
|
- if (channel != 1)
|
|
|
- return;
|
|
|
-
|
|
|
- if (encoder->encoder_type == DRM_MODE_ENCODER_TVDAC)
|
|
|
- val = 1;
|
|
|
- else
|
|
|
- val = 0;
|
|
|
+ if (tcon->quirks->set_mux)
|
|
|
+ ret = tcon->quirks->set_mux(tcon, encoder);
|
|
|
|
|
|
- /*
|
|
|
- * FIXME: Undocumented bits
|
|
|
- */
|
|
|
- regmap_write(tcon->regs, SUN4I_TCON_MUX_CTRL_REG, val);
|
|
|
+ DRM_DEBUG_DRIVER("Muxing encoder %s to CRTC %s: %d\n",
|
|
|
+ encoder->name, encoder->crtc->name, ret);
|
|
|
}
|
|
|
EXPORT_SYMBOL(sun4i_tcon_set_mux);
|
|
|
|
|
@@ -767,9 +760,26 @@ static int sun4i_tcon_remove(struct platform_device *pdev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/* platform specific TCON muxing callbacks */
|
|
|
+static int sun5i_a13_tcon_set_mux(struct sun4i_tcon *tcon,
|
|
|
+ struct drm_encoder *encoder)
|
|
|
+{
|
|
|
+ u32 val;
|
|
|
+
|
|
|
+ if (encoder->encoder_type == DRM_MODE_ENCODER_TVDAC)
|
|
|
+ val = 1;
|
|
|
+ else
|
|
|
+ val = 0;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * FIXME: Undocumented bits
|
|
|
+ */
|
|
|
+ return regmap_write(tcon->regs, SUN4I_TCON_MUX_CTRL_REG, val);
|
|
|
+}
|
|
|
+
|
|
|
static const struct sun4i_tcon_quirks sun5i_a13_quirks = {
|
|
|
- .has_unknown_mux = true,
|
|
|
- .has_channel_1 = true,
|
|
|
+ .has_channel_1 = true,
|
|
|
+ .set_mux = sun5i_a13_tcon_set_mux,
|
|
|
};
|
|
|
|
|
|
static const struct sun4i_tcon_quirks sun6i_a31_quirks = {
|