GNU Linux-libre 5.19-rc6-gnu
[releases.git] / drivers / soundwire / stream.c
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  */
25 int 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};
28 EXPORT_SYMBOL(sdw_rows);
29
30 int sdw_cols[SDW_FRAME_COLS] = {2, 4, 6, 8, 10, 12, 14, 16};
31 EXPORT_SYMBOL(sdw_cols);
32
33 int 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 }
45 EXPORT_SYMBOL(sdw_find_col_index);
46
47 int 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 }
59 EXPORT_SYMBOL(sdw_find_row_index);
60
61 static 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
124 static 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
237 static 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  */
265 static 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  */
302 static 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
333 static 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  */
374 static 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
400 static 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
420 static 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
507 static 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  */
542 static 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  */
576 static 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  */
612 static 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
657 static 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
718 error:
719         kfree(wbuf);
720 error_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  */
733 static 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
760 static 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
847 error:
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
856 msg_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
869 static 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
882 static 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
896 static void sdw_port_free(struct sdw_port_runtime *p_rt)
897 {
898         list_del(&p_rt->port_node);
899         kfree(p_rt);
900 }
901
902 static bool sdw_slave_port_allocated(struct sdw_slave_runtime *s_rt)
903 {
904         return !list_empty(&s_rt->port_list);
905 }
906
907 static 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
927 static 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
944 static 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
954 static 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
981 static bool sdw_master_port_allocated(struct sdw_master_runtime *m_rt)
982 {
983         return !list_empty(&m_rt->port_list);
984 }
985
986 static 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
995 static 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
1011 static 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  */
1037 static 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  */
1063 static 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
1072 static 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  */
1097 static 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
1109 static 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  */
1132 static 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
1164 static 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  */
1184 static 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  */
1209 static 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  */
1252 struct 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  */
1286 static 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  */
1308 static 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
1320 static 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(&params, &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
1359 program_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
1395 restore_params:
1396         memcpy(&bus->params, &params, 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  */
1407 int 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
1444 state_err:
1445         sdw_release_bus_lock(stream);
1446         return ret;
1447 }
1448 EXPORT_SYMBOL(sdw_prepare_stream);
1449
1450 static 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  */
1498 int 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
1524 state_err:
1525         sdw_release_bus_lock(stream);
1526         return ret;
1527 }
1528 EXPORT_SYMBOL(sdw_enable_stream);
1529
1530 static 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  */
1586 int 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
1611 state_err:
1612         sdw_release_bus_lock(stream);
1613         return ret;
1614 }
1615 EXPORT_SYMBOL(sdw_disable_stream);
1616
1617 static 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  */
1666 int 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
1692 state_err:
1693         sdw_release_bus_lock(stream);
1694         return ret;
1695 }
1696 EXPORT_SYMBOL(sdw_deprepare_stream);
1697
1698 static 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  */
1727 struct 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 }
1742 EXPORT_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  */
1751 int 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
1779 release_stream:
1780         sdw_release_stream(sdw_stream);
1781         set_stream(substream, NULL);
1782 error:
1783         kfree(name);
1784         return ret;
1785 }
1786 EXPORT_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  */
1795 void 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 }
1819 EXPORT_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  */
1828 void sdw_release_stream(struct sdw_stream_runtime *stream)
1829 {
1830         kfree(stream);
1831 }
1832 EXPORT_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  */
1843 int 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         }
1883 skip_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
1894 skip_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
1908 alloc_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);
1914 unlock:
1915         mutex_unlock(&bus->bus_lock);
1916         return ret;
1917 }
1918 EXPORT_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  */
1928 int 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 }
1952 EXPORT_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  */
1967 int 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
2003 skip_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
2016 skip_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
2024 skip_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
2050 alloc_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);
2060 unlock:
2061         mutex_unlock(&slave->bus->bus_lock);
2062         return ret;
2063 }
2064 EXPORT_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  */
2074 int 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 }
2086 EXPORT_SYMBOL(sdw_stream_remove_slave);