diff options
Diffstat (limited to 'drivers/acpi/x86/utils.c')
| -rw-r--r-- | drivers/acpi/x86/utils.c | 29 | 
1 files changed, 22 insertions, 7 deletions
| diff --git a/drivers/acpi/x86/utils.c b/drivers/acpi/x86/utils.c index 90c3d2eab9e9..7dca73417e2b 100644 --- a/drivers/acpi/x86/utils.c +++ b/drivers/acpi/x86/utils.c @@ -101,6 +101,15 @@ static const struct override_status_id override_status_ids[] = {  	      }),  	/* +	 * The Dell XPS 15 9550 has a SMO8110 accelerometer / +	 * HDD freefall sensor which is wrongly marked as not present. +	 */ +	PRESENT_ENTRY_HID("SMO8810", "1", SKYLAKE, { +		DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), +		DMI_MATCH(DMI_PRODUCT_NAME, "XPS 15 9550"), +	      }), + +	/*  	 * The GPD win BIOS dated 20170221 has disabled the accelerometer, the  	 * drivers sometimes cause crashes under Windows and this is how the  	 * manufacturer has solved this :|  The DMI match may not seem unique, @@ -260,9 +269,10 @@ bool force_storage_d3(void)  #define ACPI_QUIRK_SKIP_I2C_CLIENTS				BIT(0)  #define ACPI_QUIRK_UART1_SKIP					BIT(1)  #define ACPI_QUIRK_UART1_TTY_UART2_SKIP				BIT(2) -#define ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY			BIT(3) -#define ACPI_QUIRK_USE_ACPI_AC_AND_BATTERY			BIT(4) -#define ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS			BIT(5) +#define ACPI_QUIRK_PNP_UART1_SKIP				BIT(3) +#define ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY			BIT(4) +#define ACPI_QUIRK_USE_ACPI_AC_AND_BATTERY			BIT(5) +#define ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS			BIT(6)  static const struct dmi_system_id acpi_quirk_skip_dmi_ids[] = {  	/* @@ -342,6 +352,7 @@ static const struct dmi_system_id acpi_quirk_skip_dmi_ids[] = {  			DMI_MATCH(DMI_BIOS_VERSION, "BLADE_21"),  		},  		.driver_data = (void *)(ACPI_QUIRK_SKIP_I2C_CLIENTS | +					ACPI_QUIRK_PNP_UART1_SKIP |  					ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY),  	},  	{ @@ -440,14 +451,18 @@ static int acpi_dmi_skip_serdev_enumeration(struct device *controller_parent, bo  	if (ret)  		return 0; -	/* to not match on PNP enumerated debug UARTs */ -	if (!dev_is_platform(controller_parent)) -		return 0; -  	dmi_id = dmi_first_match(acpi_quirk_skip_dmi_ids);  	if (dmi_id)  		quirks = (unsigned long)dmi_id->driver_data; +	if (!dev_is_platform(controller_parent)) { +		/* PNP enumerated UARTs */ +		if ((quirks & ACPI_QUIRK_PNP_UART1_SKIP) && uid == 1) +			*skip = true; + +		return 0; +	} +  	if ((quirks & ACPI_QUIRK_UART1_SKIP) && uid == 1)  		*skip = true; |