All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Zapolskiy <vz@mleia.com>
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 4/4] video: ARM CLCD: add support of an optional GPIO to enable panel
Date: Wed, 21 Dec 2016 03:27:17 +0000	[thread overview]
Message-ID: <20161221032717.13154-5-vz@mleia.com> (raw)
In-Reply-To: <20161221032717.13154-1-vz@mleia.com>

The change adds handling of "enable-gpios" property of panel-dpi device
node used with an ARM CLCD controller, note that the property already has
a description in display/panel/panel-dpi.txt documentation and it founds
practical usage while describing some panel devices connected to other
types of display controllers.

Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>
---
 drivers/video/fbdev/amba-clcd.c | 29 +++++++++++++++++++++++++++++
 include/linux/amba/clcd.h       |  2 ++
 2 files changed, 31 insertions(+)

diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c
index 0fab92c..0bb8646 100644
--- a/drivers/video/fbdev/amba-clcd.c
+++ b/drivers/video/fbdev/amba-clcd.c
@@ -17,6 +17,7 @@
 #include <linux/delay.h>
 #include <linux/dma-mapping.h>
 #include <linux/fb.h>
+#include <linux/gpio/consumer.h>
 #include <linux/init.h>
 #include <linux/ioport.h>
 #include <linux/list.h>
@@ -87,6 +88,9 @@ static void clcdfb_disable(struct clcd_fb *fb)
 		writel(val, fb->regs + fb->off_cntl);
 	}
 
+	if (fb->panel->enable_gpio)
+		gpiod_set_value_cansleep(fb->panel->enable_gpio, 0);
+
 	/*
 	 * Disable CLCD clock source.
 	 */
@@ -106,6 +110,9 @@ static void clcdfb_enable(struct clcd_fb *fb, u32 cntl)
 		clk_enable(fb->clk);
 	}
 
+	if (fb->panel->enable_gpio)
+		gpiod_set_value_cansleep(fb->panel->enable_gpio, 1);
+
 	/*
 	 * Bring up by first enabling..
 	 */
@@ -624,6 +631,24 @@ static int clcdfb_snprintf_mode(char *buf, int size, struct fb_videomode *mode)
 			mode->refresh);
 }
 
+static int clcdfb_of_get_enable_gpio(struct device *dev,
+				     struct device_node *panel,
+				     struct clcd_panel *clcd_panel)
+{
+	int err;
+
+	clcd_panel->enable_gpio = devm_get_gpiod_from_child(dev, "enable",
+							    &panel->fwnode);
+	if (IS_ERR(clcd_panel->enable_gpio)) {
+		err = PTR_ERR(clcd_panel->enable_gpio);
+		clcd_panel->enable_gpio = NULL;
+		if (err != -ENOENT)
+			return err;
+	}
+
+	return 0;
+}
+
 static int clcdfb_of_get_backlight(struct device_node *panel,
 				   struct clcd_panel *clcd_panel)
 {
@@ -781,6 +806,10 @@ static int clcdfb_of_init_display(struct clcd_fb *fb)
 			return err;
 	}
 
+	err = clcdfb_of_get_enable_gpio(&fb->dev->dev, panel, fb->panel);
+	if (err)
+		return err;
+
 	err = clcdfb_of_get_backlight(panel, fb->panel);
 	if (err)
 		return err;
diff --git a/include/linux/amba/clcd.h b/include/linux/amba/clcd.h
index 1035879..a9c6007 100644
--- a/include/linux/amba/clcd.h
+++ b/include/linux/amba/clcd.h
@@ -105,6 +105,7 @@ enum {
 };
 
 struct backlight_device;
+struct gpio_desc;
 
 struct clcd_panel {
 	struct fb_videomode	mode;
@@ -119,6 +120,7 @@ struct clcd_panel {
 				grayscale:1;
 	unsigned int		connector;
 	struct backlight_device	*backlight;
+	struct gpio_desc	*enable_gpio;
 	/*
 	 * If the B/R lines are switched between the CLCD
 	 * and the panel we need to know this and not try to
-- 
2.10.2


WARNING: multiple messages have this Message-ID (diff)
From: vz@mleia.com (Vladimir Zapolskiy)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 4/4] video: ARM CLCD: add support of an optional GPIO to enable panel
Date: Wed, 21 Dec 2016 05:27:17 +0200	[thread overview]
Message-ID: <20161221032717.13154-5-vz@mleia.com> (raw)
In-Reply-To: <20161221032717.13154-1-vz@mleia.com>

The change adds handling of "enable-gpios" property of panel-dpi device
node used with an ARM CLCD controller, note that the property already has
a description in display/panel/panel-dpi.txt documentation and it founds
practical usage while describing some panel devices connected to other
types of display controllers.

Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>
---
 drivers/video/fbdev/amba-clcd.c | 29 +++++++++++++++++++++++++++++
 include/linux/amba/clcd.h       |  2 ++
 2 files changed, 31 insertions(+)

diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c
index 0fab92c..0bb8646 100644
--- a/drivers/video/fbdev/amba-clcd.c
+++ b/drivers/video/fbdev/amba-clcd.c
@@ -17,6 +17,7 @@
 #include <linux/delay.h>
 #include <linux/dma-mapping.h>
 #include <linux/fb.h>
+#include <linux/gpio/consumer.h>
 #include <linux/init.h>
 #include <linux/ioport.h>
 #include <linux/list.h>
@@ -87,6 +88,9 @@ static void clcdfb_disable(struct clcd_fb *fb)
 		writel(val, fb->regs + fb->off_cntl);
 	}
 
+	if (fb->panel->enable_gpio)
+		gpiod_set_value_cansleep(fb->panel->enable_gpio, 0);
+
 	/*
 	 * Disable CLCD clock source.
 	 */
@@ -106,6 +110,9 @@ static void clcdfb_enable(struct clcd_fb *fb, u32 cntl)
 		clk_enable(fb->clk);
 	}
 
+	if (fb->panel->enable_gpio)
+		gpiod_set_value_cansleep(fb->panel->enable_gpio, 1);
+
 	/*
 	 * Bring up by first enabling..
 	 */
@@ -624,6 +631,24 @@ static int clcdfb_snprintf_mode(char *buf, int size, struct fb_videomode *mode)
 			mode->refresh);
 }
 
+static int clcdfb_of_get_enable_gpio(struct device *dev,
+				     struct device_node *panel,
+				     struct clcd_panel *clcd_panel)
+{
+	int err;
+
+	clcd_panel->enable_gpio = devm_get_gpiod_from_child(dev, "enable",
+							    &panel->fwnode);
+	if (IS_ERR(clcd_panel->enable_gpio)) {
+		err = PTR_ERR(clcd_panel->enable_gpio);
+		clcd_panel->enable_gpio = NULL;
+		if (err != -ENOENT)
+			return err;
+	}
+
+	return 0;
+}
+
 static int clcdfb_of_get_backlight(struct device_node *panel,
 				   struct clcd_panel *clcd_panel)
 {
@@ -781,6 +806,10 @@ static int clcdfb_of_init_display(struct clcd_fb *fb)
 			return err;
 	}
 
+	err = clcdfb_of_get_enable_gpio(&fb->dev->dev, panel, fb->panel);
+	if (err)
+		return err;
+
 	err = clcdfb_of_get_backlight(panel, fb->panel);
 	if (err)
 		return err;
diff --git a/include/linux/amba/clcd.h b/include/linux/amba/clcd.h
index 1035879..a9c6007 100644
--- a/include/linux/amba/clcd.h
+++ b/include/linux/amba/clcd.h
@@ -105,6 +105,7 @@ enum {
 };
 
 struct backlight_device;
+struct gpio_desc;
 
 struct clcd_panel {
 	struct fb_videomode	mode;
@@ -119,6 +120,7 @@ struct clcd_panel {
 				grayscale:1;
 	unsigned int		connector;
 	struct backlight_device	*backlight;
+	struct gpio_desc	*enable_gpio;
 	/*
 	 * If the B/R lines are switched between the CLCD
 	 * and the panel we need to know this and not try to
-- 
2.10.2

  parent reply	other threads:[~2016-12-21  3:27 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-21  3:27 [PATCH 0/4] video: ARM CLCD: add support of an optional GPIO to enable panel Vladimir Zapolskiy
2016-12-21  3:27 ` Vladimir Zapolskiy
2016-12-21  3:27 ` [PATCH 1/4] video: ARM CLCD: sort included headers out alphabetically Vladimir Zapolskiy
2016-12-21  3:27   ` Vladimir Zapolskiy
2016-12-21  3:27 ` [PATCH 2/4] video: ARM CLCD: use panel device node for panel initialization Vladimir Zapolskiy
2016-12-21  3:27   ` Vladimir Zapolskiy
2016-12-21  3:27 ` [PATCH 3/4] video: ARM CLCD: use panel device node for getting backlight and mode Vladimir Zapolskiy
2016-12-21  3:27   ` Vladimir Zapolskiy
2016-12-21  3:27 ` Vladimir Zapolskiy [this message]
2016-12-21  3:27   ` [PATCH 4/4] video: ARM CLCD: add support of an optional GPIO to enable panel Vladimir Zapolskiy
2016-12-30  8:20   ` Linus Walleij
2016-12-30  8:20     ` Linus Walleij
2016-12-30  9:24     ` Vladimir Zapolskiy
2016-12-30  9:24       ` Vladimir Zapolskiy
2016-12-30  8:23 ` [PATCH 0/4] " Linus Walleij
2016-12-30  8:23   ` Linus Walleij
2017-01-01 20:50   ` Vladimir Zapolskiy
2017-01-01 20:50     ` Vladimir Zapolskiy
2017-01-02 14:22   ` Russell King - ARM Linux
2017-01-02 14:22     ` Russell King - ARM Linux
2017-01-07 23:32     ` Vladimir Zapolskiy
2017-01-07 23:32       ` Vladimir Zapolskiy
2017-01-10  4:06       ` Vladimir Zapolskiy
2017-01-10  4:06         ` Vladimir Zapolskiy
2017-01-10 13:47       ` Vladimir Murzin
2017-01-10 13:47         ` Vladimir Murzin
2017-01-11 15:16         ` Linus Walleij
2017-01-11 15:16           ` Linus Walleij
2017-01-12  0:05           ` Vladimir Zapolskiy
2017-01-12  0:05             ` Vladimir Zapolskiy
2017-01-12  8:27             ` Linus Walleij
2017-01-12  8:27               ` Linus Walleij
2017-01-12 21:26               ` Vladimir Zapolskiy
2017-01-12 21:26                 ` Vladimir Zapolskiy
2017-01-13 11:08                 ` Bartlomiej Zolnierkiewicz
2017-01-13 11:08                   ` Bartlomiej Zolnierkiewicz
2017-01-17  1:57                   ` Vladimir Zapolskiy
2017-01-17  1:57                     ` Vladimir Zapolskiy
2017-01-18 12:22                     ` Linus Walleij
2017-01-18 12:22                       ` Linus Walleij
     [not found]                     ` <CGME20170130152340epcas5p3f68349ef89c5ec902186ae71011c0c4b@epcas5p3.samsung.com>
2017-01-30 15:23                       ` Bartlomiej Zolnierkiewicz
2017-01-30 15:23                         ` Bartlomiej Zolnierkiewicz

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=20161221032717.13154-5-vz@mleia.com \
    --to=vz@mleia.com \
    --cc=linux-arm-kernel@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 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.