diff mbox series

Display got wrong rotation after hid_sensor_accel_3d is loaded

Message ID CAFv23QmiDdhe+xJw2y7CXiWq4-GK1S-1bcKxEpNhNJu3ZtzA_w@mail.gmail.com
State New
Headers show
Series Display got wrong rotation after hid_sensor_accel_3d is loaded | expand

Commit Message

AceLan Kao Dec. 26, 2019, 9:22 a.m. UTC
Hi all,

I'm working on a new platform which comes with an accelerator meter.
It's a STMicroelectronics LSM6DS3US accelerator meter, it doesn't use
st_sensors driver, but hid_sensor_accel_3d.
After hid_sensor_accel_3d is loaded, the display becomes upside down,
so I tried to add some code to make it become normal.(ACCEL_X should
have the same modification)

I don't know how to fix this in a correct way, please give me some hints.
Thanks.

Comments

Bastien Nocera Dec. 26, 2019, 3:03 p.m. UTC | #1
On Thu, 2019-12-26 at 17:22 +0800, AceLan Kao wrote:
> Hi all,
> 
> I'm working on a new platform which comes with an accelerator meter.
> It's a STMicroelectronics LSM6DS3US accelerator meter, it doesn't use
> st_sensors driver, but hid_sensor_accel_3d.
> After hid_sensor_accel_3d is loaded, the display becomes upside down,
> so I tried to add some code to make it become normal.(ACCEL_X should
> have the same modification)
> 
> I don't know how to fix this in a correct way, please give me some
> hints.

This needs to be done as a quirk, either by applying a quirk for the
HID descriptors (which should have a definition of the scale, which
would be negative for this device), or in user-space in systemd's hwdb
database, which your user-space consumers need to take care of:
https://github.com/systemd/systemd/blob/master/hwdb.d/60-sensor.hwdb

Cheers
AceLan Kao Dec. 27, 2019, 2:30 a.m. UTC | #2
Hi Bastien,

Thanks for your suggestion.
I just tried to add the following line into
/lib/udev/hwdb.d/60-sensor.hwdb and got the correct screen rotation.
But the cursor is still un-rotated, the cursor is drawn upside down,
and its coordinates are inverted.

#########################################
# STMicro
#########################################
sensor:modalias:platform:platform:HID-SENSOR-200073
 ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, 1

It looks like we should introduce a quirk into hid_sensor_accel_3d driver.
There are 3 different scale variables in hid_sensor_accel_3d, but I
don't see any of them would work the way I want.
Do you mean to introduce new scale variables?

   drivers/iio/accel/hid-sensor-accel-3d.c:34:     int scale_pre_decml;
   drivers/iio/accel/hid-sensor-accel-3d.c:35:     int scale_post_decml;
   drivers/iio/accel/hid-sensor-accel-3d.c:36:     int scale_precision;

Bastien Nocera <hadess@hadess.net> 於 2019年12月26日 週四 下午11:03寫道:
>
> On Thu, 2019-12-26 at 17:22 +0800, AceLan Kao wrote:
> > Hi all,
> >
> > I'm working on a new platform which comes with an accelerator meter.
> > It's a STMicroelectronics LSM6DS3US accelerator meter, it doesn't use
> > st_sensors driver, but hid_sensor_accel_3d.
> > After hid_sensor_accel_3d is loaded, the display becomes upside down,
> > so I tried to add some code to make it become normal.(ACCEL_X should
> > have the same modification)
> >
> > I don't know how to fix this in a correct way, please give me some
> > hints.
>
> This needs to be done as a quirk, either by applying a quirk for the
> HID descriptors (which should have a definition of the scale, which
> would be negative for this device), or in user-space in systemd's hwdb
> database, which your user-space consumers need to take care of:
> https://github.com/systemd/systemd/blob/master/hwdb.d/60-sensor.hwdb
>
> Cheers
>
Srinivas Pandruvada Dec. 30, 2019, 5:18 p.m. UTC | #3
Hi Kao,

Is this device sold with Windows?
Can you send full report descriptor (You can get from
/sys/kernel/debug/hid)?

Thanks,
Srinivas

On Fri, 2019-12-27 at 10:30 +0800, AceLan Kao wrote:
> Hi Bastien,
> 
> Thanks for your suggestion.
> I just tried to add the following line into
> /lib/udev/hwdb.d/60-sensor.hwdb and got the correct screen rotation.
> But the cursor is still un-rotated, the cursor is drawn upside down,
> and its coordinates are inverted.
> 
> #########################################
> # STMicro
> #########################################
> sensor:modalias:platform:platform:HID-SENSOR-200073
>  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, 1
> 
> It looks like we should introduce a quirk into hid_sensor_accel_3d
> driver.
> There are 3 different scale variables in hid_sensor_accel_3d, but I
> don't see any of them would work the way I want.
> Do you mean to introduce new scale variables?
> 
>    drivers/iio/accel/hid-sensor-accel-3d.c:34:     int
> scale_pre_decml;
>    drivers/iio/accel/hid-sensor-accel-3d.c:35:     int
> scale_post_decml;
>    drivers/iio/accel/hid-sensor-accel-3d.c:36:     int
> scale_precision;
> 
> Bastien Nocera <hadess@hadess.net> 於 2019年12月26日 週四 下午11:03寫道:
> > 
> > On Thu, 2019-12-26 at 17:22 +0800, AceLan Kao wrote:
> > > Hi all,
> > > 
> > > I'm working on a new platform which comes with an accelerator
> > > meter.
> > > It's a STMicroelectronics LSM6DS3US accelerator meter, it doesn't
> > > use
> > > st_sensors driver, but hid_sensor_accel_3d.
> > > After hid_sensor_accel_3d is loaded, the display becomes upside
> > > down,
> > > so I tried to add some code to make it become normal.(ACCEL_X
> > > should
> > > have the same modification)
> > > 
> > > I don't know how to fix this in a correct way, please give me
> > > some
> > > hints.
> > 
> > This needs to be done as a quirk, either by applying a quirk for
> > the
> > HID descriptors (which should have a definition of the scale, which
> > would be negative for this device), or in user-space in systemd's
> > hwdb
> > database, which your user-space consumers need to take care of:
> > 
https://github.com/systemd/systemd/blob/master/hwdb.d/60-sensor.hwdb
> > 
> > Cheers
> >
AceLan Kao Jan. 2, 2020, 2:46 a.m. UTC | #4
Yes, this machine will be sold with Windows, but currently we didn't
hear any issues from Windows side.
Here is the rdesc I found under /sys/kernel/debug/hid

BTW, we're trying to push BIOS to provide some useful info about the
orientation of the sensor, so that we don't have to list those
machines in the driver.

Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> 於
2019年12月31日 週二 上午1:18寫道:
>
> Hi Kao,
>
> Is this device sold with Windows?
> Can you send full report descriptor (You can get from
> /sys/kernel/debug/hid)?
>
> Thanks,
> Srinivas
>
> On Fri, 2019-12-27 at 10:30 +0800, AceLan Kao wrote:
> > Hi Bastien,
> >
> > Thanks for your suggestion.
> > I just tried to add the following line into
> > /lib/udev/hwdb.d/60-sensor.hwdb and got the correct screen rotation.
> > But the cursor is still un-rotated, the cursor is drawn upside down,
> > and its coordinates are inverted.
> >
> > #########################################
> > # STMicro
> > #########################################
> > sensor:modalias:platform:platform:HID-SENSOR-200073
> >  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, 1
> >
> > It looks like we should introduce a quirk into hid_sensor_accel_3d
> > driver.
> > There are 3 different scale variables in hid_sensor_accel_3d, but I
> > don't see any of them would work the way I want.
> > Do you mean to introduce new scale variables?
> >
> >    drivers/iio/accel/hid-sensor-accel-3d.c:34:     int
> > scale_pre_decml;
> >    drivers/iio/accel/hid-sensor-accel-3d.c:35:     int
> > scale_post_decml;
> >    drivers/iio/accel/hid-sensor-accel-3d.c:36:     int
> > scale_precision;
> >
> > Bastien Nocera <hadess@hadess.net> 於 2019年12月26日 週四 下午11:03寫道:
> > >
> > > On Thu, 2019-12-26 at 17:22 +0800, AceLan Kao wrote:
> > > > Hi all,
> > > >
> > > > I'm working on a new platform which comes with an accelerator
> > > > meter.
> > > > It's a STMicroelectronics LSM6DS3US accelerator meter, it doesn't
> > > > use
> > > > st_sensors driver, but hid_sensor_accel_3d.
> > > > After hid_sensor_accel_3d is loaded, the display becomes upside
> > > > down,
> > > > so I tried to add some code to make it become normal.(ACCEL_X
> > > > should
> > > > have the same modification)
> > > >
> > > > I don't know how to fix this in a correct way, please give me
> > > > some
> > > > hints.
> > >
> > > This needs to be done as a quirk, either by applying a quirk for
> > > the
> > > HID descriptors (which should have a definition of the scale, which
> > > would be negative for this device), or in user-space in systemd's
> > > hwdb
> > > database, which your user-space consumers need to take care of:
> > >
> https://github.com/systemd/systemd/blob/master/hwdb.d/60-sensor.hwdb
> > >
> > > Cheers
> > >
>
Srinivas Pandruvada Jan. 2, 2020, 5:43 p.m. UTC | #5
On Thu, 2020-01-02 at 10:46 +0800, AceLan Kao wrote:
> Yes, this machine will be sold with Windows, but currently we didn't
> hear any issues from Windows side.
There are custom sensors, which probably getting used by Windows
instead of accel_3d. I didn't see any special fields in accel_3d.

Thanks,
Srinivas

> Here is the rdesc I found under /sys/kernel/debug/hid
> 
> BTW, we're trying to push BIOS to provide some useful info about the
> orientation of the sensor, so that we don't have to list those
> machines in the driver.
> 
> Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> 於
> 2019年12月31日 週二 上午1:18寫道:
> > Hi Kao,
> > 
> > Is this device sold with Windows?
> > Can you send full report descriptor (You can get from
> > /sys/kernel/debug/hid)?
> > 
> > Thanks,
> > Srinivas
> > 
> > On Fri, 2019-12-27 at 10:30 +0800, AceLan Kao wrote:
> > > Hi Bastien,
> > > 
> > > Thanks for your suggestion.
> > > I just tried to add the following line into
> > > /lib/udev/hwdb.d/60-sensor.hwdb and got the correct screen
> > > rotation.
> > > But the cursor is still un-rotated, the cursor is drawn upside
> > > down,
> > > and its coordinates are inverted.
> > > 
> > > #########################################
> > > # STMicro
> > > #########################################
> > > sensor:modalias:platform:platform:HID-SENSOR-200073
> > >  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, 1
> > > 
> > > It looks like we should introduce a quirk into
> > > hid_sensor_accel_3d
> > > driver.
> > > There are 3 different scale variables in hid_sensor_accel_3d, but
> > > I
> > > don't see any of them would work the way I want.
> > > Do you mean to introduce new scale variables?
> > > 
> > >    drivers/iio/accel/hid-sensor-accel-3d.c:34:     int
> > > scale_pre_decml;
> > >    drivers/iio/accel/hid-sensor-accel-3d.c:35:     int
> > > scale_post_decml;
> > >    drivers/iio/accel/hid-sensor-accel-3d.c:36:     int
> > > scale_precision;
> > > 
> > > Bastien Nocera <hadess@hadess.net> 於 2019年12月26日 週四 下午11:03寫道:
> > > > On Thu, 2019-12-26 at 17:22 +0800, AceLan Kao wrote:
> > > > > Hi all,
> > > > > 
> > > > > I'm working on a new platform which comes with an accelerator
> > > > > meter.
> > > > > It's a STMicroelectronics LSM6DS3US accelerator meter, it
> > > > > doesn't
> > > > > use
> > > > > st_sensors driver, but hid_sensor_accel_3d.
> > > > > After hid_sensor_accel_3d is loaded, the display becomes
> > > > > upside
> > > > > down,
> > > > > so I tried to add some code to make it become normal.(ACCEL_X
> > > > > should
> > > > > have the same modification)
> > > > > 
> > > > > I don't know how to fix this in a correct way, please give me
> > > > > some
> > > > > hints.
> > > > 
> > > > This needs to be done as a quirk, either by applying a quirk
> > > > for
> > > > the
> > > > HID descriptors (which should have a definition of the scale,
> > > > which
> > > > would be negative for this device), or in user-space in
> > > > systemd's
> > > > hwdb
> > > > database, which your user-space consumers need to take care of:
> > > > 
> > https://github.com/systemd/systemd/blob/master/hwdb.d/60-sensor.hwdb
> > > > Cheers
> > > >
AceLan Kao Jan. 6, 2020, 1:53 a.m. UTC | #6
Hi all,

Quick update, ODM BIOS admits it's a BIOS issue, and they will fix
this from BIOS side.
Thanks all.

Best regards,
AceLan Kao.

Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> 於 2020年1月3日
週五 上午1:43寫道:
>
> On Thu, 2020-01-02 at 10:46 +0800, AceLan Kao wrote:
> > Yes, this machine will be sold with Windows, but currently we didn't
> > hear any issues from Windows side.
> There are custom sensors, which probably getting used by Windows
> instead of accel_3d. I didn't see any special fields in accel_3d.
>
> Thanks,
> Srinivas
>
> > Here is the rdesc I found under /sys/kernel/debug/hid
> >
> > BTW, we're trying to push BIOS to provide some useful info about the
> > orientation of the sensor, so that we don't have to list those
> > machines in the driver.
> >
> > Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> 於
> > 2019年12月31日 週二 上午1:18寫道:
> > > Hi Kao,
> > >
> > > Is this device sold with Windows?
> > > Can you send full report descriptor (You can get from
> > > /sys/kernel/debug/hid)?
> > >
> > > Thanks,
> > > Srinivas
> > >
> > > On Fri, 2019-12-27 at 10:30 +0800, AceLan Kao wrote:
> > > > Hi Bastien,
> > > >
> > > > Thanks for your suggestion.
> > > > I just tried to add the following line into
> > > > /lib/udev/hwdb.d/60-sensor.hwdb and got the correct screen
> > > > rotation.
> > > > But the cursor is still un-rotated, the cursor is drawn upside
> > > > down,
> > > > and its coordinates are inverted.
> > > >
> > > > #########################################
> > > > # STMicro
> > > > #########################################
> > > > sensor:modalias:platform:platform:HID-SENSOR-200073
> > > >  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, 1
> > > >
> > > > It looks like we should introduce a quirk into
> > > > hid_sensor_accel_3d
> > > > driver.
> > > > There are 3 different scale variables in hid_sensor_accel_3d, but
> > > > I
> > > > don't see any of them would work the way I want.
> > > > Do you mean to introduce new scale variables?
> > > >
> > > >    drivers/iio/accel/hid-sensor-accel-3d.c:34:     int
> > > > scale_pre_decml;
> > > >    drivers/iio/accel/hid-sensor-accel-3d.c:35:     int
> > > > scale_post_decml;
> > > >    drivers/iio/accel/hid-sensor-accel-3d.c:36:     int
> > > > scale_precision;
> > > >
> > > > Bastien Nocera <hadess@hadess.net> 於 2019年12月26日 週四 下午11:03寫道:
> > > > > On Thu, 2019-12-26 at 17:22 +0800, AceLan Kao wrote:
> > > > > > Hi all,
> > > > > >
> > > > > > I'm working on a new platform which comes with an accelerator
> > > > > > meter.
> > > > > > It's a STMicroelectronics LSM6DS3US accelerator meter, it
> > > > > > doesn't
> > > > > > use
> > > > > > st_sensors driver, but hid_sensor_accel_3d.
> > > > > > After hid_sensor_accel_3d is loaded, the display becomes
> > > > > > upside
> > > > > > down,
> > > > > > so I tried to add some code to make it become normal.(ACCEL_X
> > > > > > should
> > > > > > have the same modification)
> > > > > >
> > > > > > I don't know how to fix this in a correct way, please give me
> > > > > > some
> > > > > > hints.
> > > > >
> > > > > This needs to be done as a quirk, either by applying a quirk
> > > > > for
> > > > > the
> > > > > HID descriptors (which should have a definition of the scale,
> > > > > which
> > > > > would be negative for this device), or in user-space in
> > > > > systemd's
> > > > > hwdb
> > > > > database, which your user-space consumers need to take care of:
> > > > >
> > > https://github.com/systemd/systemd/blob/master/hwdb.d/60-sensor.hwdb
> > > > > Cheers
> > > > >
>
diff mbox series

Patch

diff --git a/drivers/iio/accel/hid-sensor-accel-3d.c
b/drivers/iio/accel/hid-sensor-accel-3d.c
index 24573eb647a3..8ca6a222b773 100644
--- a/drivers/iio/accel/hid-sensor-accel-3d.c
+++ b/drivers/iio/accel/hid-sensor-accel-3d.c
@@ -270,6 +270,8 @@  static int accel_3d_capture_sample(struct
hid_sensor_hub_device *hsdev,
               accel_state->accel_val[CHANNEL_SCAN_INDEX_X + offset] =
                                               *(u32 *)raw_data;
+               if (usage_id == HID_USAGE_SENSOR_ACCEL_Y_AXIS)
+                       accel_state->accel_val[CHANNEL_SCAN_INDEX_Y] *= -1;

Best regards,
AceLan Kao.