Commit af478d88 authored by Ajay Kumar's avatar Ajay Kumar Committed by Thierry Reding

drm/bridge: ptn3460: use gpiod interface

Modify driver to support gpiod interface.
Signed-off-by: default avatarAjay Kumar <ajaykumar.rs@samsung.com>
Acked-by: default avatarInki Dae <inki.dae@samsung.com>
Tested-by: default avatarRahul Sharma <rahul.sharma@samsung.com>
Tested-by: default avatarJavier Martinez Canillas <javier.martinez@collabora.co.uk>
Tested-by: default avatarGustavo Padovan <gustavo.padovan@collabora.co.uk>
Tested-by: default avatarSjoerd Simons <sjoerd.simons@collabora.co.uk>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent a1899953
...@@ -42,8 +42,8 @@ struct ptn3460_bridge { ...@@ -42,8 +42,8 @@ struct ptn3460_bridge {
struct drm_bridge bridge; struct drm_bridge bridge;
struct edid *edid; struct edid *edid;
struct drm_panel *panel; struct drm_panel *panel;
int gpio_pd_n; struct gpio_desc *gpio_pd_n;
int gpio_rst_n; struct gpio_desc *gpio_rst_n;
u32 edid_emulation; u32 edid_emulation;
bool enabled; bool enabled;
}; };
...@@ -132,14 +132,11 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge) ...@@ -132,14 +132,11 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge)
if (ptn_bridge->enabled) if (ptn_bridge->enabled)
return; return;
if (gpio_is_valid(ptn_bridge->gpio_pd_n)) gpiod_set_value(ptn_bridge->gpio_pd_n, 1);
gpio_set_value(ptn_bridge->gpio_pd_n, 1);
if (gpio_is_valid(ptn_bridge->gpio_rst_n)) { gpiod_set_value(ptn_bridge->gpio_rst_n, 0);
gpio_set_value(ptn_bridge->gpio_rst_n, 0); usleep_range(10, 20);
usleep_range(10, 20); gpiod_set_value(ptn_bridge->gpio_rst_n, 1);
gpio_set_value(ptn_bridge->gpio_rst_n, 1);
}
if (drm_panel_prepare(ptn_bridge->panel)) { if (drm_panel_prepare(ptn_bridge->panel)) {
DRM_ERROR("failed to prepare panel\n"); DRM_ERROR("failed to prepare panel\n");
...@@ -184,11 +181,8 @@ static void ptn3460_disable(struct drm_bridge *bridge) ...@@ -184,11 +181,8 @@ static void ptn3460_disable(struct drm_bridge *bridge)
return; return;
} }
if (gpio_is_valid(ptn_bridge->gpio_rst_n)) gpiod_set_value(ptn_bridge->gpio_rst_n, 1);
gpio_set_value(ptn_bridge->gpio_rst_n, 1); gpiod_set_value(ptn_bridge->gpio_pd_n, 0);
if (gpio_is_valid(ptn_bridge->gpio_pd_n))
gpio_set_value(ptn_bridge->gpio_pd_n, 0);
} }
static void ptn3460_post_disable(struct drm_bridge *bridge) static void ptn3460_post_disable(struct drm_bridge *bridge)
...@@ -335,39 +329,41 @@ static int ptn3460_probe(struct i2c_client *client, ...@@ -335,39 +329,41 @@ static int ptn3460_probe(struct i2c_client *client,
} }
ptn_bridge->client = client; ptn_bridge->client = client;
ptn_bridge->gpio_pd_n = of_get_named_gpio(dev->of_node,
"powerdown-gpio", 0); ptn_bridge->gpio_pd_n = devm_gpiod_get(&client->dev, "powerdown");
if (gpio_is_valid(ptn_bridge->gpio_pd_n)) { if (IS_ERR(ptn_bridge->gpio_pd_n)) {
ret = gpio_request_one(ptn_bridge->gpio_pd_n, ret = PTR_ERR(ptn_bridge->gpio_pd_n);
GPIOF_OUT_INIT_HIGH, "PTN3460_PD_N"); dev_err(dev, "cannot get gpio_pd_n %d\n", ret);
if (ret) { return ret;
dev_err(dev, "Request powerdown-gpio failed (%d)\n",
ret);
return ret;
}
} }
ptn_bridge->gpio_rst_n = of_get_named_gpio(dev->of_node, ret = gpiod_direction_output(ptn_bridge->gpio_pd_n, 1);
"reset-gpio", 0); if (ret) {
if (gpio_is_valid(ptn_bridge->gpio_rst_n)) { DRM_ERROR("cannot configure gpio_pd_n\n");
/* return ret;
* Request the reset pin low to avoid the bridge being }
* initialized prematurely
*/ ptn_bridge->gpio_rst_n = devm_gpiod_get(&client->dev, "reset");
ret = gpio_request_one(ptn_bridge->gpio_rst_n, if (IS_ERR(ptn_bridge->gpio_rst_n)) {
GPIOF_OUT_INIT_LOW, "PTN3460_RST_N"); ret = PTR_ERR(ptn_bridge->gpio_rst_n);
if (ret) { DRM_ERROR("cannot get gpio_rst_n %d\n", ret);
dev_err(dev, "Request reset-gpio failed (%d)\n", ret); return ret;
gpio_free(ptn_bridge->gpio_pd_n); }
return ret; /*
} * Request the reset pin low to avoid the bridge being
* initialized prematurely
*/
ret = gpiod_direction_output(ptn_bridge->gpio_rst_n, 0);
if (ret) {
DRM_ERROR("cannot configure gpio_rst_n\n");
return ret;
} }
ret = of_property_read_u32(dev->of_node, "edid-emulation", ret = of_property_read_u32(dev->of_node, "edid-emulation",
&ptn_bridge->edid_emulation); &ptn_bridge->edid_emulation);
if (ret) { if (ret) {
dev_err(dev, "Can't read EDID emulation value\n"); dev_err(dev, "Can't read EDID emulation value\n");
goto err; return ret;
} }
ptn_bridge->bridge.funcs = &ptn3460_bridge_funcs; ptn_bridge->bridge.funcs = &ptn3460_bridge_funcs;
...@@ -375,19 +371,12 @@ static int ptn3460_probe(struct i2c_client *client, ...@@ -375,19 +371,12 @@ static int ptn3460_probe(struct i2c_client *client,
ret = drm_bridge_add(&ptn_bridge->bridge); ret = drm_bridge_add(&ptn_bridge->bridge);
if (ret) { if (ret) {
DRM_ERROR("Failed to add bridge\n"); DRM_ERROR("Failed to add bridge\n");
goto err; return ret;
} }
i2c_set_clientdata(client, ptn_bridge); i2c_set_clientdata(client, ptn_bridge);
return 0; return 0;
err:
if (gpio_is_valid(ptn_bridge->gpio_pd_n))
gpio_free(ptn_bridge->gpio_pd_n);
if (gpio_is_valid(ptn_bridge->gpio_rst_n))
gpio_free(ptn_bridge->gpio_rst_n);
return ret;
} }
static int ptn3460_remove(struct i2c_client *client) static int ptn3460_remove(struct i2c_client *client)
...@@ -396,11 +385,6 @@ static int ptn3460_remove(struct i2c_client *client) ...@@ -396,11 +385,6 @@ static int ptn3460_remove(struct i2c_client *client)
drm_bridge_remove(&ptn_bridge->bridge); drm_bridge_remove(&ptn_bridge->bridge);
if (gpio_is_valid(ptn_bridge->gpio_pd_n))
gpio_free(ptn_bridge->gpio_pd_n);
if (gpio_is_valid(ptn_bridge->gpio_rst_n))
gpio_free(ptn_bridge->gpio_rst_n);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment