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()
487 if (cdns->response_buf[i] & CDNS_MCP_RESP_NACK) { in cdns_fill_msg_resp()
489 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()
506 msg->buf[i + offset] = FIELD_GET(CDNS_MCP_RESP_RDATA, cdns->response_buf[i]); in cdns_fill_msg_resp()
520 if (cdns->msg_count != count) { in _cdns_xfer_msg()
522 cdns->msg_count = count; in _cdns_xfer_msg()
526 addr = msg->addr; in _cdns_xfer_msg()
529 data = FIELD_PREP(CDNS_MCP_CMD_DEV_ADDR, msg->dev_num); in _cdns_xfer_msg()
534 if (msg->flags == SDW_MSG_FLAG_WRITE) in _cdns_xfer_msg()
535 data |= msg->buf[i + offset]; in _cdns_xfer_msg()
537 data |= FIELD_PREP(CDNS_MCP_CMD_SSP_TAG, msg->ssp_sync); in _cdns_xfer_msg()
546 time = wait_for_completion_timeout(&cdns->tx_complete, in _cdns_xfer_msg()
549 dev_err(cdns->dev, "IO transfer timed out, cmd %d device %d addr %x len %d\n", in _cdns_xfer_msg()
550 cmd, msg->dev_num, msg->addr, msg->len); in _cdns_xfer_msg()
551 msg->len = 0; in _cdns_xfer_msg()
567 if (cdns->msg_count != CDNS_SCP_RX_FIFOLEVEL) { in cdns_program_scp_addr()
569 cdns->msg_count = CDNS_SCP_RX_FIFOLEVEL; in cdns_program_scp_addr()
572 data[0] = FIELD_PREP(CDNS_MCP_CMD_DEV_ADDR, msg->dev_num); in cdns_program_scp_addr()
579 data[0] |= msg->addr_page1; in cdns_program_scp_addr()
580 data[1] |= msg->addr_page2; in cdns_program_scp_addr()
587 time = wait_for_completion_timeout(&cdns->tx_complete, in cdns_program_scp_addr()
590 dev_err(cdns->dev, "SCP Msg trf timed out\n"); in cdns_program_scp_addr()
591 msg->len = 0; in cdns_program_scp_addr()
597 if (!(cdns->response_buf[i] & CDNS_MCP_RESP_ACK)) { in cdns_program_scp_addr()
599 dev_err(cdns->dev, "Program SCP Ack not received\n"); in cdns_program_scp_addr()
600 if (cdns->response_buf[i] & CDNS_MCP_RESP_NACK) { in cdns_program_scp_addr()
602 dev_err(cdns->dev, "Program SCP NACK received\n"); in cdns_program_scp_addr()
609 dev_err_ratelimited(cdns->dev, in cdns_program_scp_addr()
610 "SCP_addrpage NACKed for Slave %d\n", msg->dev_num); in cdns_program_scp_addr()
615 dev_dbg_ratelimited(cdns->dev, in cdns_program_scp_addr()
616 "SCP_addrpage ignored for Slave %d\n", msg->dev_num); in cdns_program_scp_addr()
627 if (msg->page) { in cdns_prep_msg()
630 msg->len = 0; in cdns_prep_msg()
635 switch (msg->flags) { in cdns_prep_msg()
645 dev_err(cdns->dev, "Invalid msg cmd: %d\n", msg->flags); in cdns_prep_msg()
646 return -EINVAL; in cdns_prep_msg()
662 for (i = 0; i < msg->len / CDNS_MCP_CMD_LEN; i++) { in cdns_xfer_msg()
669 if (!(msg->len % CDNS_MCP_CMD_LEN)) in cdns_xfer_msg()
673 msg->len % CDNS_MCP_CMD_LEN, false); in cdns_xfer_msg()
688 if (msg->len > 1) in cdns_xfer_msg_defer()
689 return -ENOTSUPP; in cdns_xfer_msg_defer()
695 cdns->defer = defer; in cdns_xfer_msg_defer()
696 cdns->defer->length = msg->len; in cdns_xfer_msg_defer()
698 return _cdns_xfer_msg(cdns, msg, cmd, 0, msg->len, true); in cdns_xfer_msg_defer()
731 cdns->response_buf[i] = cdns_readl(cdns, cmd_base); in cdns_read_response()
742 u32 mask; in cdns_update_slave_status() local
750 mask = (slave >> (i * CDNS_MCP_SLAVE_STATUS_NUM)) & in cdns_update_slave_status()
752 if (!mask) in cdns_update_slave_status()
758 if (mask & CDNS_MCP_SLAVE_INTSTAT_RESERVED) { in cdns_update_slave_status()
763 if (mask & CDNS_MCP_SLAVE_INTSTAT_ATTACHED) { in cdns_update_slave_status()
768 if (mask & CDNS_MCP_SLAVE_INTSTAT_ALERT) { in cdns_update_slave_status()
773 if (mask & CDNS_MCP_SLAVE_INTSTAT_NPRESENT) { in cdns_update_slave_status()
782 dev_warn_ratelimited(cdns->dev, in cdns_update_slave_status()
784 i, mask); in cdns_update_slave_status()
806 dev_warn_ratelimited(cdns->dev, in cdns_update_slave_status()
814 return sdw_handle_slave_status(&cdns->bus, status); in cdns_update_slave_status()
820 * sdw_cdns_irq() - Cadence interrupt handler
831 if (!cdns->link_up) in sdw_cdns_irq()
846 if (cdns->defer) { in sdw_cdns_irq()
847 cdns_fill_msg_resp(cdns, cdns->defer->msg, in sdw_cdns_irq()
848 cdns->defer->length, 0); in sdw_cdns_irq()
849 complete(&cdns->defer->complete); in sdw_cdns_irq()
850 cdns->defer = NULL; in sdw_cdns_irq()
852 complete(&cdns->tx_complete); in sdw_cdns_irq()
858 dev_err_ratelimited(cdns->dev, "Parity error\n"); in sdw_cdns_irq()
863 dev_err_ratelimited(cdns->dev, "Bus clash for control word\n"); in sdw_cdns_irq()
871 dev_err_ratelimited(cdns->dev, "Bus clash for data word\n"); in sdw_cdns_irq()
874 if (cdns->bus.params.m_data_mode != SDW_PORT_DATA_MODE_NORMAL && in sdw_cdns_irq()
880 dev_err_ratelimited(cdns->dev, "DP interrupt: PortIntStat %8x\n", in sdw_cdns_irq()
888 /* Mask the Slave interrupt and wake thread */ in sdw_cdns_irq()
901 if (cdns->interrupt_enabled) in sdw_cdns_irq()
902 schedule_work(&cdns->work); in sdw_cdns_irq()
922 dev_dbg_ratelimited(cdns->dev, "Slave status change\n"); in cdns_update_slave_status_work()
943 * sdw_cdns_exit_reset() - Program reset parameters and start bus operations
970 * sdw_cdns_enable_slave_interrupt() - Enable SDW slave interrupts
976 u32 mask; in cdns_enable_slave_interrupts() local
978 mask = cdns_readl(cdns, CDNS_MCP_INTMASK); in cdns_enable_slave_interrupts()
980 mask |= CDNS_MCP_INT_SLAVE_MASK; in cdns_enable_slave_interrupts()
982 mask &= ~CDNS_MCP_INT_SLAVE_MASK; in cdns_enable_slave_interrupts()
984 cdns_writel(cdns, CDNS_MCP_INTMASK, mask); in cdns_enable_slave_interrupts()
988 * sdw_cdns_enable_interrupt() - Enable SDW interrupts
996 u32 mask = 0; in sdw_cdns_enable_interrupt() local
1005 mask = CDNS_MCP_INT_SLAVE_MASK; in sdw_cdns_enable_interrupt()
1008 mask |= CDNS_MCP_INT_CTRL_CLASH | CDNS_MCP_INT_DATA_CLASH | in sdw_cdns_enable_interrupt()
1012 if (cdns->bus.params.m_data_mode != SDW_PORT_DATA_MODE_NORMAL) in sdw_cdns_enable_interrupt()
1013 mask |= CDNS_MCP_INT_DPINT; in sdw_cdns_enable_interrupt()
1016 mask |= CDNS_MCP_INT_RX_WL; in sdw_cdns_enable_interrupt()
1022 mask |= CDNS_MCP_INT_IRQ; in sdw_cdns_enable_interrupt()
1025 mask = interrupt_mask; in sdw_cdns_enable_interrupt()
1037 cdns->interrupt_enabled = state; in sdw_cdns_enable_interrupt()
1040 * Complete any on-going status updates before updating masks, in sdw_cdns_enable_interrupt()
1044 * the 3 mask updates below are complete, so in the interrupt in sdw_cdns_enable_interrupt()
1049 cancel_work_sync(&cdns->work); in sdw_cdns_enable_interrupt()
1053 cdns_writel(cdns, CDNS_MCP_INTMASK, mask); in sdw_cdns_enable_interrupt()
1060 struct sdw_cdns_pdi **stream, in cdns_allocate_pdi() argument
1069 pdi = devm_kcalloc(cdns->dev, num, sizeof(*pdi), GFP_KERNEL); in cdns_allocate_pdi()
1071 return -ENOMEM; in cdns_allocate_pdi()
1077 *stream = pdi; in cdns_allocate_pdi()
1082 * sdw_cdns_pdi_init() - PDI initialization routine
1085 * @config: Stream configurations
1090 struct sdw_cdns_streams *stream; in sdw_cdns_pdi_init() local
1094 cdns->pcm.num_bd = config.pcm_bd; in sdw_cdns_pdi_init()
1095 cdns->pcm.num_in = config.pcm_in; in sdw_cdns_pdi_init()
1096 cdns->pcm.num_out = config.pcm_out; in sdw_cdns_pdi_init()
1097 cdns->pdm.num_bd = config.pdm_bd; in sdw_cdns_pdi_init()
1098 cdns->pdm.num_in = config.pdm_in; in sdw_cdns_pdi_init()
1099 cdns->pdm.num_out = config.pdm_out; in sdw_cdns_pdi_init()
1102 stream = &cdns->pcm; in sdw_cdns_pdi_init()
1107 ret = cdns_allocate_pdi(cdns, &stream->bd, in sdw_cdns_pdi_init()
1108 stream->num_bd, offset); in sdw_cdns_pdi_init()
1112 offset += stream->num_bd; in sdw_cdns_pdi_init()
1114 ret = cdns_allocate_pdi(cdns, &stream->in, in sdw_cdns_pdi_init()
1115 stream->num_in, offset); in sdw_cdns_pdi_init()
1119 offset += stream->num_in; in sdw_cdns_pdi_init()
1121 ret = cdns_allocate_pdi(cdns, &stream->out, in sdw_cdns_pdi_init()
1122 stream->num_out, offset); in sdw_cdns_pdi_init()
1127 stream->num_pdi = stream->num_bd + stream->num_in + stream->num_out; in sdw_cdns_pdi_init()
1128 cdns->num_ports = stream->num_pdi; in sdw_cdns_pdi_init()
1131 stream = &cdns->pdm; in sdw_cdns_pdi_init()
1132 ret = cdns_allocate_pdi(cdns, &stream->bd, in sdw_cdns_pdi_init()
1133 stream->num_bd, offset); in sdw_cdns_pdi_init()
1137 offset += stream->num_bd; in sdw_cdns_pdi_init()
1139 ret = cdns_allocate_pdi(cdns, &stream->in, in sdw_cdns_pdi_init()
1140 stream->num_in, offset); in sdw_cdns_pdi_init()
1144 offset += stream->num_in; in sdw_cdns_pdi_init()
1146 ret = cdns_allocate_pdi(cdns, &stream->out, in sdw_cdns_pdi_init()
1147 stream->num_out, offset); in sdw_cdns_pdi_init()
1153 stream->num_pdi = stream->num_bd + stream->num_in + stream->num_out; in sdw_cdns_pdi_init()
1154 cdns->num_ports += stream->num_pdi; in sdw_cdns_pdi_init()
1177 struct sdw_bus *bus = &cdns->bus; in cdns_init_clock_ctrl()
1178 struct sdw_master_prop *prop = &bus->prop; in cdns_init_clock_ctrl()
1184 divider = (prop->mclk_freq / prop->max_clk_freq) - 1; in cdns_init_clock_ctrl()
1195 val = cdns_set_initial_frame_shape(prop->default_row, in cdns_init_clock_ctrl()
1196 prop->default_col); in cdns_init_clock_ctrl()
1200 ssp_interval = prop->default_frame_rate / SDW_CADENCE_GSYNC_HZ; in cdns_init_clock_ctrl()
1206 * sdw_cdns_init() - Cadence initialization
1216 cdns->msg_count = cdns_readl(cdns, CDNS_MCP_FIFOLEVEL); in sdw_cdns_init()
1242 if (cdns->bus.multi_link) in sdw_cdns_init()
1243 /* Set Multi-master mode to take gsync into account */ in sdw_cdns_init()
1259 struct sdw_master_prop *prop = &bus->prop; in cdns_bus_conf()
1264 if (!params->curr_dr_freq) { in cdns_bus_conf()
1265 dev_err(cdns->dev, "NULL curr_dr_freq\n"); in cdns_bus_conf()
1266 return -EINVAL; in cdns_bus_conf()
1269 divider = prop->mclk_freq * SDW_DOUBLE_RATE_FACTOR / in cdns_bus_conf()
1270 params->curr_dr_freq; in cdns_bus_conf()
1271 divider--; /* divider is 1/(N+1) */ in cdns_bus_conf()
1273 if (params->next_bank) in cdns_bus_conf()
1291 dpn_config_off = CDNS_DPN_B1_CONFIG(p_params->num); in cdns_port_params()
1293 dpn_config_off = CDNS_DPN_B0_CONFIG(p_params->num); in cdns_port_params()
1297 u32p_replace_bits(&dpn_config, (p_params->bps - 1), CDNS_DPN_CONFIG_WL); in cdns_port_params()
1298 u32p_replace_bits(&dpn_config, p_params->flow_mode, CDNS_DPN_CONFIG_PORT_FLOW); in cdns_port_params()
1299 u32p_replace_bits(&dpn_config, p_params->data_mode, CDNS_DPN_CONFIG_PORT_DAT); in cdns_port_params()
1314 int num = t_params->port_num; in cdns_transport_params()
1335 u32p_replace_bits(&dpn_config, t_params->blk_grp_ctrl, CDNS_DPN_CONFIG_BGC); in cdns_transport_params()
1336 u32p_replace_bits(&dpn_config, t_params->blk_pkg_mode, CDNS_DPN_CONFIG_BPM); in cdns_transport_params()
1339 u32p_replace_bits(&dpn_offsetctrl, t_params->offset1, CDNS_DPN_OFFSET_CTRL_1); in cdns_transport_params()
1340 u32p_replace_bits(&dpn_offsetctrl, t_params->offset2, CDNS_DPN_OFFSET_CTRL_2); in cdns_transport_params()
1343 u32p_replace_bits(&dpn_hctrl, t_params->hstart, CDNS_DPN_HCTRL_HSTART); in cdns_transport_params()
1344 u32p_replace_bits(&dpn_hctrl, t_params->hstop, CDNS_DPN_HCTRL_HSTOP); in cdns_transport_params()
1345 u32p_replace_bits(&dpn_hctrl, t_params->lane_ctrl, CDNS_DPN_HCTRL_LCTRL); in cdns_transport_params()
1348 cdns_writel(cdns, dpn_samplectrl_off, (t_params->sample_interval - 1)); in cdns_transport_params()
1360 dpn_chnen_off = CDNS_DPN_B1_CH_EN(enable_ch->port_num); in cdns_port_enable()
1362 dpn_chnen_off = CDNS_DPN_B0_CH_EN(enable_ch->port_num); in cdns_port_enable()
1364 ch_mask = enable_ch->ch_mask * enable_ch->enable; in cdns_port_enable()
1401 dev_dbg(cdns->dev, "Clock is already stopped\n"); in sdw_cdns_clock_stop()
1406 * Before entering clock stop we mask the Slave in sdw_cdns_clock_stop()
1414 * master into a state in which it ignores wake-up trials in sdw_cdns_clock_stop()
1422 list_for_each_entry(slave, &cdns->bus.slaves, node) { in sdw_cdns_clock_stop()
1423 if (slave->status == SDW_SLAVE_ATTACHED || in sdw_cdns_clock_stop()
1424 slave->status == SDW_SLAVE_ALERT) { in sdw_cdns_clock_stop()
1447 dev_err(cdns->dev, "%s: config_update failed\n", __func__); in sdw_cdns_clock_stop()
1452 ret = sdw_bus_prep_clk_stop(&cdns->bus); in sdw_cdns_clock_stop()
1454 dev_err(cdns->dev, "prepare clock stop failed %d", ret); in sdw_cdns_clock_stop()
1462 ret = sdw_bus_clk_stop(&cdns->bus); in sdw_cdns_clock_stop()
1463 if (ret < 0 && slave_present && ret != -ENODATA) { in sdw_cdns_clock_stop()
1464 dev_err(cdns->dev, "bus clock stop failed %d", ret); in sdw_cdns_clock_stop()
1472 dev_err(cdns->dev, "Clock stop failed %d\n", ret); in sdw_cdns_clock_stop()
1483 * may require a Severe Reset and re-enumeration after a wake.
1495 dev_err(cdns->dev, "Couldn't exit from clock stop\n"); in sdw_cdns_clock_restart()
1501 dev_err(cdns->dev, "clock stop exit failed %d\n", ret); in sdw_cdns_clock_restart()
1523 dev_err(cdns->dev, "%s: config_update failed\n", __func__); in sdw_cdns_clock_restart()
1527 ret = sdw_bus_exit_clk_stop(&cdns->bus); in sdw_cdns_clock_restart()
1529 dev_err(cdns->dev, "bus failed to exit clock stop %d\n", ret); in sdw_cdns_clock_restart()
1537 * sdw_cdns_probe() - Cadence probe routine
1542 init_completion(&cdns->tx_complete); in sdw_cdns_probe()
1543 cdns->bus.port_ops = &cdns_port_ops; in sdw_cdns_probe()
1545 INIT_WORK(&cdns->work, cdns_update_slave_status_work); in sdw_cdns_probe()
1551 void *stream, bool pcm, int direction) in cdns_set_sdw_stream() argument
1556 if (stream) { in cdns_set_sdw_stream()
1559 dma = dai->playback_dma_data; in cdns_set_sdw_stream()
1561 dma = dai->capture_dma_data; in cdns_set_sdw_stream()
1564 dev_err(dai->dev, in cdns_set_sdw_stream()
1566 dai->name); in cdns_set_sdw_stream()
1567 return -EINVAL; in cdns_set_sdw_stream()
1573 return -ENOMEM; in cdns_set_sdw_stream()
1576 dma->stream_type = SDW_STREAM_PCM; in cdns_set_sdw_stream()
1578 dma->stream_type = SDW_STREAM_PDM; in cdns_set_sdw_stream()
1580 dma->bus = &cdns->bus; in cdns_set_sdw_stream()
1581 dma->link_id = cdns->instance; in cdns_set_sdw_stream()
1583 dma->stream = stream; in cdns_set_sdw_stream()
1586 dai->playback_dma_data = dma; in cdns_set_sdw_stream()
1588 dai->capture_dma_data = dma; in cdns_set_sdw_stream()
1590 /* for NULL stream we release allocated dma_data */ in cdns_set_sdw_stream()
1592 kfree(dai->playback_dma_data); in cdns_set_sdw_stream()
1593 dai->playback_dma_data = NULL; in cdns_set_sdw_stream()
1595 kfree(dai->capture_dma_data); in cdns_set_sdw_stream()
1596 dai->capture_dma_data = NULL; in cdns_set_sdw_stream()
1604 * cdns_find_pdi() - Find a free PDI
1613 * expected to match, return NULL otherwise.
1631 * sdw_cdns_config_stream: Configure a stream
1646 if (cdns->bus.params.m_data_mode != SDW_PORT_DATA_MODE_NORMAL) in sdw_cdns_config_stream()
1649 offset = CDNS_PORTCTRL + pdi->num * CDNS_PORT_OFFSET; in sdw_cdns_config_stream()
1654 val = pdi->num; in sdw_cdns_config_stream()
1656 val |= FIELD_PREP(CDNS_PDI_CONFIG_CHANNEL, (1 << ch) - 1); in sdw_cdns_config_stream()
1657 cdns_writel(cdns, CDNS_PDI_CONFIG(pdi->num), val); in sdw_cdns_config_stream()
1662 * sdw_cdns_alloc_pdi() - Allocate a PDI
1665 * @stream: Stream to be allocated
1671 struct sdw_cdns_streams *stream, in sdw_cdns_alloc_pdi() argument
1677 pdi = cdns_find_pdi(cdns, 0, stream->num_in, stream->in, in sdw_cdns_alloc_pdi()
1680 pdi = cdns_find_pdi(cdns, 0, stream->num_out, stream->out, in sdw_cdns_alloc_pdi()
1683 /* check if we found a PDI, else find in bi-directional */ in sdw_cdns_alloc_pdi()
1685 pdi = cdns_find_pdi(cdns, 2, stream->num_bd, stream->bd, in sdw_cdns_alloc_pdi()
1689 pdi->l_ch_num = 0; in sdw_cdns_alloc_pdi()
1690 pdi->h_ch_num = ch - 1; in sdw_cdns_alloc_pdi()
1691 pdi->dir = dir; in sdw_cdns_alloc_pdi()
1692 pdi->ch_count = ch; in sdw_cdns_alloc_pdi()