mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH 3/3] video/ssd1307fb: make reset GPIO optional
Date: Mon,  2 Mar 2020 12:49:55 +0100	[thread overview]
Message-ID: <20200302114955.13897-3-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20200302114955.13897-1-a.fatoum@pengutronix.de>

Both reset GPIO and regulator are optional as per the binding and the
driver can work without if we ignore their absence. Do so.

Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 drivers/video/ssd1307fb.c | 43 +++++++++++++++++++++------------------
 1 file changed, 23 insertions(+), 20 deletions(-)

diff --git a/drivers/video/ssd1307fb.c b/drivers/video/ssd1307fb.c
index cc50698670e0..835814bf5306 100644
--- a/drivers/video/ssd1307fb.c
+++ b/drivers/video/ssd1307fb.c
@@ -415,12 +415,8 @@ static int ssd1307fb_probe(struct device_d *dev)
 
 	par->reset = of_get_named_gpio(node,
 					 "reset-gpios", 0);
-	if (!gpio_is_valid(par->reset)) {
-		ret = par->reset;
-		if (ret != -EPROBE_DEFER)
-			dev_err(&client->dev,
-				"Couldn't get named gpio 'reset-gpios': %s.\n",
-				strerror(-ret));
+	if (!gpio_is_valid(par->reset) && par->reset == -EPROBE_DEFER) {
+		ret = -EPROBE_DEFER;
 		goto fb_alloc_error;
 	}
 
@@ -503,14 +499,16 @@ static int ssd1307fb_probe(struct device_d *dev)
 
 	info->screen_base = (u8 __force __iomem *)vmem;
 
-	ret = gpio_request_one(par->reset,
-			       GPIOF_OUT_INIT_HIGH,
-			       "oled-reset");
-	if (ret) {
-		dev_err(&client->dev,
-			"failed to request gpio %d: %d\n",
-			par->reset, ret);
-		goto reset_oled_error;
+	if (par->reset >= 0) {
+		ret = gpio_request_one(par->reset,
+				       GPIOF_OUT_INIT_HIGH,
+				       "oled-reset");
+		if (ret) {
+			dev_err(&client->dev,
+				"failed to request gpio %d: %d\n",
+				par->reset, ret);
+			goto reset_oled_error;
+		}
 	}
 
 	ret = regulator_disable(par->vbat);
@@ -519,18 +517,23 @@ static int ssd1307fb_probe(struct device_d *dev)
 
 	i2c_set_clientdata(client, info);
 
-	/* Reset the screen */
-	gpio_set_value(par->reset, 0);
-	udelay(4);
+	if (par->reset > 0) {
+		/* Reset the screen */
+		gpio_set_value(par->reset, 0);
+		udelay(4);
+	}
 
 	ret = regulator_enable(par->vbat);
 	if (ret < 0)
 		goto reset_oled_error;
 
-	mdelay(100);
+	if (par->vbat)
+		mdelay(100);
 
-	gpio_set_value(par->reset, 1);
-	udelay(4);
+	if (par->reset > 0) {
+		gpio_set_value(par->reset, 1);
+		udelay(4);
+	}
 
 	ret = ssd1307fb_init(par);
 	if (ret)
-- 
2.25.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  parent reply	other threads:[~2020-03-02 11:50 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-02 11:49 [PATCH 1/3] video/ssd1307fb: fix NULL pointer dereference in probe Ahmad Fatoum
2020-03-02 11:49 ` [PATCH 2/3] video/ssd1307fb: drop unneeded regulator NULL checks Ahmad Fatoum
2020-03-02 11:49 ` Ahmad Fatoum [this message]
2020-03-09  7:31 ` [PATCH 1/3] video/ssd1307fb: fix NULL pointer dereference in probe Sascha Hauer

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=20200302114955.13897-3-a.fatoum@pengutronix.de \
    --to=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox