diff mbox

drm/i915/intel_dsi: Add acpi_gpio_mapping for the panel-enable GPIO

Message ID 20180629113258.16188-1-hdegoede@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Hans de Goede June 29, 2018, 11:32 a.m. UTC
Add acpi_gpio_mapping for the panel-enable GPIO, this fixes the following
error: "Failed to own gpio for panel control" on BYT/CHT devices where
pwm_blc == PPS_BLC_PMIC.

Note this patch is untested as I don't have hardware to test this,
but it should fix things.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/gpu/drm/i915/intel_dsi.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Andy Shevchenko June 29, 2018, 4:12 p.m. UTC | #1
On Fri, 2018-06-29 at 14:51 +0300, Ville Syrjälä wrote:
> On Fri, Jun 29, 2018 at 01:32:58PM +0200, Hans de Goede wrote:

I saw that the change was discarded but I would comment about the GPIO
ACPI mapping tables.

> > +		devm_acpi_dev_add_driver_gpios(dev->dev,
> > panel_gpios);
> 
> Some explanation on what this actually does would be nice. There is no
> documentation that I can see so it's totally unclear why this is
> needed.

Documentation is here Documentation/acpi/gpio-properties.txt.

The key phrase is
"...the driver is supposed to know what to use the GpioIo()/GpioInt()
resources for once it has identified the device.  Having done that, it
can simply assign names to the GPIO lines it is going to use and provide
the GPIO subsystem with a mapping between those names and the ACPI GPIO
resources corresponding to them.

To do that, the driver needs to define a mapping table..."
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
index 3b7acb5a70b3..b2b75ed3cbf9 100644
--- a/drivers/gpu/drm/i915/intel_dsi.c
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -29,6 +29,7 @@ 
 #include <drm/drm_edid.h>
 #include <drm/i915_drm.h>
 #include <drm/drm_mipi_dsi.h>
+#include <linux/acpi.h>
 #include <linux/slab.h>
 #include <linux/gpio/consumer.h>
 #include "i915_drv.h"
@@ -1713,6 +1714,13 @@  static void intel_dsi_add_properties(struct intel_connector *connector)
 	}
 }
 
+static const struct acpi_gpio_params panel_gpio = { 0, 0, false };
+
+static const struct acpi_gpio_mapping panel_gpios[] = {
+	{ "panel", &panel_gpio, 1 },
+	{ },
+};
+
 void intel_dsi_init(struct drm_i915_private *dev_priv)
 {
 	struct drm_device *dev = &dev_priv->drm;
@@ -1811,6 +1819,7 @@  void intel_dsi_init(struct drm_i915_private *dev_priv)
 	 */
 	if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
 	    (dev_priv->vbt.dsi.config->pwm_blc == PPS_BLC_PMIC)) {
+		devm_acpi_dev_add_driver_gpios(dev->dev, panel_gpios);
 		intel_dsi->gpio_panel =
 			gpiod_get(dev->dev, "panel", GPIOD_OUT_HIGH);