Skip to content

Commit

Permalink
fbdev: omapfb: connector-hdmi: switch to using gpiod API
Browse files Browse the repository at this point in the history
Switch the driver from legacy gpio API that is deprecated to the newer
gpiod API that respects line polarities described in ACPI/DT.

Signed-off-by: Dmitry Torokhov <[email protected]>
Signed-off-by: Helge Deller <[email protected]>
  • Loading branch information
dtor authored and hdeller committed Dec 14, 2022
1 parent 28f24e9 commit 257030d
Showing 1 changed file with 14 additions and 35 deletions.
49 changes: 14 additions & 35 deletions drivers/video/fbdev/omap2/omapfb/displays/connector-hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@
* Author: Tomi Valkeinen <[email protected]>
*/

#include <linux/err.h>
#include <linux/gpio/consumer.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/of_gpio.h>

#include <drm/drm_edid.h>

Expand Down Expand Up @@ -41,7 +42,7 @@ struct panel_drv_data {

struct omap_video_timings timings;

int hpd_gpio;
struct gpio_desc *hpd_gpio;
};

#define to_panel_data(x) container_of(x, struct panel_drv_data, dssdev)
Expand Down Expand Up @@ -155,8 +156,8 @@ static bool hdmic_detect(struct omap_dss_device *dssdev)
struct panel_drv_data *ddata = to_panel_data(dssdev);
struct omap_dss_device *in = ddata->in;

if (gpio_is_valid(ddata->hpd_gpio))
return gpio_get_value_cansleep(ddata->hpd_gpio);
if (ddata->hpd_gpio)
return gpiod_get_value_cansleep(ddata->hpd_gpio);
else
return in->ops.hdmi->detect(in);
}
Expand Down Expand Up @@ -197,31 +198,6 @@ static struct omap_dss_driver hdmic_driver = {
.set_hdmi_infoframe = hdmic_set_infoframe,
};

static int hdmic_probe_of(struct platform_device *pdev)
{
struct panel_drv_data *ddata = platform_get_drvdata(pdev);
struct device_node *node = pdev->dev.of_node;
struct omap_dss_device *in;
int gpio;

/* HPD GPIO */
gpio = of_get_named_gpio(node, "hpd-gpios", 0);
if (gpio_is_valid(gpio))
ddata->hpd_gpio = gpio;
else
ddata->hpd_gpio = -ENODEV;

in = omapdss_of_find_source_for_first_ep(node);
if (IS_ERR(in)) {
dev_err(&pdev->dev, "failed to find video source\n");
return PTR_ERR(in);
}

ddata->in = in;

return 0;
}

static int hdmic_probe(struct platform_device *pdev)
{
struct panel_drv_data *ddata;
Expand All @@ -238,15 +214,18 @@ static int hdmic_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, ddata);
ddata->dev = &pdev->dev;

r = hdmic_probe_of(pdev);
ddata->hpd_gpio = devm_gpiod_get_optional(&pdev->dev, "hpd", GPIOD_IN);
r = PTR_ERR_OR_ZERO(ddata->hpd_gpio);
if (r)
return r;

if (gpio_is_valid(ddata->hpd_gpio)) {
r = devm_gpio_request_one(&pdev->dev, ddata->hpd_gpio,
GPIOF_DIR_IN, "hdmi_hpd");
if (r)
goto err_reg;
gpiod_set_consumer_name(ddata->hpd_gpio, "hdmi_hpd");

ddata->in = omapdss_of_find_source_for_first_ep(pdev->dev.of_node);
r = PTR_ERR_OR_ZERO(ddata->in);
if (r) {
dev_err(&pdev->dev, "failed to find video source\n");
return r;
}

ddata->timings = hdmic_default_timings;
Expand Down

0 comments on commit 257030d

Please sign in to comment.