Hi, On Fri, Jan 11, 2019 at 05:51:19AM +0200, Laurent Pinchart wrote: > Those components are supported by the drm_bridge infrastructure, remove > the omapdrm-specific driver. > > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > Reviewed-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx> > --- Tested-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx> -- Sebastian > drivers/gpu/drm/omapdrm/displays/Kconfig | 11 - > drivers/gpu/drm/omapdrm/displays/Makefile | 2 - > .../gpu/drm/omapdrm/displays/connector-dvi.c | 293 ------------------ > .../gpu/drm/omapdrm/displays/encoder-tfp410.c | 140 --------- > .../gpu/drm/omapdrm/dss/omapdss-boot-init.c | 2 - > 5 files changed, 448 deletions(-) > delete mode 100644 drivers/gpu/drm/omapdrm/displays/connector-dvi.c > delete mode 100644 drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c > > diff --git a/drivers/gpu/drm/omapdrm/displays/Kconfig b/drivers/gpu/drm/omapdrm/displays/Kconfig > index a349cb61961e..38d066ac966e 100644 > --- a/drivers/gpu/drm/omapdrm/displays/Kconfig > +++ b/drivers/gpu/drm/omapdrm/displays/Kconfig > @@ -6,23 +6,12 @@ config DRM_OMAP_ENCODER_OPA362 > Driver for OPA362 external analog TV amplifier controlled > through a GPIO. > > -config DRM_OMAP_ENCODER_TFP410 > - tristate "TFP410 DPI to DVI Encoder" > - help > - Driver for TFP410 DPI to DVI encoder. > - > config DRM_OMAP_ENCODER_TPD12S015 > tristate "TPD12S015 HDMI ESD protection and level shifter" > help > Driver for TPD12S015, which offers HDMI ESD protection and level > shifting. > > -config DRM_OMAP_CONNECTOR_DVI > - tristate "DVI Connector" > - depends on I2C > - help > - Driver for a generic DVI connector. > - > config DRM_OMAP_CONNECTOR_HDMI > tristate "HDMI Connector" > help > diff --git a/drivers/gpu/drm/omapdrm/displays/Makefile b/drivers/gpu/drm/omapdrm/displays/Makefile > index d99659e1381b..da1d5321ef50 100644 > --- a/drivers/gpu/drm/omapdrm/displays/Makefile > +++ b/drivers/gpu/drm/omapdrm/displays/Makefile > @@ -1,8 +1,6 @@ > # SPDX-License-Identifier: GPL-2.0 > obj-$(CONFIG_DRM_OMAP_ENCODER_OPA362) += encoder-opa362.o > -obj-$(CONFIG_DRM_OMAP_ENCODER_TFP410) += encoder-tfp410.o > obj-$(CONFIG_DRM_OMAP_ENCODER_TPD12S015) += encoder-tpd12s015.o > -obj-$(CONFIG_DRM_OMAP_CONNECTOR_DVI) += connector-dvi.o > obj-$(CONFIG_DRM_OMAP_CONNECTOR_HDMI) += connector-hdmi.o > obj-$(CONFIG_DRM_OMAP_CONNECTOR_ANALOG_TV) += connector-analog-tv.o > obj-$(CONFIG_DRM_OMAP_PANEL_DPI) += panel-dpi.o > diff --git a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c > deleted file mode 100644 > index fa3a69bf8a04..000000000000 > --- a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c > +++ /dev/null > @@ -1,293 +0,0 @@ > -/* > - * Generic DVI Connector driver > - * > - * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ > - * Author: Tomi Valkeinen <tomi.valkeinen@xxxxxx> > - * > - * This program is free software; you can redistribute it and/or modify it > - * under the terms of the GNU General Public License version 2 as published by > - * the Free Software Foundation. > - */ > - > -#include <linux/gpio/consumer.h> > -#include <linux/i2c.h> > -#include <linux/module.h> > -#include <linux/platform_device.h> > -#include <linux/slab.h> > - > -#include <drm/drm_edid.h> > - > -#include "../dss/omapdss.h" > - > -struct panel_drv_data { > - struct omap_dss_device dssdev; > - > - struct i2c_adapter *i2c_adapter; > - > - struct gpio_desc *hpd_gpio; > - > - void (*hpd_cb)(void *cb_data, enum drm_connector_status status); > - void *hpd_cb_data; > - bool hpd_enabled; > - /* mutex for hpd fields above */ > - struct mutex hpd_lock; > -}; > - > -#define to_panel_data(x) container_of(x, struct panel_drv_data, dssdev) > - > -static int dvic_connect(struct omap_dss_device *src, > - struct omap_dss_device *dst) > -{ > - return 0; > -} > - > -static void dvic_disconnect(struct omap_dss_device *src, > - struct omap_dss_device *dst) > -{ > -} > - > -static int dvic_ddc_read(struct i2c_adapter *adapter, > - unsigned char *buf, u16 count, u8 offset) > -{ > - int r, retries; > - > - for (retries = 3; retries > 0; retries--) { > - struct i2c_msg msgs[] = { > - { > - .addr = DDC_ADDR, > - .flags = 0, > - .len = 1, > - .buf = &offset, > - }, { > - .addr = DDC_ADDR, > - .flags = I2C_M_RD, > - .len = count, > - .buf = buf, > - } > - }; > - > - r = i2c_transfer(adapter, msgs, 2); > - if (r == 2) > - return 0; > - > - if (r != -EAGAIN) > - break; > - } > - > - return r < 0 ? r : -EIO; > -} > - > -static int dvic_read_edid(struct omap_dss_device *dssdev, > - u8 *edid, int len) > -{ > - struct panel_drv_data *ddata = to_panel_data(dssdev); > - int r, l, bytes_read; > - > - l = min(EDID_LENGTH, len); > - r = dvic_ddc_read(ddata->i2c_adapter, edid, l, 0); > - if (r) > - return r; > - > - bytes_read = l; > - > - /* if there are extensions, read second block */ > - if (len > EDID_LENGTH && edid[0x7e] > 0) { > - l = min(EDID_LENGTH, len - EDID_LENGTH); > - > - r = dvic_ddc_read(ddata->i2c_adapter, edid + EDID_LENGTH, > - l, EDID_LENGTH); > - if (r) > - return r; > - > - bytes_read += l; > - } > - > - return bytes_read; > -} > - > -static bool dvic_detect(struct omap_dss_device *dssdev) > -{ > - struct panel_drv_data *ddata = to_panel_data(dssdev); > - unsigned char out; > - int r; > - > - if (ddata->hpd_gpio) > - return gpiod_get_value_cansleep(ddata->hpd_gpio); > - > - if (!ddata->i2c_adapter) > - return true; > - > - r = dvic_ddc_read(ddata->i2c_adapter, &out, 1, 0); > - > - return r == 0; > -} > - > -static void dvic_register_hpd_cb(struct omap_dss_device *dssdev, > - void (*cb)(void *cb_data, > - enum drm_connector_status status), > - void *cb_data) > -{ > - struct panel_drv_data *ddata = to_panel_data(dssdev); > - > - mutex_lock(&ddata->hpd_lock); > - ddata->hpd_cb = cb; > - ddata->hpd_cb_data = cb_data; > - mutex_unlock(&ddata->hpd_lock); > -} > - > -static void dvic_unregister_hpd_cb(struct omap_dss_device *dssdev) > -{ > - struct panel_drv_data *ddata = to_panel_data(dssdev); > - > - mutex_lock(&ddata->hpd_lock); > - ddata->hpd_cb = NULL; > - ddata->hpd_cb_data = NULL; > - mutex_unlock(&ddata->hpd_lock); > -} > - > -static const struct omap_dss_device_ops dvic_ops = { > - .connect = dvic_connect, > - .disconnect = dvic_disconnect, > - > - .read_edid = dvic_read_edid, > - .detect = dvic_detect, > - > - .register_hpd_cb = dvic_register_hpd_cb, > - .unregister_hpd_cb = dvic_unregister_hpd_cb, > -}; > - > -static irqreturn_t dvic_hpd_isr(int irq, void *data) > -{ > - struct panel_drv_data *ddata = data; > - > - mutex_lock(&ddata->hpd_lock); > - if (ddata->hpd_enabled && ddata->hpd_cb) { > - enum drm_connector_status status; > - > - if (dvic_detect(&ddata->dssdev)) > - status = connector_status_connected; > - else > - status = connector_status_disconnected; > - > - ddata->hpd_cb(ddata->hpd_cb_data, status); > - } > - mutex_unlock(&ddata->hpd_lock); > - > - return IRQ_HANDLED; > -} > - > -static int dvic_probe_of(struct platform_device *pdev) > -{ > - struct panel_drv_data *ddata = platform_get_drvdata(pdev); > - struct device_node *node = pdev->dev.of_node; > - struct device_node *adapter_node; > - struct i2c_adapter *adapter; > - struct gpio_desc *gpio; > - int r; > - > - gpio = devm_gpiod_get_optional(&pdev->dev, "hpd", GPIOD_IN); > - if (IS_ERR(gpio)) { > - dev_err(&pdev->dev, "failed to parse HPD gpio\n"); > - return PTR_ERR(gpio); > - } > - > - ddata->hpd_gpio = gpio; > - > - mutex_init(&ddata->hpd_lock); > - > - if (ddata->hpd_gpio) { > - r = devm_request_threaded_irq(&pdev->dev, > - gpiod_to_irq(ddata->hpd_gpio), NULL, dvic_hpd_isr, > - IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT, > - "DVI HPD", ddata); > - if (r) > - return r; > - } > - > - adapter_node = of_parse_phandle(node, "ddc-i2c-bus", 0); > - if (adapter_node) { > - adapter = of_get_i2c_adapter_by_node(adapter_node); > - of_node_put(adapter_node); > - if (adapter == NULL) { > - dev_err(&pdev->dev, "failed to parse ddc-i2c-bus\n"); > - return -EPROBE_DEFER; > - } > - > - ddata->i2c_adapter = adapter; > - } > - > - return 0; > -} > - > -static int dvic_probe(struct platform_device *pdev) > -{ > - struct panel_drv_data *ddata; > - struct omap_dss_device *dssdev; > - int r; > - > - ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL); > - if (!ddata) > - return -ENOMEM; > - > - platform_set_drvdata(pdev, ddata); > - > - r = dvic_probe_of(pdev); > - if (r) > - return r; > - > - dssdev = &ddata->dssdev; > - dssdev->ops = &dvic_ops; > - dssdev->dev = &pdev->dev; > - dssdev->type = OMAP_DISPLAY_TYPE_DVI; > - dssdev->display = true; > - dssdev->owner = THIS_MODULE; > - dssdev->of_ports = BIT(0); > - > - if (ddata->hpd_gpio) > - dssdev->ops_flags |= OMAP_DSS_DEVICE_OP_DETECT > - | OMAP_DSS_DEVICE_OP_HPD; > - if (ddata->i2c_adapter) > - dssdev->ops_flags |= OMAP_DSS_DEVICE_OP_DETECT > - | OMAP_DSS_DEVICE_OP_EDID; > - > - omapdss_display_init(dssdev); > - omapdss_device_register(dssdev); > - > - return 0; > -} > - > -static int __exit dvic_remove(struct platform_device *pdev) > -{ > - struct panel_drv_data *ddata = platform_get_drvdata(pdev); > - > - omapdss_device_unregister(&ddata->dssdev); > - > - i2c_put_adapter(ddata->i2c_adapter); > - > - mutex_destroy(&ddata->hpd_lock); > - > - return 0; > -} > - > -static const struct of_device_id dvic_of_match[] = { > - { .compatible = "omapdss,dvi-connector", }, > - {}, > -}; > - > -MODULE_DEVICE_TABLE(of, dvic_of_match); > - > -static struct platform_driver dvi_connector_driver = { > - .probe = dvic_probe, > - .remove = __exit_p(dvic_remove), > - .driver = { > - .name = "connector-dvi", > - .of_match_table = dvic_of_match, > - .suppress_bind_attrs = true, > - }, > -}; > - > -module_platform_driver(dvi_connector_driver); > - > -MODULE_AUTHOR("Tomi Valkeinen <tomi.valkeinen@xxxxxx>"); > -MODULE_DESCRIPTION("Generic DVI Connector driver"); > -MODULE_LICENSE("GPL"); > diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c > deleted file mode 100644 > index de954182c4bb..000000000000 > --- a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c > +++ /dev/null > @@ -1,140 +0,0 @@ > -/* > - * TFP410 DPI-to-DVI encoder driver > - * > - * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ > - * Author: Tomi Valkeinen <tomi.valkeinen@xxxxxx> > - * > - * This program is free software; you can redistribute it and/or modify it > - * under the terms of the GNU General Public License version 2 as published by > - * the Free Software Foundation. > - */ > - > -#include <linux/gpio/consumer.h> > -#include <linux/module.h> > -#include <linux/platform_device.h> > -#include <linux/slab.h> > - > -#include "../dss/omapdss.h" > - > -struct panel_drv_data { > - struct omap_dss_device dssdev; > - > - struct gpio_desc *pd_gpio; > -}; > - > -#define to_panel_data(x) container_of(x, struct panel_drv_data, dssdev) > - > -static int tfp410_connect(struct omap_dss_device *src, > - struct omap_dss_device *dst) > -{ > - return omapdss_device_connect(dst->dss, dst, dst->next); > -} > - > -static void tfp410_disconnect(struct omap_dss_device *src, > - struct omap_dss_device *dst) > -{ > - omapdss_device_disconnect(dst, dst->next); > -} > - > -static void tfp410_enable(struct omap_dss_device *dssdev) > -{ > - struct panel_drv_data *ddata = to_panel_data(dssdev); > - > - if (ddata->pd_gpio) > - gpiod_set_value_cansleep(ddata->pd_gpio, 0); > -} > - > -static void tfp410_disable(struct omap_dss_device *dssdev) > -{ > - struct panel_drv_data *ddata = to_panel_data(dssdev); > - > - if (ddata->pd_gpio) > - gpiod_set_value_cansleep(ddata->pd_gpio, 0); > -} > - > -static const struct omap_dss_device_ops tfp410_ops = { > - .connect = tfp410_connect, > - .disconnect = tfp410_disconnect, > - .enable = tfp410_enable, > - .disable = tfp410_disable, > -}; > - > -static int tfp410_probe(struct platform_device *pdev) > -{ > - struct panel_drv_data *ddata; > - struct omap_dss_device *dssdev; > - struct gpio_desc *gpio; > - > - ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL); > - if (!ddata) > - return -ENOMEM; > - > - platform_set_drvdata(pdev, ddata); > - > - /* Powerdown GPIO */ > - gpio = devm_gpiod_get_optional(&pdev->dev, "powerdown", GPIOD_OUT_HIGH); > - if (IS_ERR(gpio)) { > - dev_err(&pdev->dev, "failed to parse powerdown gpio\n"); > - return PTR_ERR(gpio); > - } > - > - ddata->pd_gpio = gpio; > - > - dssdev = &ddata->dssdev; > - dssdev->ops = &tfp410_ops; > - dssdev->dev = &pdev->dev; > - dssdev->type = OMAP_DISPLAY_TYPE_DPI; > - dssdev->owner = THIS_MODULE; > - dssdev->of_ports = BIT(1) | BIT(0); > - dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH > - | DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE > - | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE; > - > - dssdev->next = omapdss_of_find_connected_device(pdev->dev.of_node, 1); > - if (IS_ERR(dssdev->next)) { > - if (PTR_ERR(dssdev->next) != -EPROBE_DEFER) > - dev_err(&pdev->dev, "failed to find video sink\n"); > - return PTR_ERR(dssdev->next); > - } > - > - omapdss_device_register(dssdev); > - > - return 0; > -} > - > -static int __exit tfp410_remove(struct platform_device *pdev) > -{ > - struct panel_drv_data *ddata = platform_get_drvdata(pdev); > - struct omap_dss_device *dssdev = &ddata->dssdev; > - > - if (dssdev->next) > - omapdss_device_put(dssdev->next); > - omapdss_device_unregister(&ddata->dssdev); > - > - tfp410_disable(dssdev); > - > - return 0; > -} > - > -static const struct of_device_id tfp410_of_match[] = { > - { .compatible = "omapdss,ti,tfp410", }, > - {}, > -}; > - > -MODULE_DEVICE_TABLE(of, tfp410_of_match); > - > -static struct platform_driver tfp410_driver = { > - .probe = tfp410_probe, > - .remove = __exit_p(tfp410_remove), > - .driver = { > - .name = "tfp410", > - .of_match_table = tfp410_of_match, > - .suppress_bind_attrs = true, > - }, > -}; > - > -module_platform_driver(tfp410_driver); > - > -MODULE_AUTHOR("Tomi Valkeinen <tomi.valkeinen@xxxxxx>"); > -MODULE_DESCRIPTION("TFP410 DPI to DVI encoder driver"); > -MODULE_LICENSE("GPL"); > diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c b/drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c > index 309b7b453e98..dfeaea639920 100644 > --- a/drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c > +++ b/drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c > @@ -186,7 +186,6 @@ static const struct of_device_id omapdss_of_match[] __initconst = { > > static const struct of_device_id omapdss_of_fixups_whitelist[] __initconst = { > { .compatible = "composite-video-connector" }, > - { .compatible = "dvi-connector" }, > { .compatible = "hdmi-connector" }, > { .compatible = "lgphilips,lb035q02" }, > { .compatible = "nec,nl8048hl11" }, > @@ -196,7 +195,6 @@ static const struct of_device_id omapdss_of_fixups_whitelist[] __initconst = { > { .compatible = "sony,acx565akm" }, > { .compatible = "svideo-connector" }, > { .compatible = "ti,opa362" }, > - { .compatible = "ti,tfp410" }, > { .compatible = "ti,tpd12s015" }, > { .compatible = "toppoly,td028ttec1" }, > { .compatible = "tpo,td028ttec1" }, > -- > Regards, > > Laurent Pinchart > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel