diff options
Diffstat (limited to 'drivers/acpi/x86/utils.c')
| -rw-r--r-- | drivers/acpi/x86/utils.c | 38 | 
1 files changed, 34 insertions, 4 deletions
diff --git a/drivers/acpi/x86/utils.c b/drivers/acpi/x86/utils.c index bc65ebfcdf76..90c3d2eab9e9 100644 --- a/drivers/acpi/x86/utils.c +++ b/drivers/acpi/x86/utils.c @@ -428,7 +428,7 @@ bool acpi_quirk_skip_i2c_client_enumeration(struct acpi_device *adev)  }  EXPORT_SYMBOL_GPL(acpi_quirk_skip_i2c_client_enumeration); -int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *skip) +static int acpi_dmi_skip_serdev_enumeration(struct device *controller_parent, bool *skip)  {  	struct acpi_device *adev = ACPI_COMPANION(controller_parent);  	const struct dmi_system_id *dmi_id; @@ -436,8 +436,6 @@ int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *s  	u64 uid;  	int ret; -	*skip = false; -  	ret = acpi_dev_uid_to_integer(adev, &uid);  	if (ret)  		return 0; @@ -463,7 +461,6 @@ int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *s  	return 0;  } -EXPORT_SYMBOL_GPL(acpi_quirk_skip_serdev_enumeration);  bool acpi_quirk_skip_gpio_event_handlers(void)  { @@ -478,8 +475,41 @@ bool acpi_quirk_skip_gpio_event_handlers(void)  	return (quirks & ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS);  }  EXPORT_SYMBOL_GPL(acpi_quirk_skip_gpio_event_handlers); +#else +static int acpi_dmi_skip_serdev_enumeration(struct device *controller_parent, bool *skip) +{ +	return 0; +}  #endif +int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *skip) +{ +	struct acpi_device *adev = ACPI_COMPANION(controller_parent); + +	*skip = false; + +	/* +	 * The DELL0501 ACPI HID represents an UART (CID is set to PNP0501) with +	 * a backlight-controller attached. There is no separate ACPI device with +	 * an UartSerialBusV2() resource to model the backlight-controller. +	 * Set skip to true so that the tty core creates a serdev ctrl device. +	 * The backlight driver will manually create the serdev client device. +	 */ +	if (acpi_dev_hid_match(adev, "DELL0501")) { +		*skip = true; +		/* +		 * Create a platform dev for dell-uart-backlight to bind to. +		 * This is a static device, so no need to store the result. +		 */ +		platform_device_register_simple("dell-uart-backlight", PLATFORM_DEVID_NONE, +						NULL, 0); +		return 0; +	} + +	return acpi_dmi_skip_serdev_enumeration(controller_parent, skip); +} +EXPORT_SYMBOL_GPL(acpi_quirk_skip_serdev_enumeration); +  /* Lists of PMIC ACPI HIDs with an (often better) native charger driver */  static const struct {  	const char *hid;  | 
