From: Hans de Goede <hansg@kernel.org>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Sakari Ailus <sakari.ailus@linux.intel.com>,
Hans de Goede <hdegoede@redhat.com>,
Mathis Foerst <mathis.foerst@mt.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
linux-media@vger.kernel.org
Subject: Re: [PATCH v2 10/12] media: mt9m114: Drop start-, stop-streaming sequence from initialize
Date: Sun, 29 Jun 2025 17:38:55 +0200 [thread overview]
Message-ID: <845d7894-34c7-4a10-9cac-dc00fc0935fd@kernel.org> (raw)
In-Reply-To: <20250603113342.GD27361@pendragon.ideasonboard.com>
Hi Laurent,
On 3-Jun-25 1:33 PM, Laurent Pinchart wrote:
> Hi Hans,
>
> Thank you for the patch.
>
> On Sat, May 31, 2025 at 06:31:45PM +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.
>>
>> 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 d954f2be8f0d..c4d3122d698e 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 */
>> @@ -782,14 +783,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;
>
> Entering Config-Change here was meant to ensure the PLL and output mode
> settings get applied. The PLL settings can probably wait until we start
> streaming. For the output mode, I'm slightly concerned that incorrect
> settings could lead to hardware issues, as the sensor starts in parallel
> output mode. I suppose it shouldn't cause any hardware damage, so I
> think we could try to just delay Config-Change until we start streaming.
>
>> -
>> - ret = mt9m114_set_state(sensor, MT9M114_SYS_STATE_ENTER_SUSPEND);
>> - if (ret < 0)
>> - return ret;
>
> This bothers me a bit more. As far as I understand, the sensor starts
> streaming right after power on reset, so I'd like to disable streaming
> as quickly as possible.
I tried doing the MT9M114_SYS_STATE_ENTER_SUSPEND without a prior
MT9M114_SYS_STATE_ENTER_CONFIG_CHANGE but that does not work, then
mt9m114_poll_command() times out.
Also I believe that the start/stop/start streaming vs just a
single start streaming is actually causing the issues on atomisp
devices.
Normally we only come out of runtime-suspend from
mt9m114_start_streaming() so in this case there is no issue
with not disabling streaming from mt9m114_initialize().
The only case where the sensor would be streaming when
we do not want it would be after the power-up +
mt9m114_initialize() from probe().
And we can get the desired "disable streaming
as quickly as possible." by forcing a runtime-suspend
from probe() directly after mt9m114_initialize() instead
of waiting for the auto runtimesuspend.
I'll make probe() immediately runtime-suspend the sensor
after mt9m114_initialize() in the next version.
Regards,
Hans
>
>> -
>> + sensor->config_change_pending = true;
>> return 0;
>> }
>>
>> @@ -976,6 +970,7 @@ static int mt9m114_start_streaming(struct mt9m114 *sensor,
>> if (ret)
>> goto error;
>>
>> + sensor->config_change_pending = false;
>> sensor->streaming = true;
>>
>> return 0;
>> @@ -2267,6 +2262,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);
>> + }
>> +
>> mt9m114_power_off(sensor);
>>
>> return 0;
>
next prev parent reply other threads:[~2025-06-29 15:38 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-31 16:31 [PATCH v2 00/12] media: mt9m114: Changes to make it work with atomisp devices Hans de Goede
2025-05-31 16:31 ` [PATCH v2 01/12] media: aptina-pll: Debug log p1 min and max values Hans de Goede
2025-05-31 16:31 ` [PATCH v2 02/12] media: mt9m114: Add support for clock-frequency property Hans de Goede
2025-05-31 16:31 ` [PATCH v2 03/12] media: mt9m114: Use aptina-PLL helper to get PLL values Hans de Goede
2025-06-03 10:57 ` Laurent Pinchart
2025-06-03 13:29 ` Hans de Goede
2025-06-03 14:05 ` Laurent Pinchart
2025-06-27 14:33 ` Hans de Goede
2025-06-27 18:06 ` Laurent Pinchart
2025-06-28 9:27 ` Hans de Goede
2025-06-29 20:46 ` Laurent Pinchart
2025-12-23 13:27 ` Hans de Goede
2025-12-23 14:34 ` Laurent Pinchart
2025-05-31 16:31 ` [PATCH v2 04/12] media: mt9m114: Lower minimum vblank value Hans de Goede
2025-05-31 16:31 ` [PATCH v2 05/12] media: mt9m114: Fix default hblank and vblank values Hans de Goede
2025-05-31 16:31 ` [PATCH v2 06/12] media: mt9m114: Tweak default hblank and vblank for more accurate fps Hans de Goede
2025-05-31 16:31 ` [PATCH v2 07/12] media: mt9m114: Avoid a reset low spike during probe() Hans de Goede
2025-05-31 16:31 ` [PATCH v2 08/12] media: mt9m114: Put sensor in reset on power-down Hans de Goede
2025-06-03 10:59 ` Laurent Pinchart
2025-05-31 16:31 ` [PATCH v2 09/12] media: mt9m114: Fix scaler bypass mode Hans de Goede
2025-06-03 12:48 ` Laurent Pinchart
2025-06-29 15:28 ` Hans de Goede
2025-05-31 16:31 ` [PATCH v2 10/12] media: mt9m114: Drop start-, stop-streaming sequence from initialize Hans de Goede
2025-06-03 11:33 ` Laurent Pinchart
2025-06-29 15:38 ` Hans de Goede [this message]
2025-06-29 17:11 ` Hans de Goede
2025-06-29 21:05 ` Laurent Pinchart
2025-05-31 16:31 ` [PATCH v2 11/12] media: mt9m114: Return -EPROBE_DEFER if no endpoint is found Hans de Goede
2025-06-03 11:03 ` Laurent Pinchart
2025-06-03 13:27 ` Hans de Goede
2025-06-05 9:55 ` Sakari Ailus
2025-05-31 16:31 ` [PATCH v2 12/12] media: mt9m114: Add ACPI enumeration support 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=845d7894-34c7-4a10-9cac-dc00fc0935fd@kernel.org \
--to=hansg@kernel.org \
--cc=hdegoede@redhat.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=mathis.foerst@mt.com \
--cc=mchehab@kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.