aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2015-05-20 03:21:41 -0400
committerRob Clark <robdclark@gmail.com>2015-06-11 13:11:05 -0400
commit9590e69db93d72684f6f1ae7307e2cac7aa5bca8 (patch)
tree0fcd83d71cbdd58347f0f5768666a364381742da
parentec31abf6684ebe1134eb3320c96fb92e566eff74 (diff)
drm/msm: use devm_gpiod_get_optional for optional reset gpio
Since 39b2bbe3d715 (gpio: add flags argument to gpiod_get*() functions) which appeared in v3.17-rc1, the gpiod_get* functions take an additional parameter that allows to specify direction and initial value for output. Also there is a variant to find optional gpios that returns NULL if there is no gpio instead of -ENOENT. Make use of both features to simplify the driver. This makes error checking more strict because errors like -ENOSYS ("no gpio support compiled in") or -EPROBE_DEFER ("gpio not ready yet") are handled correctly now. Furthermore this is one caller less that stops us making the flags argument to gpiod_get*() mandatory. Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Rob Clark <robdclark@gmail.com>
-rw-r--r--drivers/gpu/drm/msm/dsi/dsi_host.c29
1 files changed, 6 insertions, 23 deletions
diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c
index bc2e405758e3..604d80b85e42 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_host.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
@@ -1349,36 +1349,19 @@ static irqreturn_t dsi_host_irq(int irq, void *ptr)
1349static int dsi_host_init_panel_gpios(struct msm_dsi_host *msm_host, 1349static int dsi_host_init_panel_gpios(struct msm_dsi_host *msm_host,
1350 struct device *panel_device) 1350 struct device *panel_device)
1351{ 1351{
1352 int ret; 1352 msm_host->disp_en_gpio = devm_gpiod_get_optional(panel_device,
1353 1353 "disp-enable",
1354 msm_host->disp_en_gpio = devm_gpiod_get(panel_device, 1354 GPIOD_OUT_LOW);
1355 "disp-enable");
1356 if (IS_ERR(msm_host->disp_en_gpio)) { 1355 if (IS_ERR(msm_host->disp_en_gpio)) {
1357 DBG("cannot get disp-enable-gpios %ld", 1356 DBG("cannot get disp-enable-gpios %ld",
1358 PTR_ERR(msm_host->disp_en_gpio)); 1357 PTR_ERR(msm_host->disp_en_gpio));
1359 msm_host->disp_en_gpio = NULL; 1358 return PTR_ERR(msm_host->disp_en_gpio);
1360 }
1361 if (msm_host->disp_en_gpio) {
1362 ret = gpiod_direction_output(msm_host->disp_en_gpio, 0);
1363 if (ret) {
1364 pr_err("cannot set dir to disp-en-gpios %d\n", ret);
1365 return ret;
1366 }
1367 } 1359 }
1368 1360
1369 msm_host->te_gpio = devm_gpiod_get(panel_device, "disp-te"); 1361 msm_host->te_gpio = devm_gpiod_get(panel_device, "disp-te", GPIOD_IN);
1370 if (IS_ERR(msm_host->te_gpio)) { 1362 if (IS_ERR(msm_host->te_gpio)) {
1371 DBG("cannot get disp-te-gpios %ld", PTR_ERR(msm_host->te_gpio)); 1363 DBG("cannot get disp-te-gpios %ld", PTR_ERR(msm_host->te_gpio));
1372 msm_host->te_gpio = NULL; 1364 return PTR_ERR(msm_host->te_gpio);
1373 }
1374
1375 if (msm_host->te_gpio) {
1376 ret = gpiod_direction_input(msm_host->te_gpio);
1377 if (ret) {
1378 pr_err("%s: cannot set dir to disp-te-gpios, %d\n",
1379 __func__, ret);
1380 return ret;
1381 }
1382 } 1365 }
1383 1366
1384 return 0; 1367 return 0;