From: Hans de Goede <hansg@kernel.org>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Sakari Ailus <sakari.ailus@linux.intel.com>,
Mathis Foerst <mathis.foerst@mt.com>,
linux-media@vger.kernel.org
Subject: Re: [PATCH v3 13/15] media: mt9m114: Drop start-, stop-streaming sequence from initialize
Date: Tue, 23 Dec 2025 17:57:28 +0100 [thread overview]
Message-ID: <d671b240-8e43-48b7-9765-400f536deb5a@kernel.org> (raw)
In-Reply-To: <20251223165022.GK9817@pendragon.ideasonboard.com>
Hi,
On 23-Dec-25 5:50 PM, Laurent Pinchart wrote:
> On Tue, Dec 23, 2025 at 02:37:39PM +0100, Hans de Goede wrote:
>> On 2-Jul-25 03:08, Laurent Pinchart wrote:
>>> On Sun, Jun 29, 2025 at 10:56:23PM +0200, Hans de Goede wrote:
>>>> Drop the start-, stop-streaming sequence from initialize.
>>>>
>>>> When streaming is started with a runtime-suspended sensor,
>>>> mt9m114_start_streaming() will runtime-resume the sensor which calls
>>>> mt9m114_initialize() immediately followed by calling
>>>> mt9m114_set_state(ENTER_CONFIG_CHANGE).
>>>>
>>>> This results in the following state changes in quick succession:
>>>>
>>>> mt9m114_set_state(ENTER_CONFIG_CHANGE) -> transitions to STREAMING
>>>> mt9m114_set_state(ENTER_SUSPEND) -> transitions to SUSPENDED
>>>> mt9m114_set_state(ENTER_CONFIG_CHANGE) -> transitions to STREAMING
>>>>
>>>> these quick state changes confuses the CSI receiver on atomisp devices
>>>> causing streaming to not work.
>>>>
>>>> Drop the state changes from mt9m114_initialize() so that only
>>>> a single mt9m114_set_state(ENTER_CONFIG_CHANGE) call is made
>>>> when streaming is started with a runtime-suspend sensor.
>>>>
>>>> This means that the sensor may have config changes pending when
>>>> mt9m114_runtime_suspend() gets called the first time after mt9m114_probe(),
>>>> when streaming was not started within the 1 second runtime-pm timeout.
>>>> Keep track of this and do the ENTER_CONFIG_CHANGE + ENTER suspend from
>>>> mt9m114_runtime_suspend() if necessary.
>>>
>>> Could you please update the commit message with the result of the
>>> discussion on v2 ? I'd like to record that mt9m114_power_on() leaves the
>>> sensor in the STANDBY state, either because it is already in standby for
>>> CSI-2 mode, or with an explicit state change in parallel mode (with the
>>> mode configured through the CONFIG pin). That's in my opinion the reason
>>> we can drop the ENTER_CONFIG_CHANGE and ENTER_SUSPEND in
>>> mt9m114_initialize().
>>
>> Ack, I'll add a comment to the code about this and update the commit
>> message as requested.
>>
>>>> Signed-off-by: Hans de Goede <hansg@kernel.org>
>>>> ---
>>>> drivers/media/i2c/mt9m114.c | 19 +++++++++++--------
>>>> 1 file changed, 11 insertions(+), 8 deletions(-)
>>>>
>>>> diff --git a/drivers/media/i2c/mt9m114.c b/drivers/media/i2c/mt9m114.c
>>>> index 1280d90cd411..ec5e9ce24d1c 100644
>>>> --- a/drivers/media/i2c/mt9m114.c
>>>> +++ b/drivers/media/i2c/mt9m114.c
>>>> @@ -389,6 +389,7 @@ struct mt9m114 {
>>>>
>>>> unsigned int pixrate;
>>>> bool streaming;
>>>> + bool config_change_pending;
>>>> u32 clk_freq;
>>>>
>>>> /* Pixel Array */
>>>> @@ -781,14 +782,7 @@ static int mt9m114_initialize(struct mt9m114 *sensor)
>>>> if (ret < 0)
>>>> return ret;
>>>>
>>>> - ret = mt9m114_set_state(sensor, MT9M114_SYS_STATE_ENTER_CONFIG_CHANGE);
>>>> - if (ret < 0)
>>>> - return ret;
>>>> -
>>>> - ret = mt9m114_set_state(sensor, MT9M114_SYS_STATE_ENTER_SUSPEND);
>>>> - if (ret < 0)
>>>> - return ret;
>>>> -
>>>> + sensor->config_change_pending = true;
>>>> return 0;
>>>> }
>>>>
>>>> @@ -987,6 +981,7 @@ static int mt9m114_start_streaming(struct mt9m114 *sensor,
>>>> if (ret)
>>>> goto error;
>>>>
>>>> + sensor->config_change_pending = false;
>>>> sensor->streaming = true;
>>>>
>>>> return 0;
>>>> @@ -2315,6 +2310,14 @@ static int __maybe_unused mt9m114_runtime_suspend(struct device *dev)
>>>> struct v4l2_subdev *sd = dev_get_drvdata(dev);
>>>> struct mt9m114 *sensor = ifp_to_mt9m114(sd);
>>>>
>>>> + if (sensor->config_change_pending) {
>>>> + /* mt9m114_set_state() prints errors itself, no need to check */
>>>> + mt9m114_set_state(sensor,
>>>> + MT9M114_SYS_STATE_ENTER_CONFIG_CHANGE);
>>>> + mt9m114_set_state(sensor,
>>>> + MT9M114_SYS_STATE_ENTER_SUSPEND);
>>>> + }
>>>
>>> What's the point of this if we're powering the sensor right after ?
>
> (I meant "powering the sensor down")
>
>> The config-change state command is necessary to allow
>> the suspend command to succeed.
>>
>> Before this initialize() would do the suspend for
>> the probe() path and mt9m114_stop_streaming()
>> does this after a stop-stream.
>>
>> The mean reason is to preserve the old behavior of
>> always putting the sensor in suspend, which could
>> be useful if the regulators are shared (or just always
>> on) and the reset pin is not connected.
>
> True, but that's done in mt9m114_stop_streaming(), isn't it ?
>
> There's still something that bothers me about this patch. The
> config_change_pending flag makes the logic hard to follow, it should be
> simplified somehow.
>
> Re-reading the code, could we
>
> - drop the mt9m114_initialize() from mt9m114_probe()
> - move the mt9m114_initialize() from mt9m114_runtime_resume() to
> mt9m114_start_streaming()
> - drop the ENTER_CONFIG_CHANGE and ENTER_SUSPEND from
> mt9m114_initialize()
>
> Am I missing something ?
Nope that should work, but at the cost of re-doing
the mt9m114_initialize() when doing stop-stream,
change some things, start-stream. Not that I expect
that to happen often with this sensor, but this is why
I kept the initialize in runtime-resume.
Regards,
Hans
>
next prev parent reply other threads:[~2025-12-23 16:57 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-29 20:56 [PATCH v3 00/15] media: mt9m114: Changes to make it work with atomisp devices Hans de Goede
2025-06-29 20:56 ` [PATCH v3 01/15] media: aptina-pll: Debug log p1 min and max values Hans de Goede
2025-06-29 20:56 ` [PATCH v3 02/15] media: mt9m114: Add support for clock-frequency property Hans de Goede
2025-06-29 20:56 ` [PATCH v3 03/15] media: mt9m114: Use aptina-PLL helper to get PLL values Hans de Goede
2025-06-29 20:56 ` [PATCH v3 04/15] media: mt9m114: Lower minimum vblank value Hans de Goede
2025-06-29 20:56 ` [PATCH v3 05/15] media: mt9m114: Fix default hblank and vblank values Hans de Goede
2025-06-29 20:56 ` [PATCH v3 06/15] media: mt9m114: Tweak default hblank and vblank for more accurate fps Hans de Goede
2025-06-29 20:56 ` [PATCH v3 07/15] media: mt9m114: Avoid a reset low spike during probe() Hans de Goede
2025-06-29 20:56 ` [PATCH v3 08/15] media: mt9m114: Put sensor in reset on power down Hans de Goede
2025-06-29 20:56 ` [PATCH v3 09/15] media: mt9m114: Add and use mt9m114_ifp_get_border() helper function Hans de Goede
2025-07-02 0:17 ` Laurent Pinchart
2025-06-29 20:56 ` [PATCH v3 10/15] media: mt9m114: Adjust IFP selections and src format when src pixelfmt changes to/from RAW10 Hans de Goede
2025-07-02 0:32 ` Laurent Pinchart
2025-12-23 13:33 ` Hans de Goede
2025-06-29 20:56 ` [PATCH v3 11/15] media: mt9m114: Update src pad sel and format when sink pad format changes Hans de Goede
2025-07-02 0:36 ` Laurent Pinchart
2025-06-29 20:56 ` [PATCH v3 12/15] media: mt9m114: Don't allow changing the IFP crop/compose selections when bypassing the scaler Hans de Goede
2025-07-02 0:42 ` Laurent Pinchart
2025-06-29 20:56 ` [PATCH v3 13/15] media: mt9m114: Drop start-, stop-streaming sequence from initialize Hans de Goede
2025-07-02 1:08 ` Laurent Pinchart
2025-12-23 13:37 ` Hans de Goede
2025-12-23 16:50 ` Laurent Pinchart
2025-12-23 16:57 ` Hans de Goede [this message]
2025-06-29 20:56 ` [PATCH v3 14/15] media: mt9m114: Return -EPROBE_DEFER if no endpoint is found Hans de Goede
2025-07-02 0:53 ` Laurent Pinchart
2025-12-24 12:12 ` Hans de Goede
2025-12-27 14:54 ` Laurent Pinchart
2025-06-29 20:56 ` [PATCH v3 15/15] media: mt9m114: Add ACPI enumeration support Hans de Goede
[not found] ` <6861b00f.050a0220.379e4a.5185@mx.google.com>
2025-06-30 7:34 ` [v3,00/15] media: mt9m114: Changes to make it work with atomisp devices Hans de Goede
2025-06-30 22:28 ` [PATCH v3 00/15] " Laurent Pinchart
2025-07-01 13:21 ` Hans de Goede
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d671b240-8e43-48b7-9765-400f536deb5a@kernel.org \
--to=hansg@kernel.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=mathis.foerst@mt.com \
--cc=sakari.ailus@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox