Lines Matching +full:slave +full:- +full:addr
1 // SPDX-License-Identifier: GPL-2.0-only
3 // rt715-sdca-sdw.c -- rt715 ALSA SoC audio driver
19 #include "rt715-sdca.h"
20 #include "rt715-sdca-sdw.h"
106 .name = "sdw-mbq",
119 static int rt715_sdca_update_status(struct sdw_slave *slave,
122 struct rt715_sdca_priv *rt715 = dev_get_drvdata(&slave->dev);
125 * Perform initialization only if slave status is present and
128 if (rt715->hw_init || status != SDW_SLAVE_ATTACHED)
131 /* perform I/O transfers required for Slave initialization */
132 return rt715_sdca_io_init(&slave->dev, slave);
135 static int rt715_sdca_read_prop(struct sdw_slave *slave)
137 struct sdw_slave_prop *prop = &slave->prop;
140 unsigned long addr;
143 prop->paging_support = true;
146 prop->source_ports = 0x50;/* BITMAP: 01010000 */
147 prop->sink_ports = 0x0; /* BITMAP: 00000000 */
149 nval = hweight32(prop->source_ports);
150 prop->src_dpn_prop = devm_kcalloc(&slave->dev, nval,
151 sizeof(*prop->src_dpn_prop),
153 if (!prop->src_dpn_prop)
154 return -ENOMEM;
156 dpn = prop->src_dpn_prop;
158 addr = prop->source_ports;
159 for_each_set_bit(bit, &addr, 32) {
167 prop->clk_stop_timeout = 200;
177 static int rt715_sdca_sdw_probe(struct sdw_slave *slave,
183 mbq_regmap = devm_regmap_init_sdw_mbq(slave, &rt715_sdca_mbq_regmap);
187 regmap = devm_regmap_init_sdw(slave, &rt715_sdca_regmap);
191 return rt715_sdca_init(&slave->dev, mbq_regmap, regmap, slave);
194 static int rt715_sdca_sdw_remove(struct sdw_slave *slave)
196 pm_runtime_disable(&slave->dev);
212 if (!rt715->hw_init)
215 regcache_cache_only(rt715->regmap, true);
216 regcache_mark_dirty(rt715->regmap);
217 regcache_cache_only(rt715->mbq_regmap, true);
218 regcache_mark_dirty(rt715->mbq_regmap);
227 struct sdw_slave *slave = dev_to_sdw_dev(dev);
231 if (!rt715->first_hw_init)
234 if (!slave->unattach_request)
237 time = wait_for_completion_timeout(&slave->initialization_complete,
240 dev_err(&slave->dev, "%s: Initialization not complete, timed out\n", __func__);
241 sdw_show_ping_status(slave->bus, true);
243 return -ETIMEDOUT;
247 slave->unattach_request = 0;
248 regcache_cache_only(rt715->regmap, false);
249 regcache_sync_region(rt715->regmap,
254 regcache_cache_only(rt715->mbq_regmap, false);
255 regcache_sync_region(rt715->mbq_regmap, 0x2000000, 0x61020ff);
256 regcache_sync_region(rt715->mbq_regmap,
272 .name = "rt715-sdca",