Message ID | 20231014205314.59333-3-hdegoede@redhat.com |
---|---|
State | Accepted |
Commit | 8d437a0b68c175ed591322e53b7e1f91094abfd5 |
Headers | show |
Series | spi/ACPI: Add support for SPI WM5102 coded on Lenovo YT3-X90 | expand |
On Sat, Oct 14, 2023 at 10:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > > The I2C-core already has filtering to skip i2c_client instantiation for > LNXVIDEO acpi_device-s with I2cSerialBus resources, since LNXVIDEO devices > are not i2c_client-s and are handled by the acpi_video driver. > > This filtering was added to i2c-core-acpi.c in commit 3a4991a9864c ("i2c: > acpi: Do not create i2c-clients for LNXVIDEO ACPI devices"). > > Now a similar problem has shown up where the SPI-core is instantiating > an unwanted SPI-device for a SpiSerialBus resource under a LNXVIDEO > acpi_device. On a Lenovo Yoga Tab 3 YT3-X90F this unwanted SPI-device > instanstantiation causes the SPI-device instanstantiation for the WM5102 > audio codec to fail with: > > [ 21.988441] pxa2xx-spi 8086228E:00: chipselect 0 already in use > > Instead of duplicating the I2C-core filtering in the SPI-core code, push > the filtering of SerialBus resources under LNXVIDEO acpi_device-s up into > the ACPI-core by adding the LNXVIDEO HID to ignore_serial_bus_ids[]. > > Note the filtering in the I2C-core i2c_acpi_do_lookup() function is still > necessary because this not only impacts i2c_client instantiation but it > also makes the I2C-core ignore the I2cSerialBus resource when checking what > the maximum speed is the I2C bus supports, which is still necessary. > > Signed-off-by: Hans de Goede <hdegoede@redhat.com> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> and please feel free to route it along with the rest of the series. > --- > drivers/acpi/scan.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c > index 691d4b7686ee..4b6faa2350f5 100644 > --- a/drivers/acpi/scan.c > +++ b/drivers/acpi/scan.c > @@ -1727,6 +1727,7 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device) > * Some ACPI devs contain SerialBus resources even though they are not > * attached to a serial bus at all. > */ > + {ACPI_VIDEO_HID, }, > {"MSHW0028", }, > /* > * HIDs of device with an UartSerialBusV2 resource for which userspace > -- > 2.41.0 >
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index 691d4b7686ee..4b6faa2350f5 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c @@ -1727,6 +1727,7 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device) * Some ACPI devs contain SerialBus resources even though they are not * attached to a serial bus at all. */ + {ACPI_VIDEO_HID, }, {"MSHW0028", }, /* * HIDs of device with an UartSerialBusV2 resource for which userspace
The I2C-core already has filtering to skip i2c_client instantiation for LNXVIDEO acpi_device-s with I2cSerialBus resources, since LNXVIDEO devices are not i2c_client-s and are handled by the acpi_video driver. This filtering was added to i2c-core-acpi.c in commit 3a4991a9864c ("i2c: acpi: Do not create i2c-clients for LNXVIDEO ACPI devices"). Now a similar problem has shown up where the SPI-core is instantiating an unwanted SPI-device for a SpiSerialBus resource under a LNXVIDEO acpi_device. On a Lenovo Yoga Tab 3 YT3-X90F this unwanted SPI-device instanstantiation causes the SPI-device instanstantiation for the WM5102 audio codec to fail with: [ 21.988441] pxa2xx-spi 8086228E:00: chipselect 0 already in use Instead of duplicating the I2C-core filtering in the SPI-core code, push the filtering of SerialBus resources under LNXVIDEO acpi_device-s up into the ACPI-core by adding the LNXVIDEO HID to ignore_serial_bus_ids[]. Note the filtering in the I2C-core i2c_acpi_do_lookup() function is still necessary because this not only impacts i2c_client instantiation but it also makes the I2C-core ignore the I2cSerialBus resource when checking what the maximum speed is the I2C bus supports, which is still necessary. Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- drivers/acpi/scan.c | 1 + 1 file changed, 1 insertion(+)