Re: [PATCH] platform/x86: x86-android-tablets: Fix broken touchscreen on Chuwi Hi8 with Windows BIOS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All,

On 8/10/22 16:19, Hans de Goede wrote:
> The x86-android-tablets handling for the Chuwi Hi8 is only necessary with
> the Android BIOS and it is causing problems with the Windows BIOS version.
> 
> Specifically when trying to register the already present touchscreen
> x86_acpi_irq_helper_get() calls acpi_unregister_gsi(), this breaks
> the working of the touchscreen and also leads to an oops:
> 
> [   14.248946] ------------[ cut here ]------------
> [   14.248954] remove_proc_entry: removing non-empty directory 'irq/75', leaking at least 'MSSL0001:00'
> [   14.248983] WARNING: CPU: 3 PID: 440 at fs/proc/generic.c:718 remove_proc_entry
> ...
> [   14.249293]  unregister_irq_proc+0xe0/0x100
> [   14.249305]  free_desc+0x29/0x70
> [   14.249312]  irq_free_descs+0x4b/0x80
> [   14.249320]  mp_unmap_irq+0x5c/0x60
> [   14.249329]  acpi_unregister_gsi_ioapic+0x2a/0x40
> [   14.249338]  x86_acpi_irq_helper_get+0x4b/0x190 [x86_android_tablets]
> [   14.249355]  x86_android_tablet_init+0x178/0xe34 [x86_android_tablets]
> 
> Add an init callback for the Chuwi Hi8, which detects when the Windows BIOS
> is in use and exits with -ENODEV in that case, fixing this.
> 
> Fixes: 84c2dcdd475f ("platform/x86: x86-android-tablets: Add an init() callback to struct x86_dev_info")
> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>

I've added this to my review-hans (soon to be for-next) branch now.

Regards,

Hans



> ---
>  drivers/platform/x86/x86-android-tablets.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/drivers/platform/x86/x86-android-tablets.c b/drivers/platform/x86/x86-android-tablets.c
> index 480375977435..4acd6fa8d43b 100644
> --- a/drivers/platform/x86/x86-android-tablets.c
> +++ b/drivers/platform/x86/x86-android-tablets.c
> @@ -663,9 +663,23 @@ static const struct x86_i2c_client_info chuwi_hi8_i2c_clients[] __initconst = {
>  	},
>  };
>  
> +static int __init chuwi_hi8_init(void)
> +{
> +	/*
> +	 * Avoid the acpi_unregister_gsi() call in x86_acpi_irq_helper_get()
> +	 * breaking the touchscreen + logging various errors when the Windows
> +	 * BIOS is used.
> +	 */
> +	if (acpi_dev_present("MSSL0001", NULL, 1))
> +		return -ENODEV;
> +
> +	return 0;
> +}
> +
>  static const struct x86_dev_info chuwi_hi8_info __initconst = {
>  	.i2c_client_info = chuwi_hi8_i2c_clients,
>  	.i2c_client_count = ARRAY_SIZE(chuwi_hi8_i2c_clients),
> +	.init = chuwi_hi8_init,
>  };
>  
>  #define CZC_EC_EXTRA_PORT	0x68




[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux