Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 585b691e authored by Russell King's avatar Russell King
Browse files

DRM: Armada: add support for drm tda19988 driver



Add support for TDA998x output via the slave driver in the kernel.

Reviewed-by: default avatarRob Clark <robdclark@gmail.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent dfdba7fd
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -13,3 +13,12 @@ config DRM_ARMADA
	  This driver provides no built-in acceleration; acceleration is
	  This driver provides no built-in acceleration; acceleration is
	  performed by other IP found on the SoC.  This driver provides
	  performed by other IP found on the SoC.  This driver provides
	  kernel mode setting and buffer management to userspace.
	  kernel mode setting and buffer management to userspace.

config DRM_ARMADA_TDA1998X
	bool "Support TDA1998X HDMI output"
	depends on DRM_ARMADA != n
	depends on I2C && DRM_I2C_NXP_TDA998X = y
	default y
	help
	  Support the TDA1998x HDMI output device found on the Solid-Run
	  CuBox.
+42 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,42 @@
#include <drm/armada_drm.h>
#include <drm/armada_drm.h>
#include "armada_ioctlP.h"
#include "armada_ioctlP.h"


#ifdef CONFIG_DRM_ARMADA_TDA1998X
#include <drm/i2c/tda998x.h>
#include "armada_slave.h"

static struct tda998x_encoder_params params = {
	/* With 0x24, there is no translation between vp_out and int_vp
	FB	LCD out	Pins	VIP	Int Vp
	R:23:16	R:7:0	VPC7:0	7:0	7:0[R]
	G:15:8	G:15:8	VPB7:0	23:16	23:16[G]
	B:7:0	B:23:16	VPA7:0	15:8	15:8[B]
	*/
	.swap_a = 2,
	.swap_b = 3,
	.swap_c = 4,
	.swap_d = 5,
	.swap_e = 0,
	.swap_f = 1,
	.audio_cfg = BIT(2),
	.audio_frame[1] = 1,
	.audio_format = AFMT_SPDIF,
	.audio_sample_rate = 44100,
};

static const struct armada_drm_slave_config tda19988_config = {
	.i2c_adapter_id = 0,
	.crtcs = 1 << 0, /* Only LCD0 at the moment */
	.polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT,
	.interlace_allowed = true,
	.info = {
		.type = "tda998x",
		.addr = 0x70,
		.platform_data = &params,
	},
};
#endif

static void armada_drm_unref_work(struct work_struct *work)
static void armada_drm_unref_work(struct work_struct *work)
{
{
	struct armada_private *priv =
	struct armada_private *priv =
@@ -134,6 +170,12 @@ static int armada_drm_load(struct drm_device *dev, unsigned long flags)
			goto err_kms;
			goto err_kms;
	}
	}


#ifdef CONFIG_DRM_ARMADA_TDA1998X
	ret = armada_drm_connector_slave_create(dev, &tda19988_config);
	if (ret)
		goto err_kms;
#endif

	ret = drm_vblank_init(dev, n);
	ret = drm_vblank_init(dev, n);
	if (ret)
	if (ret)
		goto err_kms;
		goto err_kms;