Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0feeb106 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'tilcdc-4.17' of https://github.com/jsarha/linux into drm-next

drm/tilcdc changes to v4.17

* tag 'tilcdc-4.17' of https://github.com/jsarha/linux:
  drm/tilcdc: tilcdc_panel: Rename device from "panel" to "tilcdc-panel"
  drm/tilcdc: Add support for drm panels
  drm/tilcdc: panel: Use common error handling code in of_get_panel_info()
  drm/tilcdc: Delete an error message for a failed memory allocation in seven functions
parents 8bb5b222 7f78c3d6
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -4,6 +4,8 @@ config DRM_TILCDC
	select DRM_KMS_HELPER
	select DRM_KMS_CMA_HELPER
	select DRM_GEM_CMA_HELPER
	select DRM_BRIDGE
	select DRM_PANEL_BRIDGE
	select VIDEOMODE_HELPERS
	select BACKLIGHT_CLASS_DEVICE
	select BACKLIGHT_LCD_SUPPORT
+1 −3
Original line number Diff line number Diff line
@@ -994,10 +994,8 @@ int tilcdc_crtc_create(struct drm_device *dev)
	int ret;

	tilcdc_crtc = devm_kzalloc(dev->dev, sizeof(*tilcdc_crtc), GFP_KERNEL);
	if (!tilcdc_crtc) {
		dev_err(dev->dev, "allocation failed\n");
	if (!tilcdc_crtc)
		return -ENOMEM;
	}

	init_completion(&tilcdc_crtc->palette_loaded);
	tilcdc_crtc->palette_base = dmam_alloc_coherent(dev->dev,
+1 −3
Original line number Diff line number Diff line
@@ -233,10 +233,8 @@ static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
	int ret;

	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
	if (!priv) {
		dev_err(dev, "failed to allocate private data\n");
	if (!priv)
		return -ENOMEM;
	}

	ddev = drm_dev_alloc(ddrv, dev);
	if (IS_ERR(ddev))
+20 −9
Original line number Diff line number Diff line
@@ -188,18 +188,16 @@ int tilcdc_attach_bridge(struct drm_device *ddev, struct drm_bridge *bridge)
int tilcdc_attach_external_device(struct drm_device *ddev)
{
	struct tilcdc_drm_private *priv = ddev->dev_private;
	struct device_node *remote_node;
	struct drm_bridge *bridge;
	struct drm_panel *panel;
	int ret;

	remote_node = of_graph_get_remote_node(ddev->dev->of_node, 0, 0);
	if (!remote_node)
	ret = drm_of_find_panel_or_bridge(ddev->dev->of_node, 0, 0,
					  &panel, &bridge);
	if (ret == -ENODEV)
		return 0;

	bridge = of_drm_find_bridge(remote_node);
	of_node_put(remote_node);
	if (!bridge)
		return -EPROBE_DEFER;
	else if (ret)
		return ret;

	priv->external_encoder = devm_kzalloc(ddev->dev,
					      sizeof(*priv->external_encoder),
@@ -215,10 +213,23 @@ int tilcdc_attach_external_device(struct drm_device *ddev)
		return ret;
	}

	if (panel) {
		bridge = devm_drm_panel_bridge_add(ddev->dev, panel,
						   DRM_MODE_CONNECTOR_DPI);
		if (IS_ERR(bridge)) {
			ret = PTR_ERR(bridge);
			goto err_encoder_cleanup;
		}
	}

	ret = tilcdc_attach_bridge(ddev, bridge);
	if (ret)
		drm_encoder_cleanup(priv->external_encoder);
		goto err_encoder_cleanup;

	return 0;

err_encoder_cleanup:
	drm_encoder_cleanup(priv->external_encoder);
	return ret;
}

+8 −15
Original line number Diff line number Diff line
@@ -101,10 +101,8 @@ static struct drm_encoder *panel_encoder_create(struct drm_device *dev,

	panel_encoder = devm_kzalloc(dev->dev, sizeof(*panel_encoder),
				     GFP_KERNEL);
	if (!panel_encoder) {
		dev_err(dev->dev, "allocation failed\n");
	if (!panel_encoder)
		return NULL;
	}

	panel_encoder->mod = mod;

@@ -210,10 +208,8 @@ static struct drm_connector *panel_connector_create(struct drm_device *dev,

	panel_connector = devm_kzalloc(dev->dev, sizeof(*panel_connector),
				       GFP_KERNEL);
	if (!panel_connector) {
		dev_err(dev->dev, "allocation failed\n");
	if (!panel_connector)
		return NULL;
	}

	panel_connector->encoder = encoder;
	panel_connector->mod = mod;
@@ -293,11 +289,8 @@ static struct tilcdc_panel_info *of_get_panel_info(struct device_node *np)
	}

	info = kzalloc(sizeof(*info), GFP_KERNEL);
	if (!info) {
		pr_err("%s: allocation failed\n", __func__);
		of_node_put(info_np);
		return NULL;
	}
	if (!info)
		goto put_node;

	ret |= of_property_read_u32(info_np, "ac-bias", &info->ac_bias);
	ret |= of_property_read_u32(info_np, "ac-bias-intrpt", &info->ac_bias_intrpt);
@@ -316,11 +309,11 @@ static struct tilcdc_panel_info *of_get_panel_info(struct device_node *np)
	if (ret) {
		pr_err("%s: error reading panel-info properties\n", __func__);
		kfree(info);
		of_node_put(info_np);
		return NULL;
		info = NULL;
	}
	of_node_put(info_np);

put_node:
	of_node_put(info_np);
	return info;
}

@@ -428,7 +421,7 @@ struct platform_driver panel_driver = {
	.remove = panel_remove,
	.driver = {
		.owner = THIS_MODULE,
		.name = "panel",
		.name = "tilcdc-panel",
		.of_match_table = panel_of_match,
	},
};
Loading