From: Ajay Kumar <ajaykumar.rs@samsung.com> To: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-samsung-soc@vger.kernel.org Cc: inki.dae@samsung.com, kgene.kim@samsung.com, seanpaul@google.com, thierry.reding@gmail.com, daniel.vetter@ffwll.ch, ajaynumb@gmail.com, bhushan.r@samsung.com, prashanth.g@samsung.com, Ajay Kumar <ajaykumar.rs@samsung.com> Subject: [PATCH V8 08/14] drm/bridge: ptn3460: use gpiod interface Date: Sat, 15 Nov 2014 15:25:03 +0530 [thread overview] Message-ID: <1416045309-13359-9-git-send-email-ajaykumar.rs@samsung.com> (raw) In-Reply-To: <1416045309-13359-1-git-send-email-ajaykumar.rs@samsung.com> Modify driver to support gpiod interface. Signed-off-by: Ajay Kumar <ajaykumar.rs@samsung.com> --- drivers/gpu/drm/bridge/ptn3460.c | 88 ++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 52 deletions(-) diff --git a/drivers/gpu/drm/bridge/ptn3460.c b/drivers/gpu/drm/bridge/ptn3460.c index 9f800a1..826833e 100644 --- a/drivers/gpu/drm/bridge/ptn3460.c +++ b/drivers/gpu/drm/bridge/ptn3460.c @@ -42,8 +42,8 @@ struct ptn3460_bridge { struct drm_bridge bridge; struct edid *edid; struct drm_panel *panel; - int gpio_pd_n; - int gpio_rst_n; + struct gpio_desc *gpio_pd_n; + struct gpio_desc *gpio_rst_n; u32 edid_emulation; bool enabled; }; @@ -132,14 +132,11 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge) if (ptn_bridge->enabled) return; - if (gpio_is_valid(ptn_bridge->gpio_pd_n)) - gpio_set_value(ptn_bridge->gpio_pd_n, 1); + gpiod_set_value(ptn_bridge->gpio_pd_n, 1); - if (gpio_is_valid(ptn_bridge->gpio_rst_n)) { - gpio_set_value(ptn_bridge->gpio_rst_n, 0); - usleep_range(10, 20); - gpio_set_value(ptn_bridge->gpio_rst_n, 1); - } + gpiod_set_value(ptn_bridge->gpio_rst_n, 0); + usleep_range(10, 20); + gpiod_set_value(ptn_bridge->gpio_rst_n, 1); if (drm_panel_prepare(ptn_bridge->panel)) { DRM_ERROR("failed to prepare panel\n"); @@ -184,11 +181,8 @@ static void ptn3460_disable(struct drm_bridge *bridge) return; } - if (gpio_is_valid(ptn_bridge->gpio_rst_n)) - gpio_set_value(ptn_bridge->gpio_rst_n, 1); - - if (gpio_is_valid(ptn_bridge->gpio_pd_n)) - gpio_set_value(ptn_bridge->gpio_pd_n, 0); + gpiod_set_value(ptn_bridge->gpio_rst_n, 1); + gpiod_set_value(ptn_bridge->gpio_pd_n, 0); } static void ptn3460_post_disable(struct drm_bridge *bridge) @@ -335,39 +329,41 @@ static int ptn3460_probe(struct i2c_client *client, } ptn_bridge->client = client; - ptn_bridge->gpio_pd_n = of_get_named_gpio(dev->of_node, - "powerdown-gpio", 0); - if (gpio_is_valid(ptn_bridge->gpio_pd_n)) { - ret = gpio_request_one(ptn_bridge->gpio_pd_n, - GPIOF_OUT_INIT_HIGH, "PTN3460_PD_N"); - if (ret) { - dev_err(dev, "Request powerdown-gpio failed (%d)\n", - ret); - return ret; - } + + ptn_bridge->gpio_pd_n = devm_gpiod_get(&client->dev, "powerdown"); + if (IS_ERR(ptn_bridge->gpio_pd_n)) { + ret = PTR_ERR(ptn_bridge->gpio_pd_n); + dev_err(dev, "cannot get gpio_pd_n %d\n", ret); + return ret; } - ptn_bridge->gpio_rst_n = of_get_named_gpio(dev->of_node, - "reset-gpio", 0); - if (gpio_is_valid(ptn_bridge->gpio_rst_n)) { - /* - * Request the reset pin low to avoid the bridge being - * initialized prematurely - */ - ret = gpio_request_one(ptn_bridge->gpio_rst_n, - GPIOF_OUT_INIT_LOW, "PTN3460_RST_N"); - if (ret) { - dev_err(dev, "Request reset-gpio failed (%d)\n", ret); - gpio_free(ptn_bridge->gpio_pd_n); - return ret; - } + ret = gpiod_direction_output(ptn_bridge->gpio_pd_n, 1); + if (ret) { + DRM_ERROR("cannot configure gpio_pd_n\n"); + return ret; + } + + ptn_bridge->gpio_rst_n = devm_gpiod_get(&client->dev, "reset"); + if (IS_ERR(ptn_bridge->gpio_rst_n)) { + ret = PTR_ERR(ptn_bridge->gpio_rst_n); + DRM_ERROR("cannot get gpio_rst_n %d\n", ret); + 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", &ptn_bridge->edid_emulation); if (ret) { dev_err(dev, "Can't read EDID emulation value\n"); - goto err; + return ret; } ptn_bridge->bridge.funcs = &ptn3460_bridge_funcs; @@ -375,19 +371,12 @@ static int ptn3460_probe(struct i2c_client *client, ret = drm_bridge_add(&ptn_bridge->bridge); if (ret) { DRM_ERROR("Failed to add bridge\n"); - goto err; + return ret; } i2c_set_clientdata(client, ptn_bridge); 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) @@ -396,11 +385,6 @@ static int ptn3460_remove(struct i2c_client *client) 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; } -- 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: ajaykumar.rs@samsung.com (Ajay Kumar) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH V8 08/14] drm/bridge: ptn3460: use gpiod interface Date: Sat, 15 Nov 2014 15:25:03 +0530 [thread overview] Message-ID: <1416045309-13359-9-git-send-email-ajaykumar.rs@samsung.com> (raw) In-Reply-To: <1416045309-13359-1-git-send-email-ajaykumar.rs@samsung.com> Modify driver to support gpiod interface. Signed-off-by: Ajay Kumar <ajaykumar.rs@samsung.com> --- drivers/gpu/drm/bridge/ptn3460.c | 88 ++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 52 deletions(-) diff --git a/drivers/gpu/drm/bridge/ptn3460.c b/drivers/gpu/drm/bridge/ptn3460.c index 9f800a1..826833e 100644 --- a/drivers/gpu/drm/bridge/ptn3460.c +++ b/drivers/gpu/drm/bridge/ptn3460.c @@ -42,8 +42,8 @@ struct ptn3460_bridge { struct drm_bridge bridge; struct edid *edid; struct drm_panel *panel; - int gpio_pd_n; - int gpio_rst_n; + struct gpio_desc *gpio_pd_n; + struct gpio_desc *gpio_rst_n; u32 edid_emulation; bool enabled; }; @@ -132,14 +132,11 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge) if (ptn_bridge->enabled) return; - if (gpio_is_valid(ptn_bridge->gpio_pd_n)) - gpio_set_value(ptn_bridge->gpio_pd_n, 1); + gpiod_set_value(ptn_bridge->gpio_pd_n, 1); - if (gpio_is_valid(ptn_bridge->gpio_rst_n)) { - gpio_set_value(ptn_bridge->gpio_rst_n, 0); - usleep_range(10, 20); - gpio_set_value(ptn_bridge->gpio_rst_n, 1); - } + gpiod_set_value(ptn_bridge->gpio_rst_n, 0); + usleep_range(10, 20); + gpiod_set_value(ptn_bridge->gpio_rst_n, 1); if (drm_panel_prepare(ptn_bridge->panel)) { DRM_ERROR("failed to prepare panel\n"); @@ -184,11 +181,8 @@ static void ptn3460_disable(struct drm_bridge *bridge) return; } - if (gpio_is_valid(ptn_bridge->gpio_rst_n)) - gpio_set_value(ptn_bridge->gpio_rst_n, 1); - - if (gpio_is_valid(ptn_bridge->gpio_pd_n)) - gpio_set_value(ptn_bridge->gpio_pd_n, 0); + gpiod_set_value(ptn_bridge->gpio_rst_n, 1); + gpiod_set_value(ptn_bridge->gpio_pd_n, 0); } static void ptn3460_post_disable(struct drm_bridge *bridge) @@ -335,39 +329,41 @@ static int ptn3460_probe(struct i2c_client *client, } ptn_bridge->client = client; - ptn_bridge->gpio_pd_n = of_get_named_gpio(dev->of_node, - "powerdown-gpio", 0); - if (gpio_is_valid(ptn_bridge->gpio_pd_n)) { - ret = gpio_request_one(ptn_bridge->gpio_pd_n, - GPIOF_OUT_INIT_HIGH, "PTN3460_PD_N"); - if (ret) { - dev_err(dev, "Request powerdown-gpio failed (%d)\n", - ret); - return ret; - } + + ptn_bridge->gpio_pd_n = devm_gpiod_get(&client->dev, "powerdown"); + if (IS_ERR(ptn_bridge->gpio_pd_n)) { + ret = PTR_ERR(ptn_bridge->gpio_pd_n); + dev_err(dev, "cannot get gpio_pd_n %d\n", ret); + return ret; } - ptn_bridge->gpio_rst_n = of_get_named_gpio(dev->of_node, - "reset-gpio", 0); - if (gpio_is_valid(ptn_bridge->gpio_rst_n)) { - /* - * Request the reset pin low to avoid the bridge being - * initialized prematurely - */ - ret = gpio_request_one(ptn_bridge->gpio_rst_n, - GPIOF_OUT_INIT_LOW, "PTN3460_RST_N"); - if (ret) { - dev_err(dev, "Request reset-gpio failed (%d)\n", ret); - gpio_free(ptn_bridge->gpio_pd_n); - return ret; - } + ret = gpiod_direction_output(ptn_bridge->gpio_pd_n, 1); + if (ret) { + DRM_ERROR("cannot configure gpio_pd_n\n"); + return ret; + } + + ptn_bridge->gpio_rst_n = devm_gpiod_get(&client->dev, "reset"); + if (IS_ERR(ptn_bridge->gpio_rst_n)) { + ret = PTR_ERR(ptn_bridge->gpio_rst_n); + DRM_ERROR("cannot get gpio_rst_n %d\n", ret); + 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", &ptn_bridge->edid_emulation); if (ret) { dev_err(dev, "Can't read EDID emulation value\n"); - goto err; + return ret; } ptn_bridge->bridge.funcs = &ptn3460_bridge_funcs; @@ -375,19 +371,12 @@ static int ptn3460_probe(struct i2c_client *client, ret = drm_bridge_add(&ptn_bridge->bridge); if (ret) { DRM_ERROR("Failed to add bridge\n"); - goto err; + return ret; } i2c_set_clientdata(client, ptn_bridge); 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) @@ -396,11 +385,6 @@ static int ptn3460_remove(struct i2c_client *client) 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; } -- 1.7.9.5
next prev parent reply other threads:[~2014-11-15 9:55 UTC|newest] Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-11-15 9:54 [PATCH V8 00/14] drm/exynos: few patches to enhance bridge chip support Ajay Kumar 2014-11-15 9:54 ` Ajay Kumar 2014-11-15 9:54 ` [PATCH V8 01/14] drm/bridge: ptn3460: Few trivial cleanups Ajay Kumar 2014-11-15 9:54 ` Ajay Kumar 2014-11-15 9:54 ` [PATCH V8 02/14] drm/bridge: do not pass drm_bridge_funcs to drm_bridge_init Ajay Kumar 2014-11-15 9:54 ` Ajay Kumar 2014-11-15 9:54 ` [PATCH V8 03/14] drm/bridge: make bridge registration independent of drm flow Ajay Kumar 2014-11-15 9:54 ` Ajay Kumar 2014-12-02 6:01 ` Ajay kumar 2014-12-02 6:01 ` Ajay kumar 2014-12-08 10:24 ` Ajay kumar 2014-12-08 10:24 ` Ajay kumar 2014-11-15 9:54 ` [PATCH V8 04/14] drm/bridge: ptn3460: Convert to i2c driver model Ajay Kumar 2014-11-15 9:54 ` Ajay Kumar 2014-11-15 9:55 ` [PATCH V8 05/14] drm/exynos: dp: support drm_bridge Ajay Kumar 2014-11-15 9:55 ` Ajay Kumar 2014-11-15 9:55 ` [PATCH V8 06/14] drm/bridge: ptn3460: support drm_panel Ajay Kumar 2014-11-15 9:55 ` Ajay Kumar 2014-11-15 9:55 ` [PATCH V8 07/14] drm/bridge: ptn3460: probe connector at the end of bridge attach Ajay Kumar 2014-11-15 9:55 ` Ajay Kumar 2014-11-15 9:55 ` Ajay Kumar [this message] 2014-11-15 9:55 ` [PATCH V8 08/14] drm/bridge: ptn3460: use gpiod interface Ajay Kumar 2014-11-15 9:55 ` [PATCH V8 09/14] Documentation: drm: bridge: move to video/bridge Ajay Kumar 2014-11-15 9:55 ` Ajay Kumar 2014-11-15 9:55 ` [PATCH V8 10/14] Documentation: devicetree: Add vendor prefix for parade Ajay Kumar 2014-11-15 9:55 ` Ajay Kumar 2014-11-15 9:55 ` [PATCH V8 11/14] Documentation: bridge: Add documentation for ps8622 DT properties Ajay Kumar 2014-11-15 9:55 ` Ajay Kumar 2014-11-15 9:55 ` [PATCH V8 12/14] drm/bridge: Add i2c based driver for ps8622/ps8625 bridge Ajay Kumar 2014-11-15 9:55 ` Ajay Kumar 2014-11-15 9:55 ` [PATCH V8 13/14] ARM: dts: snow: represent the connection between bridge and panel using videoport and endpoints Ajay Kumar 2014-11-15 9:55 ` Ajay Kumar 2014-11-15 9:55 ` [PATCH V8 14/14] ARM: dts: peach-pit: " Ajay Kumar 2014-11-15 9:55 ` Ajay Kumar 2014-11-18 6:20 ` [PATCH V8 00/14] drm/exynos: few patches to enhance bridge chip support Ajay kumar 2014-11-18 6:20 ` Ajay kumar 2014-11-19 9:35 ` Javier Martinez Canillas 2014-11-19 9:35 ` Javier Martinez Canillas 2014-11-19 9:38 ` Ajay kumar 2014-11-19 9:38 ` Ajay kumar 2014-11-19 9:51 ` Javier Martinez Canillas 2014-11-19 9:51 ` Javier Martinez Canillas 2014-11-19 10:55 ` Paolo Pisati 2014-11-19 10:55 ` Paolo Pisati 2014-11-19 11:20 ` Javier Martinez Canillas 2014-11-19 11:20 ` Javier Martinez Canillas 2014-11-19 16:22 ` Paolo Pisati 2014-11-19 16:22 ` Paolo Pisati 2014-11-19 16:28 ` Javier Martinez Canillas 2014-11-19 16:28 ` Javier Martinez Canillas 2014-11-19 16:44 ` Andreas Färber 2014-11-19 16:44 ` Andreas Färber 2014-11-19 19:19 ` Kevin Hilman 2014-11-19 19:19 ` Kevin Hilman 2014-12-12 9:51 ` Javier Martinez Canillas 2014-12-12 9:51 ` Javier Martinez Canillas 2014-12-15 14:30 ` Tomi Valkeinen 2014-12-15 14:30 ` Tomi Valkeinen 2014-12-15 23:37 ` Laurent Pinchart 2014-12-15 23:37 ` Laurent Pinchart 2014-12-17 9:31 ` Javier Martinez Canillas 2014-12-17 9:31 ` Javier Martinez Canillas 2014-12-17 11:29 ` Laurent Pinchart 2014-12-17 11:29 ` Laurent Pinchart 2015-01-02 13:10 ` Daniel Stone 2015-01-02 13:14 ` Ajay kumar 2015-01-02 13:14 ` Ajay kumar 2015-01-02 13:19 ` Daniel Stone 2015-01-03 6:47 ` Inki Dae 2015-01-03 6:47 ` Inki Dae 2015-01-05 13:50 ` Thierry Reding 2015-01-05 13:50 ` Thierry Reding [not found] ` <20150105135015.GA12010-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org> 2015-01-19 10:27 ` Javier Martinez Canillas 2015-01-19 10:27 ` Javier Martinez Canillas 2015-01-19 16:30 ` Thierry Reding 2015-01-19 16:30 ` Thierry Reding 2015-01-19 17:01 ` Gustavo Padovan 2015-01-19 17:01 ` Gustavo Padovan 2015-01-19 17:43 ` Sjoerd Simons 2015-01-19 17:43 ` Sjoerd Simons [not found] ` <20150119163043.GB7751-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org> 2015-01-19 17:05 ` Javier Martinez Canillas 2015-01-19 17:05 ` Javier Martinez Canillas 2015-01-20 10:56 ` Ajay kumar 2015-01-20 10:56 ` Ajay kumar 2015-01-20 23:37 ` Laurent Pinchart 2015-01-20 23:37 ` Laurent Pinchart
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1416045309-13359-9-git-send-email-ajaykumar.rs@samsung.com \ --to=ajaykumar.rs@samsung.com \ --cc=ajaynumb@gmail.com \ --cc=bhushan.r@samsung.com \ --cc=daniel.vetter@ffwll.ch \ --cc=devicetree@vger.kernel.org \ --cc=dri-devel@lists.freedesktop.org \ --cc=inki.dae@samsung.com \ --cc=kgene.kim@samsung.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-samsung-soc@vger.kernel.org \ --cc=prashanth.g@samsung.com \ --cc=seanpaul@google.com \ --cc=thierry.reding@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.