iio: accel: bmc150: Set label based on accel-location for ACPI DUAL250E fwnodes
authorHans de Goede <hdegoede@redhat.com>
Sun, 23 May 2021 17:01:03 +0000 (19:01 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 9 Jun 2021 19:54:05 +0000 (20:54 +0100)
Some Yoga laptops with 1 accelerometer in the display and 1 in the base,
use an ACPI HID of DUAL250E instead of BOSC0200.

Set the iio-device's label for DUAL250E devices to a value indicating which
sensor is which, mirroring how we do this for BOSC0200 dual sensor devices.

Note the DUAL250E fwnode unfortunately does not include a mount-matrix.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20210523170103.176958-10-hdegoede@redhat.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/accel/bmc150-accel-core.c

index 56fe54ed0ecbd9d11cd84f89882f481f81eab50d..a3d08d71336299c12ce68cff229944675fc842c3 100644 (file)
@@ -450,6 +450,19 @@ unknown_format:
        return false;
 }
 
+static bool bmc150_apply_dual250e_acpi_orientation(struct device *dev,
+                                                  struct iio_mount_matrix *orientation)
+{
+       struct iio_dev *indio_dev = dev_get_drvdata(dev);
+
+       if (strcmp(dev_name(dev), "i2c-DUAL250E:base") == 0)
+               indio_dev->label = "accel-base";
+       else
+               indio_dev->label = "accel-display";
+
+       return false; /* DUAL250E fwnodes have no mount matrix info */
+}
+
 static bool bmc150_apply_acpi_orientation(struct device *dev,
                                          struct iio_mount_matrix *orientation)
 {
@@ -458,6 +471,9 @@ static bool bmc150_apply_acpi_orientation(struct device *dev,
        if (adev && acpi_dev_hid_uid_match(adev, "BOSC0200", NULL))
                return bmc150_apply_bosc0200_acpi_orientation(dev, orientation);
 
+       if (adev && acpi_dev_hid_uid_match(adev, "DUAL250E", NULL))
+               return bmc150_apply_dual250e_acpi_orientation(dev, orientation);
+
        return false;
 }
 #else