LCOV - code coverage report
Current view: top level - drivers/gpu/drm/i915/display - intel_quirks.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 37 0.0 %
Date: 2022-04-01 14:17:54 Functions: 0 7 0.0 %
Branches: 0 16 0.0 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: MIT
       2                 :            : /*
       3                 :            :  * Copyright © 2018 Intel Corporation
       4                 :            :  */
       5                 :            : 
       6                 :            : #include <linux/dmi.h>
       7                 :            : 
       8                 :            : #include "intel_display_types.h"
       9                 :            : #include "intel_quirks.h"
      10                 :            : 
      11                 :            : /*
      12                 :            :  * Some machines (Lenovo U160) do not work with SSC on LVDS for some reason
      13                 :            :  */
      14                 :          0 : static void quirk_ssc_force_disable(struct drm_i915_private *i915)
      15                 :            : {
      16                 :          0 :         i915->quirks |= QUIRK_LVDS_SSC_DISABLE;
      17                 :          0 :         DRM_INFO("applying lvds SSC disable quirk\n");
      18                 :          0 : }
      19                 :            : 
      20                 :            : /*
      21                 :            :  * A machine (e.g. Acer Aspire 5734Z) may need to invert the panel backlight
      22                 :            :  * brightness value
      23                 :            :  */
      24                 :          0 : static void quirk_invert_brightness(struct drm_i915_private *i915)
      25                 :            : {
      26                 :          0 :         i915->quirks |= QUIRK_INVERT_BRIGHTNESS;
      27                 :          0 :         DRM_INFO("applying inverted panel brightness quirk\n");
      28                 :          0 : }
      29                 :            : 
      30                 :            : /* Some VBT's incorrectly indicate no backlight is present */
      31                 :          0 : static void quirk_backlight_present(struct drm_i915_private *i915)
      32                 :            : {
      33                 :          0 :         i915->quirks |= QUIRK_BACKLIGHT_PRESENT;
      34                 :          0 :         DRM_INFO("applying backlight present quirk\n");
      35                 :          0 : }
      36                 :            : 
      37                 :            : /* Toshiba Satellite P50-C-18C requires T12 delay to be min 800ms
      38                 :            :  * which is 300 ms greater than eDP spec T12 min.
      39                 :            :  */
      40                 :          0 : static void quirk_increase_t12_delay(struct drm_i915_private *i915)
      41                 :            : {
      42                 :          0 :         i915->quirks |= QUIRK_INCREASE_T12_DELAY;
      43                 :          0 :         DRM_INFO("Applying T12 delay quirk\n");
      44                 :          0 : }
      45                 :            : 
      46                 :            : /*
      47                 :            :  * GeminiLake NUC HDMI outputs require additional off time
      48                 :            :  * this allows the onboard retimer to correctly sync to signal
      49                 :            :  */
      50                 :          0 : static void quirk_increase_ddi_disabled_time(struct drm_i915_private *i915)
      51                 :            : {
      52                 :          0 :         i915->quirks |= QUIRK_INCREASE_DDI_DISABLED_TIME;
      53                 :          0 :         DRM_INFO("Applying Increase DDI Disabled quirk\n");
      54                 :          0 : }
      55                 :            : 
      56                 :            : struct intel_quirk {
      57                 :            :         int device;
      58                 :            :         int subsystem_vendor;
      59                 :            :         int subsystem_device;
      60                 :            :         void (*hook)(struct drm_i915_private *i915);
      61                 :            : };
      62                 :            : 
      63                 :            : /* For systems that don't have a meaningful PCI subdevice/subvendor ID */
      64                 :            : struct intel_dmi_quirk {
      65                 :            :         void (*hook)(struct drm_i915_private *i915);
      66                 :            :         const struct dmi_system_id (*dmi_id_list)[];
      67                 :            : };
      68                 :            : 
      69                 :          0 : static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
      70                 :            : {
      71                 :          0 :         DRM_INFO("Backlight polarity reversed on %s\n", id->ident);
      72                 :          0 :         return 1;
      73                 :            : }
      74                 :            : 
      75                 :            : static const struct intel_dmi_quirk intel_dmi_quirks[] = {
      76                 :            :         {
      77                 :            :                 .dmi_id_list = &(const struct dmi_system_id[]) {
      78                 :            :                         {
      79                 :            :                                 .callback = intel_dmi_reverse_brightness,
      80                 :            :                                 .ident = "NCR Corporation",
      81                 :            :                                 .matches = {DMI_MATCH(DMI_SYS_VENDOR, "NCR Corporation"),
      82                 :            :                                             DMI_MATCH(DMI_PRODUCT_NAME, ""),
      83                 :            :                                 },
      84                 :            :                         },
      85                 :            :                         { }  /* terminating entry */
      86                 :            :                 },
      87                 :            :                 .hook = quirk_invert_brightness,
      88                 :            :         },
      89                 :            : };
      90                 :            : 
      91                 :            : static struct intel_quirk intel_quirks[] = {
      92                 :            :         /* Lenovo U160 cannot use SSC on LVDS */
      93                 :            :         { 0x0046, 0x17aa, 0x3920, quirk_ssc_force_disable },
      94                 :            : 
      95                 :            :         /* Sony Vaio Y cannot use SSC on LVDS */
      96                 :            :         { 0x0046, 0x104d, 0x9076, quirk_ssc_force_disable },
      97                 :            : 
      98                 :            :         /* Acer Aspire 5734Z must invert backlight brightness */
      99                 :            :         { 0x2a42, 0x1025, 0x0459, quirk_invert_brightness },
     100                 :            : 
     101                 :            :         /* Acer/eMachines G725 */
     102                 :            :         { 0x2a42, 0x1025, 0x0210, quirk_invert_brightness },
     103                 :            : 
     104                 :            :         /* Acer/eMachines e725 */
     105                 :            :         { 0x2a42, 0x1025, 0x0212, quirk_invert_brightness },
     106                 :            : 
     107                 :            :         /* Acer/Packard Bell NCL20 */
     108                 :            :         { 0x2a42, 0x1025, 0x034b, quirk_invert_brightness },
     109                 :            : 
     110                 :            :         /* Acer Aspire 4736Z */
     111                 :            :         { 0x2a42, 0x1025, 0x0260, quirk_invert_brightness },
     112                 :            : 
     113                 :            :         /* Acer Aspire 5336 */
     114                 :            :         { 0x2a42, 0x1025, 0x048a, quirk_invert_brightness },
     115                 :            : 
     116                 :            :         /* Acer C720 and C720P Chromebooks (Celeron 2955U) have backlights */
     117                 :            :         { 0x0a06, 0x1025, 0x0a11, quirk_backlight_present },
     118                 :            : 
     119                 :            :         /* Acer C720 Chromebook (Core i3 4005U) */
     120                 :            :         { 0x0a16, 0x1025, 0x0a11, quirk_backlight_present },
     121                 :            : 
     122                 :            :         /* Apple Macbook 2,1 (Core 2 T7400) */
     123                 :            :         { 0x27a2, 0x8086, 0x7270, quirk_backlight_present },
     124                 :            : 
     125                 :            :         /* Apple Macbook 4,1 */
     126                 :            :         { 0x2a02, 0x106b, 0x00a1, quirk_backlight_present },
     127                 :            : 
     128                 :            :         /* Toshiba CB35 Chromebook (Celeron 2955U) */
     129                 :            :         { 0x0a06, 0x1179, 0x0a88, quirk_backlight_present },
     130                 :            : 
     131                 :            :         /* HP Chromebook 14 (Celeron 2955U) */
     132                 :            :         { 0x0a06, 0x103c, 0x21ed, quirk_backlight_present },
     133                 :            : 
     134                 :            :         /* Dell Chromebook 11 */
     135                 :            :         { 0x0a06, 0x1028, 0x0a35, quirk_backlight_present },
     136                 :            : 
     137                 :            :         /* Dell Chromebook 11 (2015 version) */
     138                 :            :         { 0x0a16, 0x1028, 0x0a35, quirk_backlight_present },
     139                 :            : 
     140                 :            :         /* Toshiba Satellite P50-C-18C */
     141                 :            :         { 0x191B, 0x1179, 0xF840, quirk_increase_t12_delay },
     142                 :            : 
     143                 :            :         /* GeminiLake NUC */
     144                 :            :         { 0x3185, 0x8086, 0x2072, quirk_increase_ddi_disabled_time },
     145                 :            :         { 0x3184, 0x8086, 0x2072, quirk_increase_ddi_disabled_time },
     146                 :            :         /* ASRock ITX*/
     147                 :            :         { 0x3185, 0x1849, 0x2212, quirk_increase_ddi_disabled_time },
     148                 :            :         { 0x3184, 0x1849, 0x2212, quirk_increase_ddi_disabled_time },
     149                 :            : };
     150                 :            : 
     151                 :          0 : void intel_init_quirks(struct drm_i915_private *i915)
     152                 :            : {
     153                 :          0 :         struct pci_dev *d = i915->drm.pdev;
     154                 :          0 :         int i;
     155                 :            : 
     156         [ #  # ]:          0 :         for (i = 0; i < ARRAY_SIZE(intel_quirks); i++) {
     157                 :          0 :                 struct intel_quirk *q = &intel_quirks[i];
     158                 :            : 
     159         [ #  # ]:          0 :                 if (d->device == q->device &&
     160   [ #  #  #  # ]:          0 :                     (d->subsystem_vendor == q->subsystem_vendor ||
     161                 :          0 :                      q->subsystem_vendor == PCI_ANY_ID) &&
     162   [ #  #  #  # ]:          0 :                     (d->subsystem_device == q->subsystem_device ||
     163                 :            :                      q->subsystem_device == PCI_ANY_ID))
     164                 :          0 :                         q->hook(i915);
     165                 :            :         }
     166         [ #  # ]:          0 :         for (i = 0; i < ARRAY_SIZE(intel_dmi_quirks); i++) {
     167         [ #  # ]:          0 :                 if (dmi_check_system(*intel_dmi_quirks[i].dmi_id_list) != 0)
     168                 :          0 :                         intel_dmi_quirks[i].hook(i915);
     169                 :            :         }
     170                 :          0 : }

Generated by: LCOV version 1.14