From: Tomi Valkeinen <tomi.valkeinen@ti.com>
To: linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 3/4] OMAPDSS: panel-sharp-ls037v7dw01: add device tree support
Date: Fri, 09 May 2014 08:31:10 +0000 [thread overview]
Message-ID: <536C924E.5000307@ti.com> (raw)
In-Reply-To: <20140508233300.GI2198@atomide.com>
[-- Attachment #1: Type: text/plain, Size: 7924 bytes --]
On 09/05/14 02:33, Tony Lindgren wrote:
> * Tony Lindgren <tony@atomide.com> [140507 11:00]:
>> * Tomi Valkeinen <tomi.valkeinen@ti.com> [140507 09:03]:
>>> On 07/05/14 18:03, Tony Lindgren wrote:
>>>>
>>>> BTW, I'm also personally fine with all five gpios showing in a single
>>>> gpios property, I'm not too exited about naming anything in DT..
>>>
>>> I don't have a strong opinion here. I don't have much experience with
>>> DT, especially with making bindings compatible with other ones.
>>>
>>> I'd just forget the simple-panel, and have single gpio array.
>>
>> Well if it's a don't care flag for both of us, let's try to use
>> the existing standard for simple-panel.txt and add mode-gpios
>> property. I'll post a patch for that.
>
> Here's an updated version using enable-gpios, reset-gpios and
> mode-gpios. So it follows simple-panel.txt and adds mode-gpios
> that's currently specific to this panel only.
>
> Also updated for -EPROBE_DEFER handling, tested that by changing
> one of the GPIOs to be a twl4030 GPIO.
To speed things up a bit, I made the changes I suggested. Compile tested
only.
From f8360778e8bc96096cbb1793a18a8c240376ca09 Mon Sep 17 00:00:00 2001
From: Tony Lindgren <tony@atomide.com>
Date: Mon, 28 Apr 2014 20:22:21 -0700
Subject: [PATCH] OMAPDSS: panel-sharp-ls037v7dw01: add device tree support
Add device tree support for sharp-ls037v7dw01 panel.
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
.../bindings/video/sharp,ls037v7dw01.txt | 44 ++++++++++
.../omap2/displays-new/panel-sharp-ls037v7dw01.c | 95 +++++++++++++++++++++-
2 files changed, 136 insertions(+), 3 deletions(-)
create mode 100644 Documentation/devicetree/bindings/video/sharp,ls037v7dw01.txt
diff --git a/Documentation/devicetree/bindings/video/sharp,ls037v7dw01.txt b/Documentation/devicetree/bindings/video/sharp,ls037v7dw01.txt
new file mode 100644
index 000000000000..2a60fd9a2607
--- /dev/null
+++ b/Documentation/devicetree/bindings/video/sharp,ls037v7dw01.txt
@@ -0,0 +1,44 @@
+SHARP LS037V7DW01 TFT-LCD panel
+===================================
+
+Required properties:
+- compatible: "sharp,ls037v7dw01"
+
+Optional properties:
+- label: a symbolic name for the panel
+- enable-gpios: a GPIO spec for the optional enable pin
+ this pin is the INI pin as specified in the LS037V7DW01.pdf file.
+- reset-gpios: a GPIO spec for the optional reset pin
+ this pin is the RESB pin as specified in the LS037V7DW01.pdf file.
+- mode-gpios: a GPIO
+ ordered MO, LR, and UD as specified in the LS037V7DW01.pdf file.
+
+Required nodes:
+- Video port for DPI input
+
+This panel can have zero to five GPIOs to configure
+to change configuration between QVGA and VGA mode
+and the scan direction. As these pins can be also
+configured with external pulls, all the GPIOs are
+considered optional with holes in the array.
+
+Example
+-------
+
+Example when connected to a omap2+ based device:
+
+lcd0: display {
+ compatible = "sharp,ls037v7dw01";
+ power-supply = <&lcd_3v3>;
+ enable-gpios = <&gpio5 24 GPIO_ACTIVE_HIGH>; /* gpio152, lcd INI */
+ reset-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>; /* gpio155, lcd RESB */
+ mode-gpios = <&gpio5 26 GPIO_ACTIVE_HIGH /* gpio154, lcd MO */
+ &gpio1 2 GPIO_ACTIVE_HIGH /* gpio2, lcd LR */
+ &gpio1 3 GPIO_ACTIVE_HIGH>; /* gpio3, lcd UD */
+
+ port {
+ lcd_in: endpoint {
+ remote-endpoint = <&dpi_out>;
+ };
+ };
+};
diff --git a/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c b/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c
index 8adde628ad38..91eeb2ec93a8 100644
--- a/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c
+++ b/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c
@@ -12,15 +12,18 @@
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_gpio.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
-
+#include <linux/regulator/consumer.h>
#include <video/omapdss.h>
#include <video/omap-panel-data.h>
struct panel_drv_data {
struct omap_dss_device dssdev;
struct omap_dss_device *in;
+ struct regulator *vcc;
int data_lines;
@@ -95,12 +98,21 @@ static int sharp_ls_enable(struct omap_dss_device *dssdev)
if (omapdss_device_is_enabled(dssdev))
return 0;
- in->ops.dpi->set_data_lines(in, ddata->data_lines);
+ if (ddata->data_lines)
+ in->ops.dpi->set_data_lines(in, ddata->data_lines);
in->ops.dpi->set_timings(in, &ddata->videomode);
+ if (ddata->vcc) {
+ r = regulator_enable(ddata->vcc);
+ if (r != 0)
+ return r;
+ }
+
r = in->ops.dpi->enable(in);
- if (r)
+ if (r) {
+ regulator_disable(ddata->vcc);
return r;
+ }
/* wait couple of vsyncs until enabling the LCD */
msleep(50);
@@ -136,6 +148,9 @@ static void sharp_ls_disable(struct omap_dss_device *dssdev)
in->ops.dpi->disable(in);
+ if (ddata->vcc)
+ regulator_disable(ddata->vcc);
+
dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
}
@@ -243,6 +258,68 @@ static int sharp_ls_probe_pdata(struct platform_device *pdev)
return 0;
}
+static struct gpio_desc *
+sharp_ls_get_gpio_of(struct device *dev, int index, int val, char *desc)
+{
+ struct gpio_desc *gpio;
+
+ gpio = devm_gpiod_get_index(dev, desc, index);
+ if (IS_ERR(gpio))
+ return gpio;
+
+ gpiod_direction_output(gpio, val);
+
+ return gpio;
+}
+
+static int sharp_ls_probe_of(struct platform_device *pdev)
+{
+ struct panel_drv_data *ddata = platform_get_drvdata(pdev);
+ struct device_node *node = pdev->dev.of_node;
+ struct omap_dss_device *in;
+
+ ddata->vcc = devm_regulator_get(&pdev->dev, "envdd");
+ if (IS_ERR(ddata->vcc)) {
+ dev_err(&pdev->dev, "failed to get regulator\n");
+ return PTR_ERR(ddata->vcc);
+ }
+
+ /* lcd INI */
+ ddata->ini_gpio = sharp_ls_get_gpio_of(&pdev->dev, 3, 0, "enable");
+ if (PTR_ERR(ddata->ini_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ /* lcd RESB */
+ ddata->resb_gpio = sharp_ls_get_gpio_of(&pdev->dev, 0, 0, "reset");
+ if (PTR_ERR(ddata->resb_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ /* lcd MO */
+ ddata->mo_gpio = sharp_ls_get_gpio_of(&pdev->dev, 0, 0, "mode");
+ if (PTR_ERR(ddata->mo_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ /* lcd LR */
+ ddata->lr_gpio = sharp_ls_get_gpio_of(&pdev->dev, 1, 1, "mode");
+ if (PTR_ERR(ddata->lr_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ /* lcd UD */
+ ddata->ud_gpio = sharp_ls_get_gpio_of(&pdev->dev, 2, 1, "mode");
+ if (PTR_ERR(ddata->ud_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ in = omapdss_of_find_source_for_first_ep(node);
+ if (IS_ERR(in)) {
+ dev_err(&pdev->dev, "failed to find video source\n");
+ return PTR_ERR(in);
+ }
+
+ ddata->in = in;
+
+ return 0;
+}
+
static int sharp_ls_probe(struct platform_device *pdev)
{
struct panel_drv_data *ddata;
@@ -259,6 +336,10 @@ static int sharp_ls_probe(struct platform_device *pdev)
r = sharp_ls_probe_pdata(pdev);
if (r)
return r;
+ } else if (pdev->dev.of_node) {
+ r = sharp_ls_probe_of(pdev);
+ if (r)
+ return r;
} else {
return -ENODEV;
}
@@ -302,12 +383,20 @@ static int __exit sharp_ls_remove(struct platform_device *pdev)
return 0;
}
+static const struct of_device_id sharp_ls_of_match[] = {
+ { .compatible = "omapdss,sharp,ls037v7dw01", },
+ {},
+};
+
+MODULE_DEVICE_TABLE(of, sharp_ls_of_match);
+
static struct platform_driver sharp_ls_driver = {
.probe = sharp_ls_probe,
.remove = __exit_p(sharp_ls_remove),
.driver = {
.name = "panel-sharp-ls037v7dw01",
.owner = THIS_MODULE,
+ .of_match_table = sharp_ls_of_match,
},
};
--
1.9.1
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Tomi Valkeinen <tomi.valkeinen@ti.com>
To: Tony Lindgren <tony@atomide.com>
Cc: linux-arm-kernel@lists.infradead.org,
linux-fbdev@vger.kernel.org, devicetree@vger.kernel.org,
linux-omap@vger.kernel.org
Subject: Re: [PATCH 3/4] OMAPDSS: panel-sharp-ls037v7dw01: add device tree support
Date: Fri, 9 May 2014 11:31:10 +0300 [thread overview]
Message-ID: <536C924E.5000307@ti.com> (raw)
In-Reply-To: <20140508233300.GI2198@atomide.com>
[-- Attachment #1: Type: text/plain, Size: 7924 bytes --]
On 09/05/14 02:33, Tony Lindgren wrote:
> * Tony Lindgren <tony@atomide.com> [140507 11:00]:
>> * Tomi Valkeinen <tomi.valkeinen@ti.com> [140507 09:03]:
>>> On 07/05/14 18:03, Tony Lindgren wrote:
>>>>
>>>> BTW, I'm also personally fine with all five gpios showing in a single
>>>> gpios property, I'm not too exited about naming anything in DT..
>>>
>>> I don't have a strong opinion here. I don't have much experience with
>>> DT, especially with making bindings compatible with other ones.
>>>
>>> I'd just forget the simple-panel, and have single gpio array.
>>
>> Well if it's a don't care flag for both of us, let's try to use
>> the existing standard for simple-panel.txt and add mode-gpios
>> property. I'll post a patch for that.
>
> Here's an updated version using enable-gpios, reset-gpios and
> mode-gpios. So it follows simple-panel.txt and adds mode-gpios
> that's currently specific to this panel only.
>
> Also updated for -EPROBE_DEFER handling, tested that by changing
> one of the GPIOs to be a twl4030 GPIO.
To speed things up a bit, I made the changes I suggested. Compile tested
only.
From f8360778e8bc96096cbb1793a18a8c240376ca09 Mon Sep 17 00:00:00 2001
From: Tony Lindgren <tony@atomide.com>
Date: Mon, 28 Apr 2014 20:22:21 -0700
Subject: [PATCH] OMAPDSS: panel-sharp-ls037v7dw01: add device tree support
Add device tree support for sharp-ls037v7dw01 panel.
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
.../bindings/video/sharp,ls037v7dw01.txt | 44 ++++++++++
.../omap2/displays-new/panel-sharp-ls037v7dw01.c | 95 +++++++++++++++++++++-
2 files changed, 136 insertions(+), 3 deletions(-)
create mode 100644 Documentation/devicetree/bindings/video/sharp,ls037v7dw01.txt
diff --git a/Documentation/devicetree/bindings/video/sharp,ls037v7dw01.txt b/Documentation/devicetree/bindings/video/sharp,ls037v7dw01.txt
new file mode 100644
index 000000000000..2a60fd9a2607
--- /dev/null
+++ b/Documentation/devicetree/bindings/video/sharp,ls037v7dw01.txt
@@ -0,0 +1,44 @@
+SHARP LS037V7DW01 TFT-LCD panel
+===================================
+
+Required properties:
+- compatible: "sharp,ls037v7dw01"
+
+Optional properties:
+- label: a symbolic name for the panel
+- enable-gpios: a GPIO spec for the optional enable pin
+ this pin is the INI pin as specified in the LS037V7DW01.pdf file.
+- reset-gpios: a GPIO spec for the optional reset pin
+ this pin is the RESB pin as specified in the LS037V7DW01.pdf file.
+- mode-gpios: a GPIO
+ ordered MO, LR, and UD as specified in the LS037V7DW01.pdf file.
+
+Required nodes:
+- Video port for DPI input
+
+This panel can have zero to five GPIOs to configure
+to change configuration between QVGA and VGA mode
+and the scan direction. As these pins can be also
+configured with external pulls, all the GPIOs are
+considered optional with holes in the array.
+
+Example
+-------
+
+Example when connected to a omap2+ based device:
+
+lcd0: display {
+ compatible = "sharp,ls037v7dw01";
+ power-supply = <&lcd_3v3>;
+ enable-gpios = <&gpio5 24 GPIO_ACTIVE_HIGH>; /* gpio152, lcd INI */
+ reset-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>; /* gpio155, lcd RESB */
+ mode-gpios = <&gpio5 26 GPIO_ACTIVE_HIGH /* gpio154, lcd MO */
+ &gpio1 2 GPIO_ACTIVE_HIGH /* gpio2, lcd LR */
+ &gpio1 3 GPIO_ACTIVE_HIGH>; /* gpio3, lcd UD */
+
+ port {
+ lcd_in: endpoint {
+ remote-endpoint = <&dpi_out>;
+ };
+ };
+};
diff --git a/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c b/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c
index 8adde628ad38..91eeb2ec93a8 100644
--- a/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c
+++ b/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c
@@ -12,15 +12,18 @@
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_gpio.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
-
+#include <linux/regulator/consumer.h>
#include <video/omapdss.h>
#include <video/omap-panel-data.h>
struct panel_drv_data {
struct omap_dss_device dssdev;
struct omap_dss_device *in;
+ struct regulator *vcc;
int data_lines;
@@ -95,12 +98,21 @@ static int sharp_ls_enable(struct omap_dss_device *dssdev)
if (omapdss_device_is_enabled(dssdev))
return 0;
- in->ops.dpi->set_data_lines(in, ddata->data_lines);
+ if (ddata->data_lines)
+ in->ops.dpi->set_data_lines(in, ddata->data_lines);
in->ops.dpi->set_timings(in, &ddata->videomode);
+ if (ddata->vcc) {
+ r = regulator_enable(ddata->vcc);
+ if (r != 0)
+ return r;
+ }
+
r = in->ops.dpi->enable(in);
- if (r)
+ if (r) {
+ regulator_disable(ddata->vcc);
return r;
+ }
/* wait couple of vsyncs until enabling the LCD */
msleep(50);
@@ -136,6 +148,9 @@ static void sharp_ls_disable(struct omap_dss_device *dssdev)
in->ops.dpi->disable(in);
+ if (ddata->vcc)
+ regulator_disable(ddata->vcc);
+
dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
}
@@ -243,6 +258,68 @@ static int sharp_ls_probe_pdata(struct platform_device *pdev)
return 0;
}
+static struct gpio_desc *
+sharp_ls_get_gpio_of(struct device *dev, int index, int val, char *desc)
+{
+ struct gpio_desc *gpio;
+
+ gpio = devm_gpiod_get_index(dev, desc, index);
+ if (IS_ERR(gpio))
+ return gpio;
+
+ gpiod_direction_output(gpio, val);
+
+ return gpio;
+}
+
+static int sharp_ls_probe_of(struct platform_device *pdev)
+{
+ struct panel_drv_data *ddata = platform_get_drvdata(pdev);
+ struct device_node *node = pdev->dev.of_node;
+ struct omap_dss_device *in;
+
+ ddata->vcc = devm_regulator_get(&pdev->dev, "envdd");
+ if (IS_ERR(ddata->vcc)) {
+ dev_err(&pdev->dev, "failed to get regulator\n");
+ return PTR_ERR(ddata->vcc);
+ }
+
+ /* lcd INI */
+ ddata->ini_gpio = sharp_ls_get_gpio_of(&pdev->dev, 3, 0, "enable");
+ if (PTR_ERR(ddata->ini_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ /* lcd RESB */
+ ddata->resb_gpio = sharp_ls_get_gpio_of(&pdev->dev, 0, 0, "reset");
+ if (PTR_ERR(ddata->resb_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ /* lcd MO */
+ ddata->mo_gpio = sharp_ls_get_gpio_of(&pdev->dev, 0, 0, "mode");
+ if (PTR_ERR(ddata->mo_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ /* lcd LR */
+ ddata->lr_gpio = sharp_ls_get_gpio_of(&pdev->dev, 1, 1, "mode");
+ if (PTR_ERR(ddata->lr_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ /* lcd UD */
+ ddata->ud_gpio = sharp_ls_get_gpio_of(&pdev->dev, 2, 1, "mode");
+ if (PTR_ERR(ddata->ud_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ in = omapdss_of_find_source_for_first_ep(node);
+ if (IS_ERR(in)) {
+ dev_err(&pdev->dev, "failed to find video source\n");
+ return PTR_ERR(in);
+ }
+
+ ddata->in = in;
+
+ return 0;
+}
+
static int sharp_ls_probe(struct platform_device *pdev)
{
struct panel_drv_data *ddata;
@@ -259,6 +336,10 @@ static int sharp_ls_probe(struct platform_device *pdev)
r = sharp_ls_probe_pdata(pdev);
if (r)
return r;
+ } else if (pdev->dev.of_node) {
+ r = sharp_ls_probe_of(pdev);
+ if (r)
+ return r;
} else {
return -ENODEV;
}
@@ -302,12 +383,20 @@ static int __exit sharp_ls_remove(struct platform_device *pdev)
return 0;
}
+static const struct of_device_id sharp_ls_of_match[] = {
+ { .compatible = "omapdss,sharp,ls037v7dw01", },
+ {},
+};
+
+MODULE_DEVICE_TABLE(of, sharp_ls_of_match);
+
static struct platform_driver sharp_ls_driver = {
.probe = sharp_ls_probe,
.remove = __exit_p(sharp_ls_remove),
.driver = {
.name = "panel-sharp-ls037v7dw01",
.owner = THIS_MODULE,
+ .of_match_table = sharp_ls_of_match,
},
};
--
1.9.1
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: tomi.valkeinen@ti.com (Tomi Valkeinen)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/4] OMAPDSS: panel-sharp-ls037v7dw01: add device tree support
Date: Fri, 9 May 2014 11:31:10 +0300 [thread overview]
Message-ID: <536C924E.5000307@ti.com> (raw)
In-Reply-To: <20140508233300.GI2198@atomide.com>
On 09/05/14 02:33, Tony Lindgren wrote:
> * Tony Lindgren <tony@atomide.com> [140507 11:00]:
>> * Tomi Valkeinen <tomi.valkeinen@ti.com> [140507 09:03]:
>>> On 07/05/14 18:03, Tony Lindgren wrote:
>>>>
>>>> BTW, I'm also personally fine with all five gpios showing in a single
>>>> gpios property, I'm not too exited about naming anything in DT..
>>>
>>> I don't have a strong opinion here. I don't have much experience with
>>> DT, especially with making bindings compatible with other ones.
>>>
>>> I'd just forget the simple-panel, and have single gpio array.
>>
>> Well if it's a don't care flag for both of us, let's try to use
>> the existing standard for simple-panel.txt and add mode-gpios
>> property. I'll post a patch for that.
>
> Here's an updated version using enable-gpios, reset-gpios and
> mode-gpios. So it follows simple-panel.txt and adds mode-gpios
> that's currently specific to this panel only.
>
> Also updated for -EPROBE_DEFER handling, tested that by changing
> one of the GPIOs to be a twl4030 GPIO.
To speed things up a bit, I made the changes I suggested. Compile tested
only.
>From f8360778e8bc96096cbb1793a18a8c240376ca09 Mon Sep 17 00:00:00 2001
From: Tony Lindgren <tony@atomide.com>
Date: Mon, 28 Apr 2014 20:22:21 -0700
Subject: [PATCH] OMAPDSS: panel-sharp-ls037v7dw01: add device tree support
Add device tree support for sharp-ls037v7dw01 panel.
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
.../bindings/video/sharp,ls037v7dw01.txt | 44 ++++++++++
.../omap2/displays-new/panel-sharp-ls037v7dw01.c | 95 +++++++++++++++++++++-
2 files changed, 136 insertions(+), 3 deletions(-)
create mode 100644 Documentation/devicetree/bindings/video/sharp,ls037v7dw01.txt
diff --git a/Documentation/devicetree/bindings/video/sharp,ls037v7dw01.txt b/Documentation/devicetree/bindings/video/sharp,ls037v7dw01.txt
new file mode 100644
index 000000000000..2a60fd9a2607
--- /dev/null
+++ b/Documentation/devicetree/bindings/video/sharp,ls037v7dw01.txt
@@ -0,0 +1,44 @@
+SHARP LS037V7DW01 TFT-LCD panel
+===================================
+
+Required properties:
+- compatible: "sharp,ls037v7dw01"
+
+Optional properties:
+- label: a symbolic name for the panel
+- enable-gpios: a GPIO spec for the optional enable pin
+ this pin is the INI pin as specified in the LS037V7DW01.pdf file.
+- reset-gpios: a GPIO spec for the optional reset pin
+ this pin is the RESB pin as specified in the LS037V7DW01.pdf file.
+- mode-gpios: a GPIO
+ ordered MO, LR, and UD as specified in the LS037V7DW01.pdf file.
+
+Required nodes:
+- Video port for DPI input
+
+This panel can have zero to five GPIOs to configure
+to change configuration between QVGA and VGA mode
+and the scan direction. As these pins can be also
+configured with external pulls, all the GPIOs are
+considered optional with holes in the array.
+
+Example
+-------
+
+Example when connected to a omap2+ based device:
+
+lcd0: display {
+ compatible = "sharp,ls037v7dw01";
+ power-supply = <&lcd_3v3>;
+ enable-gpios = <&gpio5 24 GPIO_ACTIVE_HIGH>; /* gpio152, lcd INI */
+ reset-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>; /* gpio155, lcd RESB */
+ mode-gpios = <&gpio5 26 GPIO_ACTIVE_HIGH /* gpio154, lcd MO */
+ &gpio1 2 GPIO_ACTIVE_HIGH /* gpio2, lcd LR */
+ &gpio1 3 GPIO_ACTIVE_HIGH>; /* gpio3, lcd UD */
+
+ port {
+ lcd_in: endpoint {
+ remote-endpoint = <&dpi_out>;
+ };
+ };
+};
diff --git a/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c b/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c
index 8adde628ad38..91eeb2ec93a8 100644
--- a/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c
+++ b/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c
@@ -12,15 +12,18 @@
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_gpio.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
-
+#include <linux/regulator/consumer.h>
#include <video/omapdss.h>
#include <video/omap-panel-data.h>
struct panel_drv_data {
struct omap_dss_device dssdev;
struct omap_dss_device *in;
+ struct regulator *vcc;
int data_lines;
@@ -95,12 +98,21 @@ static int sharp_ls_enable(struct omap_dss_device *dssdev)
if (omapdss_device_is_enabled(dssdev))
return 0;
- in->ops.dpi->set_data_lines(in, ddata->data_lines);
+ if (ddata->data_lines)
+ in->ops.dpi->set_data_lines(in, ddata->data_lines);
in->ops.dpi->set_timings(in, &ddata->videomode);
+ if (ddata->vcc) {
+ r = regulator_enable(ddata->vcc);
+ if (r != 0)
+ return r;
+ }
+
r = in->ops.dpi->enable(in);
- if (r)
+ if (r) {
+ regulator_disable(ddata->vcc);
return r;
+ }
/* wait couple of vsyncs until enabling the LCD */
msleep(50);
@@ -136,6 +148,9 @@ static void sharp_ls_disable(struct omap_dss_device *dssdev)
in->ops.dpi->disable(in);
+ if (ddata->vcc)
+ regulator_disable(ddata->vcc);
+
dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
}
@@ -243,6 +258,68 @@ static int sharp_ls_probe_pdata(struct platform_device *pdev)
return 0;
}
+static struct gpio_desc *
+sharp_ls_get_gpio_of(struct device *dev, int index, int val, char *desc)
+{
+ struct gpio_desc *gpio;
+
+ gpio = devm_gpiod_get_index(dev, desc, index);
+ if (IS_ERR(gpio))
+ return gpio;
+
+ gpiod_direction_output(gpio, val);
+
+ return gpio;
+}
+
+static int sharp_ls_probe_of(struct platform_device *pdev)
+{
+ struct panel_drv_data *ddata = platform_get_drvdata(pdev);
+ struct device_node *node = pdev->dev.of_node;
+ struct omap_dss_device *in;
+
+ ddata->vcc = devm_regulator_get(&pdev->dev, "envdd");
+ if (IS_ERR(ddata->vcc)) {
+ dev_err(&pdev->dev, "failed to get regulator\n");
+ return PTR_ERR(ddata->vcc);
+ }
+
+ /* lcd INI */
+ ddata->ini_gpio = sharp_ls_get_gpio_of(&pdev->dev, 3, 0, "enable");
+ if (PTR_ERR(ddata->ini_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ /* lcd RESB */
+ ddata->resb_gpio = sharp_ls_get_gpio_of(&pdev->dev, 0, 0, "reset");
+ if (PTR_ERR(ddata->resb_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ /* lcd MO */
+ ddata->mo_gpio = sharp_ls_get_gpio_of(&pdev->dev, 0, 0, "mode");
+ if (PTR_ERR(ddata->mo_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ /* lcd LR */
+ ddata->lr_gpio = sharp_ls_get_gpio_of(&pdev->dev, 1, 1, "mode");
+ if (PTR_ERR(ddata->lr_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ /* lcd UD */
+ ddata->ud_gpio = sharp_ls_get_gpio_of(&pdev->dev, 2, 1, "mode");
+ if (PTR_ERR(ddata->ud_gpio) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
+ in = omapdss_of_find_source_for_first_ep(node);
+ if (IS_ERR(in)) {
+ dev_err(&pdev->dev, "failed to find video source\n");
+ return PTR_ERR(in);
+ }
+
+ ddata->in = in;
+
+ return 0;
+}
+
static int sharp_ls_probe(struct platform_device *pdev)
{
struct panel_drv_data *ddata;
@@ -259,6 +336,10 @@ static int sharp_ls_probe(struct platform_device *pdev)
r = sharp_ls_probe_pdata(pdev);
if (r)
return r;
+ } else if (pdev->dev.of_node) {
+ r = sharp_ls_probe_of(pdev);
+ if (r)
+ return r;
} else {
return -ENODEV;
}
@@ -302,12 +383,20 @@ static int __exit sharp_ls_remove(struct platform_device *pdev)
return 0;
}
+static const struct of_device_id sharp_ls_of_match[] = {
+ { .compatible = "omapdss,sharp,ls037v7dw01", },
+ {},
+};
+
+MODULE_DEVICE_TABLE(of, sharp_ls_of_match);
+
static struct platform_driver sharp_ls_driver = {
.probe = sharp_ls_probe,
.remove = __exit_p(sharp_ls_remove),
.driver = {
.name = "panel-sharp-ls037v7dw01",
.owner = THIS_MODULE,
+ .of_match_table = sharp_ls_of_match,
},
};
--
1.9.1
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140509/b5256261/attachment-0001.sig>
next prev parent reply other threads:[~2014-05-09 8:31 UTC|newest]
Thread overview: 267+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-29 23:52 [PATCH 0/4] OMAPDSS: Add support for panel ls037v7dw01 Tony Lindgren
2014-04-29 23:52 ` Tony Lindgren
2014-04-29 23:52 ` Tony Lindgren
2014-04-29 23:52 ` [PATCH 1/4] OMAPDSS: Fix DSS clock multiplier issue on 3703 and probably 3630 Tony Lindgren
2014-04-29 23:52 ` Tony Lindgren
2014-04-29 23:52 ` Tony Lindgren
2014-05-08 23:20 ` Tony Lindgren
2014-05-08 23:20 ` Tony Lindgren
2014-05-08 23:20 ` Tony Lindgren
2014-05-09 8:01 ` Tomi Valkeinen
2014-05-09 8:01 ` Tomi Valkeinen
2014-05-09 8:01 ` Tomi Valkeinen
2014-05-09 14:37 ` Tony Lindgren
2014-05-09 14:37 ` Tony Lindgren
2014-05-09 14:37 ` Tony Lindgren
2014-05-12 11:38 ` Tomi Valkeinen
2014-05-12 11:38 ` Tomi Valkeinen
2014-05-12 11:38 ` Tomi Valkeinen
2014-05-09 7:38 ` Tomi Valkeinen
2014-05-09 7:38 ` Tomi Valkeinen
2014-05-09 7:38 ` Tomi Valkeinen
2014-05-09 14:37 ` Tony Lindgren
2014-05-09 14:37 ` Tony Lindgren
2014-05-09 14:37 ` Tony Lindgren
2014-05-12 11:36 ` Tomi Valkeinen
2014-05-12 11:36 ` Tomi Valkeinen
2014-05-12 11:36 ` Tomi Valkeinen
2014-05-12 14:39 ` Tony Lindgren
2014-05-12 14:39 ` Tony Lindgren
2014-05-12 14:39 ` Tony Lindgren
2014-05-12 14:44 ` Tomi Valkeinen
2014-05-12 14:44 ` Tomi Valkeinen
2014-05-12 14:44 ` Tomi Valkeinen
2014-05-13 15:26 ` Tony Lindgren
2014-05-13 15:26 ` Tony Lindgren
2014-05-13 15:26 ` Tony Lindgren
2014-05-14 6:41 ` Tomi Valkeinen
2014-05-14 6:41 ` Tomi Valkeinen
2014-05-14 6:41 ` Tomi Valkeinen
2014-05-09 21:06 ` Andreas Müller
2014-05-09 21:06 ` Andreas Müller
2014-05-09 21:06 ` Andreas Müller
2014-05-11 14:42 ` Tony Lindgren
2014-05-11 14:42 ` Tony Lindgren
2014-05-11 14:42 ` Tony Lindgren
2014-05-12 8:20 ` Andreas Müller
2014-05-12 8:20 ` Andreas Müller
2014-05-12 8:20 ` Andreas Müller
2014-05-12 14:40 ` Tony Lindgren
2014-05-12 14:40 ` Tony Lindgren
2014-05-12 14:40 ` Tony Lindgren
2014-04-29 23:52 ` [PATCH 2/4] OMAPDSS: panel-sharp-ls037v7dw01: update to use gpiod Tony Lindgren
2014-04-29 23:52 ` Tony Lindgren
2014-04-29 23:52 ` Tony Lindgren
2014-05-07 8:15 ` Tomi Valkeinen
2014-05-07 8:15 ` Tomi Valkeinen
2014-05-07 8:15 ` Tomi Valkeinen
2014-05-08 23:25 ` Tony Lindgren
2014-05-08 23:25 ` Tony Lindgren
2014-05-08 23:25 ` Tony Lindgren
2014-04-29 23:52 ` [PATCH 3/4] OMAPDSS: panel-sharp-ls037v7dw01: add device tree support Tony Lindgren
2014-04-29 23:52 ` Tony Lindgren
2014-04-29 23:52 ` Tony Lindgren
2014-05-07 8:12 ` Tomi Valkeinen
2014-05-07 8:12 ` Tomi Valkeinen
2014-05-07 8:12 ` Tomi Valkeinen
2014-05-07 15:03 ` Tony Lindgren
2014-05-07 15:03 ` Tony Lindgren
2014-05-07 15:03 ` Tony Lindgren
2014-05-07 16:02 ` Tomi Valkeinen
2014-05-07 16:02 ` Tomi Valkeinen
2014-05-07 16:02 ` Tomi Valkeinen
2014-05-07 17:59 ` Tony Lindgren
2014-05-07 17:59 ` Tony Lindgren
2014-05-07 17:59 ` Tony Lindgren
2014-05-08 23:33 ` Tony Lindgren
2014-05-08 23:33 ` Tony Lindgren
2014-05-08 23:33 ` Tony Lindgren
2014-05-09 7:24 ` Tomi Valkeinen
2014-05-09 7:24 ` Tomi Valkeinen
2014-05-09 7:24 ` Tomi Valkeinen
2014-05-09 15:55 ` Tony Lindgren
2014-05-09 15:55 ` Tony Lindgren
2014-05-09 15:55 ` Tony Lindgren
2014-05-12 7:38 ` Tomi Valkeinen
2014-05-12 7:38 ` Tomi Valkeinen
2014-05-12 7:38 ` Tomi Valkeinen
2014-05-12 9:34 ` Javier Martinez Canillas
2014-05-12 9:34 ` Javier Martinez Canillas
2014-05-12 9:34 ` Javier Martinez Canillas
2014-05-12 9:40 ` Tomi Valkeinen
2014-05-12 9:40 ` Tomi Valkeinen
2014-05-12 9:40 ` Tomi Valkeinen
2014-05-12 10:00 ` Javier Martinez Canillas
2014-05-12 10:00 ` Javier Martinez Canillas
2014-05-12 10:00 ` Javier Martinez Canillas
2014-05-12 14:26 ` Tony Lindgren
2014-05-12 14:26 ` Tony Lindgren
2014-05-12 14:26 ` Tony Lindgren
2014-05-12 14:55 ` Tomi Valkeinen
2014-05-12 14:55 ` Tomi Valkeinen
2014-05-12 14:55 ` Tomi Valkeinen
2014-05-12 15:51 ` Tony Lindgren
2014-05-12 15:51 ` Tony Lindgren
2014-05-12 15:51 ` Tony Lindgren
2014-05-13 10:51 ` Tomi Valkeinen
2014-05-13 10:51 ` Tomi Valkeinen
2014-05-13 10:51 ` Tomi Valkeinen
2014-05-13 11:39 ` Javier Martinez Canillas
2014-05-13 11:39 ` Javier Martinez Canillas
2014-05-13 11:39 ` Javier Martinez Canillas
2014-05-13 15:25 ` Tony Lindgren
2014-05-13 15:25 ` Tony Lindgren
2014-05-13 15:25 ` Tony Lindgren
2014-05-14 6:19 ` Tomi Valkeinen
2014-05-14 6:19 ` Tomi Valkeinen
2014-05-14 6:19 ` Tomi Valkeinen
2014-05-14 16:02 ` Tony Lindgren
2014-05-14 16:02 ` Tony Lindgren
2014-05-14 16:02 ` Tony Lindgren
2014-05-15 9:23 ` Tomi Valkeinen
2014-05-15 9:23 ` Tomi Valkeinen
2014-05-15 9:23 ` Tomi Valkeinen
2014-05-15 18:21 ` Tony Lindgren
2014-05-15 18:21 ` Tony Lindgren
2014-05-15 18:21 ` Tony Lindgren
2014-05-16 5:56 ` Tomi Valkeinen
2014-05-16 5:56 ` Tomi Valkeinen
2014-05-16 5:56 ` Tomi Valkeinen
2014-05-16 16:07 ` Tony Lindgren
2014-05-16 16:07 ` Tony Lindgren
2014-05-16 16:07 ` Tony Lindgren
2014-05-16 17:41 ` Sebastian Reichel
2014-05-16 17:41 ` Sebastian Reichel
2014-05-16 17:41 ` Sebastian Reichel
2014-05-16 18:01 ` Tony Lindgren
2014-05-16 18:01 ` Tony Lindgren
2014-05-16 18:01 ` Tony Lindgren
2014-05-16 21:39 ` Tony Lindgren
2014-05-16 21:39 ` Tony Lindgren
2014-05-16 21:39 ` Tony Lindgren
2014-05-19 9:48 ` Tomi Valkeinen
2014-05-19 9:48 ` Tomi Valkeinen
2014-05-19 9:48 ` Tomi Valkeinen
2014-05-19 15:57 ` Tony Lindgren
2014-05-19 15:57 ` Tony Lindgren
2014-05-19 15:57 ` Tony Lindgren
2014-05-19 16:43 ` Arnd Bergmann
2014-05-19 16:43 ` Arnd Bergmann
2014-05-19 16:43 ` Arnd Bergmann
2014-05-19 18:57 ` Tomi Valkeinen
2014-05-19 18:57 ` Tomi Valkeinen
2014-05-19 18:57 ` Tomi Valkeinen
2014-05-19 19:51 ` Tony Lindgren
2014-05-19 19:51 ` Tony Lindgren
2014-05-19 19:51 ` Tony Lindgren
2014-05-21 13:05 ` Tomi Valkeinen
2014-05-21 13:05 ` Tomi Valkeinen
2014-05-21 13:05 ` Tomi Valkeinen
2014-05-21 14:24 ` Sebastian Reichel
2014-05-21 14:24 ` Sebastian Reichel
2014-05-21 14:24 ` Sebastian Reichel
2014-05-20 4:57 ` Sebastian Reichel
2014-05-20 4:57 ` Sebastian Reichel
2014-05-20 4:57 ` Sebastian Reichel
2014-05-20 5:21 ` Tomi Valkeinen
2014-05-20 5:21 ` Tomi Valkeinen
2014-05-20 5:21 ` Tomi Valkeinen
2014-05-19 9:21 ` Tomi Valkeinen
2014-05-19 9:21 ` Tomi Valkeinen
2014-05-19 9:21 ` Tomi Valkeinen
2014-05-19 16:04 ` Tony Lindgren
2014-05-19 16:04 ` Tony Lindgren
2014-05-19 16:04 ` Tony Lindgren
2014-05-19 19:05 ` Tomi Valkeinen
2014-05-19 19:05 ` Tomi Valkeinen
2014-05-19 19:05 ` Tomi Valkeinen
2014-05-20 5:12 ` Sebastian Reichel
2014-05-20 5:12 ` Sebastian Reichel
2014-05-20 5:12 ` Sebastian Reichel
2014-05-20 5:48 ` Tony Lindgren
2014-05-20 5:48 ` Tony Lindgren
2014-05-20 5:48 ` Tony Lindgren
2014-05-20 21:10 ` Sebastian Reichel
2014-05-20 21:10 ` Sebastian Reichel
2014-05-20 21:10 ` Sebastian Reichel
2014-05-09 8:31 ` Tomi Valkeinen [this message]
2014-05-09 8:31 ` Tomi Valkeinen
2014-05-09 8:31 ` Tomi Valkeinen
2014-05-09 15:30 ` Tony Lindgren
2014-05-09 15:30 ` Tony Lindgren
2014-05-09 15:30 ` Tony Lindgren
2014-05-13 21:26 ` Tony Lindgren
2014-05-13 21:26 ` Tony Lindgren
2014-05-13 21:26 ` Tony Lindgren
2014-05-15 8:41 ` Tomi Valkeinen
2014-05-15 8:41 ` Tomi Valkeinen
2014-05-15 8:41 ` Tomi Valkeinen
2014-05-15 18:25 ` Tony Lindgren
2014-05-15 18:25 ` Tony Lindgren
2014-05-15 18:25 ` Tony Lindgren
2014-05-16 5:50 ` Tomi Valkeinen
2014-05-16 5:50 ` Tomi Valkeinen
2014-05-16 5:50 ` Tomi Valkeinen
2014-05-16 15:59 ` Tony Lindgren
2014-05-16 15:59 ` Tony Lindgren
2014-05-16 15:59 ` Tony Lindgren
2014-05-15 13:07 ` Tomi Valkeinen
2014-05-15 13:07 ` Tomi Valkeinen
2014-05-15 13:07 ` Tomi Valkeinen
2014-05-15 18:27 ` Tony Lindgren
2014-05-15 18:27 ` Tony Lindgren
2014-05-15 18:27 ` Tony Lindgren
2014-04-29 23:52 ` [PATCH 4/4] ARM: dts: Add LCD panel sharp ls037v7dw01 support for omap3-evm and ldp Tony Lindgren
2014-04-29 23:52 ` Tony Lindgren
2014-04-29 23:52 ` Tony Lindgren
2014-04-30 1:07 ` Joachim Eastwood
2014-04-30 1:07 ` Joachim Eastwood
2014-04-30 1:07 ` Joachim Eastwood
2014-04-30 17:47 ` Tony Lindgren
2014-04-30 17:47 ` Tony Lindgren
2014-04-30 17:47 ` Tony Lindgren
2014-05-05 18:39 ` Tony Lindgren
2014-05-05 18:39 ` Tony Lindgren
2014-05-05 18:39 ` Tony Lindgren
2014-05-08 23:36 ` Tony Lindgren
2014-05-08 23:36 ` Tony Lindgren
2014-05-08 23:36 ` Tony Lindgren
2014-05-09 7:07 ` Tomi Valkeinen
2014-05-09 7:07 ` Tomi Valkeinen
2014-05-09 7:07 ` Tomi Valkeinen
2014-05-09 15:37 ` Tony Lindgren
2014-05-09 15:37 ` Tony Lindgren
2014-05-09 15:37 ` Tony Lindgren
2014-05-13 21:32 ` Tony Lindgren
2014-05-13 21:32 ` Tony Lindgren
2014-05-13 21:32 ` Tony Lindgren
2014-05-15 8:57 ` Tomi Valkeinen
2014-05-15 8:57 ` Tomi Valkeinen
2014-05-15 8:57 ` Tomi Valkeinen
2014-05-21 12:44 ` Tomi Valkeinen
2014-05-21 12:44 ` Tomi Valkeinen
2014-05-21 12:44 ` Tomi Valkeinen
2014-05-21 14:50 ` Tony Lindgren
2014-05-21 14:50 ` Tony Lindgren
2014-05-21 14:50 ` Tony Lindgren
2014-05-27 20:59 ` Tony Lindgren
2014-05-27 20:59 ` Tony Lindgren
2014-05-27 20:59 ` Tony Lindgren
2014-05-27 21:14 ` Tony Lindgren
2014-05-27 21:14 ` Tony Lindgren
2014-05-27 21:14 ` Tony Lindgren
2014-05-28 6:31 ` Tomi Valkeinen
2014-05-28 6:31 ` Tomi Valkeinen
2014-05-28 6:31 ` Tomi Valkeinen
2014-05-28 6:34 ` Tomi Valkeinen
2014-05-28 6:34 ` Tomi Valkeinen
2014-05-28 6:34 ` Tomi Valkeinen
2014-05-05 18:41 ` [PATCH 0/4] OMAPDSS: Add support for panel ls037v7dw01 Tony Lindgren
2014-05-05 18:41 ` Tony Lindgren
2014-05-05 18:41 ` Tony Lindgren
2014-05-09 9:34 ` Tomi Valkeinen
2014-05-09 9:34 ` Tomi Valkeinen
2014-05-09 9:34 ` Tomi Valkeinen
2014-05-09 15:55 ` Tony Lindgren
2014-05-09 15:55 ` Tony Lindgren
2014-05-09 15:55 ` Tony Lindgren
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=536C924E.5000307@ti.com \
--to=tomi.valkeinen@ti.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.