On 03/13/2015 10:50 PM, Daniel Vetter wrote: > On Fri, Mar 13, 2015 at 04:30:43PM +0200, Ville Syrjälä wrote: >> On Thu, Mar 12, 2015 at 10:01:33PM +0530, Shobhit Kumar wrote: >>> CC: Samuel Ortiz <sameo@xxxxxxxxxxxxxxx> >>> Cc: Linus Walleij <linus.walleij@xxxxxxxxxx> >>> Cc: Alexandre Courbot <gnurou@xxxxxxxxx> >>> Cc: Thierry Reding <thierry.reding@xxxxxxxxx> >>> Signed-off-by: Shobhit Kumar <shobhit.kumar@xxxxxxxxx> >>> --- >>> drivers/gpu/drm/i915/intel_dsi.c | 25 +++++++++++++++++++++++++ >>> drivers/gpu/drm/i915/intel_dsi.h | 3 +++ >>> 2 files changed, 28 insertions(+) >>> >>> diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c >>> index 219421c..511446f 100644 >>> --- a/drivers/gpu/drm/i915/intel_dsi.c >>> +++ b/drivers/gpu/drm/i915/intel_dsi.c >>> @@ -32,6 +32,7 @@ >>> #include <drm/drm_mipi_dsi.h> >>> #include <linux/slab.h> >>> #include <linux/gpio/consumer.h> >>> +#include <linux/pwm.h> >>> #include "i915_drv.h" >>> #include "intel_drv.h" >>> #include "intel_dsi.h" >>> @@ -402,6 +403,10 @@ static void intel_dsi_enable(struct intel_encoder *encoder) >>> >>> intel_dsi_port_enable(encoder); >>> } >>> + >>> + /* Enable the backlight with default PWM as programmed by BIOS */ >>> + pwm_enable(intel_dsi->pwm); >>> + pwm_config_alternate(intel_dsi->pwm, 0x7F, 100); >> >> I suppose we migth want to wrap these in 'if (intel_dsi->pwm)' checks, >> or does the pwm subsystem take care of NULL checks for us? >> >>> } >>> >>> static void intel_dsi_pre_enable(struct intel_encoder *encoder) >>> @@ -467,6 +472,11 @@ static void intel_dsi_pre_disable(struct intel_encoder *encoder) >>> >>> DRM_DEBUG_KMS("\n"); >>> >>> + /* Disable the backlight */ >>> + pwm_config_alternate(intel_dsi->pwm, 0x7F, 0); >>> + usleep_range(2000, 3000); >>> + pwm_disable(intel_dsi->pwm); >> >> ditto >> >>> + >>> if (is_vid_mode(intel_dsi)) { >>> /* Send Shutdown command to the panel in LP mode */ >>> for_each_dsi_port(port, intel_dsi->ports) >>> @@ -971,6 +981,10 @@ static void intel_dsi_encoder_destroy(struct drm_encoder *encoder) >>> if (intel_dsi->gpio_panel) >>> gpiod_put(intel_dsi->gpio_panel); >>> >>> + /* dispose of the pwm */ >>> + if (intel_dsi->pwm) >>> + pwm_put(intel_dsi->pwm); >>> + >>> intel_encoder_destroy(encoder); >>> } >>> >>> @@ -1098,6 +1112,17 @@ void intel_dsi_init(struct drm_device *dev) >>> DRM_ERROR("Failed to own gpio for panel control\n"); >>> intel_dsi->gpio_panel = NULL; >>> } >>> + >>> + /* Get the PWM chip for backlight control */ >>> + intel_dsi->pwm = pwm_get(dev->dev, "pwm_backlight"); >>> + if (IS_ERR(intel_dsi->pwm)) { >>> + DRM_ERROR("Faild to own the pwm chip\n"); >>> + intel_dsi->pwm = NULL; > > If the i915.ko driver loads before the mfd.ko driver we need to do a > deferred probe here I think. Just failing isn't robust. The PMIC MFD driver is a boolean if you remember our discussions earlier and hence I made the PWM driver also a bool config. Given that i915 is a .ko in default kernel config, perhaps it should not be that big an issue for now. But I will look into deferred probe as a fail safe. > > This also means that if people don't configure their kernel properly then > we'll fall over here, but meh. True. Regards Shobhit > -Daniel > >>> + } else if (pwm_config_alternate(intel_dsi->pwm, 0x7F, 100) < 0) { >>> + DRM_ERROR("Failed to configure the pwm chip\n"); >>> + pwm_put(intel_dsi->pwm); >>> + intel_dsi->pwm = NULL; >>> + } >>> } >>> >>> intel_encoder->type = INTEL_OUTPUT_DSI; >>> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h >>> index 8be75a7..d8ec9c1 100644 >>> --- a/drivers/gpu/drm/i915/intel_dsi.h >>> +++ b/drivers/gpu/drm/i915/intel_dsi.h >>> @@ -52,6 +52,9 @@ struct intel_dsi { >>> /* GPIO Desc for CRC based Panel control */ >>> struct gpio_desc *gpio_panel; >>> >>> + /* PWM chip */ >>> + struct pwm_device *pwm; >>> + >>> struct intel_connector *attached_connector; >>> >>> /* bit mask of ports being driven */ >>> -- >>> 2.1.0 >>> >>> _______________________________________________ >>> Intel-gfx mailing list >>> Intel-gfx@xxxxxxxxxxxxxxxxxxxxx >>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx >> >> -- >> Ville Syrjälä >> Intel OTC >> _______________________________________________ >> Intel-gfx mailing list >> Intel-gfx@xxxxxxxxxxxxxxxxxxxxx >> http://lists.freedesktop.org/mailman/listinfo/intel-gfx > _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx