]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - sound/soc/sh/rcar/ssi.c
Merge branch 'for-linus-4.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[karo-tx-linux.git] / sound / soc / sh / rcar / ssi.c
1 /*
2  * Renesas R-Car SSIU/SSI support
3  *
4  * Copyright (C) 2013 Renesas Solutions Corp.
5  * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
6  *
7  * Based on fsi.c
8  * Kuninori Morimoto <morimoto.kuninori@renesas.com>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License version 2 as
12  * published by the Free Software Foundation.
13  */
14 #include <linux/delay.h>
15 #include "rsnd.h"
16 #define RSND_SSI_NAME_SIZE 16
17
18 /*
19  * SSICR
20  */
21 #define FORCE           (1 << 31)       /* Fixed */
22 #define DMEN            (1 << 28)       /* DMA Enable */
23 #define UIEN            (1 << 27)       /* Underflow Interrupt Enable */
24 #define OIEN            (1 << 26)       /* Overflow Interrupt Enable */
25 #define IIEN            (1 << 25)       /* Idle Mode Interrupt Enable */
26 #define DIEN            (1 << 24)       /* Data Interrupt Enable */
27 #define CHNL_4          (1 << 22)       /* Channels */
28 #define CHNL_6          (2 << 22)       /* Channels */
29 #define CHNL_8          (3 << 22)       /* Channels */
30 #define DWL_8           (0 << 19)       /* Data Word Length */
31 #define DWL_16          (1 << 19)       /* Data Word Length */
32 #define DWL_18          (2 << 19)       /* Data Word Length */
33 #define DWL_20          (3 << 19)       /* Data Word Length */
34 #define DWL_22          (4 << 19)       /* Data Word Length */
35 #define DWL_24          (5 << 19)       /* Data Word Length */
36 #define DWL_32          (6 << 19)       /* Data Word Length */
37
38 #define SWL_32          (3 << 16)       /* R/W System Word Length */
39 #define SCKD            (1 << 15)       /* Serial Bit Clock Direction */
40 #define SWSD            (1 << 14)       /* Serial WS Direction */
41 #define SCKP            (1 << 13)       /* Serial Bit Clock Polarity */
42 #define SWSP            (1 << 12)       /* Serial WS Polarity */
43 #define SDTA            (1 << 10)       /* Serial Data Alignment */
44 #define PDTA            (1 <<  9)       /* Parallel Data Alignment */
45 #define DEL             (1 <<  8)       /* Serial Data Delay */
46 #define CKDV(v)         (v <<  4)       /* Serial Clock Division Ratio */
47 #define TRMD            (1 <<  1)       /* Transmit/Receive Mode Select */
48 #define EN              (1 <<  0)       /* SSI Module Enable */
49
50 /*
51  * SSISR
52  */
53 #define UIRQ            (1 << 27)       /* Underflow Error Interrupt Status */
54 #define OIRQ            (1 << 26)       /* Overflow Error Interrupt Status */
55 #define IIRQ            (1 << 25)       /* Idle Mode Interrupt Status */
56 #define DIRQ            (1 << 24)       /* Data Interrupt Status Flag */
57
58 /*
59  * SSIWSR
60  */
61 #define CONT            (1 << 8)        /* WS Continue Function */
62 #define WS_MODE         (1 << 0)        /* WS Mode */
63
64 #define SSI_NAME "ssi"
65
66 struct rsnd_ssi {
67         struct rsnd_mod mod;
68         struct rsnd_mod *dma;
69
70         u32 flags;
71         u32 cr_own;
72         u32 cr_clk;
73         u32 cr_mode;
74         u32 wsr;
75         int chan;
76         int rate;
77         int irq;
78         unsigned int usrcnt;
79 };
80
81 /* flags */
82 #define RSND_SSI_CLK_PIN_SHARE          (1 << 0)
83 #define RSND_SSI_NO_BUSIF               (1 << 1) /* SSI+DMA without BUSIF */
84
85 #define for_each_rsnd_ssi(pos, priv, i)                                 \
86         for (i = 0;                                                     \
87              (i < rsnd_ssi_nr(priv)) &&                                 \
88                 ((pos) = ((struct rsnd_ssi *)(priv)->ssi + i));         \
89              i++)
90
91 #define rsnd_ssi_get(priv, id) ((struct rsnd_ssi *)(priv->ssi) + id)
92 #define rsnd_ssi_to_dma(mod) ((ssi)->dma)
93 #define rsnd_ssi_nr(priv) ((priv)->ssi_nr)
94 #define rsnd_mod_to_ssi(_mod) container_of((_mod), struct rsnd_ssi, mod)
95 #define rsnd_ssi_mode_flags(p) ((p)->flags)
96 #define rsnd_ssi_is_parent(ssi, io) ((ssi) == rsnd_io_to_mod_ssip(io))
97 #define rsnd_ssi_is_multi_slave(mod, io) \
98         (rsnd_ssi_multi_slaves(io) & (1 << rsnd_mod_id(mod)))
99 #define rsnd_ssi_is_run_mods(mod, io) \
100         (rsnd_ssi_run_mods(io) & (1 << rsnd_mod_id(mod)))
101
102 int rsnd_ssi_use_busif(struct rsnd_dai_stream *io)
103 {
104         struct rsnd_mod *mod = rsnd_io_to_mod_ssi(io);
105         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
106         int use_busif = 0;
107
108         if (!rsnd_ssi_is_dma_mode(mod))
109                 return 0;
110
111         if (!(rsnd_ssi_mode_flags(ssi) & RSND_SSI_NO_BUSIF))
112                 use_busif = 1;
113         if (rsnd_io_to_mod_src(io))
114                 use_busif = 1;
115
116         return use_busif;
117 }
118
119 static void rsnd_ssi_status_clear(struct rsnd_mod *mod)
120 {
121         rsnd_mod_write(mod, SSISR, 0);
122 }
123
124 static u32 rsnd_ssi_status_get(struct rsnd_mod *mod)
125 {
126         return rsnd_mod_read(mod, SSISR);
127 }
128
129 static void rsnd_ssi_status_check(struct rsnd_mod *mod,
130                                   u32 bit)
131 {
132         struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
133         struct device *dev = rsnd_priv_to_dev(priv);
134         u32 status;
135         int i;
136
137         for (i = 0; i < 1024; i++) {
138                 status = rsnd_ssi_status_get(mod);
139                 if (status & bit)
140                         return;
141
142                 udelay(50);
143         }
144
145         dev_warn(dev, "%s[%d] status check failed\n",
146                  rsnd_mod_name(mod), rsnd_mod_id(mod));
147 }
148
149 static u32 rsnd_ssi_multi_slaves(struct rsnd_dai_stream *io)
150 {
151         struct rsnd_mod *mod;
152         enum rsnd_mod_type types[] = {
153                 RSND_MOD_SSIM1,
154                 RSND_MOD_SSIM2,
155                 RSND_MOD_SSIM3,
156         };
157         int i, mask;
158
159         mask = 0;
160         for (i = 0; i < ARRAY_SIZE(types); i++) {
161                 mod = rsnd_io_to_mod(io, types[i]);
162                 if (!mod)
163                         continue;
164
165                 mask |= 1 << rsnd_mod_id(mod);
166         }
167
168         return mask;
169 }
170
171 static u32 rsnd_ssi_run_mods(struct rsnd_dai_stream *io)
172 {
173         struct rsnd_mod *ssi_mod = rsnd_io_to_mod_ssi(io);
174         struct rsnd_mod *ssi_parent_mod = rsnd_io_to_mod_ssip(io);
175
176         return rsnd_ssi_multi_slaves_runtime(io) |
177                 1 << rsnd_mod_id(ssi_mod) |
178                 1 << rsnd_mod_id(ssi_parent_mod);
179 }
180
181 u32 rsnd_ssi_multi_slaves_runtime(struct rsnd_dai_stream *io)
182 {
183         if (rsnd_runtime_is_ssi_multi(io))
184                 return rsnd_ssi_multi_slaves(io);
185
186         return 0;
187 }
188
189 static int rsnd_ssi_master_clk_start(struct rsnd_mod *mod,
190                                      struct rsnd_dai_stream *io)
191 {
192         struct rsnd_priv *priv = rsnd_io_to_priv(io);
193         struct device *dev = rsnd_priv_to_dev(priv);
194         struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
195         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
196         struct rsnd_mod *ssi_parent_mod = rsnd_io_to_mod_ssip(io);
197         int chan = rsnd_runtime_channel_for_ssi(io);
198         int j, ret;
199         int ssi_clk_mul_table[] = {
200                 1, 2, 4, 8, 16, 6, 12,
201         };
202         unsigned int main_rate;
203         unsigned int rate = rsnd_io_is_play(io) ?
204                 rsnd_src_get_out_rate(priv, io) :
205                 rsnd_src_get_in_rate(priv, io);
206
207         if (!rsnd_rdai_is_clk_master(rdai))
208                 return 0;
209
210         if (ssi_parent_mod && !rsnd_ssi_is_parent(mod, io))
211                 return 0;
212
213         if (rsnd_ssi_is_multi_slave(mod, io))
214                 return 0;
215
216         if (ssi->usrcnt > 1) {
217                 if (ssi->rate != rate) {
218                         dev_err(dev, "SSI parent/child should use same rate\n");
219                         return -EINVAL;
220                 }
221
222                 return 0;
223         }
224
225         /*
226          * Find best clock, and try to start ADG
227          */
228         for (j = 0; j < ARRAY_SIZE(ssi_clk_mul_table); j++) {
229
230                 /*
231                  * It will set SSIWSR.CONT here, but SSICR.CKDV = 000
232                  * with it is not allowed. (SSIWSR.WS_MODE with
233                  * SSICR.CKDV = 000 is not allowed either).
234                  * Skip it. See SSICR.CKDV
235                  */
236                 if (j == 0)
237                         continue;
238
239                 /*
240                  * this driver is assuming that
241                  * system word is 32bit x chan
242                  * see rsnd_ssi_init()
243                  */
244                 main_rate = rate * 32 * chan * ssi_clk_mul_table[j];
245
246                 ret = rsnd_adg_ssi_clk_try_start(mod, main_rate);
247                 if (0 == ret) {
248                         ssi->cr_clk     = FORCE | SWL_32 |
249                                 SCKD | SWSD | CKDV(j);
250                         ssi->wsr = CONT;
251
252                         ssi->rate = rate;
253
254                         dev_dbg(dev, "%s[%d] outputs %u Hz\n",
255                                 rsnd_mod_name(mod),
256                                 rsnd_mod_id(mod), rate);
257
258                         return 0;
259                 }
260         }
261
262         dev_err(dev, "unsupported clock rate\n");
263         return -EIO;
264 }
265
266 static void rsnd_ssi_master_clk_stop(struct rsnd_mod *mod,
267                                      struct rsnd_dai_stream *io)
268 {
269         struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
270         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
271         struct rsnd_mod *ssi_parent_mod = rsnd_io_to_mod_ssip(io);
272
273         if (!rsnd_rdai_is_clk_master(rdai))
274                 return;
275
276         if (ssi_parent_mod && !rsnd_ssi_is_parent(mod, io))
277                 return;
278
279         if (ssi->usrcnt > 1)
280                 return;
281
282         ssi->cr_clk     = 0;
283         ssi->rate       = 0;
284
285         rsnd_adg_ssi_clk_stop(mod);
286 }
287
288 static void rsnd_ssi_config_init(struct rsnd_mod *mod,
289                                 struct rsnd_dai_stream *io)
290 {
291         struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
292         struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
293         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
294         u32 cr_own;
295         u32 cr_mode;
296         u32 wsr;
297         int is_tdm;
298
299         is_tdm = rsnd_runtime_is_ssi_tdm(io);
300
301         /*
302          * always use 32bit system word.
303          * see also rsnd_ssi_master_clk_enable()
304          */
305         cr_own = FORCE | SWL_32 | PDTA;
306
307         if (rdai->bit_clk_inv)
308                 cr_own |= SCKP;
309         if (rdai->frm_clk_inv ^ is_tdm)
310                 cr_own |= SWSP;
311         if (rdai->data_alignment)
312                 cr_own |= SDTA;
313         if (rdai->sys_delay)
314                 cr_own |= DEL;
315         if (rsnd_io_is_play(io))
316                 cr_own |= TRMD;
317
318         switch (runtime->sample_bits) {
319         case 16:
320                 cr_own |= DWL_16;
321                 break;
322         case 32:
323                 cr_own |= DWL_24;
324                 break;
325         }
326
327         if (rsnd_ssi_is_dma_mode(mod)) {
328                 cr_mode = UIEN | OIEN | /* over/under run */
329                           DMEN;         /* DMA : enable DMA */
330         } else {
331                 cr_mode = DIEN;         /* PIO : enable Data interrupt */
332         }
333
334         /*
335          * TDM Extend Mode
336          * see
337          *      rsnd_ssiu_init_gen2()
338          */
339         wsr = ssi->wsr;
340         if (is_tdm) {
341                 wsr     |= WS_MODE;
342                 cr_own  |= CHNL_8;
343         }
344
345         ssi->cr_own     = cr_own;
346         ssi->cr_mode    = cr_mode;
347         ssi->wsr        = wsr;
348 }
349
350 static void rsnd_ssi_register_setup(struct rsnd_mod *mod)
351 {
352         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
353
354         rsnd_mod_write(mod, SSIWSR,     ssi->wsr);
355         rsnd_mod_write(mod, SSICR,      ssi->cr_own     |
356                                         ssi->cr_clk     |
357                                         ssi->cr_mode); /* without EN */
358 }
359
360 /*
361  *      SSI mod common functions
362  */
363 static int rsnd_ssi_init(struct rsnd_mod *mod,
364                          struct rsnd_dai_stream *io,
365                          struct rsnd_priv *priv)
366 {
367         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
368         int ret;
369
370         if (!rsnd_ssi_is_run_mods(mod, io))
371                 return 0;
372
373         ssi->usrcnt++;
374
375         rsnd_mod_power_on(mod);
376
377         ret = rsnd_ssi_master_clk_start(mod, io);
378         if (ret < 0)
379                 return ret;
380
381         if (!rsnd_ssi_is_parent(mod, io))
382                 rsnd_ssi_config_init(mod, io);
383
384         rsnd_ssi_register_setup(mod);
385
386         /* clear error status */
387         rsnd_ssi_status_clear(mod);
388
389         return 0;
390 }
391
392 static int rsnd_ssi_quit(struct rsnd_mod *mod,
393                          struct rsnd_dai_stream *io,
394                          struct rsnd_priv *priv)
395 {
396         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
397         struct device *dev = rsnd_priv_to_dev(priv);
398
399         if (!rsnd_ssi_is_run_mods(mod, io))
400                 return 0;
401
402         if (!ssi->usrcnt) {
403                 dev_err(dev, "%s[%d] usrcnt error\n",
404                         rsnd_mod_name(mod), rsnd_mod_id(mod));
405                 return -EIO;
406         }
407
408         if (!rsnd_ssi_is_parent(mod, io))
409                 ssi->cr_own     = 0;
410
411         rsnd_ssi_master_clk_stop(mod, io);
412
413         rsnd_mod_power_off(mod);
414
415         ssi->usrcnt--;
416
417         return 0;
418 }
419
420 static int rsnd_ssi_hw_params(struct rsnd_mod *mod,
421                               struct rsnd_dai_stream *io,
422                               struct snd_pcm_substream *substream,
423                               struct snd_pcm_hw_params *params)
424 {
425         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
426         int chan = params_channels(params);
427
428         /*
429          * snd_pcm_ops::hw_params will be called *before*
430          * snd_soc_dai_ops::trigger. Thus, ssi->usrcnt is 0
431          * in 1st call.
432          */
433         if (ssi->usrcnt) {
434                 /*
435                  * Already working.
436                  * It will happen if SSI has parent/child connection.
437                  * it is error if child <-> parent SSI uses
438                  * different channels.
439                  */
440                 if (ssi->chan != chan)
441                         return -EIO;
442         }
443
444         ssi->chan = chan;
445
446         return 0;
447 }
448
449 static int rsnd_ssi_start(struct rsnd_mod *mod,
450                           struct rsnd_dai_stream *io,
451                           struct rsnd_priv *priv)
452 {
453         if (!rsnd_ssi_is_run_mods(mod, io))
454                 return 0;
455
456         /*
457          * EN will be set via SSIU :: SSI_CONTROL
458          * if Multi channel mode
459          */
460         if (rsnd_ssi_multi_slaves_runtime(io))
461                 return 0;
462
463         rsnd_mod_bset(mod, SSICR, EN, EN);
464
465         return 0;
466 }
467
468 static int rsnd_ssi_stop(struct rsnd_mod *mod,
469                          struct rsnd_dai_stream *io,
470                          struct rsnd_priv *priv)
471 {
472         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
473         u32 cr;
474
475         if (!rsnd_ssi_is_run_mods(mod, io))
476                 return 0;
477
478         /*
479          * don't stop if not last user
480          * see also
481          *      rsnd_ssi_start
482          *      rsnd_ssi_interrupt
483          */
484         if (ssi->usrcnt > 1)
485                 return 0;
486
487         /*
488          * disable all IRQ,
489          * and, wait all data was sent
490          */
491         cr  =   ssi->cr_own     |
492                 ssi->cr_clk;
493
494         rsnd_mod_write(mod, SSICR, cr | EN);
495         rsnd_ssi_status_check(mod, DIRQ);
496
497         /*
498          * disable SSI,
499          * and, wait idle state
500          */
501         rsnd_mod_write(mod, SSICR, cr); /* disabled all */
502         rsnd_ssi_status_check(mod, IIRQ);
503
504         return 0;
505 }
506
507 static int rsnd_ssi_irq(struct rsnd_mod *mod,
508                         struct rsnd_dai_stream *io,
509                         struct rsnd_priv *priv,
510                         int enable)
511 {
512         u32 val = 0;
513
514         if (rsnd_is_gen1(priv))
515                 return 0;
516
517         if (rsnd_ssi_is_parent(mod, io))
518                 return 0;
519
520         if (!rsnd_ssi_is_run_mods(mod, io))
521                 return 0;
522
523         if (enable)
524                 val = rsnd_ssi_is_dma_mode(mod) ? 0x0e000000 : 0x0f000000;
525
526         rsnd_mod_write(mod, SSI_INT_ENABLE, val);
527
528         return 0;
529 }
530
531 static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
532                                  struct rsnd_dai_stream *io)
533 {
534         struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
535         int is_dma = rsnd_ssi_is_dma_mode(mod);
536         u32 status;
537         bool elapsed = false;
538         bool stop = false;
539
540         spin_lock(&priv->lock);
541
542         /* ignore all cases if not working */
543         if (!rsnd_io_is_working(io))
544                 goto rsnd_ssi_interrupt_out;
545
546         status = rsnd_ssi_status_get(mod);
547
548         /* PIO only */
549         if (!is_dma && (status & DIRQ)) {
550                 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
551                 u32 *buf = (u32 *)(runtime->dma_area +
552                                    rsnd_dai_pointer_offset(io, 0));
553
554                 /*
555                  * 8/16/32 data can be assesse to TDR/RDR register
556                  * directly as 32bit data
557                  * see rsnd_ssi_init()
558                  */
559                 if (rsnd_io_is_play(io))
560                         rsnd_mod_write(mod, SSITDR, *buf);
561                 else
562                         *buf = rsnd_mod_read(mod, SSIRDR);
563
564                 elapsed = rsnd_dai_pointer_update(io, sizeof(*buf));
565         }
566
567         /* DMA only */
568         if (is_dma && (status & (UIRQ | OIRQ)))
569                 stop = true;
570
571         rsnd_ssi_status_clear(mod);
572 rsnd_ssi_interrupt_out:
573         spin_unlock(&priv->lock);
574
575         if (elapsed)
576                 rsnd_dai_period_elapsed(io);
577
578         if (stop)
579                 snd_pcm_stop_xrun(io->substream);
580
581 }
582
583 static irqreturn_t rsnd_ssi_interrupt(int irq, void *data)
584 {
585         struct rsnd_mod *mod = data;
586
587         rsnd_mod_interrupt(mod, __rsnd_ssi_interrupt);
588
589         return IRQ_HANDLED;
590 }
591
592 /*
593  *              SSI PIO
594  */
595 static void rsnd_ssi_parent_attach(struct rsnd_mod *mod,
596                                    struct rsnd_dai_stream *io)
597 {
598         struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
599         struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
600
601         if (!__rsnd_ssi_is_pin_sharing(mod))
602                 return;
603
604         if (!rsnd_rdai_is_clk_master(rdai))
605                 return;
606
607         switch (rsnd_mod_id(mod)) {
608         case 1:
609         case 2:
610                 rsnd_dai_connect(rsnd_ssi_mod_get(priv, 0), io, RSND_MOD_SSIP);
611                 break;
612         case 4:
613                 rsnd_dai_connect(rsnd_ssi_mod_get(priv, 3), io, RSND_MOD_SSIP);
614                 break;
615         case 8:
616                 rsnd_dai_connect(rsnd_ssi_mod_get(priv, 7), io, RSND_MOD_SSIP);
617                 break;
618         }
619 }
620
621 static int rsnd_ssi_pcm_new(struct rsnd_mod *mod,
622                             struct rsnd_dai_stream *io,
623                             struct snd_soc_pcm_runtime *rtd)
624 {
625         /*
626          * rsnd_rdai_is_clk_master() will be enabled after set_fmt,
627          * and, pcm_new will be called after it.
628          * This function reuse pcm_new at this point.
629          */
630         rsnd_ssi_parent_attach(mod, io);
631
632         return 0;
633 }
634
635 static int rsnd_ssi_common_probe(struct rsnd_mod *mod,
636                                  struct rsnd_dai_stream *io,
637                                  struct rsnd_priv *priv)
638 {
639         struct device *dev = rsnd_priv_to_dev(priv);
640         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
641         int ret;
642
643         /*
644          * SSIP/SSIU/IRQ are not needed on
645          * SSI Multi slaves
646          */
647         if (rsnd_ssi_is_multi_slave(mod, io))
648                 return 0;
649
650         /*
651          * It can't judge ssi parent at this point
652          * see rsnd_ssi_pcm_new()
653          */
654
655         ret = rsnd_ssiu_attach(io, mod);
656         if (ret < 0)
657                 return ret;
658
659         /*
660          * SSI might be called again as PIO fallback
661          * It is easy to manual handling for IRQ request/free
662          */
663         ret = request_irq(ssi->irq,
664                           rsnd_ssi_interrupt,
665                           IRQF_SHARED,
666                           dev_name(dev), mod);
667
668         return ret;
669 }
670
671 static struct rsnd_mod_ops rsnd_ssi_pio_ops = {
672         .name   = SSI_NAME,
673         .probe  = rsnd_ssi_common_probe,
674         .init   = rsnd_ssi_init,
675         .quit   = rsnd_ssi_quit,
676         .start  = rsnd_ssi_start,
677         .stop   = rsnd_ssi_stop,
678         .irq    = rsnd_ssi_irq,
679         .pcm_new = rsnd_ssi_pcm_new,
680         .hw_params = rsnd_ssi_hw_params,
681 };
682
683 static int rsnd_ssi_dma_probe(struct rsnd_mod *mod,
684                               struct rsnd_dai_stream *io,
685                               struct rsnd_priv *priv)
686 {
687         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
688         int ret;
689
690         /*
691          * SSIP/SSIU/IRQ/DMA are not needed on
692          * SSI Multi slaves
693          */
694         if (rsnd_ssi_is_multi_slave(mod, io))
695                 return 0;
696
697         ret = rsnd_ssi_common_probe(mod, io, priv);
698         if (ret)
699                 return ret;
700
701         /* SSI probe might be called many times in MUX multi path */
702         ret = rsnd_dma_attach(io, mod, &ssi->dma);
703
704         return ret;
705 }
706
707 static int rsnd_ssi_dma_remove(struct rsnd_mod *mod,
708                                struct rsnd_dai_stream *io,
709                                struct rsnd_priv *priv)
710 {
711         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
712
713         /* PIO will request IRQ again */
714         free_irq(ssi->irq, mod);
715
716         return 0;
717 }
718
719 static int rsnd_ssi_fallback(struct rsnd_mod *mod,
720                              struct rsnd_dai_stream *io,
721                              struct rsnd_priv *priv)
722 {
723         struct device *dev = rsnd_priv_to_dev(priv);
724
725         /*
726          * fallback to PIO
727          *
728          * SSI .probe might be called again.
729          * see
730          *      rsnd_rdai_continuance_probe()
731          */
732         mod->ops = &rsnd_ssi_pio_ops;
733
734         dev_info(dev, "%s[%d] fallback to PIO mode\n",
735                  rsnd_mod_name(mod), rsnd_mod_id(mod));
736
737         return 0;
738 }
739
740 static struct dma_chan *rsnd_ssi_dma_req(struct rsnd_dai_stream *io,
741                                          struct rsnd_mod *mod)
742 {
743         struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
744         int is_play = rsnd_io_is_play(io);
745         char *name;
746
747         if (rsnd_ssi_use_busif(io))
748                 name = is_play ? "rxu" : "txu";
749         else
750                 name = is_play ? "rx" : "tx";
751
752         return rsnd_dma_request_channel(rsnd_ssi_of_node(priv),
753                                         mod, name);
754 }
755
756 static struct rsnd_mod_ops rsnd_ssi_dma_ops = {
757         .name   = SSI_NAME,
758         .dma_req = rsnd_ssi_dma_req,
759         .probe  = rsnd_ssi_dma_probe,
760         .remove = rsnd_ssi_dma_remove,
761         .init   = rsnd_ssi_init,
762         .quit   = rsnd_ssi_quit,
763         .start  = rsnd_ssi_start,
764         .stop   = rsnd_ssi_stop,
765         .irq    = rsnd_ssi_irq,
766         .pcm_new = rsnd_ssi_pcm_new,
767         .fallback = rsnd_ssi_fallback,
768         .hw_params = rsnd_ssi_hw_params,
769 };
770
771 int rsnd_ssi_is_dma_mode(struct rsnd_mod *mod)
772 {
773         return mod->ops == &rsnd_ssi_dma_ops;
774 }
775
776
777 /*
778  *              Non SSI
779  */
780 static struct rsnd_mod_ops rsnd_ssi_non_ops = {
781         .name   = SSI_NAME,
782 };
783
784 /*
785  *              ssi mod function
786  */
787 static void rsnd_ssi_connect(struct rsnd_mod *mod,
788                              struct rsnd_dai_stream *io)
789 {
790         struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
791         enum rsnd_mod_type types[] = {
792                 RSND_MOD_SSI,
793                 RSND_MOD_SSIM1,
794                 RSND_MOD_SSIM2,
795                 RSND_MOD_SSIM3,
796         };
797         enum rsnd_mod_type type;
798         int i;
799
800         /* try SSI -> SSIM1 -> SSIM2 -> SSIM3 */
801         for (i = 0; i < ARRAY_SIZE(types); i++) {
802                 type = types[i];
803                 if (!rsnd_io_to_mod(io, type)) {
804                         rsnd_dai_connect(mod, io, type);
805                         rsnd_set_slot(rdai, 2 * (i + 1), (i + 1));
806                         return;
807                 }
808         }
809 }
810
811 void rsnd_parse_connect_ssi(struct rsnd_dai *rdai,
812                             struct device_node *playback,
813                             struct device_node *capture)
814 {
815         struct rsnd_priv *priv = rsnd_rdai_to_priv(rdai);
816         struct device_node *node;
817         struct device_node *np;
818         struct rsnd_mod *mod;
819         int i;
820
821         node = rsnd_ssi_of_node(priv);
822         if (!node)
823                 return;
824
825         i = 0;
826         for_each_child_of_node(node, np) {
827                 mod = rsnd_ssi_mod_get(priv, i);
828                 if (np == playback)
829                         rsnd_ssi_connect(mod, &rdai->playback);
830                 if (np == capture)
831                         rsnd_ssi_connect(mod, &rdai->capture);
832                 i++;
833         }
834
835         of_node_put(node);
836 }
837
838 struct rsnd_mod *rsnd_ssi_mod_get(struct rsnd_priv *priv, int id)
839 {
840         if (WARN_ON(id < 0 || id >= rsnd_ssi_nr(priv)))
841                 id = 0;
842
843         return rsnd_mod_get(rsnd_ssi_get(priv, id));
844 }
845
846 int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod)
847 {
848         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
849
850         return !!(rsnd_ssi_mode_flags(ssi) & RSND_SSI_CLK_PIN_SHARE);
851 }
852
853 static u32 *rsnd_ssi_get_status(struct rsnd_dai_stream *io,
854                                 struct rsnd_mod *mod,
855                                 enum rsnd_mod_type type)
856 {
857         /*
858          * SSIP (= SSI parent) needs to be special, otherwise,
859          * 2nd SSI might doesn't start. see also rsnd_mod_call()
860          *
861          * We can't include parent SSI status on SSI, because we don't know
862          * how many SSI requests parent SSI. Thus, it is localed on "io" now.
863          * ex) trouble case
864          *      Playback: SSI0
865          *      Capture : SSI1 (needs SSI0)
866          *
867          * 1) start Capture  -> SSI0/SSI1 are started.
868          * 2) start Playback -> SSI0 doesn't work, because it is already
869          *                      marked as "started" on 1)
870          *
871          * OTOH, using each mod's status is good for MUX case.
872          * It doesn't need to start in 2nd start
873          * ex)
874          *      IO-0: SRC0 -> CTU1 -+-> MUX -> DVC -> SSIU -> SSI0
875          *                          |
876          *      IO-1: SRC1 -> CTU2 -+
877          *
878          * 1) start IO-0 ->     start SSI0
879          * 2) start IO-1 ->     SSI0 doesn't need to start, because it is
880          *                      already started on 1)
881          */
882         if (type == RSND_MOD_SSIP)
883                 return &io->parent_ssi_status;
884
885         return rsnd_mod_get_status(io, mod, type);
886 }
887
888 int rsnd_ssi_probe(struct rsnd_priv *priv)
889 {
890         struct device_node *node;
891         struct device_node *np;
892         struct device *dev = rsnd_priv_to_dev(priv);
893         struct rsnd_mod_ops *ops;
894         struct clk *clk;
895         struct rsnd_ssi *ssi;
896         char name[RSND_SSI_NAME_SIZE];
897         int i, nr, ret;
898
899         node = rsnd_ssi_of_node(priv);
900         if (!node)
901                 return -EINVAL;
902
903         nr = of_get_child_count(node);
904         if (!nr) {
905                 ret = -EINVAL;
906                 goto rsnd_ssi_probe_done;
907         }
908
909         ssi     = devm_kzalloc(dev, sizeof(*ssi) * nr, GFP_KERNEL);
910         if (!ssi) {
911                 ret = -ENOMEM;
912                 goto rsnd_ssi_probe_done;
913         }
914
915         priv->ssi       = ssi;
916         priv->ssi_nr    = nr;
917
918         i = 0;
919         for_each_child_of_node(node, np) {
920                 ssi = rsnd_ssi_get(priv, i);
921
922                 snprintf(name, RSND_SSI_NAME_SIZE, "%s.%d",
923                          SSI_NAME, i);
924
925                 clk = devm_clk_get(dev, name);
926                 if (IS_ERR(clk)) {
927                         ret = PTR_ERR(clk);
928                         goto rsnd_ssi_probe_done;
929                 }
930
931                 if (of_get_property(np, "shared-pin", NULL))
932                         ssi->flags |= RSND_SSI_CLK_PIN_SHARE;
933
934                 if (of_get_property(np, "no-busif", NULL))
935                         ssi->flags |= RSND_SSI_NO_BUSIF;
936
937                 ssi->irq = irq_of_parse_and_map(np, 0);
938                 if (!ssi->irq) {
939                         ret = -EINVAL;
940                         goto rsnd_ssi_probe_done;
941                 }
942
943                 ops = &rsnd_ssi_non_ops;
944                 if (of_property_read_bool(np, "pio-transfer"))
945                         ops = &rsnd_ssi_pio_ops;
946                 else
947                         ops = &rsnd_ssi_dma_ops;
948
949                 ret = rsnd_mod_init(priv, rsnd_mod_get(ssi), ops, clk,
950                                     rsnd_ssi_get_status, RSND_MOD_SSI, i);
951                 if (ret)
952                         goto rsnd_ssi_probe_done;
953
954                 i++;
955         }
956
957         ret = 0;
958
959 rsnd_ssi_probe_done:
960         of_node_put(node);
961
962         return ret;
963 }
964
965 void rsnd_ssi_remove(struct rsnd_priv *priv)
966 {
967         struct rsnd_ssi *ssi;
968         int i;
969
970         for_each_rsnd_ssi(ssi, priv, i) {
971                 rsnd_mod_quit(rsnd_mod_get(ssi));
972         }
973 }