Lines Matching +full:re +full:- +full:started
1 // SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
2 // Copyright(c) 2015-22 Intel Corporation.
32 * flags reused in each byte, with master0 using the ls-byte, etc.
76 if (slave->id.part_id == wake_capable_list[i].part_id && in is_wake_capable()
77 slave->id.mfg_id == wake_capable_list[i].mfg_id) in is_wake_capable()
87 return sdw->link_res->hw_ops->pre_bank_switch(sdw); in generic_pre_bank_switch()
95 return sdw->link_res->hw_ops->post_bank_switch(sdw); in generic_post_bank_switch()
106 bool wake_capable = slave->prop.wake_capable || is_wake_capable(slave); in generic_new_peripheral_assigned()
113 dev_num_max = SDW_INTEL_DEV_NUM_IDA_MIN - 1; in generic_new_peripheral_assigned()
118 dev_err(bus->dev, "%s: invalid dev_num %d, wake supported %d\n", in generic_new_peripheral_assigned()
119 __func__, dev_num, slave->prop.wake_capable); in generic_new_peripheral_assigned()
123 if (sdw->link_res->hw_ops->program_sdi && wake_capable) in generic_new_peripheral_assigned()
124 sdw->link_res->hw_ops->program_sdi(sdw, dev_num); in generic_new_peripheral_assigned()
129 struct sdw_master_prop *prop = &bus->prop; in sdw_master_read_intel_prop()
137 "mipi-sdw-link-%d-subproperties", bus->link_id); in sdw_master_read_intel_prop()
139 link = device_get_named_child_node(bus->dev, name); in sdw_master_read_intel_prop()
141 dev_err(bus->dev, "Master node %s not found\n", name); in sdw_master_read_intel_prop()
142 return -EIO; in sdw_master_read_intel_prop()
146 "intel-sdw-ip-clock", in sdw_master_read_intel_prop()
147 &prop->mclk_freq); in sdw_master_read_intel_prop()
150 /* use kernel parameter for BIOS or board work-arounds */ in sdw_master_read_intel_prop()
151 prop->mclk_freq /= mclk_divider; in sdw_master_read_intel_prop()
154 prop->mclk_freq /= 2; in sdw_master_read_intel_prop()
157 "intel-quirk-mask", in sdw_master_read_intel_prop()
161 prop->hw_disabled = true; in sdw_master_read_intel_prop()
163 prop->quirks = SDW_MASTER_QUIRKS_CLEAR_INITIAL_CLASH | in sdw_master_read_intel_prop()
166 intel_prop = devm_kzalloc(bus->dev, sizeof(*intel_prop), GFP_KERNEL); in sdw_master_read_intel_prop()
169 return -ENOMEM; in sdw_master_read_intel_prop()
173 intel_prop->clde = 0x0; in sdw_master_read_intel_prop()
174 intel_prop->doaise2 = 0x0; in sdw_master_read_intel_prop()
175 intel_prop->dodse2 = 0x0; in sdw_master_read_intel_prop()
176 intel_prop->clds = 0x0; in sdw_master_read_intel_prop()
177 intel_prop->clss = 0x0; in sdw_master_read_intel_prop()
178 intel_prop->doaise = 0x1; in sdw_master_read_intel_prop()
179 intel_prop->doais = 0x3; in sdw_master_read_intel_prop()
180 intel_prop->dodse = 0x0; in sdw_master_read_intel_prop()
181 intel_prop->dods = 0x1; in sdw_master_read_intel_prop()
184 "intel-sdw-clde", in sdw_master_read_intel_prop()
185 &intel_prop->clde); in sdw_master_read_intel_prop()
187 "intel-sdw-doaise2", in sdw_master_read_intel_prop()
188 &intel_prop->doaise2); in sdw_master_read_intel_prop()
190 "intel-sdw-dodse2", in sdw_master_read_intel_prop()
191 &intel_prop->dodse2); in sdw_master_read_intel_prop()
193 "intel-sdw-clds", in sdw_master_read_intel_prop()
194 &intel_prop->clds); in sdw_master_read_intel_prop()
196 "intel-sdw-clss", in sdw_master_read_intel_prop()
197 &intel_prop->clss); in sdw_master_read_intel_prop()
199 "intel-sdw-doaise", in sdw_master_read_intel_prop()
200 &intel_prop->doaise); in sdw_master_read_intel_prop()
202 "intel-sdw-doais", in sdw_master_read_intel_prop()
203 &intel_prop->doais); in sdw_master_read_intel_prop()
205 "intel-sdw-dodse", in sdw_master_read_intel_prop()
206 &intel_prop->dodse); in sdw_master_read_intel_prop()
208 "intel-sdw-dods", in sdw_master_read_intel_prop()
209 &intel_prop->dods); in sdw_master_read_intel_prop()
210 bus->vendor_specific_prop = intel_prop; in sdw_master_read_intel_prop()
212 dev_dbg(bus->dev, "doaise %#x doais %#x dodse %#x dods %#x\n", in sdw_master_read_intel_prop()
213 intel_prop->doaise, in sdw_master_read_intel_prop()
214 intel_prop->doais, in sdw_master_read_intel_prop()
215 intel_prop->dodse, in sdw_master_read_intel_prop()
216 intel_prop->dods); in sdw_master_read_intel_prop()
234 prop = &bus->prop; in intel_prop_read()
235 if (prop->clk_freq && prop->num_clk_freq > 1) { in intel_prop_read()
239 prop->default_frame_rate * in intel_prop_read()
240 prop->default_row * in intel_prop_read()
241 prop->default_col / in intel_prop_read()
244 prop->num_clk_freq = 1; in intel_prop_read()
245 prop->clk_freq[0] = default_bus_frequency; in intel_prop_read()
246 prop->max_clk_freq = default_bus_frequency; in intel_prop_read()
249 /* read Intel-specific properties */ in intel_prop_read()
261 if (slave->prop.wake_capable || is_wake_capable(slave)) in intel_get_device_num_ida()
266 bit = find_first_zero_bit(slave->bus->assigned, SDW_MAX_DEVICES); in intel_get_device_num_ida()
268 return -ENODEV; in intel_get_device_num_ida()
275 if (slave->prop.wake_capable || is_wake_capable(slave)) in intel_put_device_num_ida()
276 ida_free(&intel_peripheral_ida, slave->dev_num); in intel_put_device_num_ida()
300 struct device *dev = &auxdev->dev; in intel_link_probe()
309 return -ENOMEM; in intel_link_probe()
311 cdns = &sdw->cdns; in intel_link_probe()
312 bus = &cdns->bus; in intel_link_probe()
314 sdw->instance = auxdev->id; in intel_link_probe()
315 sdw->link_res = &ldev->link_res; in intel_link_probe()
316 cdns->dev = dev; in intel_link_probe()
317 cdns->registers = sdw->link_res->registers; in intel_link_probe()
318 cdns->ip_offset = sdw->link_res->ip_offset; in intel_link_probe()
319 cdns->instance = sdw->instance; in intel_link_probe()
320 cdns->msg_count = 0; in intel_link_probe()
323 bus->controller_id = 0; in intel_link_probe()
325 bus->link_id = auxdev->id; in intel_link_probe()
326 bus->clk_stop_timeout = 1; in intel_link_probe()
329 * paranoia check: make sure ACPI-reported number of links is aligned with in intel_link_probe()
337 if (ret <= sdw->instance) { in intel_link_probe()
338 dev_err(dev, "%s: invalid link id %d, link count %d\n", __func__, auxdev->id, ret); in intel_link_probe()
339 return -EINVAL; in intel_link_probe()
345 bus->ops = &sdw_intel_ops; in intel_link_probe()
351 sdw->cdns.bus.compute_params = sdw_compute_params; in intel_link_probe()
356 ret = sdw_bus_master_add(bus, dev, dev->fwnode); in intel_link_probe()
362 if (bus->prop.hw_disabled) in intel_link_probe()
365 bus->link_id); in intel_link_probe()
370 bus->prop.err_threshold = 0; in intel_link_probe()
377 struct device *dev = &auxdev->dev; in intel_link_startup()
380 struct sdw_bus *bus = &cdns->bus; in intel_link_startup()
386 if (bus->prop.hw_disabled) { in intel_link_startup()
389 sdw->instance); in intel_link_startup()
393 link_flags = md_flags >> (bus->link_id * 8); in intel_link_startup()
396 dev_dbg(dev, "Multi-link is disabled\n"); in intel_link_startup()
399 * hardware-based synchronization is required regardless in intel_link_startup()
400 * of the number of segments used by a stream: SSP-based in intel_link_startup()
401 * synchronization is gated by gsync when the multi-master in intel_link_startup()
404 bus->hw_sync_min_links = 1; in intel_link_startup()
406 bus->multi_link = multi_link; in intel_link_startup()
432 pm_runtime_resume(bus->dev); in intel_link_startup()
442 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_link_startup()
459 * there are no Slave devices populated or if the power-on is in intel_link_startup()
463 * Conditionally force the pm_runtime core to re-evaluate the in intel_link_startup()
470 pm_runtime_mark_last_busy(bus->dev); in intel_link_startup()
475 sdw->startup_done = true; in intel_link_startup()
491 struct sdw_bus *bus = &cdns->bus; in intel_link_remove()
498 if (!bus->prop.hw_disabled) { in intel_link_remove()
500 cancel_delayed_work_sync(&cdns->attach_dwork); in intel_link_remove()
508 struct device *dev = &auxdev->dev; in intel_link_process_wakeen_event()
513 bus = &sdw->cdns.bus; in intel_link_process_wakeen_event()
515 if (bus->prop.hw_disabled || !sdw->startup_done) { in intel_link_process_wakeen_event()
516 dev_dbg(dev, "SoundWire master %d is disabled or not-started, ignoring\n", in intel_link_process_wakeen_event()
517 bus->link_id); in intel_link_process_wakeen_event()
529 * Slaves re-attaching and be re-enumerated. The SoundWire physical in intel_link_process_wakeen_event()
548 if (!slave->probed) { in intel_resume_child_device()
552 if (!slave->dev_num_sticky) { in intel_resume_child_device()
570 struct sdw_bus *bus = &cdns->bus; in intel_pm_prepare()
574 if (bus->prop.hw_disabled || !sdw->startup_done) { in intel_pm_prepare()
575 dev_dbg(dev, "SoundWire master %d is disabled or not-started, ignoring\n", in intel_pm_prepare()
576 bus->link_id); in intel_pm_prepare()
580 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_pm_prepare()
583 pm_runtime_suspended(dev->parent) && in intel_pm_prepare()
611 * this is a no-op. in intel_pm_prepare()
614 * of code to handle an Intel-specific corner case. It is simpler in in intel_pm_prepare()
617 ret = device_for_each_child(bus->dev, NULL, intel_resume_child_device); in intel_pm_prepare()
630 struct sdw_bus *bus = &cdns->bus; in intel_suspend()
634 if (bus->prop.hw_disabled || !sdw->startup_done) { in intel_suspend()
635 dev_dbg(dev, "SoundWire master %d is disabled or not-started, ignoring\n", in intel_suspend()
636 bus->link_id); in intel_suspend()
643 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_suspend()
648 if (pm_runtime_suspended(dev->parent)) { in intel_suspend()
675 struct sdw_bus *bus = &cdns->bus; in intel_suspend_runtime()
679 if (bus->prop.hw_disabled || !sdw->startup_done) { in intel_suspend_runtime()
680 dev_dbg(dev, "SoundWire master %d is disabled or not-started, ignoring\n", in intel_suspend_runtime()
681 bus->link_id); in intel_suspend_runtime()
685 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_suspend_runtime()
704 ret = -EINVAL; in intel_suspend_runtime()
714 struct sdw_bus *bus = &cdns->bus; in intel_resume()
718 if (bus->prop.hw_disabled || !sdw->startup_done) { in intel_resume()
719 dev_dbg(dev, "SoundWire master %d is disabled or not-started, ignoring\n", in intel_resume()
720 bus->link_id); in intel_resume()
733 pm_runtime_resume(bus->dev); in intel_resume()
735 link_flags = md_flags >> (bus->link_id * 8); in intel_resume()
770 pm_runtime_mark_last_busy(bus->dev); in intel_resume()
780 struct sdw_bus *bus = &cdns->bus; in intel_resume_runtime()
784 if (bus->prop.hw_disabled || !sdw->startup_done) { in intel_resume_runtime()
785 dev_dbg(dev, "SoundWire master %d is disabled or not-started, ignoring\n", in intel_resume_runtime()
786 bus->link_id); in intel_resume_runtime()
793 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_resume_runtime()
847 ret = -EINVAL; in intel_resume_runtime()