forked from Minki/linux
drm/bridge: tc358767: add detect bridge operation
Prepare the bridge driver for chained operation by adding support for the detect operation. v3: - Fix code to make it readable (Laurent) v2: - Do not announce detect operation if there is no hpd pin (Laurent) Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Cc: Andrzej Hajda <a.hajda@samsung.com> Cc: Neil Armstrong <narmstrong@baylibre.com> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com> Cc: Jonas Karlman <jonas@kwiboo.se> Cc: Jernej Skrabec <jernej.skrabec@siol.net> Link: https://patchwork.freedesktop.org/patch/msgid/20200727170320.959777-2-sam@ravnborg.org
This commit is contained in:
parent
a8ef18d7dd
commit
136d73a8c8
@ -1369,21 +1369,13 @@ static const struct drm_connector_helper_funcs tc_connector_helper_funcs = {
|
||||
.get_modes = tc_connector_get_modes,
|
||||
};
|
||||
|
||||
static enum drm_connector_status tc_connector_detect(struct drm_connector *connector,
|
||||
bool force)
|
||||
static enum drm_connector_status tc_bridge_detect(struct drm_bridge *bridge)
|
||||
{
|
||||
struct tc_data *tc = connector_to_tc(connector);
|
||||
struct tc_data *tc = bridge_to_tc(bridge);
|
||||
bool conn;
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
if (tc->hpd_pin < 0) {
|
||||
if (tc->panel)
|
||||
return connector_status_connected;
|
||||
else
|
||||
return connector_status_unknown;
|
||||
}
|
||||
|
||||
ret = regmap_read(tc->regmap, GPIOI, &val);
|
||||
if (ret)
|
||||
return connector_status_unknown;
|
||||
@ -1396,6 +1388,20 @@ static enum drm_connector_status tc_connector_detect(struct drm_connector *conne
|
||||
return connector_status_disconnected;
|
||||
}
|
||||
|
||||
static enum drm_connector_status
|
||||
tc_connector_detect(struct drm_connector *connector, bool force)
|
||||
{
|
||||
struct tc_data *tc = connector_to_tc(connector);
|
||||
|
||||
if (tc->hpd_pin >= 0)
|
||||
return tc_bridge_detect(&tc->bridge);
|
||||
|
||||
if (tc->panel)
|
||||
return connector_status_connected;
|
||||
else
|
||||
return connector_status_unknown;
|
||||
}
|
||||
|
||||
static const struct drm_connector_funcs tc_connector_funcs = {
|
||||
.detect = tc_connector_detect,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
@ -1458,6 +1464,7 @@ static const struct drm_bridge_funcs tc_bridge_funcs = {
|
||||
.disable = tc_bridge_disable,
|
||||
.post_disable = tc_bridge_post_disable,
|
||||
.mode_fixup = tc_bridge_mode_fixup,
|
||||
.detect = tc_bridge_detect,
|
||||
};
|
||||
|
||||
static bool tc_readable_reg(struct device *dev, unsigned int reg)
|
||||
@ -1680,6 +1687,9 @@ static int tc_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
||||
return ret;
|
||||
|
||||
tc->bridge.funcs = &tc_bridge_funcs;
|
||||
if (tc->hpd_pin >= 0)
|
||||
tc->bridge.ops |= DRM_BRIDGE_OP_DETECT;
|
||||
|
||||
tc->bridge.of_node = dev->of_node;
|
||||
drm_bridge_add(&tc->bridge);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user