Re: [PATCH] platform/x86: int3472: Increase handshake GPIO delay to 200 ms
Hans de Goede <[email protected]>
| Newsgroups | org.kernel.vger.platform-driver-x86,org.kernel.vger.linux-media,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
Hi,
On 18-Aug-26 14:14, Hans de Goede wrote:
> There have been several reports of the sensor not properly powering on,
> on laptops where an INT3472 handshake GPIO is used. Both with ov08x40 and
> hi556 sensors.
>
> Testing has shown that a delay of 200 ms is necessary in some cases.
> The handshake GPIO is typically used to signal an extra bridge or other IC
> with that IC running the full sensor power sequence based on the handshake
> signal and also possible controlling I2C pass-through.
>
> It seems that in some cases that extra IC takes up to 200 ms to before
> the sensor is fully powered up and ready for I2C communication.
>
> With the default handshake signal delay increased to 200 ms the quirk to
> increase it to 45 ms for the ov08x40 is no longer necessary and is actually
> undesirable since some ov08x40 setups also need the longer delay, drop it.
>
> Fixes: 30359c239ba8 ("platform/x86: int3472: Increase ov08x40 handshake GPIO delay to 45 ms")
> Closes: https://lore.kernel.org/platform-driver-x86/[email protected]/
> Reported-by: James Alexander <[email protected]>
> Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2333331
> Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2333647
> Cc: [email protected]
> Signed-off-by: Hans de Goede <[email protected]>
This does not apply cleanly on media-committers/next, let me send a v2
with this fixed.
James, assuming you are not running a -next kernel, if you want to give
this a test run you can use this v1 for testing.
Regards,
Hans
> ---
> drivers/platform/x86/intel/int3472/discrete.c | 12 +++---------
> 1 file changed, 3 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/platform/x86/intel/int3472/discrete.c b/drivers/platform/x86/intel/int3472/discrete.c
> index 115bb37577a1..f9e42959647e 100644
> --- a/drivers/platform/x86/intel/int3472/discrete.c
> +++ b/drivers/platform/x86/intel/int3472/discrete.c
> @@ -15,6 +15,7 @@
> #include <linux/platform_data/x86/int3472.h>
> #include <linux/platform_device.h>
> #include <linux/string_choices.h>
> +#include <linux/time64.h>
> #include <linux/uuid.h>
>
> /*
> @@ -157,13 +158,6 @@ static const struct int3472_gpio_map int3472_gpio_map[] = {
> .type_to = INT3472_GPIO_TYPE_RESET,
> .con_id = "enable",
> },
> - { /* ov08x40's handshake pin needs a 45 ms delay on some HP laptops */
> - .hid = "OVTI08F4",
> - .type_from = INT3472_GPIO_TYPE_HANDSHAKE,
> - .type_to = INT3472_GPIO_TYPE_HANDSHAKE,
> - .con_id = "dvdd",
> - .enable_time_us = 45 * USEC_PER_MSEC,
> - },
> };
>
> static void int3472_get_con_id_and_polarity(struct int3472_discrete_device *int3472, u8 *type,
> @@ -234,8 +228,8 @@ static void int3472_get_con_id_and_polarity(struct int3472_discrete_device *int3
> case INT3472_GPIO_TYPE_HANDSHAKE:
> *con_id = "dvdd";
> *gpio_flags = GPIO_ACTIVE_HIGH;
> - /* Setups using a handshake pin need 25 ms enable delay */
> - *enable_time_us = 25 * USEC_PER_MSEC;
> + /* Powering up the sensor through the handshake pin takes up to 200 ms */
> + *enable_time_us = 200 * USEC_PER_MSEC;
> break;
> default:
> *con_id = "unknown";