Message ID | 20181213112136.7790-3-hdegoede@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3,1/3] ACPI / PMIC: Add support for executing PMIC MIPI sequence elements | expand |
On Thu, 13 Dec 2018, Hans de Goede <hdegoede@redhat.com> wrote: > Add support for PMIC MIPI sequences using the new > intel_soc_pmic_exec_mipi_pmic_seq_element function. > > This fixes the DSI LCD panel not lighting up when not initialized by the > GOP (because an external monitor was connected) on GPD win and GPD pocket > devices. > > Specifically the LCD panel seems to need GPIO pin 9 on the PMIC to be > driven high, which is done through a PMIC MIPI sequence. Before this commit > if the sequence was not executed by the GOP the pin would stay low causing > the LCD panel to not work. Having the MIPI sequences properly control this > GPIO should also help save some power when the panel is off. > > Signed-off-by: Hans de Goede <hdegoede@redhat.com> > --- > drivers/gpu/drm/i915/intel_dsi_vbt.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c > index f27af47c6e49..6a2ed1ca72e0 100644 > --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c > +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c > @@ -29,6 +29,7 @@ > #include <drm/drm_edid.h> > #include <drm/i915_drm.h> > #include <linux/gpio/consumer.h> > +#include <linux/mfd/intel_soc_pmic.h> > #include <linux/slab.h> > #include <video/mipi_display.h> > #include <asm/intel-mid.h> > @@ -371,7 +372,11 @@ static const u8 *mipi_exec_spi(struct intel_dsi *intel_dsi, const u8 *data) > > static const u8 *mipi_exec_pmic(struct intel_dsi *intel_dsi, const u8 *data) > { > +#ifdef CONFIG_PMIC_OPREGION > + intel_soc_pmic_exec_mipi_pmic_seq_element(data); > +#else > DRM_DEBUG_KMS("Skipping PMIC element execution\n"); > +#endif Please check the return value, and log with DRM_DEBUG_KMS or DRM_ERROR. With the dummy implementation of intel_soc_pmic_exec_mipi_pmic_seq_element() returning e.g. -ENODEV this would also cover the CONFIG_PMIC_OPREGION=n case. BR, Jani. > > return data + 15; > }
diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c index f27af47c6e49..6a2ed1ca72e0 100644 --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c @@ -29,6 +29,7 @@ #include <drm/drm_edid.h> #include <drm/i915_drm.h> #include <linux/gpio/consumer.h> +#include <linux/mfd/intel_soc_pmic.h> #include <linux/slab.h> #include <video/mipi_display.h> #include <asm/intel-mid.h> @@ -371,7 +372,11 @@ static const u8 *mipi_exec_spi(struct intel_dsi *intel_dsi, const u8 *data) static const u8 *mipi_exec_pmic(struct intel_dsi *intel_dsi, const u8 *data) { +#ifdef CONFIG_PMIC_OPREGION + intel_soc_pmic_exec_mipi_pmic_seq_element(data); +#else DRM_DEBUG_KMS("Skipping PMIC element execution\n"); +#endif return data + 15; }
Add support for PMIC MIPI sequences using the new intel_soc_pmic_exec_mipi_pmic_seq_element function. This fixes the DSI LCD panel not lighting up when not initialized by the GOP (because an external monitor was connected) on GPD win and GPD pocket devices. Specifically the LCD panel seems to need GPIO pin 9 on the PMIC to be driven high, which is done through a PMIC MIPI sequence. Before this commit if the sequence was not executed by the GOP the pin would stay low causing the LCD panel to not work. Having the MIPI sequences properly control this GPIO should also help save some power when the panel is off. Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- drivers/gpu/drm/i915/intel_dsi_vbt.c | 5 +++++ 1 file changed, 5 insertions(+)