diff mbox

[1/3] drm/i915/bxt: add support for setting backlight freq from vbt

Message ID 1448958232-26520-1-git-send-email-jani.nikula@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jani Nikula Dec. 1, 2015, 8:23 a.m. UTC
The only missing piece is the function to convert frequency to PWM
register value. The PWM is based on 19.2 MHz clock, except for BXT A
step, which is based on CDCLK, and which we ignore.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_panel.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Imre Deak Dec. 1, 2015, 4:58 p.m. UTC | #1
On ti, 2015-12-01 at 10:23 +0200, Jani Nikula wrote:
> The only missing piece is the function to convert frequency to PWM
> register value. The PWM is based on 19.2 MHz clock, except for BXT A
> step, which is based on CDCLK, and which we ignore.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

On patch 1 and 2:
Reviewed-by: Imre Deak <imre.deak@intel.com>

For patch 3 we need an another reviewer.

I also tested all three patches and they fix the backlight on BXT,
before it was practically unusable: there was either no backlight at
all or the backlight was flashing rapidly depending on the current
backlight level.

> ---
>  drivers/gpu/drm/i915/intel_panel.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/intel_panel.c
> b/drivers/gpu/drm/i915/intel_panel.c
> index a24df35e11e7..2d1696386b0d 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -1264,6 +1264,14 @@ static void
> intel_backlight_device_unregister(struct intel_connector *connector)
>  #endif /* CONFIG_BACKLIGHT_CLASS_DEVICE */
>  
>  /*
> + * BXT: PWM clock frequency = 19.2 MHz.
> + */
> +static u32 bxt_hz_to_pwm(struct intel_connector *connector, u32
> pwm_freq_hz)
> +{
> +	return KHz(19200) / pwm_freq_hz;
> +}
> +
> +/*
>   * SPT: This value represents the period of the PWM stream in clock
> periods
>   * multiplied by 16 (default increment) or 128 (alternate increment
> selected in
>   * SCHICKEN_1 bit 0). PWM clock is 24 MHz.
> @@ -1750,6 +1758,7 @@ intel_panel_init_backlight_funcs(struct
> intel_panel *panel)
>  		panel->backlight.disable = bxt_disable_backlight;
>  		panel->backlight.set = bxt_set_backlight;
>  		panel->backlight.get = bxt_get_backlight;
> +		panel->backlight.hz_to_pwm = bxt_hz_to_pwm;
>  	} else if (HAS_PCH_LPT(dev) || HAS_PCH_SPT(dev)) {
>  		panel->backlight.setup = lpt_setup_backlight;
>  		panel->backlight.enable = lpt_enable_backlight;
Jani Nikula Dec. 2, 2015, 8:28 a.m. UTC | #2
On Tue, 01 Dec 2015, Imre Deak <imre.deak@intel.com> wrote:
> On ti, 2015-12-01 at 10:23 +0200, Jani Nikula wrote:
>> The only missing piece is the function to convert frequency to PWM
>> register value. The PWM is based on 19.2 MHz clock, except for BXT A
>> step, which is based on CDCLK, and which we ignore.
>> 
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> On patch 1 and 2:
> Reviewed-by: Imre Deak <imre.deak@intel.com>
>
> For patch 3 we need an another reviewer.
>
> I also tested all three patches and they fix the backlight on BXT,
> before it was practically unusable: there was either no backlight at
> all or the backlight was flashing rapidly depending on the current
> backlight level.

Pushed all three to drm-intel-next-queued, thanks for the reviews, and
patch 3.

BR,
Jani.



>
>> ---
>>  drivers/gpu/drm/i915/intel_panel.c | 9 +++++++++
>>  1 file changed, 9 insertions(+)
>> 
>> diff --git a/drivers/gpu/drm/i915/intel_panel.c
>> b/drivers/gpu/drm/i915/intel_panel.c
>> index a24df35e11e7..2d1696386b0d 100644
>> --- a/drivers/gpu/drm/i915/intel_panel.c
>> +++ b/drivers/gpu/drm/i915/intel_panel.c
>> @@ -1264,6 +1264,14 @@ static void
>> intel_backlight_device_unregister(struct intel_connector *connector)
>>  #endif /* CONFIG_BACKLIGHT_CLASS_DEVICE */
>>  
>>  /*
>> + * BXT: PWM clock frequency = 19.2 MHz.
>> + */
>> +static u32 bxt_hz_to_pwm(struct intel_connector *connector, u32
>> pwm_freq_hz)
>> +{
>> +	return KHz(19200) / pwm_freq_hz;
>> +}
>> +
>> +/*
>>   * SPT: This value represents the period of the PWM stream in clock
>> periods
>>   * multiplied by 16 (default increment) or 128 (alternate increment
>> selected in
>>   * SCHICKEN_1 bit 0). PWM clock is 24 MHz.
>> @@ -1750,6 +1758,7 @@ intel_panel_init_backlight_funcs(struct
>> intel_panel *panel)
>>  		panel->backlight.disable = bxt_disable_backlight;
>>  		panel->backlight.set = bxt_set_backlight;
>>  		panel->backlight.get = bxt_get_backlight;
>> +		panel->backlight.hz_to_pwm = bxt_hz_to_pwm;
>>  	} else if (HAS_PCH_LPT(dev) || HAS_PCH_SPT(dev)) {
>>  		panel->backlight.setup = lpt_setup_backlight;
>>  		panel->backlight.enable = lpt_enable_backlight;
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
index a24df35e11e7..2d1696386b0d 100644
--- a/drivers/gpu/drm/i915/intel_panel.c
+++ b/drivers/gpu/drm/i915/intel_panel.c
@@ -1264,6 +1264,14 @@  static void intel_backlight_device_unregister(struct intel_connector *connector)
 #endif /* CONFIG_BACKLIGHT_CLASS_DEVICE */
 
 /*
+ * BXT: PWM clock frequency = 19.2 MHz.
+ */
+static u32 bxt_hz_to_pwm(struct intel_connector *connector, u32 pwm_freq_hz)
+{
+	return KHz(19200) / pwm_freq_hz;
+}
+
+/*
  * SPT: This value represents the period of the PWM stream in clock periods
  * multiplied by 16 (default increment) or 128 (alternate increment selected in
  * SCHICKEN_1 bit 0). PWM clock is 24 MHz.
@@ -1750,6 +1758,7 @@  intel_panel_init_backlight_funcs(struct intel_panel *panel)
 		panel->backlight.disable = bxt_disable_backlight;
 		panel->backlight.set = bxt_set_backlight;
 		panel->backlight.get = bxt_get_backlight;
+		panel->backlight.hz_to_pwm = bxt_hz_to_pwm;
 	} else if (HAS_PCH_LPT(dev) || HAS_PCH_SPT(dev)) {
 		panel->backlight.setup = lpt_setup_backlight;
 		panel->backlight.enable = lpt_enable_backlight;