Re: [PATCH v5 2/2] iio: imu: bmi323: Add and enable ACPI Match Table

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

 



On Thu, 15 Feb 2024 10:24:41 -0800
Jonathan LoBue <jlobue10@xxxxxxxxx> wrote:

Add ACPI Match Table

is enough - would be odd if we didn't use it ;)

This looks fine to me, but I'm not the expert in work arounds for this
sort of ACPI issue. 

I'm too used to the nice world of servers where we fix wrong firmware
(and this sort of change is always rejected by upstream). 

> This patch adds the ACPI match table for ASUS ROG ALLY to load the bmi323
> driver with an ACPI match of "BOSC0200", and a comment about duplicate
> ACPI identifiers between devices using the bmc150 and bmi323 chips.
> 
> Reviewed-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx>
> Co-developed-by: Luke D. Jones <luke@xxxxxxxxxx>
> Signed-off-by: Luke D. Jones <luke@xxxxxxxxxx>
> Co-developed-by: Denis Benato <benato.denis96@xxxxxxxxx>
> Signed-off-by: Denis Benato <benato.denis96@xxxxxxxxx>
> Co-developed-by: Antheas Kapenekakis <lkml@xxxxxxxxxxx>
> Signed-off-by: Antheas Kapenekakis <lkml@xxxxxxxxxxx>
> Signed-off-by: Jonathan LoBue <jlobue10@xxxxxxxxx>
> ---
>  drivers/iio/imu/bmi323/bmi323_i2c.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/drivers/iio/imu/bmi323/bmi323_i2c.c b/drivers/iio/imu/bmi323/bmi323_i2c.c
> index 20a8001b9956..f7550503e47e 100644
> --- a/drivers/iio/imu/bmi323/bmi323_i2c.c
> +++ b/drivers/iio/imu/bmi323/bmi323_i2c.c
> @@ -93,6 +93,25 @@ static int bmi323_i2c_probe(struct i2c_client *i2c)
>  	return bmi323_core_probe(dev);
>  }
>  
> +static const struct acpi_device_id bmi323_acpi_match[] = {
> +	/*
> + 	 * The "BOSC0200" identifier used here is not unique to bmi323 devices.
> + 	 * The same "BOSC0200" identifier is found in the ACPI tables of devices
> + 	 * using the bmc150 chip. This creates a conflict with duplicate ACPI
> + 	 * identifiers which multiple drivers want to use. If a non-bmi323 device
> + 	 * starts to load with this "BOSC0200" ACPI match here, then the chip
> + 	 * ID check portion should fail because the chip IDs received (via i2c) are
> + 	 * unique between bmc150 and bmi323 and the driver should relinquish the
> + 	 * device. If and when a different driver (such as bmc150) starts to load
> + 	 * with the "BOSC0200" ACPI match, a short reset should ensure that the
> + 	 * device is not in a bad state during that driver initialization. This
> + 	 * device reset does occur in both the bmi323 and bmc150 init sequences.
> + 	 */
> +	{ "BOSC0200" },
> +	{ }
> +};
> +MODULE_DEVICE_TABLE(acpi, bmi323_acpi_match);
> +
>  static const struct i2c_device_id bmi323_i2c_ids[] = {
>  	{ "bmi323" },
>  	{ }
> @@ -109,6 +128,7 @@ static struct i2c_driver bmi323_i2c_driver = {
>  	.driver = {
>  		.name = "bmi323",
>  		.of_match_table = bmi323_of_i2c_match,
> +		.acpi_match_table = bmi323_acpi_match,
>  	},
>  	.probe = bmi323_i2c_probe,
>  	.id_table = bmi323_i2c_ids,





[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux