drm: Fix tda19988 drm build.
This commit is contained in:
parent
6154b1cc32
commit
d86ac1745c
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: tda19988.c,v 1.7 2021/01/27 02:29:48 thorpej Exp $ */
|
/* $NetBSD: tda19988.c,v 1.8 2021/12/19 12:44:34 riastradh Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2015 Oleksandr Tymoshenko <gonzo@freebsd.org>
|
* Copyright (c) 2015 Oleksandr Tymoshenko <gonzo@freebsd.org>
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: tda19988.c,v 1.7 2021/01/27 02:29:48 thorpej Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: tda19988.c,v 1.8 2021/12/19 12:44:34 riastradh Exp $");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NXP TDA19988 HDMI encoder
|
* NXP TDA19988 HDMI encoder
|
||||||
|
@ -49,10 +49,12 @@ __KERNEL_RCSID(0, "$NetBSD: tda19988.c,v 1.7 2021/01/27 02:29:48 thorpej Exp $")
|
||||||
#include <dev/videomode/videomode.h>
|
#include <dev/videomode/videomode.h>
|
||||||
#include <dev/videomode/edidvar.h>
|
#include <dev/videomode/edidvar.h>
|
||||||
|
|
||||||
#include <drm/drmP.h>
|
#include <drm/drm_bridge.h>
|
||||||
#include <drm/drm_crtc.h>
|
#include <drm/drm_crtc.h>
|
||||||
#include <drm/drm_crtc_helper.h>
|
#include <drm/drm_crtc_helper.h>
|
||||||
|
#include <drm/drm_drv.h>
|
||||||
#include <drm/drm_edid.h>
|
#include <drm/drm_edid.h>
|
||||||
|
#include <drm/drm_probe_helper.h>
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
TDA19988_PORT_INPUT = 0
|
TDA19988_PORT_INPUT = 0
|
||||||
|
@ -729,7 +731,6 @@ tda19988_connector_get_modes(struct drm_connector *connector)
|
||||||
struct tda19988_connector *tda_connector = to_tda_connector(connector);
|
struct tda19988_connector *tda_connector = to_tda_connector(connector);
|
||||||
struct tda19988_softc * const sc = tda_connector->sc;
|
struct tda19988_softc * const sc = tda_connector->sc;
|
||||||
struct edid *pedid = NULL;
|
struct edid *pedid = NULL;
|
||||||
int error;
|
|
||||||
|
|
||||||
if (sc->sc_edid_valid) {
|
if (sc->sc_edid_valid) {
|
||||||
pedid = (struct edid *)sc->sc_edid;
|
pedid = (struct edid *)sc->sc_edid;
|
||||||
|
@ -741,37 +742,15 @@ tda19988_connector_get_modes(struct drm_connector *connector)
|
||||||
sc->sc_edid_valid = true;
|
sc->sc_edid_valid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
drm_mode_connector_update_edid_property(connector, pedid);
|
drm_connector_update_edid_property(connector, pedid);
|
||||||
if (pedid == NULL)
|
if (pedid == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error = drm_add_edid_modes(connector, pedid);
|
return drm_add_edid_modes(connector, pedid);
|
||||||
drm_edid_to_eld(connector, pedid);
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct drm_encoder *
|
|
||||||
tda19988_connector_best_encoder(struct drm_connector *connector)
|
|
||||||
{
|
|
||||||
int enc_id = connector->encoder_ids[0];
|
|
||||||
struct drm_mode_object *obj;
|
|
||||||
struct drm_encoder *encoder = NULL;
|
|
||||||
|
|
||||||
if (enc_id) {
|
|
||||||
obj = drm_mode_object_find(connector->dev, enc_id,
|
|
||||||
DRM_MODE_OBJECT_ENCODER);
|
|
||||||
if (obj == NULL)
|
|
||||||
return NULL;
|
|
||||||
encoder = obj_to_encoder(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
return encoder;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct drm_connector_helper_funcs tda19988_connector_helper_funcs = {
|
static const struct drm_connector_helper_funcs tda19988_connector_helper_funcs = {
|
||||||
.get_modes = tda19988_connector_get_modes,
|
.get_modes = tda19988_connector_get_modes,
|
||||||
.best_encoder = tda19988_connector_best_encoder,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -792,8 +771,8 @@ tda19988_bridge_attach(struct drm_bridge *bridge)
|
||||||
DRM_MODE_CONNECTOR_HDMIA);
|
DRM_MODE_CONNECTOR_HDMIA);
|
||||||
drm_connector_helper_add(connector, &tda19988_connector_helper_funcs);
|
drm_connector_helper_add(connector, &tda19988_connector_helper_funcs);
|
||||||
|
|
||||||
error = drm_mode_connector_attach_encoder(connector, bridge->encoder);
|
error = drm_connector_attach_encoder(connector, bridge->encoder);
|
||||||
if (error != 0)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
return drm_connector_register(connector);
|
return drm_connector_register(connector);
|
||||||
|
@ -827,7 +806,8 @@ tda19988_bridge_post_disable(struct drm_bridge *bridge)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
tda19988_bridge_mode_set(struct drm_bridge *bridge,
|
tda19988_bridge_mode_set(struct drm_bridge *bridge,
|
||||||
struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode)
|
const struct drm_display_mode *mode,
|
||||||
|
const struct drm_display_mode *adjusted_mode)
|
||||||
{
|
{
|
||||||
struct tda19988_softc * const sc = bridge->driver_private;
|
struct tda19988_softc * const sc = bridge->driver_private;
|
||||||
|
|
||||||
|
@ -882,12 +862,10 @@ tda19988_ep_activate(device_t dev, struct fdt_endpoint *ep, bool activate)
|
||||||
sc->sc_bridge.driver_private = sc;
|
sc->sc_bridge.driver_private = sc;
|
||||||
sc->sc_bridge.funcs = &tda19988_bridge_funcs;
|
sc->sc_bridge.funcs = &tda19988_bridge_funcs;
|
||||||
sc->sc_bridge.encoder = encoder;
|
sc->sc_bridge.encoder = encoder;
|
||||||
error = drm_bridge_attach(encoder->dev, &sc->sc_bridge);
|
error = drm_bridge_attach(encoder, &sc->sc_bridge, NULL);
|
||||||
if (error != 0)
|
if (error)
|
||||||
return EIO;
|
return EIO;
|
||||||
|
|
||||||
encoder->bridge = &sc->sc_bridge;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue