Merge tag 'v3.14.25' into backport/v3.14.24-ltsi-rc1+v3.14.25/snapshot-merge.wip
[platform/adaptation/renesas_rcar/renesas_kernel.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
28 #define DWL_8           (0 << 19)       /* Data Word Length */
29 #define DWL_16          (1 << 19)       /* Data Word Length */
30 #define DWL_18          (2 << 19)       /* Data Word Length */
31 #define DWL_20          (3 << 19)       /* Data Word Length */
32 #define DWL_22          (4 << 19)       /* Data Word Length */
33 #define DWL_24          (5 << 19)       /* Data Word Length */
34 #define DWL_32          (6 << 19)       /* Data Word Length */
35
36 #define SWL_32          (3 << 16)       /* R/W System Word Length */
37 #define SCKD            (1 << 15)       /* Serial Bit Clock Direction */
38 #define SWSD            (1 << 14)       /* Serial WS Direction */
39 #define SCKP            (1 << 13)       /* Serial Bit Clock Polarity */
40 #define SWSP            (1 << 12)       /* Serial WS Polarity */
41 #define SDTA            (1 << 10)       /* Serial Data Alignment */
42 #define DEL             (1 <<  8)       /* Serial Data Delay */
43 #define CKDV(v)         (v <<  4)       /* Serial Clock Division Ratio */
44 #define TRMD            (1 <<  1)       /* Transmit/Receive Mode Select */
45 #define EN              (1 <<  0)       /* SSI Module Enable */
46
47 /*
48  * SSISR
49  */
50 #define UIRQ            (1 << 27)       /* Underflow Error Interrupt Status */
51 #define OIRQ            (1 << 26)       /* Overflow Error Interrupt Status */
52 #define IIRQ            (1 << 25)       /* Idle Mode Interrupt Status */
53 #define DIRQ            (1 << 24)       /* Data Interrupt Status Flag */
54
55 /*
56  * SSIWSR
57  */
58 #define CONT            (1 << 8)        /* WS Continue Function */
59
60 #define SSI_NAME "ssi"
61
62 struct rsnd_ssi {
63         struct clk *clk;
64         struct rsnd_ssi_platform_info *info; /* rcar_snd.h */
65         struct rsnd_ssi *parent;
66         struct rsnd_mod mod;
67
68         struct rsnd_dai *rdai;
69         u32 cr_own;
70         u32 cr_clk;
71         u32 cr_etc;
72         int err;
73         unsigned int usrcnt;
74         unsigned int rate;
75 };
76
77 #define for_each_rsnd_ssi(pos, priv, i)                                 \
78         for (i = 0;                                                     \
79              (i < rsnd_ssi_nr(priv)) &&                                 \
80                 ((pos) = ((struct rsnd_ssi *)(priv)->ssi + i));         \
81              i++)
82
83 #define rsnd_ssi_nr(priv) ((priv)->ssi_nr)
84 #define rsnd_mod_to_ssi(_mod) container_of((_mod), struct rsnd_ssi, mod)
85 #define rsnd_dma_to_ssi(dma)  rsnd_mod_to_ssi(rsnd_dma_to_mod(dma))
86 #define rsnd_ssi_pio_available(ssi) ((ssi)->info->pio_irq > 0)
87 #define rsnd_ssi_dma_available(ssi) \
88         rsnd_dma_available(rsnd_mod_to_dma(&(ssi)->mod))
89 #define rsnd_ssi_clk_from_parent(ssi) ((ssi)->parent)
90 #define rsnd_ssi_mode_flags(p) ((p)->info->flags)
91 #define rsnd_ssi_dai_id(ssi) ((ssi)->info->dai_id)
92
93 static int rsnd_ssi_use_busif(struct rsnd_mod *mod)
94 {
95         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
96         struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
97         int use_busif = 0;
98
99         if (!(rsnd_ssi_mode_flags(ssi) & RSND_SSI_NO_BUSIF))
100                 use_busif = 1;
101         if (rsnd_io_to_mod_src(io))
102                 use_busif = 1;
103
104         return use_busif;
105 }
106
107 static void rsnd_ssi_status_check(struct rsnd_mod *mod,
108                                   u32 bit)
109 {
110         struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
111         struct device *dev = rsnd_priv_to_dev(priv);
112         u32 status;
113         int i;
114
115         for (i = 0; i < 1024; i++) {
116                 status = rsnd_mod_read(mod, SSISR);
117                 if (status & bit)
118                         return;
119
120                 udelay(50);
121         }
122
123         dev_warn(dev, "status check failed\n");
124 }
125
126 static int rsnd_ssi_master_clk_start(struct rsnd_ssi *ssi,
127                                      struct rsnd_dai_stream *io)
128 {
129         struct rsnd_priv *priv = rsnd_mod_to_priv(&ssi->mod);
130         struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
131         struct device *dev = rsnd_priv_to_dev(priv);
132         int i, j, ret;
133         int adg_clk_div_table[] = {
134                 1, 6, /* see adg.c */
135         };
136         int ssi_clk_mul_table[] = {
137                 1, 2, 4, 8, 16, 6, 12,
138         };
139         unsigned int main_rate;
140         unsigned int rate = rsnd_src_get_ssi_rate(priv, io, runtime);
141
142         /*
143          * Find best clock, and try to start ADG
144          */
145         for (i = 0; i < ARRAY_SIZE(adg_clk_div_table); i++) {
146                 for (j = 0; j < ARRAY_SIZE(ssi_clk_mul_table); j++) {
147
148                         /*
149                          * this driver is assuming that
150                          * system word is 64fs (= 2 x 32bit)
151                          * see rsnd_ssi_init()
152                          */
153                         main_rate = rate / adg_clk_div_table[i]
154                                 * 32 * 2 * ssi_clk_mul_table[j];
155
156                         ret = rsnd_adg_ssi_clk_try_start(&ssi->mod, main_rate);
157                         if (0 == ret) {
158                                 ssi->rate       = rate;
159                                 ssi->cr_clk     = FORCE | SWL_32 |
160                                                   SCKD | SWSD | CKDV(j);
161
162                                 dev_dbg(dev, "ssi%d outputs %u Hz\n",
163                                         rsnd_mod_id(&ssi->mod), rate);
164
165                                 return 0;
166                         }
167                 }
168         }
169
170         dev_err(dev, "unsupported clock rate\n");
171         return -EIO;
172 }
173
174 static void rsnd_ssi_master_clk_stop(struct rsnd_ssi *ssi)
175 {
176         ssi->rate = 0;
177         ssi->cr_clk = 0;
178         rsnd_adg_ssi_clk_stop(&ssi->mod);
179 }
180
181 static void rsnd_ssi_hw_start(struct rsnd_ssi *ssi,
182                               struct rsnd_dai *rdai,
183                               struct rsnd_dai_stream *io)
184 {
185         struct rsnd_priv *priv = rsnd_mod_to_priv(&ssi->mod);
186         struct device *dev = rsnd_priv_to_dev(priv);
187         u32 cr;
188
189         if (0 == ssi->usrcnt) {
190                 clk_prepare_enable(ssi->clk);
191
192                 if (rsnd_dai_is_clk_master(rdai)) {
193                         if (rsnd_ssi_clk_from_parent(ssi))
194                                 rsnd_ssi_hw_start(ssi->parent, rdai, io);
195                         else
196                                 rsnd_ssi_master_clk_start(ssi, io);
197                 }
198         }
199
200         cr  =   ssi->cr_own     |
201                 ssi->cr_clk     |
202                 ssi->cr_etc     |
203                 EN;
204
205         rsnd_mod_write(&ssi->mod, SSICR, cr);
206
207         ssi->usrcnt++;
208
209         dev_dbg(dev, "ssi%d hw started\n", rsnd_mod_id(&ssi->mod));
210 }
211
212 static void rsnd_ssi_hw_stop(struct rsnd_ssi *ssi,
213                              struct rsnd_dai *rdai)
214 {
215         struct rsnd_priv *priv = rsnd_mod_to_priv(&ssi->mod);
216         struct device *dev = rsnd_priv_to_dev(priv);
217         u32 cr;
218
219         if (0 == ssi->usrcnt) /* stop might be called without start */
220                 return;
221
222         ssi->usrcnt--;
223
224         if (0 == ssi->usrcnt) {
225                 /*
226                  * disable all IRQ,
227                  * and, wait all data was sent
228                  */
229                 cr  =   ssi->cr_own     |
230                         ssi->cr_clk;
231
232                 rsnd_mod_write(&ssi->mod, SSICR, cr | EN);
233                 rsnd_ssi_status_check(&ssi->mod, DIRQ);
234
235                 /*
236                  * disable SSI,
237                  * and, wait idle state
238                  */
239                 rsnd_mod_write(&ssi->mod, SSICR, cr);   /* disabled all */
240                 rsnd_ssi_status_check(&ssi->mod, IIRQ);
241
242                 if (rsnd_dai_is_clk_master(rdai)) {
243                         if (rsnd_ssi_clk_from_parent(ssi))
244                                 rsnd_ssi_hw_stop(ssi->parent, rdai);
245                         else
246                                 rsnd_ssi_master_clk_stop(ssi);
247                 }
248
249                 clk_disable_unprepare(ssi->clk);
250         }
251
252         dev_dbg(dev, "ssi%d hw stopped\n", rsnd_mod_id(&ssi->mod));
253 }
254
255 /*
256  *      SSI mod common functions
257  */
258 static int rsnd_ssi_init(struct rsnd_mod *mod,
259                          struct rsnd_dai *rdai)
260 {
261         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
262         struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
263         struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
264         u32 cr;
265
266         cr = FORCE;
267
268         /*
269          * always use 32bit system word for easy clock calculation.
270          * see also rsnd_ssi_master_clk_enable()
271          */
272         cr |= SWL_32;
273
274         /*
275          * init clock settings for SSICR
276          */
277         switch (runtime->sample_bits) {
278         case 16:
279                 cr |= DWL_16;
280                 break;
281         case 32:
282                 cr |= DWL_24;
283                 break;
284         default:
285                 return -EIO;
286         }
287
288         if (rdai->bit_clk_inv)
289                 cr |= SCKP;
290         if (rdai->frm_clk_inv)
291                 cr |= SWSP;
292         if (rdai->data_alignment)
293                 cr |= SDTA;
294         if (rdai->sys_delay)
295                 cr |= DEL;
296         if (rsnd_dai_is_play(rdai, io))
297                 cr |= TRMD;
298
299         /*
300          * set ssi parameter
301          */
302         ssi->rdai       = rdai;
303         ssi->cr_own     = cr;
304         ssi->err        = -1; /* ignore 1st error */
305
306         return 0;
307 }
308
309 static int rsnd_ssi_quit(struct rsnd_mod *mod,
310                          struct rsnd_dai *rdai)
311 {
312         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
313         struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
314         struct device *dev = rsnd_priv_to_dev(priv);
315
316         if (ssi->err > 0)
317                 dev_warn(dev, "ssi under/over flow err = %d\n", ssi->err);
318
319         ssi->rdai       = NULL;
320         ssi->cr_own     = 0;
321         ssi->err        = 0;
322
323         return 0;
324 }
325
326 static void rsnd_ssi_record_error(struct rsnd_ssi *ssi, u32 status)
327 {
328         /* under/over flow error */
329         if (status & (UIRQ | OIRQ)) {
330                 ssi->err++;
331
332                 /* clear error status */
333                 rsnd_mod_write(&ssi->mod, SSISR, 0);
334         }
335 }
336
337 /*
338  *              SSI PIO
339  */
340 static irqreturn_t rsnd_ssi_pio_interrupt(int irq, void *data)
341 {
342         struct rsnd_ssi *ssi = data;
343         struct rsnd_mod *mod = &ssi->mod;
344         struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
345         u32 status = rsnd_mod_read(mod, SSISR);
346         irqreturn_t ret = IRQ_NONE;
347
348         if (io && (status & DIRQ)) {
349                 struct rsnd_dai *rdai = ssi->rdai;
350                 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
351                 u32 *buf = (u32 *)(runtime->dma_area +
352                                    rsnd_dai_pointer_offset(io, 0));
353
354                 rsnd_ssi_record_error(ssi, status);
355
356                 /*
357                  * 8/16/32 data can be assesse to TDR/RDR register
358                  * directly as 32bit data
359                  * see rsnd_ssi_init()
360                  */
361                 if (rsnd_dai_is_play(rdai, io))
362                         rsnd_mod_write(mod, SSITDR, *buf);
363                 else
364                         *buf = rsnd_mod_read(mod, SSIRDR);
365
366                 rsnd_dai_pointer_update(io, sizeof(*buf));
367
368                 ret = IRQ_HANDLED;
369         }
370
371         return ret;
372 }
373
374 static int rsnd_ssi_pio_probe(struct rsnd_mod *mod,
375                               struct rsnd_dai *rdai)
376 {
377         struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
378         struct device *dev = rsnd_priv_to_dev(priv);
379         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
380         int irq = ssi->info->pio_irq;
381         int ret;
382
383         ret = devm_request_irq(dev, irq,
384                                rsnd_ssi_pio_interrupt,
385                                IRQF_SHARED,
386                                dev_name(dev), ssi);
387         if (ret)
388                 dev_err(dev, "SSI request interrupt failed\n");
389
390         dev_dbg(dev, "%s (PIO) is probed\n", rsnd_mod_name(mod));
391
392         return ret;
393 }
394
395 static int rsnd_ssi_pio_start(struct rsnd_mod *mod,
396                               struct rsnd_dai *rdai)
397 {
398         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
399         struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
400
401         /* enable PIO IRQ */
402         ssi->cr_etc = UIEN | OIEN | DIEN;
403
404         rsnd_src_ssiu_start(mod, rdai, 0);
405
406         rsnd_src_enable_ssi_irq(mod, rdai);
407
408         rsnd_ssi_hw_start(ssi, rdai, io);
409
410         return 0;
411 }
412
413 static int rsnd_ssi_pio_stop(struct rsnd_mod *mod,
414                              struct rsnd_dai *rdai)
415 {
416         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
417
418         ssi->cr_etc = 0;
419
420         rsnd_ssi_hw_stop(ssi, rdai);
421
422         rsnd_src_ssiu_stop(mod, rdai, 0);
423
424         return 0;
425 }
426
427 static struct rsnd_mod_ops rsnd_ssi_pio_ops = {
428         .name   = SSI_NAME,
429         .probe  = rsnd_ssi_pio_probe,
430         .init   = rsnd_ssi_init,
431         .quit   = rsnd_ssi_quit,
432         .start  = rsnd_ssi_pio_start,
433         .stop   = rsnd_ssi_pio_stop,
434 };
435
436 static int rsnd_ssi_dma_probe(struct rsnd_mod *mod,
437                           struct rsnd_dai *rdai)
438 {
439         struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
440         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
441         struct device *dev = rsnd_priv_to_dev(priv);
442         int dma_id = ssi->info->dma_id;
443         int ret;
444
445         ret = rsnd_dma_init(
446                 priv, rsnd_mod_to_dma(mod),
447                 rsnd_info_is_playback(priv, ssi),
448                 dma_id);
449
450         if (ret < 0)
451                 dev_err(dev, "SSI DMA failed\n");
452
453         dev_dbg(dev, "%s (DMA) is probed\n", rsnd_mod_name(mod));
454
455         return ret;
456 }
457
458 static int rsnd_ssi_dma_remove(struct rsnd_mod *mod,
459                                struct rsnd_dai *rdai)
460 {
461         rsnd_dma_quit(rsnd_mod_to_priv(mod), rsnd_mod_to_dma(mod));
462
463         return 0;
464 }
465
466 static int rsnd_ssi_dma_start(struct rsnd_mod *mod,
467                               struct rsnd_dai *rdai)
468 {
469         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
470         struct rsnd_dma *dma = rsnd_mod_to_dma(&ssi->mod);
471         struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
472
473         /* enable DMA transfer */
474         ssi->cr_etc = DMEN;
475
476         rsnd_src_ssiu_start(mod, rdai, rsnd_ssi_use_busif(mod));
477
478         rsnd_dma_start(dma);
479
480         rsnd_ssi_hw_start(ssi, ssi->rdai, io);
481
482         /* enable WS continue */
483         if (rsnd_dai_is_clk_master(rdai))
484                 rsnd_mod_write(&ssi->mod, SSIWSR, CONT);
485
486         return 0;
487 }
488
489 static int rsnd_ssi_dma_stop(struct rsnd_mod *mod,
490                              struct rsnd_dai *rdai)
491 {
492         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
493         struct rsnd_dma *dma = rsnd_mod_to_dma(&ssi->mod);
494
495         ssi->cr_etc = 0;
496
497         rsnd_ssi_record_error(ssi, rsnd_mod_read(mod, SSISR));
498
499         rsnd_ssi_hw_stop(ssi, rdai);
500
501         rsnd_dma_stop(dma);
502
503         rsnd_src_ssiu_stop(mod, rdai, 1);
504
505         return 0;
506 }
507
508 static char *rsnd_ssi_dma_name(struct rsnd_mod *mod)
509 {
510         return rsnd_ssi_use_busif(mod) ? "ssiu" : SSI_NAME;
511 }
512
513 static struct rsnd_mod_ops rsnd_ssi_dma_ops = {
514         .name   = SSI_NAME,
515         .dma_name = rsnd_ssi_dma_name,
516         .probe  = rsnd_ssi_dma_probe,
517         .remove = rsnd_ssi_dma_remove,
518         .init   = rsnd_ssi_init,
519         .quit   = rsnd_ssi_quit,
520         .start  = rsnd_ssi_dma_start,
521         .stop   = rsnd_ssi_dma_stop,
522 };
523
524 /*
525  *              Non SSI
526  */
527 static struct rsnd_mod_ops rsnd_ssi_non_ops = {
528         .name   = SSI_NAME,
529 };
530
531 /*
532  *              ssi mod function
533  */
534 struct rsnd_mod *rsnd_ssi_mod_get(struct rsnd_priv *priv, int id)
535 {
536         if (WARN_ON(id < 0 || id >= rsnd_ssi_nr(priv)))
537                 id = 0;
538
539         return &((struct rsnd_ssi *)(priv->ssi) + id)->mod;
540 }
541
542 int rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod)
543 {
544         struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
545
546         return !!(rsnd_ssi_mode_flags(ssi) & RSND_SSI_CLK_PIN_SHARE);
547 }
548
549 static void rsnd_ssi_parent_clk_setup(struct rsnd_priv *priv, struct rsnd_ssi *ssi)
550 {
551         if (!rsnd_ssi_is_pin_sharing(&ssi->mod))
552                 return;
553
554         switch (rsnd_mod_id(&ssi->mod)) {
555         case 1:
556         case 2:
557                 ssi->parent = rsnd_mod_to_ssi(rsnd_ssi_mod_get(priv, 0));
558                 break;
559         case 4:
560                 ssi->parent = rsnd_mod_to_ssi(rsnd_ssi_mod_get(priv, 3));
561                 break;
562         case 8:
563                 ssi->parent = rsnd_mod_to_ssi(rsnd_ssi_mod_get(priv, 7));
564                 break;
565         }
566 }
567
568
569 static void rsnd_of_parse_ssi(struct platform_device *pdev,
570                               const struct rsnd_of_data *of_data,
571                               struct rsnd_priv *priv)
572 {
573         struct device_node *node;
574         struct device_node *np;
575         struct rsnd_ssi_platform_info *ssi_info;
576         struct rcar_snd_info *info = rsnd_priv_to_info(priv);
577         struct device *dev = &pdev->dev;
578         int nr, i;
579
580         if (!of_data)
581                 return;
582
583         node = of_get_child_by_name(dev->of_node, "rcar_sound,ssi");
584         if (!node)
585                 return;
586
587         nr = of_get_child_count(node);
588         if (!nr)
589                 goto rsnd_of_parse_ssi_end;
590
591         ssi_info = devm_kzalloc(dev,
592                                 sizeof(struct rsnd_ssi_platform_info) * nr,
593                                 GFP_KERNEL);
594         if (!ssi_info) {
595                 dev_err(dev, "ssi info allocation error\n");
596                 goto rsnd_of_parse_ssi_end;
597         }
598
599         info->ssi_info          = ssi_info;
600         info->ssi_info_nr       = nr;
601
602         i = -1;
603         for_each_child_of_node(node, np) {
604                 i++;
605
606                 ssi_info = info->ssi_info + i;
607
608                 /*
609                  * pin settings
610                  */
611                 if (of_get_property(np, "shared-pin", NULL))
612                         ssi_info->flags |= RSND_SSI_CLK_PIN_SHARE;
613
614                 /*
615                  * irq
616                  */
617                 ssi_info->pio_irq = irq_of_parse_and_map(np, 0);
618
619                 /*
620                  * DMA
621                  */
622                 ssi_info->dma_id = of_get_property(np, "pio-transfer", NULL) ?
623                         0 : 1;
624
625                 if (of_get_property(np, "no-busif", NULL))
626                         ssi_info->flags |= RSND_SSI_NO_BUSIF;
627         }
628
629 rsnd_of_parse_ssi_end:
630         of_node_put(node);
631 }
632
633 int rsnd_ssi_probe(struct platform_device *pdev,
634                    const struct rsnd_of_data *of_data,
635                    struct rsnd_priv *priv)
636 {
637         struct rcar_snd_info *info = rsnd_priv_to_info(priv);
638         struct rsnd_ssi_platform_info *pinfo;
639         struct device *dev = rsnd_priv_to_dev(priv);
640         struct rsnd_mod_ops *ops;
641         struct clk *clk;
642         struct rsnd_ssi *ssi;
643         char name[RSND_SSI_NAME_SIZE];
644         int i, nr;
645
646         rsnd_of_parse_ssi(pdev, of_data, priv);
647
648         /*
649          *      init SSI
650          */
651         nr      = info->ssi_info_nr;
652         ssi     = devm_kzalloc(dev, sizeof(*ssi) * nr, GFP_KERNEL);
653         if (!ssi) {
654                 dev_err(dev, "SSI allocate failed\n");
655                 return -ENOMEM;
656         }
657
658         priv->ssi       = ssi;
659         priv->ssi_nr    = nr;
660
661         for_each_rsnd_ssi(ssi, priv, i) {
662                 pinfo = &info->ssi_info[i];
663
664                 snprintf(name, RSND_SSI_NAME_SIZE, "%s.%d",
665                          SSI_NAME, i);
666
667                 clk = devm_clk_get(dev, name);
668                 if (IS_ERR(clk))
669                         return PTR_ERR(clk);
670
671                 ssi->info       = pinfo;
672                 ssi->clk        = clk;
673
674                 ops = &rsnd_ssi_non_ops;
675                 if (pinfo->dma_id > 0)
676                         ops = &rsnd_ssi_dma_ops;
677                 else if (rsnd_ssi_pio_available(ssi))
678                         ops = &rsnd_ssi_pio_ops;
679
680                 rsnd_mod_init(priv, &ssi->mod, ops, RSND_MOD_SSI, i);
681
682                 rsnd_ssi_parent_clk_setup(priv, ssi);
683         }
684
685         return 0;
686 }