[PATCH 1/3] soundwire: qcom: add runtime pm support
Pierre-Louis Bossart
pierre-louis.bossart at linux.intel.com
Wed Feb 23 19:21:45 CET 2022
> There are two cases here.
>
> 1> Controller Instance support ClockStop Mode0, we mostly use the
> generic core to do that except in resume path we make sure that we start
> the clock.
>
> 2> Controller Instances which that do not support ClockStop, we do soft
> reset of controller along with hard resetting slaves.
both are fine. we have similar cases defined in sdw_intel.h
>>> +static int swrm_runtime_resume(struct device *dev)
>>> +{
>>> + struct qcom_swrm_ctrl *ctrl = dev_get_drvdata(dev);
>>> + int ret;
>>> +
>>> + clk_prepare_enable(ctrl->hclk);
>>> +
>>> + if (ctrl->clk_stop_bus_reset) {
>>> + reinit_completion(&ctrl->enumeration);
>>> + ctrl->reg_write(ctrl, SWRM_COMP_SW_RESET, 0x01);
>>> + qcom_swrm_get_device_status(ctrl);
>>
>> don't you need some sort of delay before checking the controller and
>> device status? The bus reset sequence takes 4096 bits, that's a non-zero
>> time.
>
> This is soft reset not full Bus Reset as WSA slaves have hard reset pins
> that will be toggled as part of suspend-resume.
Above you mentioned the peripherals go through a reset as well, in which
case they can only re-attach on the bus after 16 frames best case - they
need to observe a full cycle of the dynamic sync before changing status.
That's still a non-zero delay (0.3ms for a 48kHz frame rate)
>>
>>> + sdw_handle_slave_status(&ctrl->bus, ctrl->status);
>>> + qcom_swrm_init(ctrl);
More information about the Alsa-devel
mailing list