Commit b3b1d122 authored by Dmitry Baryshkov's avatar Dmitry Baryshkov
Browse files

drm/msm/dp: move next_bridge handling to dp_display

parent 3ffe15b3
Loading
Loading
Loading
Loading
+14 −29
Original line number Diff line number Diff line
@@ -1196,16 +1196,25 @@ static const struct msm_dp_desc *dp_display_get_desc(struct platform_device *pde
	return NULL;
}

static int dp_display_get_next_bridge(struct msm_dp *dp);

static int dp_display_probe_tail(struct device *dev)
{
	struct msm_dp *dp = dev_get_drvdata(dev);
	int ret;

	ret = dp_display_get_next_bridge(dp);
	if (ret)
	/*
	 * External bridges are mandatory for eDP interfaces: one has to
	 * provide at least an eDP panel (which gets wrapped into panel-bridge).
	 *
	 * For DisplayPort interfaces external bridges are optional, so
	 * silently ignore an error if one is not present (-ENODEV).
	 */
	dp->next_bridge = devm_drm_of_get_bridge(&dp->pdev->dev, dp->pdev->dev.of_node, 1, 0);
	if (IS_ERR(dp->next_bridge)) {
		ret = PTR_ERR(dp->next_bridge);
		dp->next_bridge = NULL;
		if (dp->is_edp || ret != -ENODEV)
			return ret;
	}

	ret = component_add(dev, &dp_display_comp_ops);
	if (ret)
@@ -1398,30 +1407,6 @@ void dp_display_debugfs_init(struct msm_dp *dp_display, struct dentry *root, boo
	}
}

static int dp_display_get_next_bridge(struct msm_dp *dp)
{
	int rc;
	struct dp_display_private *dp_priv;

	dp_priv = container_of(dp, struct dp_display_private, dp_display);

	/*
	 * External bridges are mandatory for eDP interfaces: one has to
	 * provide at least an eDP panel (which gets wrapped into panel-bridge).
	 *
	 * For DisplayPort interfaces external bridges are optional, so
	 * silently ignore an error if one is not present (-ENODEV).
	 */
	rc = devm_dp_parser_find_next_bridge(&dp->pdev->dev, dp_priv->parser);
	if (!dp->is_edp && rc == -ENODEV)
		return 0;

	if (!rc)
		dp->next_bridge = dp_priv->parser->next_bridge;

	return rc;
}

int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev,
			struct drm_encoder *encoder)
{
+0 −14
Original line number Diff line number Diff line
@@ -24,20 +24,6 @@ static int dp_parser_ctrl_res(struct dp_parser *parser)
	return 0;
}

int devm_dp_parser_find_next_bridge(struct device *dev, struct dp_parser *parser)
{
	struct platform_device *pdev = parser->pdev;
	struct drm_bridge *bridge;

	bridge = devm_drm_of_get_bridge(dev, pdev->dev.of_node, 1, 0);
	if (IS_ERR(bridge))
		return PTR_ERR(bridge);

	parser->next_bridge = bridge;

	return 0;
}

static int dp_parser_parse(struct dp_parser *parser)
{
	int rc = 0;
+0 −14
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@
struct dp_parser {
	struct platform_device *pdev;
	struct phy *phy;
	struct drm_bridge *next_bridge;
};

/**
@@ -37,17 +36,4 @@ struct dp_parser {
 */
struct dp_parser *dp_parser_get(struct platform_device *pdev);

/**
 * devm_dp_parser_find_next_bridge() - find an additional bridge to DP
 *
 * @dev: device to tie bridge lifetime to
 * @parser: dp_parser data from client
 *
 * This function is used to find any additional bridge attached to
 * the DP controller. The eDP interface requires a panel bridge.
 *
 * Return: 0 if able to get the bridge, otherwise negative errno for failure.
 */
int devm_dp_parser_find_next_bridge(struct device *dev, struct dp_parser *parser);

#endif