iio: accel: kxcjk-1013: Set label based on accel-location on 2-accel yoga-style 2...
authorHans de Goede <hdegoede@redhat.com>
Sun, 7 Feb 2021 16:09:01 +0000 (17:09 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Thu, 11 Mar 2021 20:46:59 +0000 (20:46 +0000)
Some 2-in-1 laptops / convertibles with 360° (yoga-style) hinges,
use 2 KXCJ91008 accelerometers:
1 in their display using an ACPI HID of "KIOX010A"; and
1 in their base    using an ACPI HID of "KIOX020A"

Since in this case we know the location of each accelerometer,
set the label for the accelerometers to the standardized
"accel-display" resp. "accel-base" labels. This way userspace
can use the labels to get the location.

This was tested on a Medion Akoya E2228T MD60250.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20210207160901.110643-4-hdegoede@redhat.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/accel/kxcjk-1013.c

index 2fadafc860fd6d7289ccc25345c44bb4bb16eb53..5c056165f473f51e25960ea6eb0b67355c2a900a 100644 (file)
@@ -1284,7 +1284,8 @@ static irqreturn_t kxcjk1013_data_rdy_trig_poll(int irq, void *private)
 
 static const char *kxcjk1013_match_acpi_device(struct device *dev,
                                               enum kx_chipset *chipset,
-                                              enum kx_acpi_type *acpi_type)
+                                              enum kx_acpi_type *acpi_type,
+                                              const char **label)
 {
        const struct acpi_device_id *id;
 
@@ -1292,10 +1293,14 @@ static const char *kxcjk1013_match_acpi_device(struct device *dev,
        if (!id)
                return NULL;
 
-       if (strcmp(id->id, "SMO8500") == 0)
+       if (strcmp(id->id, "SMO8500") == 0) {
                *acpi_type = ACPI_SMO8500;
-       else if (strcmp(id->id, "KIOX010A") == 0)
+       } else if (strcmp(id->id, "KIOX010A") == 0) {
                *acpi_type = ACPI_KIOX010A;
+               *label = "accel-display";
+       } else if (strcmp(id->id, "KIOX020A") == 0) {
+               *label = "accel-base";
+       }
 
        *chipset = (enum kx_chipset)id->driver_data;
 
@@ -1368,7 +1373,8 @@ static int kxcjk1013_probe(struct i2c_client *client,
        } else if (ACPI_HANDLE(&client->dev)) {
                name = kxcjk1013_match_acpi_device(&client->dev,
                                                   &data->chipset,
-                                                  &data->acpi_type);
+                                                  &data->acpi_type,
+                                                  &indio_dev->label);
        } else
                return -ENODEV;