Message ID | 20230417211128.588008-1-hdegoede@redhat.com |
---|---|
State | Superseded |
Headers | show |
Series | ACPI: LPSS: Add 80862289 ACPI HID for second PWM controller on Cherry Trail | expand |
Hi Hans, On Mon, Apr 17, 2023 at 11:11:28PM +0200, Hans de Goede wrote: > On some Cherry Trail devices the second PWM controller uses > 80862289 as ACPI HID, rather then using 80862288 as is done ACPI _HID (ditto in $subjet) > for both controllers on most models. > > Add the missing 80862289 ACPI HID, note this uses its own ACPI _HID > lpss_device_desc, without ".setup = bsw_pwm_setup" so that > the pwm_lookup is not added for it. > On devices where both controllers use the 80862288 HID bsw_pwm_setup() _HID > does a UID check to avoid registering the lookup for the second _UID > controller but that will not work here. > > Adding the missing id fixes the second PWM controller no longer > working after the entire LPSS1 island has been in D3 at least > once, which causes the contents of the LPSS private registers > to get lost. Adding the HID makes acpi_lpss restore these _HID > when the controller moves from D3 to D0. > > Signed-off-by: Hans de Goede <hdegoede@redhat.com> With the above changes, feel free to add Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c index f08ffa75f4a7..77186f084d3a 100644 --- a/drivers/acpi/acpi_lpss.c +++ b/drivers/acpi/acpi_lpss.c @@ -271,6 +271,12 @@ static const struct lpss_device_desc bsw_pwm_dev_desc = { .resume_from_noirq = true, }; +static const struct lpss_device_desc bsw_pwm2_dev_desc = { + .flags = LPSS_SAVE_CTX_ONCE | LPSS_NO_D3_DELAY, + .prv_offset = 0x800, + .resume_from_noirq = true, +}; + static const struct lpss_device_desc byt_uart_dev_desc = { .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_SAVE_CTX, .clk_con_id = "baudclk", @@ -368,6 +374,7 @@ static const struct acpi_device_id acpi_lpss_device_ids[] = { /* Braswell LPSS devices */ { "80862286", LPSS_ADDR(lpss_dma_desc) }, { "80862288", LPSS_ADDR(bsw_pwm_dev_desc) }, + { "80862289", LPSS_ADDR(bsw_pwm2_dev_desc) }, { "8086228A", LPSS_ADDR(bsw_uart_dev_desc) }, { "8086228E", LPSS_ADDR(bsw_spi_dev_desc) }, { "808622C0", LPSS_ADDR(lpss_dma_desc) },
On some Cherry Trail devices the second PWM controller uses 80862289 as ACPI HID, rather then using 80862288 as is done for both controllers on most models. Add the missing 80862289 ACPI HID, note this uses its own lpss_device_desc, without ".setup = bsw_pwm_setup" so that the pwm_lookup is not added for it. On devices where both controllers use the 80862288 HID bsw_pwm_setup() does a UID check to avoid registering the lookup for the second controller but that will not work here. Adding the missing id fixes the second PWM controller no longer working after the entire LPSS1 island has been in D3 at least once, which causes the contents of the LPSS private registers to get lost. Adding the HID makes acpi_lpss restore these when the controller moves from D3 to D0. Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- drivers/acpi/acpi_lpss.c | 7 +++++++ 1 file changed, 7 insertions(+)