On 2/9/23 07:13, Srinivas Kandagatla wrote: > WSA Soundwire controller needs an full reset if clock stop support > is not available in slave devices. WSA881x does not support clock stop > however WSA883x supports clock stop. > > Make setting this flag at runtime to address above issue. > > Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@xxxxxxxxxx> > --- > drivers/soundwire/qcom.c | 13 ++++--------- > 1 file changed, 4 insertions(+), 9 deletions(-) > > diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c > index 74e38c0d651b..0224a5a866de 100644 > --- a/drivers/soundwire/qcom.c > +++ b/drivers/soundwire/qcom.c > @@ -536,10 +536,14 @@ static int qcom_swrm_enumerate(struct sdw_bus *bus) > > sdw_extract_slave_id(bus, addr, &id); > found = false; > + ctrl->clock_stop_not_supported = false; > /* Now compare with entries */ > list_for_each_entry_safe(slave, _s, &bus->slaves, node) { > if (sdw_compare_devid(slave, id) == 0) { > qcom_swrm_set_slave_dev_num(bus, slave, i); > + if (!slave->prop.simple_clk_stop_capable) > + ctrl->clock_stop_not_supported = true; IIRC the 'simple_clk_stop_capable' for a peripheral refers to the Simplified_SCSP_SM see Figure 35 "Slave Clock Stop Prepare State Machine (SCSP_SM)" In addition, there's a requirement that all peripherals shall support ClockStopMode0. Only ClockStopMode1 is optional, and that case is handled with a different property: * @clk_stop_mode1: Clock-Stop Mode 1 is supported I think you overloaded one concept with another, or used the wrong property? > + > found = true; > break; > } > @@ -1500,15 +1504,6 @@ static int qcom_swrm_probe(struct platform_device *pdev) > (ctrl->version >> 24) & 0xff, (ctrl->version >> 16) & 0xff, > ctrl->version & 0xffff); > > - /* Clk stop is not supported on WSA Soundwire masters */ > - if (ctrl->version <= 0x01030000) { > - ctrl->clock_stop_not_supported = true; > - } else { > - ctrl->reg_read(ctrl, SWRM_COMP_MASTER_ID, &val); > - if (val == MASTER_ID_WSA) > - ctrl->clock_stop_not_supported = true; > - } > - > #ifdef CONFIG_DEBUG_FS > ctrl->debugfs = debugfs_create_dir("qualcomm-sdw", ctrl->bus.debugfs); > debugfs_create_file("qualcomm-registers", 0400, ctrl->debugfs, ctrl,