stream.c (50046B)
1// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) 2// Copyright(c) 2015-18 Intel Corporation. 3 4/* 5 * stream.c - SoundWire Bus stream operations. 6 */ 7 8#include <linux/delay.h> 9#include <linux/device.h> 10#include <linux/init.h> 11#include <linux/module.h> 12#include <linux/mod_devicetable.h> 13#include <linux/slab.h> 14#include <linux/soundwire/sdw_registers.h> 15#include <linux/soundwire/sdw.h> 16#include <sound/soc.h> 17#include "bus.h" 18 19/* 20 * Array of supported rows and columns as per MIPI SoundWire Specification 1.1 21 * 22 * The rows are arranged as per the array index value programmed 23 * in register. The index 15 has dummy value 0 in order to fill hole. 24 */ 25int sdw_rows[SDW_FRAME_ROWS] = {48, 50, 60, 64, 75, 80, 125, 147, 26 96, 100, 120, 128, 150, 160, 250, 0, 27 192, 200, 240, 256, 72, 144, 90, 180}; 28EXPORT_SYMBOL(sdw_rows); 29 30int sdw_cols[SDW_FRAME_COLS] = {2, 4, 6, 8, 10, 12, 14, 16}; 31EXPORT_SYMBOL(sdw_cols); 32 33int sdw_find_col_index(int col) 34{ 35 int i; 36 37 for (i = 0; i < SDW_FRAME_COLS; i++) { 38 if (sdw_cols[i] == col) 39 return i; 40 } 41 42 pr_warn("Requested column not found, selecting lowest column no: 2\n"); 43 return 0; 44} 45EXPORT_SYMBOL(sdw_find_col_index); 46 47int sdw_find_row_index(int row) 48{ 49 int i; 50 51 for (i = 0; i < SDW_FRAME_ROWS; i++) { 52 if (sdw_rows[i] == row) 53 return i; 54 } 55 56 pr_warn("Requested row not found, selecting lowest row no: 48\n"); 57 return 0; 58} 59EXPORT_SYMBOL(sdw_find_row_index); 60 61static int _sdw_program_slave_port_params(struct sdw_bus *bus, 62 struct sdw_slave *slave, 63 struct sdw_transport_params *t_params, 64 enum sdw_dpn_type type) 65{ 66 u32 addr1, addr2, addr3, addr4; 67 int ret; 68 u16 wbuf; 69 70 if (bus->params.next_bank) { 71 addr1 = SDW_DPN_OFFSETCTRL2_B1(t_params->port_num); 72 addr2 = SDW_DPN_BLOCKCTRL3_B1(t_params->port_num); 73 addr3 = SDW_DPN_SAMPLECTRL2_B1(t_params->port_num); 74 addr4 = SDW_DPN_HCTRL_B1(t_params->port_num); 75 } else { 76 addr1 = SDW_DPN_OFFSETCTRL2_B0(t_params->port_num); 77 addr2 = SDW_DPN_BLOCKCTRL3_B0(t_params->port_num); 78 addr3 = SDW_DPN_SAMPLECTRL2_B0(t_params->port_num); 79 addr4 = SDW_DPN_HCTRL_B0(t_params->port_num); 80 } 81 82 /* Program DPN_OffsetCtrl2 registers */ 83 ret = sdw_write(slave, addr1, t_params->offset2); 84 if (ret < 0) { 85 dev_err(bus->dev, "DPN_OffsetCtrl2 register write failed\n"); 86 return ret; 87 } 88 89 /* Program DPN_BlockCtrl3 register */ 90 ret = sdw_write(slave, addr2, t_params->blk_pkg_mode); 91 if (ret < 0) { 92 dev_err(bus->dev, "DPN_BlockCtrl3 register write failed\n"); 93 return ret; 94 } 95 96 /* 97 * Data ports are FULL, SIMPLE and REDUCED. This function handles 98 * FULL and REDUCED only and beyond this point only FULL is 99 * handled, so bail out if we are not FULL data port type 100 */ 101 if (type != SDW_DPN_FULL) 102 return ret; 103 104 /* Program DPN_SampleCtrl2 register */ 105 wbuf = FIELD_GET(SDW_DPN_SAMPLECTRL_HIGH, t_params->sample_interval - 1); 106 107 ret = sdw_write(slave, addr3, wbuf); 108 if (ret < 0) { 109 dev_err(bus->dev, "DPN_SampleCtrl2 register write failed\n"); 110 return ret; 111 } 112 113 /* Program DPN_HCtrl register */ 114 wbuf = FIELD_PREP(SDW_DPN_HCTRL_HSTART, t_params->hstart); 115 wbuf |= FIELD_PREP(SDW_DPN_HCTRL_HSTOP, t_params->hstop); 116 117 ret = sdw_write(slave, addr4, wbuf); 118 if (ret < 0) 119 dev_err(bus->dev, "DPN_HCtrl register write failed\n"); 120 121 return ret; 122} 123 124static int sdw_program_slave_port_params(struct sdw_bus *bus, 125 struct sdw_slave_runtime *s_rt, 126 struct sdw_port_runtime *p_rt) 127{ 128 struct sdw_transport_params *t_params = &p_rt->transport_params; 129 struct sdw_port_params *p_params = &p_rt->port_params; 130 struct sdw_slave_prop *slave_prop = &s_rt->slave->prop; 131 u32 addr1, addr2, addr3, addr4, addr5, addr6; 132 struct sdw_dpn_prop *dpn_prop; 133 int ret; 134 u8 wbuf; 135 136 if (s_rt->slave->is_mockup_device) 137 return 0; 138 139 dpn_prop = sdw_get_slave_dpn_prop(s_rt->slave, 140 s_rt->direction, 141 t_params->port_num); 142 if (!dpn_prop) 143 return -EINVAL; 144 145 addr1 = SDW_DPN_PORTCTRL(t_params->port_num); 146 addr2 = SDW_DPN_BLOCKCTRL1(t_params->port_num); 147 148 if (bus->params.next_bank) { 149 addr3 = SDW_DPN_SAMPLECTRL1_B1(t_params->port_num); 150 addr4 = SDW_DPN_OFFSETCTRL1_B1(t_params->port_num); 151 addr5 = SDW_DPN_BLOCKCTRL2_B1(t_params->port_num); 152 addr6 = SDW_DPN_LANECTRL_B1(t_params->port_num); 153 154 } else { 155 addr3 = SDW_DPN_SAMPLECTRL1_B0(t_params->port_num); 156 addr4 = SDW_DPN_OFFSETCTRL1_B0(t_params->port_num); 157 addr5 = SDW_DPN_BLOCKCTRL2_B0(t_params->port_num); 158 addr6 = SDW_DPN_LANECTRL_B0(t_params->port_num); 159 } 160 161 /* Program DPN_PortCtrl register */ 162 wbuf = FIELD_PREP(SDW_DPN_PORTCTRL_DATAMODE, p_params->data_mode); 163 wbuf |= FIELD_PREP(SDW_DPN_PORTCTRL_FLOWMODE, p_params->flow_mode); 164 165 ret = sdw_update(s_rt->slave, addr1, 0xF, wbuf); 166 if (ret < 0) { 167 dev_err(&s_rt->slave->dev, 168 "DPN_PortCtrl register write failed for port %d\n", 169 t_params->port_num); 170 return ret; 171 } 172 173 if (!dpn_prop->read_only_wordlength) { 174 /* Program DPN_BlockCtrl1 register */ 175 ret = sdw_write(s_rt->slave, addr2, (p_params->bps - 1)); 176 if (ret < 0) { 177 dev_err(&s_rt->slave->dev, 178 "DPN_BlockCtrl1 register write failed for port %d\n", 179 t_params->port_num); 180 return ret; 181 } 182 } 183 184 /* Program DPN_SampleCtrl1 register */ 185 wbuf = (t_params->sample_interval - 1) & SDW_DPN_SAMPLECTRL_LOW; 186 ret = sdw_write(s_rt->slave, addr3, wbuf); 187 if (ret < 0) { 188 dev_err(&s_rt->slave->dev, 189 "DPN_SampleCtrl1 register write failed for port %d\n", 190 t_params->port_num); 191 return ret; 192 } 193 194 /* Program DPN_OffsetCtrl1 registers */ 195 ret = sdw_write(s_rt->slave, addr4, t_params->offset1); 196 if (ret < 0) { 197 dev_err(&s_rt->slave->dev, 198 "DPN_OffsetCtrl1 register write failed for port %d\n", 199 t_params->port_num); 200 return ret; 201 } 202 203 /* Program DPN_BlockCtrl2 register*/ 204 if (t_params->blk_grp_ctrl_valid) { 205 ret = sdw_write(s_rt->slave, addr5, t_params->blk_grp_ctrl); 206 if (ret < 0) { 207 dev_err(&s_rt->slave->dev, 208 "DPN_BlockCtrl2 reg write failed for port %d\n", 209 t_params->port_num); 210 return ret; 211 } 212 } 213 214 /* program DPN_LaneCtrl register */ 215 if (slave_prop->lane_control_support) { 216 ret = sdw_write(s_rt->slave, addr6, t_params->lane_ctrl); 217 if (ret < 0) { 218 dev_err(&s_rt->slave->dev, 219 "DPN_LaneCtrl register write failed for port %d\n", 220 t_params->port_num); 221 return ret; 222 } 223 } 224 225 if (dpn_prop->type != SDW_DPN_SIMPLE) { 226 ret = _sdw_program_slave_port_params(bus, s_rt->slave, 227 t_params, dpn_prop->type); 228 if (ret < 0) 229 dev_err(&s_rt->slave->dev, 230 "Transport reg write failed for port: %d\n", 231 t_params->port_num); 232 } 233 234 return ret; 235} 236 237static int sdw_program_master_port_params(struct sdw_bus *bus, 238 struct sdw_port_runtime *p_rt) 239{ 240 int ret; 241 242 /* 243 * we need to set transport and port parameters for the port. 244 * Transport parameters refers to the sample interval, offsets and 245 * hstart/stop etc of the data. Port parameters refers to word 246 * length, flow mode etc of the port 247 */ 248 ret = bus->port_ops->dpn_set_port_transport_params(bus, 249 &p_rt->transport_params, 250 bus->params.next_bank); 251 if (ret < 0) 252 return ret; 253 254 return bus->port_ops->dpn_set_port_params(bus, 255 &p_rt->port_params, 256 bus->params.next_bank); 257} 258 259/** 260 * sdw_program_port_params() - Programs transport parameters of Master(s) 261 * and Slave(s) 262 * 263 * @m_rt: Master stream runtime 264 */ 265static int sdw_program_port_params(struct sdw_master_runtime *m_rt) 266{ 267 struct sdw_slave_runtime *s_rt; 268 struct sdw_bus *bus = m_rt->bus; 269 struct sdw_port_runtime *p_rt; 270 int ret = 0; 271 272 /* Program transport & port parameters for Slave(s) */ 273 list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) { 274 list_for_each_entry(p_rt, &s_rt->port_list, port_node) { 275 ret = sdw_program_slave_port_params(bus, s_rt, p_rt); 276 if (ret < 0) 277 return ret; 278 } 279 } 280 281 /* Program transport & port parameters for Master(s) */ 282 list_for_each_entry(p_rt, &m_rt->port_list, port_node) { 283 ret = sdw_program_master_port_params(bus, p_rt); 284 if (ret < 0) 285 return ret; 286 } 287 288 return 0; 289} 290 291/** 292 * sdw_enable_disable_slave_ports: Enable/disable slave data port 293 * 294 * @bus: bus instance 295 * @s_rt: slave runtime 296 * @p_rt: port runtime 297 * @en: enable or disable operation 298 * 299 * This function only sets the enable/disable bits in the relevant bank, the 300 * actual enable/disable is done with a bank switch 301 */ 302static int sdw_enable_disable_slave_ports(struct sdw_bus *bus, 303 struct sdw_slave_runtime *s_rt, 304 struct sdw_port_runtime *p_rt, 305 bool en) 306{ 307 struct sdw_transport_params *t_params = &p_rt->transport_params; 308 u32 addr; 309 int ret; 310 311 if (bus->params.next_bank) 312 addr = SDW_DPN_CHANNELEN_B1(p_rt->num); 313 else 314 addr = SDW_DPN_CHANNELEN_B0(p_rt->num); 315 316 /* 317 * Since bus doesn't support sharing a port across two streams, 318 * it is safe to reset this register 319 */ 320 if (en) 321 ret = sdw_write(s_rt->slave, addr, p_rt->ch_mask); 322 else 323 ret = sdw_write(s_rt->slave, addr, 0x0); 324 325 if (ret < 0) 326 dev_err(&s_rt->slave->dev, 327 "Slave chn_en reg write failed:%d port:%d\n", 328 ret, t_params->port_num); 329 330 return ret; 331} 332 333static int sdw_enable_disable_master_ports(struct sdw_master_runtime *m_rt, 334 struct sdw_port_runtime *p_rt, 335 bool en) 336{ 337 struct sdw_transport_params *t_params = &p_rt->transport_params; 338 struct sdw_bus *bus = m_rt->bus; 339 struct sdw_enable_ch enable_ch; 340 int ret; 341 342 enable_ch.port_num = p_rt->num; 343 enable_ch.ch_mask = p_rt->ch_mask; 344 enable_ch.enable = en; 345 346 /* Perform Master port channel(s) enable/disable */ 347 if (bus->port_ops->dpn_port_enable_ch) { 348 ret = bus->port_ops->dpn_port_enable_ch(bus, 349 &enable_ch, 350 bus->params.next_bank); 351 if (ret < 0) { 352 dev_err(bus->dev, 353 "Master chn_en write failed:%d port:%d\n", 354 ret, t_params->port_num); 355 return ret; 356 } 357 } else { 358 dev_err(bus->dev, 359 "dpn_port_enable_ch not supported, %s failed\n", 360 en ? "enable" : "disable"); 361 return -EINVAL; 362 } 363 364 return 0; 365} 366 367/** 368 * sdw_enable_disable_ports() - Enable/disable port(s) for Master and 369 * Slave(s) 370 * 371 * @m_rt: Master stream runtime 372 * @en: mode (enable/disable) 373 */ 374static int sdw_enable_disable_ports(struct sdw_master_runtime *m_rt, bool en) 375{ 376 struct sdw_port_runtime *s_port, *m_port; 377 struct sdw_slave_runtime *s_rt; 378 int ret = 0; 379 380 /* Enable/Disable Slave port(s) */ 381 list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) { 382 list_for_each_entry(s_port, &s_rt->port_list, port_node) { 383 ret = sdw_enable_disable_slave_ports(m_rt->bus, s_rt, 384 s_port, en); 385 if (ret < 0) 386 return ret; 387 } 388 } 389 390 /* Enable/Disable Master port(s) */ 391 list_for_each_entry(m_port, &m_rt->port_list, port_node) { 392 ret = sdw_enable_disable_master_ports(m_rt, m_port, en); 393 if (ret < 0) 394 return ret; 395 } 396 397 return 0; 398} 399 400static int sdw_do_port_prep(struct sdw_slave_runtime *s_rt, 401 struct sdw_prepare_ch prep_ch, 402 enum sdw_port_prep_ops cmd) 403{ 404 const struct sdw_slave_ops *ops = s_rt->slave->ops; 405 int ret; 406 407 if (ops->port_prep) { 408 ret = ops->port_prep(s_rt->slave, &prep_ch, cmd); 409 if (ret < 0) { 410 dev_err(&s_rt->slave->dev, 411 "Slave Port Prep cmd %d failed: %d\n", 412 cmd, ret); 413 return ret; 414 } 415 } 416 417 return 0; 418} 419 420static int sdw_prep_deprep_slave_ports(struct sdw_bus *bus, 421 struct sdw_slave_runtime *s_rt, 422 struct sdw_port_runtime *p_rt, 423 bool prep) 424{ 425 struct completion *port_ready; 426 struct sdw_dpn_prop *dpn_prop; 427 struct sdw_prepare_ch prep_ch; 428 bool intr = false; 429 int ret = 0, val; 430 u32 addr; 431 432 prep_ch.num = p_rt->num; 433 prep_ch.ch_mask = p_rt->ch_mask; 434 435 dpn_prop = sdw_get_slave_dpn_prop(s_rt->slave, 436 s_rt->direction, 437 prep_ch.num); 438 if (!dpn_prop) { 439 dev_err(bus->dev, 440 "Slave Port:%d properties not found\n", prep_ch.num); 441 return -EINVAL; 442 } 443 444 prep_ch.prepare = prep; 445 446 prep_ch.bank = bus->params.next_bank; 447 448 if (dpn_prop->imp_def_interrupts || !dpn_prop->simple_ch_prep_sm || 449 bus->params.s_data_mode != SDW_PORT_DATA_MODE_NORMAL) 450 intr = true; 451 452 /* 453 * Enable interrupt before Port prepare. 454 * For Port de-prepare, it is assumed that port 455 * was prepared earlier 456 */ 457 if (prep && intr) { 458 ret = sdw_configure_dpn_intr(s_rt->slave, p_rt->num, prep, 459 dpn_prop->imp_def_interrupts); 460 if (ret < 0) 461 return ret; 462 } 463 464 /* Inform slave about the impending port prepare */ 465 sdw_do_port_prep(s_rt, prep_ch, SDW_OPS_PORT_PRE_PREP); 466 467 /* Prepare Slave port implementing CP_SM */ 468 if (!dpn_prop->simple_ch_prep_sm) { 469 addr = SDW_DPN_PREPARECTRL(p_rt->num); 470 471 if (prep) 472 ret = sdw_write(s_rt->slave, addr, p_rt->ch_mask); 473 else 474 ret = sdw_write(s_rt->slave, addr, 0x0); 475 476 if (ret < 0) { 477 dev_err(&s_rt->slave->dev, 478 "Slave prep_ctrl reg write failed\n"); 479 return ret; 480 } 481 482 /* Wait for completion on port ready */ 483 port_ready = &s_rt->slave->port_ready[prep_ch.num]; 484 wait_for_completion_timeout(port_ready, 485 msecs_to_jiffies(dpn_prop->ch_prep_timeout)); 486 487 val = sdw_read(s_rt->slave, SDW_DPN_PREPARESTATUS(p_rt->num)); 488 if ((val < 0) || (val & p_rt->ch_mask)) { 489 ret = (val < 0) ? val : -ETIMEDOUT; 490 dev_err(&s_rt->slave->dev, 491 "Chn prep failed for port %d: %d\n", prep_ch.num, ret); 492 return ret; 493 } 494 } 495 496 /* Inform slaves about ports prepared */ 497 sdw_do_port_prep(s_rt, prep_ch, SDW_OPS_PORT_POST_PREP); 498 499 /* Disable interrupt after Port de-prepare */ 500 if (!prep && intr) 501 ret = sdw_configure_dpn_intr(s_rt->slave, p_rt->num, prep, 502 dpn_prop->imp_def_interrupts); 503 504 return ret; 505} 506 507static int sdw_prep_deprep_master_ports(struct sdw_master_runtime *m_rt, 508 struct sdw_port_runtime *p_rt, 509 bool prep) 510{ 511 struct sdw_transport_params *t_params = &p_rt->transport_params; 512 struct sdw_bus *bus = m_rt->bus; 513 const struct sdw_master_port_ops *ops = bus->port_ops; 514 struct sdw_prepare_ch prep_ch; 515 int ret = 0; 516 517 prep_ch.num = p_rt->num; 518 prep_ch.ch_mask = p_rt->ch_mask; 519 prep_ch.prepare = prep; /* Prepare/De-prepare */ 520 prep_ch.bank = bus->params.next_bank; 521 522 /* Pre-prepare/Pre-deprepare port(s) */ 523 if (ops->dpn_port_prep) { 524 ret = ops->dpn_port_prep(bus, &prep_ch); 525 if (ret < 0) { 526 dev_err(bus->dev, "Port prepare failed for port:%d\n", 527 t_params->port_num); 528 return ret; 529 } 530 } 531 532 return ret; 533} 534 535/** 536 * sdw_prep_deprep_ports() - Prepare/De-prepare port(s) for Master(s) and 537 * Slave(s) 538 * 539 * @m_rt: Master runtime handle 540 * @prep: Prepare or De-prepare 541 */ 542static int sdw_prep_deprep_ports(struct sdw_master_runtime *m_rt, bool prep) 543{ 544 struct sdw_slave_runtime *s_rt; 545 struct sdw_port_runtime *p_rt; 546 int ret = 0; 547 548 /* Prepare/De-prepare Slave port(s) */ 549 list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) { 550 list_for_each_entry(p_rt, &s_rt->port_list, port_node) { 551 ret = sdw_prep_deprep_slave_ports(m_rt->bus, s_rt, 552 p_rt, prep); 553 if (ret < 0) 554 return ret; 555 } 556 } 557 558 /* Prepare/De-prepare Master port(s) */ 559 list_for_each_entry(p_rt, &m_rt->port_list, port_node) { 560 ret = sdw_prep_deprep_master_ports(m_rt, p_rt, prep); 561 if (ret < 0) 562 return ret; 563 } 564 565 return ret; 566} 567 568/** 569 * sdw_notify_config() - Notify bus configuration 570 * 571 * @m_rt: Master runtime handle 572 * 573 * This function notifies the Master(s) and Slave(s) of the 574 * new bus configuration. 575 */ 576static int sdw_notify_config(struct sdw_master_runtime *m_rt) 577{ 578 struct sdw_slave_runtime *s_rt; 579 struct sdw_bus *bus = m_rt->bus; 580 struct sdw_slave *slave; 581 int ret = 0; 582 583 if (bus->ops->set_bus_conf) { 584 ret = bus->ops->set_bus_conf(bus, &bus->params); 585 if (ret < 0) 586 return ret; 587 } 588 589 list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) { 590 slave = s_rt->slave; 591 592 if (slave->ops->bus_config) { 593 ret = slave->ops->bus_config(slave, &bus->params); 594 if (ret < 0) { 595 dev_err(bus->dev, "Notify Slave: %d failed\n", 596 slave->dev_num); 597 return ret; 598 } 599 } 600 } 601 602 return ret; 603} 604 605/** 606 * sdw_program_params() - Program transport and port parameters for Master(s) 607 * and Slave(s) 608 * 609 * @bus: SDW bus instance 610 * @prepare: true if sdw_program_params() is called by _prepare. 611 */ 612static int sdw_program_params(struct sdw_bus *bus, bool prepare) 613{ 614 struct sdw_master_runtime *m_rt; 615 int ret = 0; 616 617 list_for_each_entry(m_rt, &bus->m_rt_list, bus_node) { 618 619 /* 620 * this loop walks through all master runtimes for a 621 * bus, but the ports can only be configured while 622 * explicitly preparing a stream or handling an 623 * already-prepared stream otherwise. 624 */ 625 if (!prepare && 626 m_rt->stream->state == SDW_STREAM_CONFIGURED) 627 continue; 628 629 ret = sdw_program_port_params(m_rt); 630 if (ret < 0) { 631 dev_err(bus->dev, 632 "Program transport params failed: %d\n", ret); 633 return ret; 634 } 635 636 ret = sdw_notify_config(m_rt); 637 if (ret < 0) { 638 dev_err(bus->dev, 639 "Notify bus config failed: %d\n", ret); 640 return ret; 641 } 642 643 /* Enable port(s) on alternate bank for all active streams */ 644 if (m_rt->stream->state != SDW_STREAM_ENABLED) 645 continue; 646 647 ret = sdw_enable_disable_ports(m_rt, true); 648 if (ret < 0) { 649 dev_err(bus->dev, "Enable channel failed: %d\n", ret); 650 return ret; 651 } 652 } 653 654 return ret; 655} 656 657static int sdw_bank_switch(struct sdw_bus *bus, int m_rt_count) 658{ 659 int col_index, row_index; 660 bool multi_link; 661 struct sdw_msg *wr_msg; 662 u8 *wbuf; 663 int ret; 664 u16 addr; 665 666 wr_msg = kzalloc(sizeof(*wr_msg), GFP_KERNEL); 667 if (!wr_msg) 668 return -ENOMEM; 669 670 bus->defer_msg.msg = wr_msg; 671 672 wbuf = kzalloc(sizeof(*wbuf), GFP_KERNEL); 673 if (!wbuf) { 674 ret = -ENOMEM; 675 goto error_1; 676 } 677 678 /* Get row and column index to program register */ 679 col_index = sdw_find_col_index(bus->params.col); 680 row_index = sdw_find_row_index(bus->params.row); 681 wbuf[0] = col_index | (row_index << 3); 682 683 if (bus->params.next_bank) 684 addr = SDW_SCP_FRAMECTRL_B1; 685 else 686 addr = SDW_SCP_FRAMECTRL_B0; 687 688 sdw_fill_msg(wr_msg, NULL, addr, 1, SDW_BROADCAST_DEV_NUM, 689 SDW_MSG_FLAG_WRITE, wbuf); 690 wr_msg->ssp_sync = true; 691 692 /* 693 * Set the multi_link flag only when both the hardware supports 694 * and hardware-based sync is required 695 */ 696 multi_link = bus->multi_link && (m_rt_count >= bus->hw_sync_min_links); 697 698 if (multi_link) 699 ret = sdw_transfer_defer(bus, wr_msg, &bus->defer_msg); 700 else 701 ret = sdw_transfer(bus, wr_msg); 702 703 if (ret < 0 && ret != -ENODATA) { 704 dev_err(bus->dev, "Slave frame_ctrl reg write failed\n"); 705 goto error; 706 } 707 708 if (!multi_link) { 709 kfree(wr_msg); 710 kfree(wbuf); 711 bus->defer_msg.msg = NULL; 712 bus->params.curr_bank = !bus->params.curr_bank; 713 bus->params.next_bank = !bus->params.next_bank; 714 } 715 716 return 0; 717 718error: 719 kfree(wbuf); 720error_1: 721 kfree(wr_msg); 722 bus->defer_msg.msg = NULL; 723 return ret; 724} 725 726/** 727 * sdw_ml_sync_bank_switch: Multilink register bank switch 728 * 729 * @bus: SDW bus instance 730 * 731 * Caller function should free the buffers on error 732 */ 733static int sdw_ml_sync_bank_switch(struct sdw_bus *bus) 734{ 735 unsigned long time_left; 736 737 if (!bus->multi_link) 738 return 0; 739 740 /* Wait for completion of transfer */ 741 time_left = wait_for_completion_timeout(&bus->defer_msg.complete, 742 bus->bank_switch_timeout); 743 744 if (!time_left) { 745 dev_err(bus->dev, "Controller Timed out on bank switch\n"); 746 return -ETIMEDOUT; 747 } 748 749 bus->params.curr_bank = !bus->params.curr_bank; 750 bus->params.next_bank = !bus->params.next_bank; 751 752 if (bus->defer_msg.msg) { 753 kfree(bus->defer_msg.msg->buf); 754 kfree(bus->defer_msg.msg); 755 } 756 757 return 0; 758} 759 760static int do_bank_switch(struct sdw_stream_runtime *stream) 761{ 762 struct sdw_master_runtime *m_rt; 763 const struct sdw_master_ops *ops; 764 struct sdw_bus *bus; 765 bool multi_link = false; 766 int m_rt_count; 767 int ret = 0; 768 769 m_rt_count = stream->m_rt_count; 770 771 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 772 bus = m_rt->bus; 773 ops = bus->ops; 774 775 if (bus->multi_link && m_rt_count >= bus->hw_sync_min_links) { 776 multi_link = true; 777 mutex_lock(&bus->msg_lock); 778 } 779 780 /* Pre-bank switch */ 781 if (ops->pre_bank_switch) { 782 ret = ops->pre_bank_switch(bus); 783 if (ret < 0) { 784 dev_err(bus->dev, 785 "Pre bank switch op failed: %d\n", ret); 786 goto msg_unlock; 787 } 788 } 789 790 /* 791 * Perform Bank switch operation. 792 * For multi link cases, the actual bank switch is 793 * synchronized across all Masters and happens later as a 794 * part of post_bank_switch ops. 795 */ 796 ret = sdw_bank_switch(bus, m_rt_count); 797 if (ret < 0) { 798 dev_err(bus->dev, "Bank switch failed: %d\n", ret); 799 goto error; 800 } 801 } 802 803 /* 804 * For multi link cases, it is expected that the bank switch is 805 * triggered by the post_bank_switch for the first Master in the list 806 * and for the other Masters the post_bank_switch() should return doing 807 * nothing. 808 */ 809 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 810 bus = m_rt->bus; 811 ops = bus->ops; 812 813 /* Post-bank switch */ 814 if (ops->post_bank_switch) { 815 ret = ops->post_bank_switch(bus); 816 if (ret < 0) { 817 dev_err(bus->dev, 818 "Post bank switch op failed: %d\n", 819 ret); 820 goto error; 821 } 822 } else if (multi_link) { 823 dev_err(bus->dev, 824 "Post bank switch ops not implemented\n"); 825 ret = -EINVAL; 826 goto error; 827 } 828 829 /* Set the bank switch timeout to default, if not set */ 830 if (!bus->bank_switch_timeout) 831 bus->bank_switch_timeout = DEFAULT_BANK_SWITCH_TIMEOUT; 832 833 /* Check if bank switch was successful */ 834 ret = sdw_ml_sync_bank_switch(bus); 835 if (ret < 0) { 836 dev_err(bus->dev, 837 "multi link bank switch failed: %d\n", ret); 838 goto error; 839 } 840 841 if (multi_link) 842 mutex_unlock(&bus->msg_lock); 843 } 844 845 return ret; 846 847error: 848 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 849 bus = m_rt->bus; 850 if (bus->defer_msg.msg) { 851 kfree(bus->defer_msg.msg->buf); 852 kfree(bus->defer_msg.msg); 853 } 854 } 855 856msg_unlock: 857 858 if (multi_link) { 859 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 860 bus = m_rt->bus; 861 if (mutex_is_locked(&bus->msg_lock)) 862 mutex_unlock(&bus->msg_lock); 863 } 864 } 865 866 return ret; 867} 868 869static struct sdw_port_runtime *sdw_port_alloc(struct list_head *port_list) 870{ 871 struct sdw_port_runtime *p_rt; 872 873 p_rt = kzalloc(sizeof(*p_rt), GFP_KERNEL); 874 if (!p_rt) 875 return NULL; 876 877 list_add_tail(&p_rt->port_node, port_list); 878 879 return p_rt; 880} 881 882static int sdw_port_config(struct sdw_port_runtime *p_rt, 883 struct sdw_port_config *port_config, 884 int port_index) 885{ 886 p_rt->ch_mask = port_config[port_index].ch_mask; 887 p_rt->num = port_config[port_index].num; 888 889 /* 890 * TODO: Check port capabilities for requested configuration 891 */ 892 893 return 0; 894} 895 896static void sdw_port_free(struct sdw_port_runtime *p_rt) 897{ 898 list_del(&p_rt->port_node); 899 kfree(p_rt); 900} 901 902static bool sdw_slave_port_allocated(struct sdw_slave_runtime *s_rt) 903{ 904 return !list_empty(&s_rt->port_list); 905} 906 907static void sdw_slave_port_free(struct sdw_slave *slave, 908 struct sdw_stream_runtime *stream) 909{ 910 struct sdw_port_runtime *p_rt, *_p_rt; 911 struct sdw_master_runtime *m_rt; 912 struct sdw_slave_runtime *s_rt; 913 914 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 915 list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) { 916 if (s_rt->slave != slave) 917 continue; 918 919 list_for_each_entry_safe(p_rt, _p_rt, 920 &s_rt->port_list, port_node) { 921 sdw_port_free(p_rt); 922 } 923 } 924 } 925} 926 927static int sdw_slave_port_alloc(struct sdw_slave *slave, 928 struct sdw_slave_runtime *s_rt, 929 unsigned int num_config) 930{ 931 struct sdw_port_runtime *p_rt; 932 int i; 933 934 /* Iterate for number of ports to perform initialization */ 935 for (i = 0; i < num_config; i++) { 936 p_rt = sdw_port_alloc(&s_rt->port_list); 937 if (!p_rt) 938 return -ENOMEM; 939 } 940 941 return 0; 942} 943 944static int sdw_slave_port_is_valid_range(struct device *dev, int num) 945{ 946 if (!SDW_VALID_PORT_RANGE(num)) { 947 dev_err(dev, "SoundWire: Invalid port number :%d\n", num); 948 return -EINVAL; 949 } 950 951 return 0; 952} 953 954static int sdw_slave_port_config(struct sdw_slave *slave, 955 struct sdw_slave_runtime *s_rt, 956 struct sdw_port_config *port_config) 957{ 958 struct sdw_port_runtime *p_rt; 959 int ret; 960 int i; 961 962 i = 0; 963 list_for_each_entry(p_rt, &s_rt->port_list, port_node) { 964 /* 965 * TODO: Check valid port range as defined by DisCo/ 966 * slave 967 */ 968 ret = sdw_slave_port_is_valid_range(&slave->dev, port_config[i].num); 969 if (ret < 0) 970 return ret; 971 972 ret = sdw_port_config(p_rt, port_config, i); 973 if (ret < 0) 974 return ret; 975 i++; 976 } 977 978 return 0; 979} 980 981static bool sdw_master_port_allocated(struct sdw_master_runtime *m_rt) 982{ 983 return !list_empty(&m_rt->port_list); 984} 985 986static void sdw_master_port_free(struct sdw_master_runtime *m_rt) 987{ 988 struct sdw_port_runtime *p_rt, *_p_rt; 989 990 list_for_each_entry_safe(p_rt, _p_rt, &m_rt->port_list, port_node) { 991 sdw_port_free(p_rt); 992 } 993} 994 995static int sdw_master_port_alloc(struct sdw_master_runtime *m_rt, 996 unsigned int num_ports) 997{ 998 struct sdw_port_runtime *p_rt; 999 int i; 1000 1001 /* Iterate for number of ports to perform initialization */ 1002 for (i = 0; i < num_ports; i++) { 1003 p_rt = sdw_port_alloc(&m_rt->port_list); 1004 if (!p_rt) 1005 return -ENOMEM; 1006 } 1007 1008 return 0; 1009} 1010 1011static int sdw_master_port_config(struct sdw_master_runtime *m_rt, 1012 struct sdw_port_config *port_config) 1013{ 1014 struct sdw_port_runtime *p_rt; 1015 int ret; 1016 int i; 1017 1018 i = 0; 1019 list_for_each_entry(p_rt, &m_rt->port_list, port_node) { 1020 ret = sdw_port_config(p_rt, port_config, i); 1021 if (ret < 0) 1022 return ret; 1023 i++; 1024 } 1025 1026 return 0; 1027} 1028 1029/** 1030 * sdw_slave_rt_alloc() - Allocate a Slave runtime handle. 1031 * 1032 * @slave: Slave handle 1033 * @m_rt: Master runtime handle 1034 * 1035 * This function is to be called with bus_lock held. 1036 */ 1037static struct sdw_slave_runtime 1038*sdw_slave_rt_alloc(struct sdw_slave *slave, 1039 struct sdw_master_runtime *m_rt) 1040{ 1041 struct sdw_slave_runtime *s_rt; 1042 1043 s_rt = kzalloc(sizeof(*s_rt), GFP_KERNEL); 1044 if (!s_rt) 1045 return NULL; 1046 1047 INIT_LIST_HEAD(&s_rt->port_list); 1048 s_rt->slave = slave; 1049 1050 list_add_tail(&s_rt->m_rt_node, &m_rt->slave_rt_list); 1051 1052 return s_rt; 1053} 1054 1055/** 1056 * sdw_slave_rt_config() - Configure a Slave runtime handle. 1057 * 1058 * @s_rt: Slave runtime handle 1059 * @stream_config: Stream configuration 1060 * 1061 * This function is to be called with bus_lock held. 1062 */ 1063static int sdw_slave_rt_config(struct sdw_slave_runtime *s_rt, 1064 struct sdw_stream_config *stream_config) 1065{ 1066 s_rt->ch_count = stream_config->ch_count; 1067 s_rt->direction = stream_config->direction; 1068 1069 return 0; 1070} 1071 1072static struct sdw_slave_runtime *sdw_slave_rt_find(struct sdw_slave *slave, 1073 struct sdw_stream_runtime *stream) 1074{ 1075 struct sdw_slave_runtime *s_rt, *_s_rt; 1076 struct sdw_master_runtime *m_rt; 1077 1078 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 1079 /* Retrieve Slave runtime handle */ 1080 list_for_each_entry_safe(s_rt, _s_rt, 1081 &m_rt->slave_rt_list, m_rt_node) { 1082 if (s_rt->slave == slave) 1083 return s_rt; 1084 } 1085 } 1086 return NULL; 1087} 1088 1089/** 1090 * sdw_slave_rt_free() - Free Slave(s) runtime handle 1091 * 1092 * @slave: Slave handle. 1093 * @stream: Stream runtime handle. 1094 * 1095 * This function is to be called with bus_lock held. 1096 */ 1097static void sdw_slave_rt_free(struct sdw_slave *slave, 1098 struct sdw_stream_runtime *stream) 1099{ 1100 struct sdw_slave_runtime *s_rt; 1101 1102 s_rt = sdw_slave_rt_find(slave, stream); 1103 if (s_rt) { 1104 list_del(&s_rt->m_rt_node); 1105 kfree(s_rt); 1106 } 1107} 1108 1109static struct sdw_master_runtime 1110*sdw_master_rt_find(struct sdw_bus *bus, 1111 struct sdw_stream_runtime *stream) 1112{ 1113 struct sdw_master_runtime *m_rt; 1114 1115 /* Retrieve Bus handle if already available */ 1116 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 1117 if (m_rt->bus == bus) 1118 return m_rt; 1119 } 1120 1121 return NULL; 1122} 1123 1124/** 1125 * sdw_master_rt_alloc() - Allocates a Master runtime handle 1126 * 1127 * @bus: SDW bus instance 1128 * @stream: Stream runtime handle. 1129 * 1130 * This function is to be called with bus_lock held. 1131 */ 1132static struct sdw_master_runtime 1133*sdw_master_rt_alloc(struct sdw_bus *bus, 1134 struct sdw_stream_runtime *stream) 1135{ 1136 struct sdw_master_runtime *m_rt; 1137 1138 m_rt = kzalloc(sizeof(*m_rt), GFP_KERNEL); 1139 if (!m_rt) 1140 return NULL; 1141 1142 /* Initialization of Master runtime handle */ 1143 INIT_LIST_HEAD(&m_rt->port_list); 1144 INIT_LIST_HEAD(&m_rt->slave_rt_list); 1145 list_add_tail(&m_rt->stream_node, &stream->master_list); 1146 1147 list_add_tail(&m_rt->bus_node, &bus->m_rt_list); 1148 1149 m_rt->bus = bus; 1150 m_rt->stream = stream; 1151 1152 return m_rt; 1153} 1154 1155/** 1156 * sdw_master_rt_config() - Configure Master runtime handle 1157 * 1158 * @m_rt: Master runtime handle 1159 * @stream_config: Stream configuration 1160 * 1161 * This function is to be called with bus_lock held. 1162 */ 1163 1164static int sdw_master_rt_config(struct sdw_master_runtime *m_rt, 1165 struct sdw_stream_config *stream_config) 1166{ 1167 m_rt->ch_count = stream_config->ch_count; 1168 m_rt->direction = stream_config->direction; 1169 1170 return 0; 1171} 1172 1173/** 1174 * sdw_master_rt_free() - Free Master runtime handle 1175 * 1176 * @m_rt: Master runtime node 1177 * @stream: Stream runtime handle. 1178 * 1179 * This function is to be called with bus_lock held 1180 * It frees the Master runtime handle and associated Slave(s) runtime 1181 * handle. If this is called first then sdw_slave_rt_free() will have 1182 * no effect as Slave(s) runtime handle would already be freed up. 1183 */ 1184static void sdw_master_rt_free(struct sdw_master_runtime *m_rt, 1185 struct sdw_stream_runtime *stream) 1186{ 1187 struct sdw_slave_runtime *s_rt, *_s_rt; 1188 1189 list_for_each_entry_safe(s_rt, _s_rt, &m_rt->slave_rt_list, m_rt_node) { 1190 sdw_slave_port_free(s_rt->slave, stream); 1191 sdw_slave_rt_free(s_rt->slave, stream); 1192 } 1193 1194 list_del(&m_rt->stream_node); 1195 list_del(&m_rt->bus_node); 1196 kfree(m_rt); 1197} 1198 1199/** 1200 * sdw_config_stream() - Configure the allocated stream 1201 * 1202 * @dev: SDW device 1203 * @stream: SoundWire stream 1204 * @stream_config: Stream configuration for audio stream 1205 * @is_slave: is API called from Slave or Master 1206 * 1207 * This function is to be called with bus_lock held. 1208 */ 1209static int sdw_config_stream(struct device *dev, 1210 struct sdw_stream_runtime *stream, 1211 struct sdw_stream_config *stream_config, 1212 bool is_slave) 1213{ 1214 /* 1215 * Update the stream rate, channel and bps based on data 1216 * source. For more than one data source (multilink), 1217 * match the rate, bps, stream type and increment number of channels. 1218 * 1219 * If rate/bps is zero, it means the values are not set, so skip 1220 * comparison and allow the value to be set and stored in stream 1221 */ 1222 if (stream->params.rate && 1223 stream->params.rate != stream_config->frame_rate) { 1224 dev_err(dev, "rate not matching, stream:%s\n", stream->name); 1225 return -EINVAL; 1226 } 1227 1228 if (stream->params.bps && 1229 stream->params.bps != stream_config->bps) { 1230 dev_err(dev, "bps not matching, stream:%s\n", stream->name); 1231 return -EINVAL; 1232 } 1233 1234 stream->type = stream_config->type; 1235 stream->params.rate = stream_config->frame_rate; 1236 stream->params.bps = stream_config->bps; 1237 1238 /* TODO: Update this check during Device-device support */ 1239 if (is_slave) 1240 stream->params.ch_count += stream_config->ch_count; 1241 1242 return 0; 1243} 1244 1245/** 1246 * sdw_get_slave_dpn_prop() - Get Slave port capabilities 1247 * 1248 * @slave: Slave handle 1249 * @direction: Data direction. 1250 * @port_num: Port number 1251 */ 1252struct sdw_dpn_prop *sdw_get_slave_dpn_prop(struct sdw_slave *slave, 1253 enum sdw_data_direction direction, 1254 unsigned int port_num) 1255{ 1256 struct sdw_dpn_prop *dpn_prop; 1257 u8 num_ports; 1258 int i; 1259 1260 if (direction == SDW_DATA_DIR_TX) { 1261 num_ports = hweight32(slave->prop.source_ports); 1262 dpn_prop = slave->prop.src_dpn_prop; 1263 } else { 1264 num_ports = hweight32(slave->prop.sink_ports); 1265 dpn_prop = slave->prop.sink_dpn_prop; 1266 } 1267 1268 for (i = 0; i < num_ports; i++) { 1269 if (dpn_prop[i].num == port_num) 1270 return &dpn_prop[i]; 1271 } 1272 1273 return NULL; 1274} 1275 1276/** 1277 * sdw_acquire_bus_lock: Acquire bus lock for all Master runtime(s) 1278 * 1279 * @stream: SoundWire stream 1280 * 1281 * Acquire bus_lock for each of the master runtime(m_rt) part of this 1282 * stream to reconfigure the bus. 1283 * NOTE: This function is called from SoundWire stream ops and is 1284 * expected that a global lock is held before acquiring bus_lock. 1285 */ 1286static void sdw_acquire_bus_lock(struct sdw_stream_runtime *stream) 1287{ 1288 struct sdw_master_runtime *m_rt; 1289 struct sdw_bus *bus; 1290 1291 /* Iterate for all Master(s) in Master list */ 1292 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 1293 bus = m_rt->bus; 1294 1295 mutex_lock(&bus->bus_lock); 1296 } 1297} 1298 1299/** 1300 * sdw_release_bus_lock: Release bus lock for all Master runtime(s) 1301 * 1302 * @stream: SoundWire stream 1303 * 1304 * Release the previously held bus_lock after reconfiguring the bus. 1305 * NOTE: This function is called from SoundWire stream ops and is 1306 * expected that a global lock is held before releasing bus_lock. 1307 */ 1308static void sdw_release_bus_lock(struct sdw_stream_runtime *stream) 1309{ 1310 struct sdw_master_runtime *m_rt; 1311 struct sdw_bus *bus; 1312 1313 /* Iterate for all Master(s) in Master list */ 1314 list_for_each_entry_reverse(m_rt, &stream->master_list, stream_node) { 1315 bus = m_rt->bus; 1316 mutex_unlock(&bus->bus_lock); 1317 } 1318} 1319 1320static int _sdw_prepare_stream(struct sdw_stream_runtime *stream, 1321 bool update_params) 1322{ 1323 struct sdw_master_runtime *m_rt; 1324 struct sdw_bus *bus = NULL; 1325 struct sdw_master_prop *prop; 1326 struct sdw_bus_params params; 1327 int ret; 1328 1329 /* Prepare Master(s) and Slave(s) port(s) associated with stream */ 1330 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 1331 bus = m_rt->bus; 1332 prop = &bus->prop; 1333 memcpy(¶ms, &bus->params, sizeof(params)); 1334 1335 /* TODO: Support Asynchronous mode */ 1336 if ((prop->max_clk_freq % stream->params.rate) != 0) { 1337 dev_err(bus->dev, "Async mode not supported\n"); 1338 return -EINVAL; 1339 } 1340 1341 if (!update_params) 1342 goto program_params; 1343 1344 /* Increment cumulative bus bandwidth */ 1345 /* TODO: Update this during Device-Device support */ 1346 bus->params.bandwidth += m_rt->stream->params.rate * 1347 m_rt->ch_count * m_rt->stream->params.bps; 1348 1349 /* Compute params */ 1350 if (bus->compute_params) { 1351 ret = bus->compute_params(bus); 1352 if (ret < 0) { 1353 dev_err(bus->dev, "Compute params failed: %d\n", 1354 ret); 1355 return ret; 1356 } 1357 } 1358 1359program_params: 1360 /* Program params */ 1361 ret = sdw_program_params(bus, true); 1362 if (ret < 0) { 1363 dev_err(bus->dev, "Program params failed: %d\n", ret); 1364 goto restore_params; 1365 } 1366 } 1367 1368 if (!bus) { 1369 pr_err("Configuration error in %s\n", __func__); 1370 return -EINVAL; 1371 } 1372 1373 ret = do_bank_switch(stream); 1374 if (ret < 0) { 1375 dev_err(bus->dev, "Bank switch failed: %d\n", ret); 1376 goto restore_params; 1377 } 1378 1379 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 1380 bus = m_rt->bus; 1381 1382 /* Prepare port(s) on the new clock configuration */ 1383 ret = sdw_prep_deprep_ports(m_rt, true); 1384 if (ret < 0) { 1385 dev_err(bus->dev, "Prepare port(s) failed ret = %d\n", 1386 ret); 1387 return ret; 1388 } 1389 } 1390 1391 stream->state = SDW_STREAM_PREPARED; 1392 1393 return ret; 1394 1395restore_params: 1396 memcpy(&bus->params, ¶ms, sizeof(params)); 1397 return ret; 1398} 1399 1400/** 1401 * sdw_prepare_stream() - Prepare SoundWire stream 1402 * 1403 * @stream: Soundwire stream 1404 * 1405 * Documentation/driver-api/soundwire/stream.rst explains this API in detail 1406 */ 1407int sdw_prepare_stream(struct sdw_stream_runtime *stream) 1408{ 1409 bool update_params = true; 1410 int ret; 1411 1412 if (!stream) { 1413 pr_err("SoundWire: Handle not found for stream\n"); 1414 return -EINVAL; 1415 } 1416 1417 sdw_acquire_bus_lock(stream); 1418 1419 if (stream->state == SDW_STREAM_PREPARED) { 1420 ret = 0; 1421 goto state_err; 1422 } 1423 1424 if (stream->state != SDW_STREAM_CONFIGURED && 1425 stream->state != SDW_STREAM_DEPREPARED && 1426 stream->state != SDW_STREAM_DISABLED) { 1427 pr_err("%s: %s: inconsistent state state %d\n", 1428 __func__, stream->name, stream->state); 1429 ret = -EINVAL; 1430 goto state_err; 1431 } 1432 1433 /* 1434 * when the stream is DISABLED, this means sdw_prepare_stream() 1435 * is called as a result of an underflow or a resume operation. 1436 * In this case, the bus parameters shall not be recomputed, but 1437 * still need to be re-applied 1438 */ 1439 if (stream->state == SDW_STREAM_DISABLED) 1440 update_params = false; 1441 1442 ret = _sdw_prepare_stream(stream, update_params); 1443 1444state_err: 1445 sdw_release_bus_lock(stream); 1446 return ret; 1447} 1448EXPORT_SYMBOL(sdw_prepare_stream); 1449 1450static int _sdw_enable_stream(struct sdw_stream_runtime *stream) 1451{ 1452 struct sdw_master_runtime *m_rt; 1453 struct sdw_bus *bus = NULL; 1454 int ret; 1455 1456 /* Enable Master(s) and Slave(s) port(s) associated with stream */ 1457 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 1458 bus = m_rt->bus; 1459 1460 /* Program params */ 1461 ret = sdw_program_params(bus, false); 1462 if (ret < 0) { 1463 dev_err(bus->dev, "Program params failed: %d\n", ret); 1464 return ret; 1465 } 1466 1467 /* Enable port(s) */ 1468 ret = sdw_enable_disable_ports(m_rt, true); 1469 if (ret < 0) { 1470 dev_err(bus->dev, 1471 "Enable port(s) failed ret: %d\n", ret); 1472 return ret; 1473 } 1474 } 1475 1476 if (!bus) { 1477 pr_err("Configuration error in %s\n", __func__); 1478 return -EINVAL; 1479 } 1480 1481 ret = do_bank_switch(stream); 1482 if (ret < 0) { 1483 dev_err(bus->dev, "Bank switch failed: %d\n", ret); 1484 return ret; 1485 } 1486 1487 stream->state = SDW_STREAM_ENABLED; 1488 return 0; 1489} 1490 1491/** 1492 * sdw_enable_stream() - Enable SoundWire stream 1493 * 1494 * @stream: Soundwire stream 1495 * 1496 * Documentation/driver-api/soundwire/stream.rst explains this API in detail 1497 */ 1498int sdw_enable_stream(struct sdw_stream_runtime *stream) 1499{ 1500 int ret; 1501 1502 if (!stream) { 1503 pr_err("SoundWire: Handle not found for stream\n"); 1504 return -EINVAL; 1505 } 1506 1507 sdw_acquire_bus_lock(stream); 1508 1509 if (stream->state == SDW_STREAM_ENABLED) { 1510 ret = 0; 1511 goto state_err; 1512 } 1513 1514 if (stream->state != SDW_STREAM_PREPARED && 1515 stream->state != SDW_STREAM_DISABLED) { 1516 pr_err("%s: %s: inconsistent state state %d\n", 1517 __func__, stream->name, stream->state); 1518 ret = -EINVAL; 1519 goto state_err; 1520 } 1521 1522 ret = _sdw_enable_stream(stream); 1523 1524state_err: 1525 sdw_release_bus_lock(stream); 1526 return ret; 1527} 1528EXPORT_SYMBOL(sdw_enable_stream); 1529 1530static int _sdw_disable_stream(struct sdw_stream_runtime *stream) 1531{ 1532 struct sdw_master_runtime *m_rt; 1533 int ret; 1534 1535 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 1536 struct sdw_bus *bus = m_rt->bus; 1537 1538 /* Disable port(s) */ 1539 ret = sdw_enable_disable_ports(m_rt, false); 1540 if (ret < 0) { 1541 dev_err(bus->dev, "Disable port(s) failed: %d\n", ret); 1542 return ret; 1543 } 1544 } 1545 stream->state = SDW_STREAM_DISABLED; 1546 1547 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 1548 struct sdw_bus *bus = m_rt->bus; 1549 1550 /* Program params */ 1551 ret = sdw_program_params(bus, false); 1552 if (ret < 0) { 1553 dev_err(bus->dev, "Program params failed: %d\n", ret); 1554 return ret; 1555 } 1556 } 1557 1558 ret = do_bank_switch(stream); 1559 if (ret < 0) { 1560 pr_err("Bank switch failed: %d\n", ret); 1561 return ret; 1562 } 1563 1564 /* make sure alternate bank (previous current) is also disabled */ 1565 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 1566 struct sdw_bus *bus = m_rt->bus; 1567 1568 /* Disable port(s) */ 1569 ret = sdw_enable_disable_ports(m_rt, false); 1570 if (ret < 0) { 1571 dev_err(bus->dev, "Disable port(s) failed: %d\n", ret); 1572 return ret; 1573 } 1574 } 1575 1576 return 0; 1577} 1578 1579/** 1580 * sdw_disable_stream() - Disable SoundWire stream 1581 * 1582 * @stream: Soundwire stream 1583 * 1584 * Documentation/driver-api/soundwire/stream.rst explains this API in detail 1585 */ 1586int sdw_disable_stream(struct sdw_stream_runtime *stream) 1587{ 1588 int ret; 1589 1590 if (!stream) { 1591 pr_err("SoundWire: Handle not found for stream\n"); 1592 return -EINVAL; 1593 } 1594 1595 sdw_acquire_bus_lock(stream); 1596 1597 if (stream->state == SDW_STREAM_DISABLED) { 1598 ret = 0; 1599 goto state_err; 1600 } 1601 1602 if (stream->state != SDW_STREAM_ENABLED) { 1603 pr_err("%s: %s: inconsistent state state %d\n", 1604 __func__, stream->name, stream->state); 1605 ret = -EINVAL; 1606 goto state_err; 1607 } 1608 1609 ret = _sdw_disable_stream(stream); 1610 1611state_err: 1612 sdw_release_bus_lock(stream); 1613 return ret; 1614} 1615EXPORT_SYMBOL(sdw_disable_stream); 1616 1617static int _sdw_deprepare_stream(struct sdw_stream_runtime *stream) 1618{ 1619 struct sdw_master_runtime *m_rt; 1620 struct sdw_bus *bus; 1621 int ret = 0; 1622 1623 list_for_each_entry(m_rt, &stream->master_list, stream_node) { 1624 bus = m_rt->bus; 1625 /* De-prepare port(s) */ 1626 ret = sdw_prep_deprep_ports(m_rt, false); 1627 if (ret < 0) { 1628 dev_err(bus->dev, 1629 "De-prepare port(s) failed: %d\n", ret); 1630 return ret; 1631 } 1632 1633 /* TODO: Update this during Device-Device support */ 1634 bus->params.bandwidth -= m_rt->stream->params.rate * 1635 m_rt->ch_count * m_rt->stream->params.bps; 1636 1637 /* Compute params */ 1638 if (bus->compute_params) { 1639 ret = bus->compute_params(bus); 1640 if (ret < 0) { 1641 dev_err(bus->dev, "Compute params failed: %d\n", 1642 ret); 1643 return ret; 1644 } 1645 } 1646 1647 /* Program params */ 1648 ret = sdw_program_params(bus, false); 1649 if (ret < 0) { 1650 dev_err(bus->dev, "Program params failed: %d\n", ret); 1651 return ret; 1652 } 1653 } 1654 1655 stream->state = SDW_STREAM_DEPREPARED; 1656 return do_bank_switch(stream); 1657} 1658 1659/** 1660 * sdw_deprepare_stream() - Deprepare SoundWire stream 1661 * 1662 * @stream: Soundwire stream 1663 * 1664 * Documentation/driver-api/soundwire/stream.rst explains this API in detail 1665 */ 1666int sdw_deprepare_stream(struct sdw_stream_runtime *stream) 1667{ 1668 int ret; 1669 1670 if (!stream) { 1671 pr_err("SoundWire: Handle not found for stream\n"); 1672 return -EINVAL; 1673 } 1674 1675 sdw_acquire_bus_lock(stream); 1676 1677 if (stream->state == SDW_STREAM_DEPREPARED) { 1678 ret = 0; 1679 goto state_err; 1680 } 1681 1682 if (stream->state != SDW_STREAM_PREPARED && 1683 stream->state != SDW_STREAM_DISABLED) { 1684 pr_err("%s: %s: inconsistent state state %d\n", 1685 __func__, stream->name, stream->state); 1686 ret = -EINVAL; 1687 goto state_err; 1688 } 1689 1690 ret = _sdw_deprepare_stream(stream); 1691 1692state_err: 1693 sdw_release_bus_lock(stream); 1694 return ret; 1695} 1696EXPORT_SYMBOL(sdw_deprepare_stream); 1697 1698static int set_stream(struct snd_pcm_substream *substream, 1699 struct sdw_stream_runtime *sdw_stream) 1700{ 1701 struct snd_soc_pcm_runtime *rtd = substream->private_data; 1702 struct snd_soc_dai *dai; 1703 int ret = 0; 1704 int i; 1705 1706 /* Set stream pointer on all DAIs */ 1707 for_each_rtd_dais(rtd, i, dai) { 1708 ret = snd_soc_dai_set_stream(dai, sdw_stream, substream->stream); 1709 if (ret < 0) { 1710 dev_err(rtd->dev, "failed to set stream pointer on dai %s\n", dai->name); 1711 break; 1712 } 1713 } 1714 1715 return ret; 1716} 1717 1718/** 1719 * sdw_alloc_stream() - Allocate and return stream runtime 1720 * 1721 * @stream_name: SoundWire stream name 1722 * 1723 * Allocates a SoundWire stream runtime instance. 1724 * sdw_alloc_stream should be called only once per stream. Typically 1725 * invoked from ALSA/ASoC machine/platform driver. 1726 */ 1727struct sdw_stream_runtime *sdw_alloc_stream(const char *stream_name) 1728{ 1729 struct sdw_stream_runtime *stream; 1730 1731 stream = kzalloc(sizeof(*stream), GFP_KERNEL); 1732 if (!stream) 1733 return NULL; 1734 1735 stream->name = stream_name; 1736 INIT_LIST_HEAD(&stream->master_list); 1737 stream->state = SDW_STREAM_ALLOCATED; 1738 stream->m_rt_count = 0; 1739 1740 return stream; 1741} 1742EXPORT_SYMBOL(sdw_alloc_stream); 1743 1744/** 1745 * sdw_startup_stream() - Startup SoundWire stream 1746 * 1747 * @sdw_substream: Soundwire stream 1748 * 1749 * Documentation/driver-api/soundwire/stream.rst explains this API in detail 1750 */ 1751int sdw_startup_stream(void *sdw_substream) 1752{ 1753 struct snd_pcm_substream *substream = sdw_substream; 1754 struct snd_soc_pcm_runtime *rtd = substream->private_data; 1755 struct sdw_stream_runtime *sdw_stream; 1756 char *name; 1757 int ret; 1758 1759 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 1760 name = kasprintf(GFP_KERNEL, "%s-Playback", substream->name); 1761 else 1762 name = kasprintf(GFP_KERNEL, "%s-Capture", substream->name); 1763 1764 if (!name) 1765 return -ENOMEM; 1766 1767 sdw_stream = sdw_alloc_stream(name); 1768 if (!sdw_stream) { 1769 dev_err(rtd->dev, "alloc stream failed for substream DAI %s\n", substream->name); 1770 ret = -ENOMEM; 1771 goto error; 1772 } 1773 1774 ret = set_stream(substream, sdw_stream); 1775 if (ret < 0) 1776 goto release_stream; 1777 return 0; 1778 1779release_stream: 1780 sdw_release_stream(sdw_stream); 1781 set_stream(substream, NULL); 1782error: 1783 kfree(name); 1784 return ret; 1785} 1786EXPORT_SYMBOL(sdw_startup_stream); 1787 1788/** 1789 * sdw_shutdown_stream() - Shutdown SoundWire stream 1790 * 1791 * @sdw_substream: Soundwire stream 1792 * 1793 * Documentation/driver-api/soundwire/stream.rst explains this API in detail 1794 */ 1795void sdw_shutdown_stream(void *sdw_substream) 1796{ 1797 struct snd_pcm_substream *substream = sdw_substream; 1798 struct snd_soc_pcm_runtime *rtd = substream->private_data; 1799 struct sdw_stream_runtime *sdw_stream; 1800 struct snd_soc_dai *dai; 1801 1802 /* Find stream from first CPU DAI */ 1803 dai = asoc_rtd_to_cpu(rtd, 0); 1804 1805 sdw_stream = snd_soc_dai_get_stream(dai, substream->stream); 1806 1807 if (IS_ERR(sdw_stream)) { 1808 dev_err(rtd->dev, "no stream found for DAI %s\n", dai->name); 1809 return; 1810 } 1811 1812 /* release memory */ 1813 kfree(sdw_stream->name); 1814 sdw_release_stream(sdw_stream); 1815 1816 /* clear DAI data */ 1817 set_stream(substream, NULL); 1818} 1819EXPORT_SYMBOL(sdw_shutdown_stream); 1820 1821/** 1822 * sdw_release_stream() - Free the assigned stream runtime 1823 * 1824 * @stream: SoundWire stream runtime 1825 * 1826 * sdw_release_stream should be called only once per stream 1827 */ 1828void sdw_release_stream(struct sdw_stream_runtime *stream) 1829{ 1830 kfree(stream); 1831} 1832EXPORT_SYMBOL(sdw_release_stream); 1833 1834/** 1835 * sdw_stream_add_master() - Allocate and add master runtime to a stream 1836 * 1837 * @bus: SDW Bus instance 1838 * @stream_config: Stream configuration for audio stream 1839 * @port_config: Port configuration for audio stream 1840 * @num_ports: Number of ports 1841 * @stream: SoundWire stream 1842 */ 1843int sdw_stream_add_master(struct sdw_bus *bus, 1844 struct sdw_stream_config *stream_config, 1845 struct sdw_port_config *port_config, 1846 unsigned int num_ports, 1847 struct sdw_stream_runtime *stream) 1848{ 1849 struct sdw_master_runtime *m_rt; 1850 bool alloc_master_rt = true; 1851 int ret; 1852 1853 mutex_lock(&bus->bus_lock); 1854 1855 /* 1856 * For multi link streams, add the second master only if 1857 * the bus supports it. 1858 * Check if bus->multi_link is set 1859 */ 1860 if (!bus->multi_link && stream->m_rt_count > 0) { 1861 dev_err(bus->dev, 1862 "Multilink not supported, link %d\n", bus->link_id); 1863 ret = -EINVAL; 1864 goto unlock; 1865 } 1866 1867 /* 1868 * check if Master is already allocated (e.g. as a result of Slave adding 1869 * it first), if so skip allocation and go to configuration 1870 */ 1871 m_rt = sdw_master_rt_find(bus, stream); 1872 if (m_rt) { 1873 alloc_master_rt = false; 1874 goto skip_alloc_master_rt; 1875 } 1876 1877 m_rt = sdw_master_rt_alloc(bus, stream); 1878 if (!m_rt) { 1879 dev_err(bus->dev, "Master runtime alloc failed for stream:%s\n", stream->name); 1880 ret = -ENOMEM; 1881 goto unlock; 1882 } 1883skip_alloc_master_rt: 1884 1885 if (sdw_master_port_allocated(m_rt)) 1886 goto skip_alloc_master_port; 1887 1888 ret = sdw_master_port_alloc(m_rt, num_ports); 1889 if (ret) 1890 goto alloc_error; 1891 1892 stream->m_rt_count++; 1893 1894skip_alloc_master_port: 1895 1896 ret = sdw_master_rt_config(m_rt, stream_config); 1897 if (ret < 0) 1898 goto unlock; 1899 1900 ret = sdw_config_stream(bus->dev, stream, stream_config, false); 1901 if (ret) 1902 goto unlock; 1903 1904 ret = sdw_master_port_config(m_rt, port_config); 1905 1906 goto unlock; 1907 1908alloc_error: 1909 /* 1910 * we only cleanup what was allocated in this routine 1911 */ 1912 if (alloc_master_rt) 1913 sdw_master_rt_free(m_rt, stream); 1914unlock: 1915 mutex_unlock(&bus->bus_lock); 1916 return ret; 1917} 1918EXPORT_SYMBOL(sdw_stream_add_master); 1919 1920/** 1921 * sdw_stream_remove_master() - Remove master from sdw_stream 1922 * 1923 * @bus: SDW Bus instance 1924 * @stream: SoundWire stream 1925 * 1926 * This removes and frees port_rt and master_rt from a stream 1927 */ 1928int sdw_stream_remove_master(struct sdw_bus *bus, 1929 struct sdw_stream_runtime *stream) 1930{ 1931 struct sdw_master_runtime *m_rt, *_m_rt; 1932 1933 mutex_lock(&bus->bus_lock); 1934 1935 list_for_each_entry_safe(m_rt, _m_rt, 1936 &stream->master_list, stream_node) { 1937 if (m_rt->bus != bus) 1938 continue; 1939 1940 sdw_master_port_free(m_rt); 1941 sdw_master_rt_free(m_rt, stream); 1942 stream->m_rt_count--; 1943 } 1944 1945 if (list_empty(&stream->master_list)) 1946 stream->state = SDW_STREAM_RELEASED; 1947 1948 mutex_unlock(&bus->bus_lock); 1949 1950 return 0; 1951} 1952EXPORT_SYMBOL(sdw_stream_remove_master); 1953 1954/** 1955 * sdw_stream_add_slave() - Allocate and add master/slave runtime to a stream 1956 * 1957 * @slave: SDW Slave instance 1958 * @stream_config: Stream configuration for audio stream 1959 * @stream: SoundWire stream 1960 * @port_config: Port configuration for audio stream 1961 * @num_ports: Number of ports 1962 * 1963 * It is expected that Slave is added before adding Master 1964 * to the Stream. 1965 * 1966 */ 1967int sdw_stream_add_slave(struct sdw_slave *slave, 1968 struct sdw_stream_config *stream_config, 1969 struct sdw_port_config *port_config, 1970 unsigned int num_ports, 1971 struct sdw_stream_runtime *stream) 1972{ 1973 struct sdw_slave_runtime *s_rt; 1974 struct sdw_master_runtime *m_rt; 1975 bool alloc_master_rt = true; 1976 bool alloc_slave_rt = true; 1977 1978 int ret; 1979 1980 mutex_lock(&slave->bus->bus_lock); 1981 1982 /* 1983 * check if Master is already allocated, if so skip allocation 1984 * and go to configuration 1985 */ 1986 m_rt = sdw_master_rt_find(slave->bus, stream); 1987 if (m_rt) { 1988 alloc_master_rt = false; 1989 goto skip_alloc_master_rt; 1990 } 1991 1992 /* 1993 * If this API is invoked by Slave first then m_rt is not valid. 1994 * So, allocate m_rt and add Slave to it. 1995 */ 1996 m_rt = sdw_master_rt_alloc(slave->bus, stream); 1997 if (!m_rt) { 1998 dev_err(&slave->dev, "Master runtime alloc failed for stream:%s\n", stream->name); 1999 ret = -ENOMEM; 2000 goto unlock; 2001 } 2002 2003skip_alloc_master_rt: 2004 s_rt = sdw_slave_rt_find(slave, stream); 2005 if (s_rt) 2006 goto skip_alloc_slave_rt; 2007 2008 s_rt = sdw_slave_rt_alloc(slave, m_rt); 2009 if (!s_rt) { 2010 dev_err(&slave->dev, "Slave runtime alloc failed for stream:%s\n", stream->name); 2011 alloc_slave_rt = false; 2012 ret = -ENOMEM; 2013 goto alloc_error; 2014 } 2015 2016skip_alloc_slave_rt: 2017 if (sdw_slave_port_allocated(s_rt)) 2018 goto skip_port_alloc; 2019 2020 ret = sdw_slave_port_alloc(slave, s_rt, num_ports); 2021 if (ret) 2022 goto alloc_error; 2023 2024skip_port_alloc: 2025 ret = sdw_master_rt_config(m_rt, stream_config); 2026 if (ret) 2027 goto unlock; 2028 2029 ret = sdw_slave_rt_config(s_rt, stream_config); 2030 if (ret) 2031 goto unlock; 2032 2033 ret = sdw_config_stream(&slave->dev, stream, stream_config, true); 2034 if (ret) 2035 goto unlock; 2036 2037 ret = sdw_slave_port_config(slave, s_rt, port_config); 2038 if (ret) 2039 goto unlock; 2040 2041 /* 2042 * Change stream state to CONFIGURED on first Slave add. 2043 * Bus is not aware of number of Slave(s) in a stream at this 2044 * point so cannot depend on all Slave(s) to be added in order to 2045 * change stream state to CONFIGURED. 2046 */ 2047 stream->state = SDW_STREAM_CONFIGURED; 2048 goto unlock; 2049 2050alloc_error: 2051 /* 2052 * we only cleanup what was allocated in this routine. The 'else if' 2053 * is intentional, the 'master_rt_free' will call sdw_slave_rt_free() 2054 * internally. 2055 */ 2056 if (alloc_master_rt) 2057 sdw_master_rt_free(m_rt, stream); 2058 else if (alloc_slave_rt) 2059 sdw_slave_rt_free(slave, stream); 2060unlock: 2061 mutex_unlock(&slave->bus->bus_lock); 2062 return ret; 2063} 2064EXPORT_SYMBOL(sdw_stream_add_slave); 2065 2066/** 2067 * sdw_stream_remove_slave() - Remove slave from sdw_stream 2068 * 2069 * @slave: SDW Slave instance 2070 * @stream: SoundWire stream 2071 * 2072 * This removes and frees port_rt and slave_rt from a stream 2073 */ 2074int sdw_stream_remove_slave(struct sdw_slave *slave, 2075 struct sdw_stream_runtime *stream) 2076{ 2077 mutex_lock(&slave->bus->bus_lock); 2078 2079 sdw_slave_port_free(slave, stream); 2080 sdw_slave_rt_free(slave, stream); 2081 2082 mutex_unlock(&slave->bus->bus_lock); 2083 2084 return 0; 2085} 2086EXPORT_SYMBOL(sdw_stream_remove_slave);