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; > + } 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