These fields in VBT indicates the PWM source which
is used and also the controller number.

Signed-off-by: Deepak M <m.dee...@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h       |  2 ++
 drivers/gpu/drm/i915/intel_bios.c     | 12 ++++++++++++
 drivers/gpu/drm/i915/intel_drv.h      |  5 +++++
 drivers/gpu/drm/i915/intel_vbt_defs.h |  6 ++++++
 4 files changed, 25 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 050d860..30321e6 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1488,6 +1488,8 @@ struct intel_vbt_data {
                bool present;
                bool active_low_pwm;
                u8 min_brightness;      /* min_brightness/255 of max */
+               u8 pwm_pin;             /* Source of PWM */
+               u8 pwm_controller;      /* Controller used in particular PWM */
        } backlight;
 
        /* MIPI DSI */
diff --git a/drivers/gpu/drm/i915/intel_bios.c 
b/drivers/gpu/drm/i915/intel_bios.c
index 1af7074..1a5b124 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -284,6 +284,7 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv,
 {
        const struct bdb_lfp_backlight_data *backlight_data;
        const struct bdb_lfp_backlight_data_entry *entry;
+       const struct bdb_lfp_backlight_control_data *bl_ctrl_data;
 
        backlight_data = find_section(bdb, BDB_LVDS_BACKLIGHT);
        if (!backlight_data)
@@ -296,6 +297,7 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv,
        }
 
        entry = &backlight_data->data[panel_type];
+       bl_ctrl_data = &backlight_data->blc_ctl[panel_type];
 
        dev_priv->vbt.backlight.present = entry->type == BDB_BACKLIGHT_TYPE_PWM;
        if (!dev_priv->vbt.backlight.present) {
@@ -304,6 +306,16 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv,
                return;
        }
 
+       /*
+        * IF the VBT version is less than 191, set the
+        * pwm controller as PMIC by default.
+        */
+       dev_priv->vbt.backlight.pwm_pin = BLC_CONTROL_PIN_PMIC;
+       if (bdb->version >= 191) {
+               dev_priv->vbt.backlight.pwm_pin = bl_ctrl_data->pin;
+               dev_priv->vbt.backlight.pwm_controller = 
bl_ctrl_data->controller;
+       }
+
        dev_priv->vbt.backlight.pwm_freq_hz = entry->pwm_freq_hz;
        dev_priv->vbt.backlight.active_low_pwm = entry->active_low_pwm;
        dev_priv->vbt.backlight.min_brightness = entry->min_brightness;
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index c87b450..02a74b0 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -124,6 +124,11 @@
 #define INTEL_I2C_BUS_DVO 1
 #define INTEL_I2C_BUS_SDVO 2
 
+#define BLC_CONTROL_PIN_PMIC           0
+#define BLC_CONTROL_PIN_LPSS_PWM       1
+#define BLC_CONTROL_PIN_DDI            2
+#define BLC_CONTROL_PIN_PANEL_PWM      3
+
 /* these are outputs from the chip - integrated only
    external chips are via DVO or SDVO output */
 enum intel_output_type {
diff --git a/drivers/gpu/drm/i915/intel_vbt_defs.h 
b/drivers/gpu/drm/i915/intel_vbt_defs.h
index 749dcea..f6744dc 100644
--- a/drivers/gpu/drm/i915/intel_vbt_defs.h
+++ b/drivers/gpu/drm/i915/intel_vbt_defs.h
@@ -440,10 +440,16 @@ struct bdb_lfp_backlight_data_entry {
        u8 obsolete3;
 } __packed;
 
+struct bdb_lfp_backlight_control_data {
+       u8 pin:4;
+       u8 controller:4;
+} __packed;
+
 struct bdb_lfp_backlight_data {
        u8 entry_size;
        struct bdb_lfp_backlight_data_entry data[16];
        u8 level[16];
+       struct bdb_lfp_backlight_control_data blc_ctl[16];
 } __packed;
 
 struct aimdb_header {
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to