Commit 409c23ae authored by Jani Nikula's avatar Jani Nikula

drm/i915/quirks: convert struct drm_i915_private to struct intel_display

Use struct intel_display instead of struct drm_i915_private for
quirks. Also do drive-by conversions in call sites of intel_has_quirk().
Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/d90e9d8e91e59d04d38f2743c02c74a8f0e13133.1713358679.git.jani.nikula@intel.com
parent 6b5ee572
...@@ -83,16 +83,16 @@ static u32 scale_hw_to_user(struct intel_connector *connector, ...@@ -83,16 +83,16 @@ static u32 scale_hw_to_user(struct intel_connector *connector,
u32 intel_backlight_invert_pwm_level(struct intel_connector *connector, u32 val) u32 intel_backlight_invert_pwm_level(struct intel_connector *connector, u32 val)
{ {
struct drm_i915_private *i915 = to_i915(connector->base.dev); struct intel_display *display = to_intel_display(connector);
struct intel_panel *panel = &connector->panel; struct intel_panel *panel = &connector->panel;
drm_WARN_ON(&i915->drm, panel->backlight.pwm_level_max == 0); drm_WARN_ON(display->drm, panel->backlight.pwm_level_max == 0);
if (i915->display.params.invert_brightness < 0) if (display->params.invert_brightness < 0)
return val; return val;
if (i915->display.params.invert_brightness > 0 || if (display->params.invert_brightness > 0 ||
intel_has_quirk(i915, QUIRK_INVERT_BRIGHTNESS)) { intel_has_quirk(display, QUIRK_INVERT_BRIGHTNESS)) {
return panel->backlight.pwm_level_max - val + panel->backlight.pwm_level_min; return panel->backlight.pwm_level_max - val + panel->backlight.pwm_level_min;
} }
...@@ -126,15 +126,15 @@ u32 intel_backlight_level_to_pwm(struct intel_connector *connector, u32 val) ...@@ -126,15 +126,15 @@ u32 intel_backlight_level_to_pwm(struct intel_connector *connector, u32 val)
u32 intel_backlight_level_from_pwm(struct intel_connector *connector, u32 val) u32 intel_backlight_level_from_pwm(struct intel_connector *connector, u32 val)
{ {
struct drm_i915_private *i915 = to_i915(connector->base.dev); struct intel_display *display = to_intel_display(connector);
struct intel_panel *panel = &connector->panel; struct intel_panel *panel = &connector->panel;
drm_WARN_ON_ONCE(&i915->drm, drm_WARN_ON_ONCE(display->drm,
panel->backlight.max == 0 || panel->backlight.pwm_level_max == 0); panel->backlight.max == 0 || panel->backlight.pwm_level_max == 0);
if (i915->display.params.invert_brightness > 0 || if (display->params.invert_brightness > 0 ||
(i915->display.params.invert_brightness == 0 && (display->params.invert_brightness == 0 &&
intel_has_quirk(i915, QUIRK_INVERT_BRIGHTNESS))) intel_has_quirk(display, QUIRK_INVERT_BRIGHTNESS)))
val = panel->backlight.pwm_level_max - (val - panel->backlight.pwm_level_min); val = panel->backlight.pwm_level_max - (val - panel->backlight.pwm_level_min);
return scale(val, panel->backlight.pwm_level_min, panel->backlight.pwm_level_max, return scale(val, panel->backlight.pwm_level_min, panel->backlight.pwm_level_max,
...@@ -1642,17 +1642,17 @@ void intel_backlight_update(struct intel_atomic_state *state, ...@@ -1642,17 +1642,17 @@ void intel_backlight_update(struct intel_atomic_state *state,
int intel_backlight_setup(struct intel_connector *connector, enum pipe pipe) int intel_backlight_setup(struct intel_connector *connector, enum pipe pipe)
{ {
struct drm_i915_private *i915 = to_i915(connector->base.dev); struct intel_display *display = to_intel_display(connector);
struct intel_panel *panel = &connector->panel; struct intel_panel *panel = &connector->panel;
int ret; int ret;
if (!connector->panel.vbt.backlight.present) { if (!connector->panel.vbt.backlight.present) {
if (intel_has_quirk(i915, QUIRK_BACKLIGHT_PRESENT)) { if (intel_has_quirk(display, QUIRK_BACKLIGHT_PRESENT)) {
drm_dbg_kms(&i915->drm, drm_dbg_kms(display->drm,
"[CONNECTOR:%d:%s] no backlight present per VBT, but present per quirk\n", "[CONNECTOR:%d:%s] no backlight present per VBT, but present per quirk\n",
connector->base.base.id, connector->base.name); connector->base.base.id, connector->base.name);
} else { } else {
drm_dbg_kms(&i915->drm, drm_dbg_kms(display->drm,
"[CONNECTOR:%d:%s] no backlight present per VBT\n", "[CONNECTOR:%d:%s] no backlight present per VBT\n",
connector->base.base.id, connector->base.name); connector->base.base.id, connector->base.name);
return 0; return 0;
...@@ -1660,16 +1660,16 @@ int intel_backlight_setup(struct intel_connector *connector, enum pipe pipe) ...@@ -1660,16 +1660,16 @@ int intel_backlight_setup(struct intel_connector *connector, enum pipe pipe)
} }
/* ensure intel_panel has been initialized first */ /* ensure intel_panel has been initialized first */
if (drm_WARN_ON(&i915->drm, !panel->backlight.funcs)) if (drm_WARN_ON(display->drm, !panel->backlight.funcs))
return -ENODEV; return -ENODEV;
/* set level and max in panel struct */ /* set level and max in panel struct */
mutex_lock(&i915->display.backlight.lock); mutex_lock(&display->backlight.lock);
ret = panel->backlight.funcs->setup(connector, pipe); ret = panel->backlight.funcs->setup(connector, pipe);
mutex_unlock(&i915->display.backlight.lock); mutex_unlock(&display->backlight.lock);
if (ret) { if (ret) {
drm_dbg_kms(&i915->drm, drm_dbg_kms(display->drm,
"[CONNECTOR:%d:%s] failed to setup backlight\n", "[CONNECTOR:%d:%s] failed to setup backlight\n",
connector->base.base.id, connector->base.name); connector->base.base.id, connector->base.name);
return ret; return ret;
...@@ -1677,7 +1677,7 @@ int intel_backlight_setup(struct intel_connector *connector, enum pipe pipe) ...@@ -1677,7 +1677,7 @@ int intel_backlight_setup(struct intel_connector *connector, enum pipe pipe)
panel->backlight.present = true; panel->backlight.present = true;
drm_dbg_kms(&i915->drm, drm_dbg_kms(display->drm,
"[CONNECTOR:%d:%s] backlight initialized, %s, brightness %u/%u\n", "[CONNECTOR:%d:%s] backlight initialized, %s, brightness %u/%u\n",
connector->base.base.id, connector->base.name, connector->base.base.id, connector->base.name,
str_enabled_disabled(panel->backlight.enabled), str_enabled_disabled(panel->backlight.enabled),
...@@ -1821,7 +1821,7 @@ void intel_backlight_init_funcs(struct intel_panel *panel) ...@@ -1821,7 +1821,7 @@ void intel_backlight_init_funcs(struct intel_panel *panel)
if (intel_dp_aux_init_backlight_funcs(connector) == 0) if (intel_dp_aux_init_backlight_funcs(connector) == 0)
return; return;
if (!intel_has_quirk(i915, QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK)) if (!intel_has_quirk(&i915->display, QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK))
connector->panel.backlight.power = intel_pps_backlight_power; connector->panel.backlight.power = intel_pps_backlight_power;
} }
......
...@@ -631,6 +631,7 @@ intel_ddi_config_transcoder_func(struct intel_encoder *encoder, ...@@ -631,6 +631,7 @@ intel_ddi_config_transcoder_func(struct intel_encoder *encoder,
void intel_ddi_disable_transcoder_func(const struct intel_crtc_state *crtc_state) void intel_ddi_disable_transcoder_func(const struct intel_crtc_state *crtc_state)
{ {
struct intel_display *display = to_intel_display(crtc_state);
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
...@@ -661,10 +662,9 @@ void intel_ddi_disable_transcoder_func(const struct intel_crtc_state *crtc_state ...@@ -661,10 +662,9 @@ void intel_ddi_disable_transcoder_func(const struct intel_crtc_state *crtc_state
intel_de_write(dev_priv, TRANS_DDI_FUNC_CTL(cpu_transcoder), ctl); intel_de_write(dev_priv, TRANS_DDI_FUNC_CTL(cpu_transcoder), ctl);
if (intel_has_quirk(dev_priv, QUIRK_INCREASE_DDI_DISABLED_TIME) && if (intel_has_quirk(display, QUIRK_INCREASE_DDI_DISABLED_TIME) &&
intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) { intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) {
drm_dbg_kms(&dev_priv->drm, drm_dbg_kms(display->drm, "Quirk Increase DDI disabled time\n");
"Quirk Increase DDI disabled time\n");
/* Quirk time at 100ms for reliable operation */ /* Quirk time at 100ms for reliable operation */
msleep(100); msleep(100);
} }
......
...@@ -204,6 +204,7 @@ void intel_display_driver_early_probe(struct drm_i915_private *i915) ...@@ -204,6 +204,7 @@ void intel_display_driver_early_probe(struct drm_i915_private *i915)
/* part #1: call before irq install */ /* part #1: call before irq install */
int intel_display_driver_probe_noirq(struct drm_i915_private *i915) int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
{ {
struct intel_display *display = &i915->display;
int ret; int ret;
if (i915_inject_probe_failure(i915)) if (i915_inject_probe_failure(i915))
...@@ -262,7 +263,7 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915) ...@@ -262,7 +263,7 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
if (ret) if (ret)
goto cleanup_vga_client_pw_domain_dmc; goto cleanup_vga_client_pw_domain_dmc;
intel_init_quirks(i915); intel_init_quirks(display);
intel_fbc_init(i915); intel_fbc_init(i915);
......
...@@ -47,10 +47,12 @@ ...@@ -47,10 +47,12 @@
bool intel_panel_use_ssc(struct drm_i915_private *i915) bool intel_panel_use_ssc(struct drm_i915_private *i915)
{ {
if (i915->display.params.panel_use_ssc >= 0) struct intel_display *display = &i915->display;
return i915->display.params.panel_use_ssc != 0;
return i915->display.vbt.lvds_use_ssc && if (display->params.panel_use_ssc >= 0)
!intel_has_quirk(i915, QUIRK_LVDS_SSC_DISABLE); return display->params.panel_use_ssc != 0;
return display->vbt.lvds_use_ssc &&
!intel_has_quirk(display, QUIRK_LVDS_SSC_DISABLE);
} }
const struct drm_display_mode * const struct drm_display_mode *
......
...@@ -1350,7 +1350,7 @@ static void pps_init_delays_bios(struct intel_dp *intel_dp, ...@@ -1350,7 +1350,7 @@ static void pps_init_delays_bios(struct intel_dp *intel_dp,
static void pps_init_delays_vbt(struct intel_dp *intel_dp, static void pps_init_delays_vbt(struct intel_dp *intel_dp,
struct edp_power_seq *vbt) struct edp_power_seq *vbt)
{ {
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); struct intel_display *display = to_intel_display(intel_dp);
struct intel_connector *connector = intel_dp->attached_connector; struct intel_connector *connector = intel_dp->attached_connector;
*vbt = connector->panel.vbt.edp.pps; *vbt = connector->panel.vbt.edp.pps;
...@@ -1363,9 +1363,9 @@ static void pps_init_delays_vbt(struct intel_dp *intel_dp, ...@@ -1363,9 +1363,9 @@ static void pps_init_delays_vbt(struct intel_dp *intel_dp,
* just fails to power back on. Increasing the delay to 800ms * just fails to power back on. Increasing the delay to 800ms
* seems sufficient to avoid this problem. * seems sufficient to avoid this problem.
*/ */
if (intel_has_quirk(dev_priv, QUIRK_INCREASE_T12_DELAY)) { if (intel_has_quirk(display, QUIRK_INCREASE_T12_DELAY)) {
vbt->t11_t12 = max_t(u16, vbt->t11_t12, 1300 * 10); vbt->t11_t12 = max_t(u16, vbt->t11_t12, 1300 * 10);
drm_dbg_kms(&dev_priv->drm, drm_dbg_kms(display->drm,
"Increasing T12 panel delay as per the quirk to %d\n", "Increasing T12 panel delay as per the quirk to %d\n",
vbt->t11_t12); vbt->t11_t12);
} }
......
...@@ -9,72 +9,72 @@ ...@@ -9,72 +9,72 @@
#include "intel_display_types.h" #include "intel_display_types.h"
#include "intel_quirks.h" #include "intel_quirks.h"
static void intel_set_quirk(struct drm_i915_private *i915, enum intel_quirk_id quirk) static void intel_set_quirk(struct intel_display *display, enum intel_quirk_id quirk)
{ {
i915->display.quirks.mask |= BIT(quirk); display->quirks.mask |= BIT(quirk);
} }
/* /*
* Some machines (Lenovo U160) do not work with SSC on LVDS for some reason * Some machines (Lenovo U160) do not work with SSC on LVDS for some reason
*/ */
static void quirk_ssc_force_disable(struct drm_i915_private *i915) static void quirk_ssc_force_disable(struct intel_display *display)
{ {
intel_set_quirk(i915, QUIRK_LVDS_SSC_DISABLE); intel_set_quirk(display, QUIRK_LVDS_SSC_DISABLE);
drm_info(&i915->drm, "applying lvds SSC disable quirk\n"); drm_info(display->drm, "applying lvds SSC disable quirk\n");
} }
/* /*
* A machine (e.g. Acer Aspire 5734Z) may need to invert the panel backlight * A machine (e.g. Acer Aspire 5734Z) may need to invert the panel backlight
* brightness value * brightness value
*/ */
static void quirk_invert_brightness(struct drm_i915_private *i915) static void quirk_invert_brightness(struct intel_display *display)
{ {
intel_set_quirk(i915, QUIRK_INVERT_BRIGHTNESS); intel_set_quirk(display, QUIRK_INVERT_BRIGHTNESS);
drm_info(&i915->drm, "applying inverted panel brightness quirk\n"); drm_info(display->drm, "applying inverted panel brightness quirk\n");
} }
/* Some VBT's incorrectly indicate no backlight is present */ /* Some VBT's incorrectly indicate no backlight is present */
static void quirk_backlight_present(struct drm_i915_private *i915) static void quirk_backlight_present(struct intel_display *display)
{ {
intel_set_quirk(i915, QUIRK_BACKLIGHT_PRESENT); intel_set_quirk(display, QUIRK_BACKLIGHT_PRESENT);
drm_info(&i915->drm, "applying backlight present quirk\n"); drm_info(display->drm, "applying backlight present quirk\n");
} }
/* Toshiba Satellite P50-C-18C requires T12 delay to be min 800ms /* Toshiba Satellite P50-C-18C requires T12 delay to be min 800ms
* which is 300 ms greater than eDP spec T12 min. * which is 300 ms greater than eDP spec T12 min.
*/ */
static void quirk_increase_t12_delay(struct drm_i915_private *i915) static void quirk_increase_t12_delay(struct intel_display *display)
{ {
intel_set_quirk(i915, QUIRK_INCREASE_T12_DELAY); intel_set_quirk(display, QUIRK_INCREASE_T12_DELAY);
drm_info(&i915->drm, "Applying T12 delay quirk\n"); drm_info(display->drm, "Applying T12 delay quirk\n");
} }
/* /*
* GeminiLake NUC HDMI outputs require additional off time * GeminiLake NUC HDMI outputs require additional off time
* this allows the onboard retimer to correctly sync to signal * this allows the onboard retimer to correctly sync to signal
*/ */
static void quirk_increase_ddi_disabled_time(struct drm_i915_private *i915) static void quirk_increase_ddi_disabled_time(struct intel_display *display)
{ {
intel_set_quirk(i915, QUIRK_INCREASE_DDI_DISABLED_TIME); intel_set_quirk(display, QUIRK_INCREASE_DDI_DISABLED_TIME);
drm_info(&i915->drm, "Applying Increase DDI Disabled quirk\n"); drm_info(display->drm, "Applying Increase DDI Disabled quirk\n");
} }
static void quirk_no_pps_backlight_power_hook(struct drm_i915_private *i915) static void quirk_no_pps_backlight_power_hook(struct intel_display *display)
{ {
intel_set_quirk(i915, QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK); intel_set_quirk(display, QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK);
drm_info(&i915->drm, "Applying no pps backlight power quirk\n"); drm_info(display->drm, "Applying no pps backlight power quirk\n");
} }
struct intel_quirk { struct intel_quirk {
int device; int device;
int subsystem_vendor; int subsystem_vendor;
int subsystem_device; int subsystem_device;
void (*hook)(struct drm_i915_private *i915); void (*hook)(struct intel_display *display);
}; };
/* For systems that don't have a meaningful PCI subdevice/subvendor ID */ /* For systems that don't have a meaningful PCI subdevice/subvendor ID */
struct intel_dmi_quirk { struct intel_dmi_quirk {
void (*hook)(struct drm_i915_private *i915); void (*hook)(struct intel_display *display);
const struct dmi_system_id (*dmi_id_list)[]; const struct dmi_system_id (*dmi_id_list)[];
}; };
...@@ -203,9 +203,9 @@ static struct intel_quirk intel_quirks[] = { ...@@ -203,9 +203,9 @@ static struct intel_quirk intel_quirks[] = {
{ 0x0f31, 0x103c, 0x220f, quirk_invert_brightness }, { 0x0f31, 0x103c, 0x220f, quirk_invert_brightness },
}; };
void intel_init_quirks(struct drm_i915_private *i915) void intel_init_quirks(struct intel_display *display)
{ {
struct pci_dev *d = to_pci_dev(i915->drm.dev); struct pci_dev *d = to_pci_dev(display->drm->dev);
int i; int i;
for (i = 0; i < ARRAY_SIZE(intel_quirks); i++) { for (i = 0; i < ARRAY_SIZE(intel_quirks); i++) {
...@@ -216,15 +216,15 @@ void intel_init_quirks(struct drm_i915_private *i915) ...@@ -216,15 +216,15 @@ void intel_init_quirks(struct drm_i915_private *i915)
q->subsystem_vendor == PCI_ANY_ID) && q->subsystem_vendor == PCI_ANY_ID) &&
(d->subsystem_device == q->subsystem_device || (d->subsystem_device == q->subsystem_device ||
q->subsystem_device == PCI_ANY_ID)) q->subsystem_device == PCI_ANY_ID))
q->hook(i915); q->hook(display);
} }
for (i = 0; i < ARRAY_SIZE(intel_dmi_quirks); i++) { for (i = 0; i < ARRAY_SIZE(intel_dmi_quirks); i++) {
if (dmi_check_system(*intel_dmi_quirks[i].dmi_id_list) != 0) if (dmi_check_system(*intel_dmi_quirks[i].dmi_id_list) != 0)
intel_dmi_quirks[i].hook(i915); intel_dmi_quirks[i].hook(display);
} }
} }
bool intel_has_quirk(struct drm_i915_private *i915, enum intel_quirk_id quirk) bool intel_has_quirk(struct intel_display *display, enum intel_quirk_id quirk)
{ {
return i915->display.quirks.mask & BIT(quirk); return display->quirks.mask & BIT(quirk);
} }
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include <linux/types.h> #include <linux/types.h>
struct drm_i915_private; struct intel_display;
enum intel_quirk_id { enum intel_quirk_id {
QUIRK_BACKLIGHT_PRESENT, QUIRK_BACKLIGHT_PRESENT,
...@@ -19,7 +19,7 @@ enum intel_quirk_id { ...@@ -19,7 +19,7 @@ enum intel_quirk_id {
QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK, QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK,
}; };
void intel_init_quirks(struct drm_i915_private *i915); void intel_init_quirks(struct intel_display *display);
bool intel_has_quirk(struct drm_i915_private *i915, enum intel_quirk_id quirk); bool intel_has_quirk(struct intel_display *display, enum intel_quirk_id quirk);
#endif /* __INTEL_QUIRKS_H__ */ #endif /* __INTEL_QUIRKS_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment