]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: i2c: Add note to prevent buggy code re-use
authorKrzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Tue, 30 Dec 2025 08:34:36 +0000 (09:34 +0100)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Fri, 16 Jan 2026 13:08:52 +0000 (14:08 +0100)
adv7604 and et8ek8 sensor drivers have mixed up logical and line level
for reset/powerdown signal.  They call it a reset signal (it indeed
behaves like that), but drivers assert the reset to operate which is
clearly incorrect and relies on wrong ACTIVE_HIGH flag in the DTS.

People in discussions copy existing poor code and claim they can repeat
same mistake, so add a note to prevent that.

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/i2c/adv7604.c
drivers/media/i2c/et8ek8/et8ek8_driver.c

index 516553fb17e9837977ce14ebbb170a6eb56741b3..67116a4ef134ed2093b3e29ad65abb08139b06a1 100644 (file)
@@ -3453,7 +3453,13 @@ static int configure_regmaps(struct adv76xx_state *state)
 static void adv76xx_reset(struct adv76xx_state *state)
 {
        if (state->reset_gpio) {
-               /* ADV76XX can be reset by a low reset pulse of minimum 5 ms. */
+               /*
+                * Note: Misinterpretation of reset assertion - do not re-use
+                * this code.  The reset pin is using incorrect (for a reset
+                * signal) logical level.
+                *
+                * ADV76XX can be reset by a low reset pulse of minimum 5 ms.
+                */
                gpiod_set_value_cansleep(state->reset_gpio, 0);
                usleep_range(5000, 10000);
                gpiod_set_value_cansleep(state->reset_gpio, 1);
index 2cb7b718782b253ad32ac2b429964426c7a0736b..50121c3e5b480b6eea3376596abdd3f262ae14b3 100644 (file)
@@ -835,6 +835,10 @@ static int et8ek8_power_on(struct et8ek8_sensor *sensor)
 
        udelay(10); /* I wish this is a good value */
 
+       /*
+        * Note: Misinterpretation of reset assertion - do not re-use this code.
+        * The reset pin is using incorrect (for a reset signal) logical level.
+        */
        gpiod_set_value(sensor->reset, 1);
 
        msleep(5000 * 1000 / sensor->xclk_freq + 1); /* Wait 5000 cycles */