Lines Matching +full:stream +full:- +full:match +full:- +full:mask
1 // SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
2 // Copyright(c) 2015-17 Intel Corporation.
200 return readl(cdns->registers + offset); in cdns_readl()
205 writel(value, cdns->registers + offset); in cdns_writel()
209 int offset, u32 mask, u32 val) in cdns_updatel() argument
214 tmp = (tmp & ~mask) | val; in cdns_updatel()
218 static int cdns_set_wait(struct sdw_cdns *cdns, int offset, u32 mask, u32 value) in cdns_set_wait() argument
225 reg_read = readl(cdns->registers + offset); in cdns_set_wait()
226 if ((reg_read & mask) == value) in cdns_set_wait()
229 timeout--; in cdns_set_wait()
233 return -ETIMEDOUT; in cdns_set_wait()
238 writel(value, cdns->registers + offset); in cdns_clear_bit()
253 dev_err(cdns->dev, "Cannot program MCP_CONFIG_UPDATE in ClockStopMode\n"); in cdns_config_update()
254 return -EINVAL; in cdns_config_update()
260 dev_err(cdns->dev, "Config update timedout\n"); in cdns_config_update()
275 return scnprintf(buf + pos, RD_BUF - pos, in cdns_sprintf()
281 struct sdw_cdns *cdns = s->private; in cdns_reg_show()
289 return -ENOMEM; in cdns_reg_show()
292 ret += scnprintf(buf + ret, RD_BUF - ret, "\nMCP Registers\n"); in cdns_reg_show()
297 ret += scnprintf(buf + ret, RD_BUF - ret, in cdns_reg_show()
303 ret += scnprintf(buf + ret, RD_BUF - ret, in cdns_reg_show()
310 ret += scnprintf(buf + ret, RD_BUF - ret, in cdns_reg_show()
313 num_ports = cdns->num_ports; in cdns_reg_show()
316 ret += scnprintf(buf + ret, RD_BUF - ret, in cdns_reg_show()
317 "\nDP-%d\n", i); in cdns_reg_show()
323 ret += scnprintf(buf + ret, RD_BUF - ret, in cdns_reg_show()
326 ret += scnprintf(buf + ret, RD_BUF - ret, in cdns_reg_show()
327 "\nDP-%d\n", i); in cdns_reg_show()
334 ret += scnprintf(buf + ret, RD_BUF - ret, in cdns_reg_show()
340 ret += scnprintf(buf + ret, RD_BUF - ret, in cdns_reg_show()
360 return -EINVAL; in cdns_hw_reset()
367 dev_dbg(cdns->dev, "link hw_reset done: %d\n", ret); in cdns_hw_reset()
381 return -EINVAL; in cdns_parity_error_injection()
383 bus = &cdns->bus; in cdns_parity_error_injection()
387 * Slave devices will re-attach and be re-enumerated. in cdns_parity_error_injection()
389 ret = pm_runtime_get_sync(bus->dev); in cdns_parity_error_injection()
390 if (ret < 0 && ret != -EACCES) { in cdns_parity_error_injection()
391 dev_err_ratelimited(cdns->dev, in cdns_parity_error_injection()
394 pm_runtime_put_noidle(bus->dev); in cdns_parity_error_injection()
408 mutex_lock(&bus->bus_lock); in cdns_parity_error_injection()
421 ret = sdw_bread_no_pm_unlocked(&cdns->bus, 0xf, SDW_SCP_DEVID_0); in cdns_parity_error_injection()
422 dev_info(cdns->dev, "parity error injection, read: %d\n", ret); in cdns_parity_error_injection()
435 mutex_unlock(&bus->bus_lock); in cdns_parity_error_injection()
444 pm_runtime_mark_last_busy(bus->dev); in cdns_parity_error_injection()
445 pm_runtime_put_autosuspend(bus->dev); in cdns_parity_error_injection()
454 * sdw_cdns_debugfs_init() - Cadence debugfs init
460 debugfs_create_file("cdns-registers", 0400, root, cdns, &cdns_reg_fops); in sdw_cdns_debugfs_init()
462 debugfs_create_file("cdns-hw-reset", 0200, root, cdns, in sdw_cdns_debugfs_init()
465 debugfs_create_file("cdns-parity-error-injection", 0200, root, cdns, in sdw_cdns_debugfs_init()
484 if (!(cdns->response_buf[i] & CDNS_MCP_RESP_ACK)) { in cdns_fill_msg_resp()
486 dev_dbg_ratelimited(cdns->dev, "Msg Ack not received\n"); in cdns_fill_msg_resp()
488 if (cdns->response_buf[i] & CDNS_MCP_RESP_NACK) { in cdns_fill_msg_resp()
490 dev_err_ratelimited(cdns->dev, "Msg NACK received\n"); in cdns_fill_msg_resp()
495 dev_err_ratelimited(cdns->dev, "Msg NACKed for Slave %d\n", msg->dev_num); in cdns_fill_msg_resp()
500 dev_dbg_ratelimited(cdns->dev, "Msg ignored for Slave %d\n", msg->dev_num); in cdns_fill_msg_resp()
504 if (msg->flags == SDW_MSG_FLAG_READ) { in cdns_fill_msg_resp()
507 msg->buf[i + offset] = FIELD_GET(CDNS_MCP_RESP_RDATA, in cdns_fill_msg_resp()
508 cdns->response_buf[i]); in cdns_fill_msg_resp()
523 if (cdns->msg_count != count) { in _cdns_xfer_msg()
525 cdns->msg_count = count; in _cdns_xfer_msg()
529 addr = msg->addr; in _cdns_xfer_msg()
532 data = FIELD_PREP(CDNS_MCP_CMD_DEV_ADDR, msg->dev_num); in _cdns_xfer_msg()
537 if (msg->flags == SDW_MSG_FLAG_WRITE) in _cdns_xfer_msg()
538 data |= msg->buf[i + offset]; in _cdns_xfer_msg()
540 data |= FIELD_PREP(CDNS_MCP_CMD_SSP_TAG, msg->ssp_sync); in _cdns_xfer_msg()
549 time = wait_for_completion_timeout(&cdns->tx_complete, in _cdns_xfer_msg()
552 dev_err(cdns->dev, "IO transfer timed out, cmd %d device %d addr %x len %d\n", in _cdns_xfer_msg()
553 cmd, msg->dev_num, msg->addr, msg->len); in _cdns_xfer_msg()
554 msg->len = 0; in _cdns_xfer_msg()
570 if (cdns->msg_count != CDNS_SCP_RX_FIFOLEVEL) { in cdns_program_scp_addr()
572 cdns->msg_count = CDNS_SCP_RX_FIFOLEVEL; in cdns_program_scp_addr()
575 data[0] = FIELD_PREP(CDNS_MCP_CMD_DEV_ADDR, msg->dev_num); in cdns_program_scp_addr()
582 data[0] |= msg->addr_page1; in cdns_program_scp_addr()
583 data[1] |= msg->addr_page2; in cdns_program_scp_addr()
590 time = wait_for_completion_timeout(&cdns->tx_complete, in cdns_program_scp_addr()
593 dev_err(cdns->dev, "SCP Msg trf timed out\n"); in cdns_program_scp_addr()
594 msg->len = 0; in cdns_program_scp_addr()
600 if (!(cdns->response_buf[i] & CDNS_MCP_RESP_ACK)) { in cdns_program_scp_addr()
602 dev_err(cdns->dev, "Program SCP Ack not received\n"); in cdns_program_scp_addr()
603 if (cdns->response_buf[i] & CDNS_MCP_RESP_NACK) { in cdns_program_scp_addr()
605 dev_err(cdns->dev, "Program SCP NACK received\n"); in cdns_program_scp_addr()
612 dev_err_ratelimited(cdns->dev, in cdns_program_scp_addr()
613 "SCP_addrpage NACKed for Slave %d\n", msg->dev_num); in cdns_program_scp_addr()
618 dev_dbg_ratelimited(cdns->dev, in cdns_program_scp_addr()
619 "SCP_addrpage ignored for Slave %d\n", msg->dev_num); in cdns_program_scp_addr()
630 if (msg->page) { in cdns_prep_msg()
633 msg->len = 0; in cdns_prep_msg()
638 switch (msg->flags) { in cdns_prep_msg()
648 dev_err(cdns->dev, "Invalid msg cmd: %d\n", msg->flags); in cdns_prep_msg()
649 return -EINVAL; in cdns_prep_msg()
665 for (i = 0; i < msg->len / CDNS_MCP_CMD_LEN; i++) { in cdns_xfer_msg()
672 if (!(msg->len % CDNS_MCP_CMD_LEN)) in cdns_xfer_msg()
676 msg->len % CDNS_MCP_CMD_LEN, false); in cdns_xfer_msg()
691 if (msg->len > 1) in cdns_xfer_msg_defer()
692 return -ENOTSUPP; in cdns_xfer_msg_defer()
698 cdns->defer = defer; in cdns_xfer_msg_defer()
699 cdns->defer->length = msg->len; in cdns_xfer_msg_defer()
701 return _cdns_xfer_msg(cdns, msg, cmd, 0, msg->len, true); in cdns_xfer_msg_defer()
734 cdns->response_buf[i] = cdns_readl(cdns, cmd_base); in cdns_read_response()
745 u32 mask; in cdns_update_slave_status() local
753 mask = (slave >> (i * CDNS_MCP_SLAVE_STATUS_NUM)) & in cdns_update_slave_status()
755 if (!mask) in cdns_update_slave_status()
761 if (mask & CDNS_MCP_SLAVE_INTSTAT_RESERVED) { in cdns_update_slave_status()
766 if (mask & CDNS_MCP_SLAVE_INTSTAT_ATTACHED) { in cdns_update_slave_status()
771 if (mask & CDNS_MCP_SLAVE_INTSTAT_ALERT) { in cdns_update_slave_status()
776 if (mask & CDNS_MCP_SLAVE_INTSTAT_NPRESENT) { in cdns_update_slave_status()
785 dev_warn_ratelimited(cdns->dev, in cdns_update_slave_status()
787 i, mask); in cdns_update_slave_status()
809 dev_warn_ratelimited(cdns->dev, in cdns_update_slave_status()
817 return sdw_handle_slave_status(&cdns->bus, status); in cdns_update_slave_status()
823 * sdw_cdns_irq() - Cadence interrupt handler
834 if (!cdns->link_up) in sdw_cdns_irq()
849 if (cdns->defer) { in sdw_cdns_irq()
850 cdns_fill_msg_resp(cdns, cdns->defer->msg, in sdw_cdns_irq()
851 cdns->defer->length, 0); in sdw_cdns_irq()
852 complete(&cdns->defer->complete); in sdw_cdns_irq()
853 cdns->defer = NULL; in sdw_cdns_irq()
855 complete(&cdns->tx_complete); in sdw_cdns_irq()
861 dev_err_ratelimited(cdns->dev, "Parity error\n"); in sdw_cdns_irq()
866 dev_err_ratelimited(cdns->dev, "Bus clash for control word\n"); in sdw_cdns_irq()
874 dev_err_ratelimited(cdns->dev, "Bus clash for data word\n"); in sdw_cdns_irq()
877 if (cdns->bus.params.m_data_mode != SDW_PORT_DATA_MODE_NORMAL && in sdw_cdns_irq()
883 dev_err_ratelimited(cdns->dev, "DP interrupt: PortIntStat %8x\n", in sdw_cdns_irq()
891 /* Mask the Slave interrupt and wake thread */ in sdw_cdns_irq()
904 if (cdns->interrupt_enabled) in sdw_cdns_irq()
905 schedule_work(&cdns->work); in sdw_cdns_irq()
925 dev_dbg_ratelimited(cdns->dev, "Slave status change\n"); in cdns_update_slave_status_work()
946 * sdw_cdns_exit_reset() - Program reset parameters and start bus operations
973 * sdw_cdns_enable_slave_interrupt() - Enable SDW slave interrupts
979 u32 mask; in cdns_enable_slave_interrupts() local
981 mask = cdns_readl(cdns, CDNS_MCP_INTMASK); in cdns_enable_slave_interrupts()
983 mask |= CDNS_MCP_INT_SLAVE_MASK; in cdns_enable_slave_interrupts()
985 mask &= ~CDNS_MCP_INT_SLAVE_MASK; in cdns_enable_slave_interrupts()
987 cdns_writel(cdns, CDNS_MCP_INTMASK, mask); in cdns_enable_slave_interrupts()
991 * sdw_cdns_enable_interrupt() - Enable SDW interrupts
999 u32 mask = 0; in sdw_cdns_enable_interrupt() local
1008 mask = CDNS_MCP_INT_SLAVE_MASK; in sdw_cdns_enable_interrupt()
1011 mask |= CDNS_MCP_INT_CTRL_CLASH | CDNS_MCP_INT_DATA_CLASH | in sdw_cdns_enable_interrupt()
1015 if (cdns->bus.params.m_data_mode != SDW_PORT_DATA_MODE_NORMAL) in sdw_cdns_enable_interrupt()
1016 mask |= CDNS_MCP_INT_DPINT; in sdw_cdns_enable_interrupt()
1019 mask |= CDNS_MCP_INT_RX_WL; in sdw_cdns_enable_interrupt()
1025 mask |= CDNS_MCP_INT_IRQ; in sdw_cdns_enable_interrupt()
1028 mask = interrupt_mask; in sdw_cdns_enable_interrupt()
1040 cdns->interrupt_enabled = state; in sdw_cdns_enable_interrupt()
1043 * Complete any on-going status updates before updating masks, in sdw_cdns_enable_interrupt()
1047 * the 3 mask updates below are complete, so in the interrupt in sdw_cdns_enable_interrupt()
1052 cancel_work_sync(&cdns->work); in sdw_cdns_enable_interrupt()
1056 cdns_writel(cdns, CDNS_MCP_INTMASK, mask); in sdw_cdns_enable_interrupt()
1063 struct sdw_cdns_pdi **stream, in cdns_allocate_pdi() argument
1072 pdi = devm_kcalloc(cdns->dev, num, sizeof(*pdi), GFP_KERNEL); in cdns_allocate_pdi()
1074 return -ENOMEM; in cdns_allocate_pdi()
1080 *stream = pdi; in cdns_allocate_pdi()
1085 * sdw_cdns_pdi_init() - PDI initialization routine
1088 * @config: Stream configurations
1093 struct sdw_cdns_streams *stream; in sdw_cdns_pdi_init() local
1097 cdns->pcm.num_bd = config.pcm_bd; in sdw_cdns_pdi_init()
1098 cdns->pcm.num_in = config.pcm_in; in sdw_cdns_pdi_init()
1099 cdns->pcm.num_out = config.pcm_out; in sdw_cdns_pdi_init()
1100 cdns->pdm.num_bd = config.pdm_bd; in sdw_cdns_pdi_init()
1101 cdns->pdm.num_in = config.pdm_in; in sdw_cdns_pdi_init()
1102 cdns->pdm.num_out = config.pdm_out; in sdw_cdns_pdi_init()
1105 stream = &cdns->pcm; in sdw_cdns_pdi_init()
1110 ret = cdns_allocate_pdi(cdns, &stream->bd, in sdw_cdns_pdi_init()
1111 stream->num_bd, offset); in sdw_cdns_pdi_init()
1115 offset += stream->num_bd; in sdw_cdns_pdi_init()
1117 ret = cdns_allocate_pdi(cdns, &stream->in, in sdw_cdns_pdi_init()
1118 stream->num_in, offset); in sdw_cdns_pdi_init()
1122 offset += stream->num_in; in sdw_cdns_pdi_init()
1124 ret = cdns_allocate_pdi(cdns, &stream->out, in sdw_cdns_pdi_init()
1125 stream->num_out, offset); in sdw_cdns_pdi_init()
1130 stream->num_pdi = stream->num_bd + stream->num_in + stream->num_out; in sdw_cdns_pdi_init()
1131 cdns->num_ports = stream->num_pdi; in sdw_cdns_pdi_init()
1134 stream = &cdns->pdm; in sdw_cdns_pdi_init()
1135 ret = cdns_allocate_pdi(cdns, &stream->bd, in sdw_cdns_pdi_init()
1136 stream->num_bd, offset); in sdw_cdns_pdi_init()
1140 offset += stream->num_bd; in sdw_cdns_pdi_init()
1142 ret = cdns_allocate_pdi(cdns, &stream->in, in sdw_cdns_pdi_init()
1143 stream->num_in, offset); in sdw_cdns_pdi_init()
1147 offset += stream->num_in; in sdw_cdns_pdi_init()
1149 ret = cdns_allocate_pdi(cdns, &stream->out, in sdw_cdns_pdi_init()
1150 stream->num_out, offset); in sdw_cdns_pdi_init()
1156 stream->num_pdi = stream->num_bd + stream->num_in + stream->num_out; in sdw_cdns_pdi_init()
1157 cdns->num_ports += stream->num_pdi; in sdw_cdns_pdi_init()
1180 struct sdw_bus *bus = &cdns->bus; in cdns_init_clock_ctrl()
1181 struct sdw_master_prop *prop = &bus->prop; in cdns_init_clock_ctrl()
1187 divider = (prop->mclk_freq / prop->max_clk_freq) - 1; in cdns_init_clock_ctrl()
1198 val = cdns_set_initial_frame_shape(prop->default_row, in cdns_init_clock_ctrl()
1199 prop->default_col); in cdns_init_clock_ctrl()
1203 ssp_interval = prop->default_frame_rate / SDW_CADENCE_GSYNC_HZ; in cdns_init_clock_ctrl()
1209 * sdw_cdns_init() - Cadence initialization
1219 cdns->msg_count = cdns_readl(cdns, CDNS_MCP_FIFOLEVEL); in sdw_cdns_init()
1245 if (cdns->bus.multi_link) in sdw_cdns_init()
1246 /* Set Multi-master mode to take gsync into account */ in sdw_cdns_init()
1262 struct sdw_master_prop *prop = &bus->prop; in cdns_bus_conf()
1267 if (!params->curr_dr_freq) { in cdns_bus_conf()
1268 dev_err(cdns->dev, "NULL curr_dr_freq\n"); in cdns_bus_conf()
1269 return -EINVAL; in cdns_bus_conf()
1272 divider = prop->mclk_freq * SDW_DOUBLE_RATE_FACTOR / in cdns_bus_conf()
1273 params->curr_dr_freq; in cdns_bus_conf()
1274 divider--; /* divider is 1/(N+1) */ in cdns_bus_conf()
1276 if (params->next_bank) in cdns_bus_conf()
1294 dpn_config_off = CDNS_DPN_B1_CONFIG(p_params->num); in cdns_port_params()
1296 dpn_config_off = CDNS_DPN_B0_CONFIG(p_params->num); in cdns_port_params()
1300 u32p_replace_bits(&dpn_config, (p_params->bps - 1), CDNS_DPN_CONFIG_WL); in cdns_port_params()
1301 u32p_replace_bits(&dpn_config, p_params->flow_mode, CDNS_DPN_CONFIG_PORT_FLOW); in cdns_port_params()
1302 u32p_replace_bits(&dpn_config, p_params->data_mode, CDNS_DPN_CONFIG_PORT_DAT); in cdns_port_params()
1317 int num = t_params->port_num; in cdns_transport_params()
1338 u32p_replace_bits(&dpn_config, t_params->blk_grp_ctrl, CDNS_DPN_CONFIG_BGC); in cdns_transport_params()
1339 u32p_replace_bits(&dpn_config, t_params->blk_pkg_mode, CDNS_DPN_CONFIG_BPM); in cdns_transport_params()
1342 u32p_replace_bits(&dpn_offsetctrl, t_params->offset1, CDNS_DPN_OFFSET_CTRL_1); in cdns_transport_params()
1343 u32p_replace_bits(&dpn_offsetctrl, t_params->offset2, CDNS_DPN_OFFSET_CTRL_2); in cdns_transport_params()
1346 u32p_replace_bits(&dpn_hctrl, t_params->hstart, CDNS_DPN_HCTRL_HSTART); in cdns_transport_params()
1347 u32p_replace_bits(&dpn_hctrl, t_params->hstop, CDNS_DPN_HCTRL_HSTOP); in cdns_transport_params()
1348 u32p_replace_bits(&dpn_hctrl, t_params->lane_ctrl, CDNS_DPN_HCTRL_LCTRL); in cdns_transport_params()
1351 cdns_writel(cdns, dpn_samplectrl_off, (t_params->sample_interval - 1)); in cdns_transport_params()
1363 dpn_chnen_off = CDNS_DPN_B1_CH_EN(enable_ch->port_num); in cdns_port_enable()
1365 dpn_chnen_off = CDNS_DPN_B0_CH_EN(enable_ch->port_num); in cdns_port_enable()
1367 ch_mask = enable_ch->ch_mask * enable_ch->enable; in cdns_port_enable()
1404 dev_dbg(cdns->dev, "Clock is already stopped\n"); in sdw_cdns_clock_stop()
1409 * Before entering clock stop we mask the Slave in sdw_cdns_clock_stop()
1417 * master into a state in which it ignores wake-up trials in sdw_cdns_clock_stop()
1425 list_for_each_entry(slave, &cdns->bus.slaves, node) { in sdw_cdns_clock_stop()
1426 if (slave->status == SDW_SLAVE_ATTACHED || in sdw_cdns_clock_stop()
1427 slave->status == SDW_SLAVE_ALERT) { in sdw_cdns_clock_stop()
1450 dev_err(cdns->dev, "%s: config_update failed\n", __func__); in sdw_cdns_clock_stop()
1456 ret = sdw_bus_prep_clk_stop(&cdns->bus); in sdw_cdns_clock_stop()
1457 if (ret < 0 && ret != -ENODATA) { in sdw_cdns_clock_stop()
1458 dev_err(cdns->dev, "prepare clock stop failed %d\n", ret); in sdw_cdns_clock_stop()
1467 ret = sdw_bus_clk_stop(&cdns->bus); in sdw_cdns_clock_stop()
1468 if (ret < 0 && slave_present && ret != -ENODATA) { in sdw_cdns_clock_stop()
1469 dev_err(cdns->dev, "bus clock stop failed %d", ret); in sdw_cdns_clock_stop()
1477 dev_err(cdns->dev, "Clock stop failed %d\n", ret); in sdw_cdns_clock_stop()
1488 * may require a Severe Reset and re-enumeration after a wake.
1500 dev_err(cdns->dev, "Couldn't exit from clock stop\n"); in sdw_cdns_clock_restart()
1506 dev_err(cdns->dev, "clock stop exit failed %d\n", ret); in sdw_cdns_clock_restart()
1528 dev_err(cdns->dev, "%s: config_update failed\n", __func__); in sdw_cdns_clock_restart()
1532 ret = sdw_bus_exit_clk_stop(&cdns->bus); in sdw_cdns_clock_restart()
1534 dev_err(cdns->dev, "bus failed to exit clock stop %d\n", ret); in sdw_cdns_clock_restart()
1542 * sdw_cdns_probe() - Cadence probe routine
1547 init_completion(&cdns->tx_complete); in sdw_cdns_probe()
1548 cdns->bus.port_ops = &cdns_port_ops; in sdw_cdns_probe()
1550 INIT_WORK(&cdns->work, cdns_update_slave_status_work); in sdw_cdns_probe()
1556 void *stream, bool pcm, int direction) in cdns_set_sdw_stream() argument
1561 if (stream) { in cdns_set_sdw_stream()
1564 dma = dai->playback_dma_data; in cdns_set_sdw_stream()
1566 dma = dai->capture_dma_data; in cdns_set_sdw_stream()
1569 dev_err(dai->dev, in cdns_set_sdw_stream()
1571 dai->name); in cdns_set_sdw_stream()
1572 return -EINVAL; in cdns_set_sdw_stream()
1578 return -ENOMEM; in cdns_set_sdw_stream()
1581 dma->stream_type = SDW_STREAM_PCM; in cdns_set_sdw_stream()
1583 dma->stream_type = SDW_STREAM_PDM; in cdns_set_sdw_stream()
1585 dma->bus = &cdns->bus; in cdns_set_sdw_stream()
1586 dma->link_id = cdns->instance; in cdns_set_sdw_stream()
1588 dma->stream = stream; in cdns_set_sdw_stream()
1591 dai->playback_dma_data = dma; in cdns_set_sdw_stream()
1593 dai->capture_dma_data = dma; in cdns_set_sdw_stream()
1595 /* for NULL stream we release allocated dma_data */ in cdns_set_sdw_stream()
1597 kfree(dai->playback_dma_data); in cdns_set_sdw_stream()
1598 dai->playback_dma_data = NULL; in cdns_set_sdw_stream()
1600 kfree(dai->capture_dma_data); in cdns_set_sdw_stream()
1601 dai->capture_dma_data = NULL; in cdns_set_sdw_stream()
1609 * cdns_find_pdi() - Find a free PDI
1618 * expected to match, return NULL otherwise.
1636 * sdw_cdns_config_stream: Configure a stream
1651 if (cdns->bus.params.m_data_mode != SDW_PORT_DATA_MODE_NORMAL) in sdw_cdns_config_stream()
1654 offset = CDNS_PORTCTRL + pdi->num * CDNS_PORT_OFFSET; in sdw_cdns_config_stream()
1659 val = pdi->num; in sdw_cdns_config_stream()
1661 val |= FIELD_PREP(CDNS_PDI_CONFIG_CHANNEL, (1 << ch) - 1); in sdw_cdns_config_stream()
1662 cdns_writel(cdns, CDNS_PDI_CONFIG(pdi->num), val); in sdw_cdns_config_stream()
1667 * sdw_cdns_alloc_pdi() - Allocate a PDI
1670 * @stream: Stream to be allocated
1676 struct sdw_cdns_streams *stream, in sdw_cdns_alloc_pdi() argument
1682 pdi = cdns_find_pdi(cdns, 0, stream->num_in, stream->in, in sdw_cdns_alloc_pdi()
1685 pdi = cdns_find_pdi(cdns, 0, stream->num_out, stream->out, in sdw_cdns_alloc_pdi()
1688 /* check if we found a PDI, else find in bi-directional */ in sdw_cdns_alloc_pdi()
1690 pdi = cdns_find_pdi(cdns, 2, stream->num_bd, stream->bd, in sdw_cdns_alloc_pdi()
1694 pdi->l_ch_num = 0; in sdw_cdns_alloc_pdi()
1695 pdi->h_ch_num = ch - 1; in sdw_cdns_alloc_pdi()
1696 pdi->dir = dir; in sdw_cdns_alloc_pdi()
1697 pdi->ch_count = ch; in sdw_cdns_alloc_pdi()