mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

The AM62x and AM62Px SoCs feature 2 OLDI TXes each, which makes it possible to connect them in dual-link or cloned single-link OLDI display modes. The current OLDI support in tidss_dispc.c can only support for a single OLDI TX, connected to a VP and doesn't really support configuration of OLDIs in the other modes. The current OLDI support in tidss_dispc.c also works on the principle that the OLDI output can only be served by one, and only one, DSS video-port. This isn't the case in the AM62Px SoC, where there are 2 DSS controllers present that share the OLDI TXes. Having their own devicetree and their own bridge entity will help support the various display modes and sharing possiblilities of the OLDI hardware. For all these reasons, add support for the OLDI TXes as DRM bridges. Signed-off-by: Aradhya Bhatia <a-bhatia1@ti.com> Signed-off-by: Aradhya Bhatia <aradhya.bhatia@linux.dev> Tested-by: Michael Walle <mwalle@kernel.org> # on am67a Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Link: https://lore.kernel.org/r/20250528122544.817829-5-aradhya.bhatia@linux.dev Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
47 lines
1.1 KiB
C
47 lines
1.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (C) 2018 Texas Instruments Incorporated - https://www.ti.com/
|
|
* Author: Tomi Valkeinen <tomi.valkeinen@ti.com>
|
|
*/
|
|
|
|
#ifndef __TIDSS_DRV_H__
|
|
#define __TIDSS_DRV_H__
|
|
|
|
#include <linux/spinlock.h>
|
|
|
|
#define TIDSS_MAX_PORTS 4
|
|
#define TIDSS_MAX_PLANES 4
|
|
#define TIDSS_MAX_OLDI_TXES 2
|
|
|
|
typedef u32 dispc_irq_t;
|
|
struct tidss_oldi;
|
|
|
|
struct tidss_device {
|
|
struct drm_device ddev; /* DRM device for DSS */
|
|
struct device *dev; /* Underlying DSS device */
|
|
|
|
const struct dispc_features *feat;
|
|
struct dispc_device *dispc;
|
|
|
|
unsigned int num_crtcs;
|
|
struct drm_crtc *crtcs[TIDSS_MAX_PORTS];
|
|
|
|
unsigned int num_planes;
|
|
struct drm_plane *planes[TIDSS_MAX_PLANES];
|
|
|
|
unsigned int num_oldis;
|
|
struct tidss_oldi *oldis[TIDSS_MAX_OLDI_TXES];
|
|
|
|
unsigned int irq;
|
|
|
|
/* protects the irq masks field and irqenable/irqstatus registers */
|
|
spinlock_t irq_lock;
|
|
dispc_irq_t irq_mask; /* enabled irqs */
|
|
};
|
|
|
|
#define to_tidss(__dev) container_of(__dev, struct tidss_device, ddev)
|
|
|
|
int tidss_runtime_get(struct tidss_device *tidss);
|
|
void tidss_runtime_put(struct tidss_device *tidss);
|
|
|
|
#endif
|