drm/i2c: tda998x: move mode_valid() to bridge
Move the mode_valid() implementation to the bridge instead of the connector, as we're checking the bridge's capabilities. Tested-by: Peter Rosin <peda@axentia.se> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
This commit is contained in:
parent
5a03f5346f
commit
b073a70ecd
@ -1253,21 +1253,6 @@ static int tda998x_connector_get_modes(struct drm_connector *connector)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum drm_mode_status tda998x_connector_mode_valid(struct drm_connector *connector,
|
|
||||||
struct drm_display_mode *mode)
|
|
||||||
{
|
|
||||||
/* TDA19988 dotclock can go up to 165MHz */
|
|
||||||
struct tda998x_priv *priv = conn_to_tda998x_priv(connector);
|
|
||||||
|
|
||||||
if (mode->clock > ((priv->rev == TDA19988) ? 165000 : 150000))
|
|
||||||
return MODE_CLOCK_HIGH;
|
|
||||||
if (mode->htotal >= BIT(13))
|
|
||||||
return MODE_BAD_HVALUE;
|
|
||||||
if (mode->vtotal >= BIT(11))
|
|
||||||
return MODE_BAD_VVALUE;
|
|
||||||
return MODE_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct drm_encoder *
|
static struct drm_encoder *
|
||||||
tda998x_connector_best_encoder(struct drm_connector *connector)
|
tda998x_connector_best_encoder(struct drm_connector *connector)
|
||||||
{
|
{
|
||||||
@ -1279,7 +1264,6 @@ tda998x_connector_best_encoder(struct drm_connector *connector)
|
|||||||
static
|
static
|
||||||
const struct drm_connector_helper_funcs tda998x_connector_helper_funcs = {
|
const struct drm_connector_helper_funcs tda998x_connector_helper_funcs = {
|
||||||
.get_modes = tda998x_connector_get_modes,
|
.get_modes = tda998x_connector_get_modes,
|
||||||
.mode_valid = tda998x_connector_mode_valid,
|
|
||||||
.best_encoder = tda998x_connector_best_encoder,
|
.best_encoder = tda998x_connector_best_encoder,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1325,6 +1309,21 @@ static void tda998x_bridge_detach(struct drm_bridge *bridge)
|
|||||||
drm_connector_cleanup(&priv->connector);
|
drm_connector_cleanup(&priv->connector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum drm_mode_status tda998x_bridge_mode_valid(struct drm_bridge *bridge,
|
||||||
|
const struct drm_display_mode *mode)
|
||||||
|
{
|
||||||
|
/* TDA19988 dotclock can go up to 165MHz */
|
||||||
|
struct tda998x_priv *priv = bridge_to_tda998x_priv(bridge);
|
||||||
|
|
||||||
|
if (mode->clock > ((priv->rev == TDA19988) ? 165000 : 150000))
|
||||||
|
return MODE_CLOCK_HIGH;
|
||||||
|
if (mode->htotal >= BIT(13))
|
||||||
|
return MODE_BAD_HVALUE;
|
||||||
|
if (mode->vtotal >= BIT(11))
|
||||||
|
return MODE_BAD_VVALUE;
|
||||||
|
return MODE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static void tda998x_bridge_enable(struct drm_bridge *bridge)
|
static void tda998x_bridge_enable(struct drm_bridge *bridge)
|
||||||
{
|
{
|
||||||
struct tda998x_priv *priv = bridge_to_tda998x_priv(bridge);
|
struct tda998x_priv *priv = bridge_to_tda998x_priv(bridge);
|
||||||
@ -1571,6 +1570,7 @@ static void tda998x_bridge_mode_set(struct drm_bridge *bridge,
|
|||||||
static const struct drm_bridge_funcs tda998x_bridge_funcs = {
|
static const struct drm_bridge_funcs tda998x_bridge_funcs = {
|
||||||
.attach = tda998x_bridge_attach,
|
.attach = tda998x_bridge_attach,
|
||||||
.detach = tda998x_bridge_detach,
|
.detach = tda998x_bridge_detach,
|
||||||
|
.mode_valid = tda998x_bridge_mode_valid,
|
||||||
.disable = tda998x_bridge_disable,
|
.disable = tda998x_bridge_disable,
|
||||||
.mode_set = tda998x_bridge_mode_set,
|
.mode_set = tda998x_bridge_mode_set,
|
||||||
.enable = tda998x_bridge_enable,
|
.enable = tda998x_bridge_enable,
|
||||||
|
Loading…
Reference in New Issue
Block a user