[PATCH 1/2] drm/tilcdc: Remove obsolete bundled tilcdc tfp410 driver

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Dec 5 08:45:13 UTC 2019


Hi Jyri,

Thank you for the patch.

On Wed, Dec 04, 2019 at 07:53:10PM +0200, Jyri Sarha wrote:
> Remove obsolete bundled tfp410 driver with its "ti,tilcdc,tfp410"
> devicetree binding. No platform has ever used this driver in the
> mainline kernel and if anybody connects tfp410 to tilcdc he or she
> should use the generic drm tfp410 bridge driver.
> 
> Signed-off-by: Jyri Sarha <jsarha at ti.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> ---
>  .../bindings/display/tilcdc/tfp410.txt        |  21 -
>  drivers/gpu/drm/tilcdc/Makefile               |   1 -
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c           |   3 -
>  drivers/gpu/drm/tilcdc/tilcdc_tfp410.c        | 379 ------------------
>  drivers/gpu/drm/tilcdc/tilcdc_tfp410.h        |  15 -
>  5 files changed, 419 deletions(-)
>  delete mode 100644 Documentation/devicetree/bindings/display/tilcdc/tfp410.txt
>  delete mode 100644 drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
>  delete mode 100644 drivers/gpu/drm/tilcdc/tilcdc_tfp410.h
> 
> diff --git a/Documentation/devicetree/bindings/display/tilcdc/tfp410.txt b/Documentation/devicetree/bindings/display/tilcdc/tfp410.txt
> deleted file mode 100644
> index a58ae7756fc6..000000000000
> --- a/Documentation/devicetree/bindings/display/tilcdc/tfp410.txt
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -Device-Tree bindings for tilcdc DRM TFP410 output driver
> -
> -Required properties:
> - - compatible: value should be "ti,tilcdc,tfp410".
> - - i2c: the phandle for the i2c device to use for DDC
> -
> -Recommended properties:
> - - pinctrl-names, pinctrl-0: the pincontrol settings to configure
> -   muxing properly for pins that connect to TFP410 device
> - - powerdn-gpio: the powerdown GPIO, pulled low to power down the
> -   TFP410 device (for DPMS_OFF)
> -
> -Example:
> -
> -	dvicape {
> -		compatible = "ti,tilcdc,tfp410";
> -		i2c = <&i2c2>;
> -		pinctrl-names = "default";
> -		pinctrl-0 = <&bone_dvi_cape_dvi_00A1_pins>;
> -		powerdn-gpio = <&gpio2 31 0>;
> -	};
> diff --git a/drivers/gpu/drm/tilcdc/Makefile b/drivers/gpu/drm/tilcdc/Makefile
> index 87f9480e43b0..662bf3a348c9 100644
> --- a/drivers/gpu/drm/tilcdc/Makefile
> +++ b/drivers/gpu/drm/tilcdc/Makefile
> @@ -6,7 +6,6 @@ endif
>  tilcdc-y := \
>  	tilcdc_plane.o \
>  	tilcdc_crtc.o \
> -	tilcdc_tfp410.o \
>  	tilcdc_panel.o \
>  	tilcdc_external.o \
>  	tilcdc_drv.o
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 2a9e67597375..20745db863ff 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -30,7 +30,6 @@
>  #include "tilcdc_external.h"
>  #include "tilcdc_panel.h"
>  #include "tilcdc_regs.h"
> -#include "tilcdc_tfp410.h"
>  
>  static LIST_HEAD(module_list);
>  
> @@ -649,7 +648,6 @@ static struct platform_driver tilcdc_platform_driver = {
>  static int __init tilcdc_drm_init(void)
>  {
>  	DBG("init");
> -	tilcdc_tfp410_init();
>  	tilcdc_panel_init();
>  	return platform_driver_register(&tilcdc_platform_driver);
>  }
> @@ -659,7 +657,6 @@ static void __exit tilcdc_drm_fini(void)
>  	DBG("fini");
>  	platform_driver_unregister(&tilcdc_platform_driver);
>  	tilcdc_panel_fini();
> -	tilcdc_tfp410_fini();
>  }
>  
>  module_init(tilcdc_drm_init);
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
> deleted file mode 100644
> index 530edb3b51cc..000000000000
> --- a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
> +++ /dev/null
> @@ -1,379 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0-only
> -/*
> - * Copyright (C) 2012 Texas Instruments
> - * Author: Rob Clark <robdclark at gmail.com>
> - */
> -
> -#include <linux/gpio.h>
> -#include <linux/mod_devicetable.h>
> -#include <linux/of_gpio.h>
> -#include <linux/pinctrl/consumer.h>
> -#include <linux/platform_device.h>
> -
> -#include <drm/drm_atomic_helper.h>
> -#include <drm/drm_encoder.h>
> -#include <drm/drm_modeset_helper_vtables.h>
> -#include <drm/drm_probe_helper.h>
> -
> -#include "tilcdc_drv.h"
> -#include "tilcdc_tfp410.h"
> -
> -struct tfp410_module {
> -	struct tilcdc_module base;
> -	struct i2c_adapter *i2c;
> -	int gpio;
> -};
> -#define to_tfp410_module(x) container_of(x, struct tfp410_module, base)
> -
> -
> -static const struct tilcdc_panel_info dvi_info = {
> -		.ac_bias                = 255,
> -		.ac_bias_intrpt         = 0,
> -		.dma_burst_sz           = 16,
> -		.bpp                    = 16,
> -		.fdd                    = 0x80,
> -		.tft_alt_mode           = 0,
> -		.sync_edge              = 0,
> -		.sync_ctrl              = 1,
> -		.raster_order           = 0,
> -};
> -
> -/*
> - * Encoder:
> - */
> -
> -struct tfp410_encoder {
> -	struct drm_encoder base;
> -	struct tfp410_module *mod;
> -	int dpms;
> -};
> -#define to_tfp410_encoder(x) container_of(x, struct tfp410_encoder, base)
> -
> -static void tfp410_encoder_dpms(struct drm_encoder *encoder, int mode)
> -{
> -	struct tfp410_encoder *tfp410_encoder = to_tfp410_encoder(encoder);
> -
> -	if (tfp410_encoder->dpms == mode)
> -		return;
> -
> -	if (mode == DRM_MODE_DPMS_ON) {
> -		DBG("Power on");
> -		gpio_direction_output(tfp410_encoder->mod->gpio, 1);
> -	} else {
> -		DBG("Power off");
> -		gpio_direction_output(tfp410_encoder->mod->gpio, 0);
> -	}
> -
> -	tfp410_encoder->dpms = mode;
> -}
> -
> -static void tfp410_encoder_prepare(struct drm_encoder *encoder)
> -{
> -	tfp410_encoder_dpms(encoder, DRM_MODE_DPMS_OFF);
> -}
> -
> -static void tfp410_encoder_commit(struct drm_encoder *encoder)
> -{
> -	tfp410_encoder_dpms(encoder, DRM_MODE_DPMS_ON);
> -}
> -
> -static void tfp410_encoder_mode_set(struct drm_encoder *encoder,
> -		struct drm_display_mode *mode,
> -		struct drm_display_mode *adjusted_mode)
> -{
> -	/* nothing needed */
> -}
> -
> -static const struct drm_encoder_funcs tfp410_encoder_funcs = {
> -		.destroy        = drm_encoder_cleanup,
> -};
> -
> -static const struct drm_encoder_helper_funcs tfp410_encoder_helper_funcs = {
> -		.dpms           = tfp410_encoder_dpms,
> -		.prepare        = tfp410_encoder_prepare,
> -		.commit         = tfp410_encoder_commit,
> -		.mode_set       = tfp410_encoder_mode_set,
> -};
> -
> -static struct drm_encoder *tfp410_encoder_create(struct drm_device *dev,
> -		struct tfp410_module *mod)
> -{
> -	struct tfp410_encoder *tfp410_encoder;
> -	struct drm_encoder *encoder;
> -	int ret;
> -
> -	tfp410_encoder = devm_kzalloc(dev->dev, sizeof(*tfp410_encoder),
> -				      GFP_KERNEL);
> -	if (!tfp410_encoder)
> -		return NULL;
> -
> -	tfp410_encoder->dpms = DRM_MODE_DPMS_OFF;
> -	tfp410_encoder->mod = mod;
> -
> -	encoder = &tfp410_encoder->base;
> -	encoder->possible_crtcs = 1;
> -
> -	ret = drm_encoder_init(dev, encoder, &tfp410_encoder_funcs,
> -			DRM_MODE_ENCODER_TMDS, NULL);
> -	if (ret < 0)
> -		goto fail;
> -
> -	drm_encoder_helper_add(encoder, &tfp410_encoder_helper_funcs);
> -
> -	return encoder;
> -
> -fail:
> -	drm_encoder_cleanup(encoder);
> -	return NULL;
> -}
> -
> -/*
> - * Connector:
> - */
> -
> -struct tfp410_connector {
> -	struct drm_connector base;
> -
> -	struct drm_encoder *encoder;  /* our connected encoder */
> -	struct tfp410_module *mod;
> -};
> -#define to_tfp410_connector(x) container_of(x, struct tfp410_connector, base)
> -
> -
> -static void tfp410_connector_destroy(struct drm_connector *connector)
> -{
> -	drm_connector_unregister(connector);
> -	drm_connector_cleanup(connector);
> -}
> -
> -static enum drm_connector_status tfp410_connector_detect(
> -		struct drm_connector *connector,
> -		bool force)
> -{
> -	struct tfp410_connector *tfp410_connector = to_tfp410_connector(connector);
> -
> -	if (drm_probe_ddc(tfp410_connector->mod->i2c))
> -		return connector_status_connected;
> -
> -	return connector_status_unknown;
> -}
> -
> -static int tfp410_connector_get_modes(struct drm_connector *connector)
> -{
> -	struct tfp410_connector *tfp410_connector = to_tfp410_connector(connector);
> -	struct edid *edid;
> -	int ret = 0;
> -
> -	edid = drm_get_edid(connector, tfp410_connector->mod->i2c);
> -
> -	drm_connector_update_edid_property(connector, edid);
> -
> -	if (edid) {
> -		ret = drm_add_edid_modes(connector, edid);
> -		kfree(edid);
> -	}
> -
> -	return ret;
> -}
> -
> -static struct drm_encoder *tfp410_connector_best_encoder(
> -		struct drm_connector *connector)
> -{
> -	struct tfp410_connector *tfp410_connector = to_tfp410_connector(connector);
> -	return tfp410_connector->encoder;
> -}
> -
> -static const struct drm_connector_funcs tfp410_connector_funcs = {
> -	.destroy            = tfp410_connector_destroy,
> -	.detect             = tfp410_connector_detect,
> -	.fill_modes         = drm_helper_probe_single_connector_modes,
> -	.reset              = drm_atomic_helper_connector_reset,
> -	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
> -	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> -};
> -
> -static const struct drm_connector_helper_funcs tfp410_connector_helper_funcs = {
> -	.get_modes          = tfp410_connector_get_modes,
> -	.best_encoder       = tfp410_connector_best_encoder,
> -};
> -
> -static struct drm_connector *tfp410_connector_create(struct drm_device *dev,
> -		struct tfp410_module *mod, struct drm_encoder *encoder)
> -{
> -	struct tfp410_connector *tfp410_connector;
> -	struct drm_connector *connector;
> -	int ret;
> -
> -	tfp410_connector = devm_kzalloc(dev->dev, sizeof(*tfp410_connector),
> -					GFP_KERNEL);
> -	if (!tfp410_connector)
> -		return NULL;
> -
> -	tfp410_connector->encoder = encoder;
> -	tfp410_connector->mod = mod;
> -
> -	connector = &tfp410_connector->base;
> -
> -	drm_connector_init(dev, connector, &tfp410_connector_funcs,
> -			DRM_MODE_CONNECTOR_DVID);
> -	drm_connector_helper_add(connector, &tfp410_connector_helper_funcs);
> -
> -	connector->polled = DRM_CONNECTOR_POLL_CONNECT |
> -			DRM_CONNECTOR_POLL_DISCONNECT;
> -
> -	connector->interlace_allowed = 0;
> -	connector->doublescan_allowed = 0;
> -
> -	ret = drm_connector_attach_encoder(connector, encoder);
> -	if (ret)
> -		goto fail;
> -
> -	return connector;
> -
> -fail:
> -	tfp410_connector_destroy(connector);
> -	return NULL;
> -}
> -
> -/*
> - * Module:
> - */
> -
> -static int tfp410_modeset_init(struct tilcdc_module *mod, struct drm_device *dev)
> -{
> -	struct tfp410_module *tfp410_mod = to_tfp410_module(mod);
> -	struct tilcdc_drm_private *priv = dev->dev_private;
> -	struct drm_encoder *encoder;
> -	struct drm_connector *connector;
> -
> -	encoder = tfp410_encoder_create(dev, tfp410_mod);
> -	if (!encoder)
> -		return -ENOMEM;
> -
> -	connector = tfp410_connector_create(dev, tfp410_mod, encoder);
> -	if (!connector)
> -		return -ENOMEM;
> -
> -	priv->encoders[priv->num_encoders++] = encoder;
> -	priv->connectors[priv->num_connectors++] = connector;
> -
> -	tilcdc_crtc_set_panel_info(priv->crtc, &dvi_info);
> -	return 0;
> -}
> -
> -static const struct tilcdc_module_ops tfp410_module_ops = {
> -		.modeset_init = tfp410_modeset_init,
> -};
> -
> -/*
> - * Device:
> - */
> -
> -static int tfp410_probe(struct platform_device *pdev)
> -{
> -	struct device_node *node = pdev->dev.of_node;
> -	struct device_node *i2c_node;
> -	struct tfp410_module *tfp410_mod;
> -	struct tilcdc_module *mod;
> -	struct pinctrl *pinctrl;
> -	uint32_t i2c_phandle;
> -	int ret = -EINVAL;
> -
> -	/* bail out early if no DT data: */
> -	if (!node) {
> -		dev_err(&pdev->dev, "device-tree data is missing\n");
> -		return -ENXIO;
> -	}
> -
> -	tfp410_mod = devm_kzalloc(&pdev->dev, sizeof(*tfp410_mod), GFP_KERNEL);
> -	if (!tfp410_mod)
> -		return -ENOMEM;
> -
> -	mod = &tfp410_mod->base;
> -	pdev->dev.platform_data = mod;
> -
> -	tilcdc_module_init(mod, "tfp410", &tfp410_module_ops);
> -
> -	pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
> -	if (IS_ERR(pinctrl))
> -		dev_warn(&pdev->dev, "pins are not configured\n");
> -
> -	if (of_property_read_u32(node, "i2c", &i2c_phandle)) {
> -		dev_err(&pdev->dev, "could not get i2c bus phandle\n");
> -		goto fail;
> -	}
> -
> -	i2c_node = of_find_node_by_phandle(i2c_phandle);
> -	if (!i2c_node) {
> -		dev_err(&pdev->dev, "could not get i2c bus node\n");
> -		goto fail;
> -	}
> -
> -	tfp410_mod->i2c = of_find_i2c_adapter_by_node(i2c_node);
> -	if (!tfp410_mod->i2c) {
> -		dev_err(&pdev->dev, "could not get i2c\n");
> -		of_node_put(i2c_node);
> -		goto fail;
> -	}
> -
> -	of_node_put(i2c_node);
> -
> -	tfp410_mod->gpio = of_get_named_gpio_flags(node, "powerdn-gpio",
> -			0, NULL);
> -	if (tfp410_mod->gpio < 0) {
> -		dev_warn(&pdev->dev, "No power down GPIO\n");
> -	} else {
> -		ret = gpio_request(tfp410_mod->gpio, "DVI_PDn");
> -		if (ret) {
> -			dev_err(&pdev->dev, "could not get DVI_PDn gpio\n");
> -			goto fail_adapter;
> -		}
> -	}
> -
> -	return 0;
> -
> -fail_adapter:
> -	i2c_put_adapter(tfp410_mod->i2c);
> -
> -fail:
> -	tilcdc_module_cleanup(mod);
> -	return ret;
> -}
> -
> -static int tfp410_remove(struct platform_device *pdev)
> -{
> -	struct tilcdc_module *mod = dev_get_platdata(&pdev->dev);
> -	struct tfp410_module *tfp410_mod = to_tfp410_module(mod);
> -
> -	i2c_put_adapter(tfp410_mod->i2c);
> -	gpio_free(tfp410_mod->gpio);
> -
> -	tilcdc_module_cleanup(mod);
> -
> -	return 0;
> -}
> -
> -static const struct of_device_id tfp410_of_match[] = {
> -		{ .compatible = "ti,tilcdc,tfp410", },
> -		{ },
> -};
> -
> -struct platform_driver tfp410_driver = {
> -	.probe = tfp410_probe,
> -	.remove = tfp410_remove,
> -	.driver = {
> -		.owner = THIS_MODULE,
> -		.name = "tfp410",
> -		.of_match_table = tfp410_of_match,
> -	},
> -};
> -
> -int __init tilcdc_tfp410_init(void)
> -{
> -	return platform_driver_register(&tfp410_driver);
> -}
> -
> -void __exit tilcdc_tfp410_fini(void)
> -{
> -	platform_driver_unregister(&tfp410_driver);
> -}
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.h b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.h
> deleted file mode 100644
> index f9aaf6911ffc..000000000000
> --- a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.h
> +++ /dev/null
> @@ -1,15 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0-only */
> -/*
> - * Copyright (C) 2012 Texas Instruments
> - * Author: Rob Clark <robdclark at gmail.com>
> - */
> -
> -#ifndef __TILCDC_TFP410_H__
> -#define __TILCDC_TFP410_H__
> -
> -/* sub-module for tfp410 dvi adaptor */
> -
> -int tilcdc_tfp410_init(void);
> -void tilcdc_tfp410_fini(void);
> -
> -#endif /* __TILCDC_TFP410_H__ */

-- 
Regards,

Laurent Pinchart


More information about the dri-devel mailing list