Merge tag 'sunxi-fixes-for-4.3' of https://git.kernel.org/pub/scm/linux/kernel/git...
[linux-drm-fsl-dcu.git] / sound / soc / fsl / fsl_ssi.c
1 /*
2  * Freescale SSI ALSA SoC Digital Audio Interface (DAI) driver
3  *
4  * Author: Timur Tabi <timur@freescale.com>
5  *
6  * Copyright 2007-2010 Freescale Semiconductor, Inc.
7  *
8  * This file is licensed under the terms of the GNU General Public License
9  * version 2.  This program is licensed "as is" without any warranty of any
10  * kind, whether express or implied.
11  *
12  *
13  * Some notes why imx-pcm-fiq is used instead of DMA on some boards:
14  *
15  * The i.MX SSI core has some nasty limitations in AC97 mode. While most
16  * sane processor vendors have a FIFO per AC97 slot, the i.MX has only
17  * one FIFO which combines all valid receive slots. We cannot even select
18  * which slots we want to receive. The WM9712 with which this driver
19  * was developed with always sends GPIO status data in slot 12 which
20  * we receive in our (PCM-) data stream. The only chance we have is to
21  * manually skip this data in the FIQ handler. With sampling rates different
22  * from 48000Hz not every frame has valid receive data, so the ratio
23  * between pcm data and GPIO status data changes. Our FIQ handler is not
24  * able to handle this, hence this driver only works with 48000Hz sampling
25  * rate.
26  * Reading and writing AC97 registers is another challenge. The core
27  * provides us status bits when the read register is updated with *another*
28  * value. When we read the same register two times (and the register still
29  * contains the same value) these status bits are not set. We work
30  * around this by not polling these bits but only wait a fixed delay.
31  */
32
33 #include <linux/init.h>
34 #include <linux/io.h>
35 #include <linux/module.h>
36 #include <linux/interrupt.h>
37 #include <linux/clk.h>
38 #include <linux/device.h>
39 #include <linux/delay.h>
40 #include <linux/slab.h>
41 #include <linux/spinlock.h>
42 #include <linux/of.h>
43 #include <linux/of_address.h>
44 #include <linux/of_irq.h>
45 #include <linux/of_platform.h>
46
47 #include <sound/core.h>
48 #include <sound/pcm.h>
49 #include <sound/pcm_params.h>
50 #include <sound/initval.h>
51 #include <sound/soc.h>
52 #include <sound/dmaengine_pcm.h>
53
54 #include "fsl_ssi.h"
55 #include "imx-pcm.h"
56
57 /**
58  * FSLSSI_I2S_RATES: sample rates supported by the I2S
59  *
60  * This driver currently only supports the SSI running in I2S slave mode,
61  * which means the codec determines the sample rate.  Therefore, we tell
62  * ALSA that we support all rates and let the codec driver decide what rates
63  * are really supported.
64  */
65 #define FSLSSI_I2S_RATES SNDRV_PCM_RATE_CONTINUOUS
66
67 /**
68  * FSLSSI_I2S_FORMATS: audio formats supported by the SSI
69  *
70  * The SSI has a limitation in that the samples must be in the same byte
71  * order as the host CPU.  This is because when multiple bytes are written
72  * to the STX register, the bytes and bits must be written in the same
73  * order.  The STX is a shift register, so all the bits need to be aligned
74  * (bit-endianness must match byte-endianness).  Processors typically write
75  * the bits within a byte in the same order that the bytes of a word are
76  * written in.  So if the host CPU is big-endian, then only big-endian
77  * samples will be written to STX properly.
78  */
79 #ifdef __BIG_ENDIAN
80 #define FSLSSI_I2S_FORMATS (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_BE | \
81          SNDRV_PCM_FMTBIT_S18_3BE | SNDRV_PCM_FMTBIT_S20_3BE | \
82          SNDRV_PCM_FMTBIT_S24_3BE | SNDRV_PCM_FMTBIT_S24_BE)
83 #else
84 #define FSLSSI_I2S_FORMATS (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE | \
85          SNDRV_PCM_FMTBIT_S18_3LE | SNDRV_PCM_FMTBIT_S20_3LE | \
86          SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S24_LE)
87 #endif
88
89 #define FSLSSI_SIER_DBG_RX_FLAGS (CCSR_SSI_SIER_RFF0_EN | \
90                 CCSR_SSI_SIER_RLS_EN | CCSR_SSI_SIER_RFS_EN | \
91                 CCSR_SSI_SIER_ROE0_EN | CCSR_SSI_SIER_RFRC_EN)
92 #define FSLSSI_SIER_DBG_TX_FLAGS (CCSR_SSI_SIER_TFE0_EN | \
93                 CCSR_SSI_SIER_TLS_EN | CCSR_SSI_SIER_TFS_EN | \
94                 CCSR_SSI_SIER_TUE0_EN | CCSR_SSI_SIER_TFRC_EN)
95
96 enum fsl_ssi_type {
97         FSL_SSI_MCP8610,
98         FSL_SSI_MX21,
99         FSL_SSI_MX35,
100         FSL_SSI_MX51,
101 };
102
103 struct fsl_ssi_reg_val {
104         u32 sier;
105         u32 srcr;
106         u32 stcr;
107         u32 scr;
108 };
109
110 struct fsl_ssi_rxtx_reg_val {
111         struct fsl_ssi_reg_val rx;
112         struct fsl_ssi_reg_val tx;
113 };
114 static const struct regmap_config fsl_ssi_regconfig = {
115         .max_register = CCSR_SSI_SACCDIS,
116         .reg_bits = 32,
117         .val_bits = 32,
118         .reg_stride = 4,
119         .val_format_endian = REGMAP_ENDIAN_NATIVE,
120 };
121
122 struct fsl_ssi_soc_data {
123         bool imx;
124         bool offline_config;
125         u32 sisr_write_mask;
126 };
127
128 /**
129  * fsl_ssi_private: per-SSI private data
130  *
131  * @reg: Pointer to the regmap registers
132  * @irq: IRQ of this SSI
133  * @cpu_dai_drv: CPU DAI driver for this device
134  *
135  * @dai_fmt: DAI configuration this device is currently used with
136  * @i2s_mode: i2s and network mode configuration of the device. Is used to
137  * switch between normal and i2s/network mode
138  * mode depending on the number of channels
139  * @use_dma: DMA is used or FIQ with stream filter
140  * @use_dual_fifo: DMA with support for both FIFOs used
141  * @fifo_deph: Depth of the SSI FIFOs
142  * @rxtx_reg_val: Specific register settings for receive/transmit configuration
143  *
144  * @clk: SSI clock
145  * @baudclk: SSI baud clock for master mode
146  * @baudclk_streams: Active streams that are using baudclk
147  * @bitclk_freq: bitclock frequency set by .set_dai_sysclk
148  *
149  * @dma_params_tx: DMA transmit parameters
150  * @dma_params_rx: DMA receive parameters
151  * @ssi_phys: physical address of the SSI registers
152  *
153  * @fiq_params: FIQ stream filtering parameters
154  *
155  * @pdev: Pointer to pdev used for deprecated fsl-ssi sound card
156  *
157  * @dbg_stats: Debugging statistics
158  *
159  * @soc: SoC specific data
160  */
161 struct fsl_ssi_private {
162         struct regmap *regs;
163         int irq;
164         struct snd_soc_dai_driver cpu_dai_drv;
165
166         unsigned int dai_fmt;
167         u8 i2s_mode;
168         bool use_dma;
169         bool use_dual_fifo;
170         bool has_ipg_clk_name;
171         unsigned int fifo_depth;
172         struct fsl_ssi_rxtx_reg_val rxtx_reg_val;
173
174         struct clk *clk;
175         struct clk *baudclk;
176         unsigned int baudclk_streams;
177         unsigned int bitclk_freq;
178
179         /* DMA params */
180         struct snd_dmaengine_dai_dma_data dma_params_tx;
181         struct snd_dmaengine_dai_dma_data dma_params_rx;
182         dma_addr_t ssi_phys;
183
184         /* params for non-dma FIQ stream filtered mode */
185         struct imx_pcm_fiq_params fiq_params;
186
187         /* Used when using fsl-ssi as sound-card. This is only used by ppc and
188          * should be replaced with simple-sound-card. */
189         struct platform_device *pdev;
190
191         struct fsl_ssi_dbg dbg_stats;
192
193         const struct fsl_ssi_soc_data *soc;
194 };
195
196 /*
197  * imx51 and later SoCs have a slightly different IP that allows the
198  * SSI configuration while the SSI unit is running.
199  *
200  * More important, it is necessary on those SoCs to configure the
201  * sperate TX/RX DMA bits just before starting the stream
202  * (fsl_ssi_trigger). The SDMA unit has to be configured before fsl_ssi
203  * sends any DMA requests to the SDMA unit, otherwise it is not defined
204  * how the SDMA unit handles the DMA request.
205  *
206  * SDMA units are present on devices starting at imx35 but the imx35
207  * reference manual states that the DMA bits should not be changed
208  * while the SSI unit is running (SSIEN). So we support the necessary
209  * online configuration of fsl-ssi starting at imx51.
210  */
211
212 static struct fsl_ssi_soc_data fsl_ssi_mpc8610 = {
213         .imx = false,
214         .offline_config = true,
215         .sisr_write_mask = CCSR_SSI_SISR_RFRC | CCSR_SSI_SISR_TFRC |
216                         CCSR_SSI_SISR_ROE0 | CCSR_SSI_SISR_ROE1 |
217                         CCSR_SSI_SISR_TUE0 | CCSR_SSI_SISR_TUE1,
218 };
219
220 static struct fsl_ssi_soc_data fsl_ssi_imx21 = {
221         .imx = true,
222         .offline_config = true,
223         .sisr_write_mask = 0,
224 };
225
226 static struct fsl_ssi_soc_data fsl_ssi_imx35 = {
227         .imx = true,
228         .offline_config = true,
229         .sisr_write_mask = CCSR_SSI_SISR_RFRC | CCSR_SSI_SISR_TFRC |
230                         CCSR_SSI_SISR_ROE0 | CCSR_SSI_SISR_ROE1 |
231                         CCSR_SSI_SISR_TUE0 | CCSR_SSI_SISR_TUE1,
232 };
233
234 static struct fsl_ssi_soc_data fsl_ssi_imx51 = {
235         .imx = true,
236         .offline_config = false,
237         .sisr_write_mask = CCSR_SSI_SISR_ROE0 | CCSR_SSI_SISR_ROE1 |
238                 CCSR_SSI_SISR_TUE0 | CCSR_SSI_SISR_TUE1,
239 };
240
241 static const struct of_device_id fsl_ssi_ids[] = {
242         { .compatible = "fsl,mpc8610-ssi", .data = &fsl_ssi_mpc8610 },
243         { .compatible = "fsl,imx51-ssi", .data = &fsl_ssi_imx51 },
244         { .compatible = "fsl,imx35-ssi", .data = &fsl_ssi_imx35 },
245         { .compatible = "fsl,imx21-ssi", .data = &fsl_ssi_imx21 },
246         {}
247 };
248 MODULE_DEVICE_TABLE(of, fsl_ssi_ids);
249
250 static bool fsl_ssi_is_ac97(struct fsl_ssi_private *ssi_private)
251 {
252         return (ssi_private->dai_fmt & SND_SOC_DAIFMT_FORMAT_MASK) ==
253                 SND_SOC_DAIFMT_AC97;
254 }
255
256 static bool fsl_ssi_is_i2s_master(struct fsl_ssi_private *ssi_private)
257 {
258         return (ssi_private->dai_fmt & SND_SOC_DAIFMT_MASTER_MASK) ==
259                 SND_SOC_DAIFMT_CBS_CFS;
260 }
261
262 static bool fsl_ssi_is_i2s_cbm_cfs(struct fsl_ssi_private *ssi_private)
263 {
264         return (ssi_private->dai_fmt & SND_SOC_DAIFMT_MASTER_MASK) ==
265                 SND_SOC_DAIFMT_CBM_CFS;
266 }
267 /**
268  * fsl_ssi_isr: SSI interrupt handler
269  *
270  * Although it's possible to use the interrupt handler to send and receive
271  * data to/from the SSI, we use the DMA instead.  Programming is more
272  * complicated, but the performance is much better.
273  *
274  * This interrupt handler is used only to gather statistics.
275  *
276  * @irq: IRQ of the SSI device
277  * @dev_id: pointer to the ssi_private structure for this SSI device
278  */
279 static irqreturn_t fsl_ssi_isr(int irq, void *dev_id)
280 {
281         struct fsl_ssi_private *ssi_private = dev_id;
282         struct regmap *regs = ssi_private->regs;
283         __be32 sisr;
284         __be32 sisr2;
285
286         /* We got an interrupt, so read the status register to see what we
287            were interrupted for.  We mask it with the Interrupt Enable register
288            so that we only check for events that we're interested in.
289          */
290         regmap_read(regs, CCSR_SSI_SISR, &sisr);
291
292         sisr2 = sisr & ssi_private->soc->sisr_write_mask;
293         /* Clear the bits that we set */
294         if (sisr2)
295                 regmap_write(regs, CCSR_SSI_SISR, sisr2);
296
297         fsl_ssi_dbg_isr(&ssi_private->dbg_stats, sisr);
298
299         return IRQ_HANDLED;
300 }
301
302 /*
303  * Enable/Disable all rx/tx config flags at once.
304  */
305 static void fsl_ssi_rxtx_config(struct fsl_ssi_private *ssi_private,
306                 bool enable)
307 {
308         struct regmap *regs = ssi_private->regs;
309         struct fsl_ssi_rxtx_reg_val *vals = &ssi_private->rxtx_reg_val;
310
311         if (enable) {
312                 regmap_update_bits(regs, CCSR_SSI_SIER,
313                                 vals->rx.sier | vals->tx.sier,
314                                 vals->rx.sier | vals->tx.sier);
315                 regmap_update_bits(regs, CCSR_SSI_SRCR,
316                                 vals->rx.srcr | vals->tx.srcr,
317                                 vals->rx.srcr | vals->tx.srcr);
318                 regmap_update_bits(regs, CCSR_SSI_STCR,
319                                 vals->rx.stcr | vals->tx.stcr,
320                                 vals->rx.stcr | vals->tx.stcr);
321         } else {
322                 regmap_update_bits(regs, CCSR_SSI_SRCR,
323                                 vals->rx.srcr | vals->tx.srcr, 0);
324                 regmap_update_bits(regs, CCSR_SSI_STCR,
325                                 vals->rx.stcr | vals->tx.stcr, 0);
326                 regmap_update_bits(regs, CCSR_SSI_SIER,
327                                 vals->rx.sier | vals->tx.sier, 0);
328         }
329 }
330
331 /*
332  * Calculate the bits that have to be disabled for the current stream that is
333  * getting disabled. This keeps the bits enabled that are necessary for the
334  * second stream to work if 'stream_active' is true.
335  *
336  * Detailed calculation:
337  * These are the values that need to be active after disabling. For non-active
338  * second stream, this is 0:
339  *      vals_stream * !!stream_active
340  *
341  * The following computes the overall differences between the setup for the
342  * to-disable stream and the active stream, a simple XOR:
343  *      vals_disable ^ (vals_stream * !!(stream_active))
344  *
345  * The full expression adds a mask on all values we care about
346  */
347 #define fsl_ssi_disable_val(vals_disable, vals_stream, stream_active) \
348         ((vals_disable) & \
349          ((vals_disable) ^ ((vals_stream) * (u32)!!(stream_active))))
350
351 /*
352  * Enable/Disable a ssi configuration. You have to pass either
353  * ssi_private->rxtx_reg_val.rx or tx as vals parameter.
354  */
355 static void fsl_ssi_config(struct fsl_ssi_private *ssi_private, bool enable,
356                 struct fsl_ssi_reg_val *vals)
357 {
358         struct regmap *regs = ssi_private->regs;
359         struct fsl_ssi_reg_val *avals;
360         int nr_active_streams;
361         u32 scr_val;
362         int keep_active;
363
364         regmap_read(regs, CCSR_SSI_SCR, &scr_val);
365
366         nr_active_streams = !!(scr_val & CCSR_SSI_SCR_TE) +
367                                 !!(scr_val & CCSR_SSI_SCR_RE);
368
369         if (nr_active_streams - 1 > 0)
370                 keep_active = 1;
371         else
372                 keep_active = 0;
373
374         /* Find the other direction values rx or tx which we do not want to
375          * modify */
376         if (&ssi_private->rxtx_reg_val.rx == vals)
377                 avals = &ssi_private->rxtx_reg_val.tx;
378         else
379                 avals = &ssi_private->rxtx_reg_val.rx;
380
381         /* If vals should be disabled, start with disabling the unit */
382         if (!enable) {
383                 u32 scr = fsl_ssi_disable_val(vals->scr, avals->scr,
384                                 keep_active);
385                 regmap_update_bits(regs, CCSR_SSI_SCR, scr, 0);
386         }
387
388         /*
389          * We are running on a SoC which does not support online SSI
390          * reconfiguration, so we have to enable all necessary flags at once
391          * even if we do not use them later (capture and playback configuration)
392          */
393         if (ssi_private->soc->offline_config) {
394                 if ((enable && !nr_active_streams) ||
395                                 (!enable && !keep_active))
396                         fsl_ssi_rxtx_config(ssi_private, enable);
397
398                 goto config_done;
399         }
400
401         /*
402          * Configure single direction units while the SSI unit is running
403          * (online configuration)
404          */
405         if (enable) {
406                 regmap_update_bits(regs, CCSR_SSI_SIER, vals->sier, vals->sier);
407                 regmap_update_bits(regs, CCSR_SSI_SRCR, vals->srcr, vals->srcr);
408                 regmap_update_bits(regs, CCSR_SSI_STCR, vals->stcr, vals->stcr);
409         } else {
410                 u32 sier;
411                 u32 srcr;
412                 u32 stcr;
413
414                 /*
415                  * Disabling the necessary flags for one of rx/tx while the
416                  * other stream is active is a little bit more difficult. We
417                  * have to disable only those flags that differ between both
418                  * streams (rx XOR tx) and that are set in the stream that is
419                  * disabled now. Otherwise we could alter flags of the other
420                  * stream
421                  */
422
423                 /* These assignments are simply vals without bits set in avals*/
424                 sier = fsl_ssi_disable_val(vals->sier, avals->sier,
425                                 keep_active);
426                 srcr = fsl_ssi_disable_val(vals->srcr, avals->srcr,
427                                 keep_active);
428                 stcr = fsl_ssi_disable_val(vals->stcr, avals->stcr,
429                                 keep_active);
430
431                 regmap_update_bits(regs, CCSR_SSI_SRCR, srcr, 0);
432                 regmap_update_bits(regs, CCSR_SSI_STCR, stcr, 0);
433                 regmap_update_bits(regs, CCSR_SSI_SIER, sier, 0);
434         }
435
436 config_done:
437         /* Enabling of subunits is done after configuration */
438         if (enable)
439                 regmap_update_bits(regs, CCSR_SSI_SCR, vals->scr, vals->scr);
440 }
441
442
443 static void fsl_ssi_rx_config(struct fsl_ssi_private *ssi_private, bool enable)
444 {
445         fsl_ssi_config(ssi_private, enable, &ssi_private->rxtx_reg_val.rx);
446 }
447
448 static void fsl_ssi_tx_config(struct fsl_ssi_private *ssi_private, bool enable)
449 {
450         fsl_ssi_config(ssi_private, enable, &ssi_private->rxtx_reg_val.tx);
451 }
452
453 /*
454  * Setup rx/tx register values used to enable/disable the streams. These will
455  * be used later in fsl_ssi_config to setup the streams without the need to
456  * check for all different SSI modes.
457  */
458 static void fsl_ssi_setup_reg_vals(struct fsl_ssi_private *ssi_private)
459 {
460         struct fsl_ssi_rxtx_reg_val *reg = &ssi_private->rxtx_reg_val;
461
462         reg->rx.sier = CCSR_SSI_SIER_RFF0_EN;
463         reg->rx.srcr = CCSR_SSI_SRCR_RFEN0;
464         reg->rx.scr = 0;
465         reg->tx.sier = CCSR_SSI_SIER_TFE0_EN;
466         reg->tx.stcr = CCSR_SSI_STCR_TFEN0;
467         reg->tx.scr = 0;
468
469         if (!fsl_ssi_is_ac97(ssi_private)) {
470                 reg->rx.scr = CCSR_SSI_SCR_SSIEN | CCSR_SSI_SCR_RE;
471                 reg->rx.sier |= CCSR_SSI_SIER_RFF0_EN;
472                 reg->tx.scr = CCSR_SSI_SCR_SSIEN | CCSR_SSI_SCR_TE;
473                 reg->tx.sier |= CCSR_SSI_SIER_TFE0_EN;
474         }
475
476         if (ssi_private->use_dma) {
477                 reg->rx.sier |= CCSR_SSI_SIER_RDMAE;
478                 reg->tx.sier |= CCSR_SSI_SIER_TDMAE;
479         } else {
480                 reg->rx.sier |= CCSR_SSI_SIER_RIE;
481                 reg->tx.sier |= CCSR_SSI_SIER_TIE;
482         }
483
484         reg->rx.sier |= FSLSSI_SIER_DBG_RX_FLAGS;
485         reg->tx.sier |= FSLSSI_SIER_DBG_TX_FLAGS;
486 }
487
488 static void fsl_ssi_setup_ac97(struct fsl_ssi_private *ssi_private)
489 {
490         struct regmap *regs = ssi_private->regs;
491
492         /*
493          * Setup the clock control register
494          */
495         regmap_write(regs, CCSR_SSI_STCCR,
496                         CCSR_SSI_SxCCR_WL(17) | CCSR_SSI_SxCCR_DC(13));
497         regmap_write(regs, CCSR_SSI_SRCCR,
498                         CCSR_SSI_SxCCR_WL(17) | CCSR_SSI_SxCCR_DC(13));
499
500         /*
501          * Enable AC97 mode and startup the SSI
502          */
503         regmap_write(regs, CCSR_SSI_SACNT,
504                         CCSR_SSI_SACNT_AC97EN | CCSR_SSI_SACNT_FV);
505         regmap_write(regs, CCSR_SSI_SACCDIS, 0xff);
506         regmap_write(regs, CCSR_SSI_SACCEN, 0x300);
507
508         /*
509          * Enable SSI, Transmit and Receive. AC97 has to communicate with the
510          * codec before a stream is started.
511          */
512         regmap_update_bits(regs, CCSR_SSI_SCR,
513                         CCSR_SSI_SCR_SSIEN | CCSR_SSI_SCR_TE | CCSR_SSI_SCR_RE,
514                         CCSR_SSI_SCR_SSIEN | CCSR_SSI_SCR_TE | CCSR_SSI_SCR_RE);
515
516         regmap_write(regs, CCSR_SSI_SOR, CCSR_SSI_SOR_WAIT(3));
517 }
518
519 /**
520  * fsl_ssi_startup: create a new substream
521  *
522  * This is the first function called when a stream is opened.
523  *
524  * If this is the first stream open, then grab the IRQ and program most of
525  * the SSI registers.
526  */
527 static int fsl_ssi_startup(struct snd_pcm_substream *substream,
528                            struct snd_soc_dai *dai)
529 {
530         struct snd_soc_pcm_runtime *rtd = substream->private_data;
531         struct fsl_ssi_private *ssi_private =
532                 snd_soc_dai_get_drvdata(rtd->cpu_dai);
533         int ret;
534
535         ret = clk_prepare_enable(ssi_private->clk);
536         if (ret)
537                 return ret;
538
539         /* When using dual fifo mode, it is safer to ensure an even period
540          * size. If appearing to an odd number while DMA always starts its
541          * task from fifo0, fifo1 would be neglected at the end of each
542          * period. But SSI would still access fifo1 with an invalid data.
543          */
544         if (ssi_private->use_dual_fifo)
545                 snd_pcm_hw_constraint_step(substream->runtime, 0,
546                                 SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 2);
547
548         return 0;
549 }
550
551 /**
552  * fsl_ssi_shutdown: shutdown the SSI
553  *
554  */
555 static void fsl_ssi_shutdown(struct snd_pcm_substream *substream,
556                                 struct snd_soc_dai *dai)
557 {
558         struct snd_soc_pcm_runtime *rtd = substream->private_data;
559         struct fsl_ssi_private *ssi_private =
560                 snd_soc_dai_get_drvdata(rtd->cpu_dai);
561
562         clk_disable_unprepare(ssi_private->clk);
563
564 }
565
566 /**
567  * fsl_ssi_set_bclk - configure Digital Audio Interface bit clock
568  *
569  * Note: This function can be only called when using SSI as DAI master
570  *
571  * Quick instruction for parameters:
572  * freq: Output BCLK frequency = samplerate * 32 (fixed) * channels
573  * dir: SND_SOC_CLOCK_OUT -> TxBCLK, SND_SOC_CLOCK_IN -> RxBCLK.
574  */
575 static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream,
576                 struct snd_soc_dai *cpu_dai,
577                 struct snd_pcm_hw_params *hw_params)
578 {
579         struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(cpu_dai);
580         struct regmap *regs = ssi_private->regs;
581         int synchronous = ssi_private->cpu_dai_drv.symmetric_rates, ret;
582         u32 pm = 999, div2, psr, stccr, mask, afreq, factor, i;
583         unsigned long clkrate, baudrate, tmprate;
584         u64 sub, savesub = 100000;
585         unsigned int freq;
586         bool baudclk_is_used;
587
588         /* Prefer the explicitly set bitclock frequency */
589         if (ssi_private->bitclk_freq)
590                 freq = ssi_private->bitclk_freq;
591         else
592                 freq = params_channels(hw_params) * 32 * params_rate(hw_params);
593
594         /* Don't apply it to any non-baudclk circumstance */
595         if (IS_ERR(ssi_private->baudclk))
596                 return -EINVAL;
597
598         baudclk_is_used = ssi_private->baudclk_streams & ~(BIT(substream->stream));
599
600         /* It should be already enough to divide clock by setting pm alone */
601         psr = 0;
602         div2 = 0;
603
604         factor = (div2 + 1) * (7 * psr + 1) * 2;
605
606         for (i = 0; i < 255; i++) {
607                 tmprate = freq * factor * (i + 1);
608
609                 if (baudclk_is_used)
610                         clkrate = clk_get_rate(ssi_private->baudclk);
611                 else
612                         clkrate = clk_round_rate(ssi_private->baudclk, tmprate);
613
614                 /*
615                  * Hardware limitation: The bclk rate must be
616                  * never greater than 1/5 IPG clock rate
617                  */
618                 if (clkrate * 5 > clk_get_rate(ssi_private->clk))
619                         continue;
620
621                 clkrate /= factor;
622                 afreq = clkrate / (i + 1);
623
624                 if (freq == afreq)
625                         sub = 0;
626                 else if (freq / afreq == 1)
627                         sub = freq - afreq;
628                 else if (afreq / freq == 1)
629                         sub = afreq - freq;
630                 else
631                         continue;
632
633                 /* Calculate the fraction */
634                 sub *= 100000;
635                 do_div(sub, freq);
636
637                 if (sub < savesub && !(i == 0 && psr == 0 && div2 == 0)) {
638                         baudrate = tmprate;
639                         savesub = sub;
640                         pm = i;
641                 }
642
643                 /* We are lucky */
644                 if (savesub == 0)
645                         break;
646         }
647
648         /* No proper pm found if it is still remaining the initial value */
649         if (pm == 999) {
650                 dev_err(cpu_dai->dev, "failed to handle the required sysclk\n");
651                 return -EINVAL;
652         }
653
654         stccr = CCSR_SSI_SxCCR_PM(pm + 1) | (div2 ? CCSR_SSI_SxCCR_DIV2 : 0) |
655                 (psr ? CCSR_SSI_SxCCR_PSR : 0);
656         mask = CCSR_SSI_SxCCR_PM_MASK | CCSR_SSI_SxCCR_DIV2 |
657                 CCSR_SSI_SxCCR_PSR;
658
659         if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK || synchronous)
660                 regmap_update_bits(regs, CCSR_SSI_STCCR, mask, stccr);
661         else
662                 regmap_update_bits(regs, CCSR_SSI_SRCCR, mask, stccr);
663
664         if (!baudclk_is_used) {
665                 ret = clk_set_rate(ssi_private->baudclk, baudrate);
666                 if (ret) {
667                         dev_err(cpu_dai->dev, "failed to set baudclk rate\n");
668                         return -EINVAL;
669                 }
670         }
671
672         return 0;
673 }
674
675 static int fsl_ssi_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
676                 int clk_id, unsigned int freq, int dir)
677 {
678         struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(cpu_dai);
679
680         ssi_private->bitclk_freq = freq;
681
682         return 0;
683 }
684
685 /**
686  * fsl_ssi_hw_params - program the sample size
687  *
688  * Most of the SSI registers have been programmed in the startup function,
689  * but the word length must be programmed here.  Unfortunately, programming
690  * the SxCCR.WL bits requires the SSI to be temporarily disabled.  This can
691  * cause a problem with supporting simultaneous playback and capture.  If
692  * the SSI is already playing a stream, then that stream may be temporarily
693  * stopped when you start capture.
694  *
695  * Note: The SxCCR.DC and SxCCR.PM bits are only used if the SSI is the
696  * clock master.
697  */
698 static int fsl_ssi_hw_params(struct snd_pcm_substream *substream,
699         struct snd_pcm_hw_params *hw_params, struct snd_soc_dai *cpu_dai)
700 {
701         struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(cpu_dai);
702         struct regmap *regs = ssi_private->regs;
703         unsigned int channels = params_channels(hw_params);
704         unsigned int sample_size =
705                 snd_pcm_format_width(params_format(hw_params));
706         u32 wl = CCSR_SSI_SxCCR_WL(sample_size);
707         int ret;
708         u32 scr_val;
709         int enabled;
710
711         regmap_read(regs, CCSR_SSI_SCR, &scr_val);
712         enabled = scr_val & CCSR_SSI_SCR_SSIEN;
713
714         /*
715          * If we're in synchronous mode, and the SSI is already enabled,
716          * then STCCR is already set properly.
717          */
718         if (enabled && ssi_private->cpu_dai_drv.symmetric_rates)
719                 return 0;
720
721         if (fsl_ssi_is_i2s_master(ssi_private)) {
722                 ret = fsl_ssi_set_bclk(substream, cpu_dai, hw_params);
723                 if (ret)
724                         return ret;
725
726                 /* Do not enable the clock if it is already enabled */
727                 if (!(ssi_private->baudclk_streams & BIT(substream->stream))) {
728                         ret = clk_prepare_enable(ssi_private->baudclk);
729                         if (ret)
730                                 return ret;
731
732                         ssi_private->baudclk_streams |= BIT(substream->stream);
733                 }
734         }
735
736         if (!fsl_ssi_is_ac97(ssi_private)) {
737                 u8 i2smode;
738                 /*
739                  * Switch to normal net mode in order to have a frame sync
740                  * signal every 32 bits instead of 16 bits
741                  */
742                 if (fsl_ssi_is_i2s_cbm_cfs(ssi_private) && sample_size == 16)
743                         i2smode = CCSR_SSI_SCR_I2S_MODE_NORMAL |
744                                 CCSR_SSI_SCR_NET;
745                 else
746                         i2smode = ssi_private->i2s_mode;
747
748                 regmap_update_bits(regs, CCSR_SSI_SCR,
749                                 CCSR_SSI_SCR_NET | CCSR_SSI_SCR_I2S_MODE_MASK,
750                                 channels == 1 ? 0 : i2smode);
751         }
752
753         /*
754          * FIXME: The documentation says that SxCCR[WL] should not be
755          * modified while the SSI is enabled.  The only time this can
756          * happen is if we're trying to do simultaneous playback and
757          * capture in asynchronous mode.  Unfortunately, I have been enable
758          * to get that to work at all on the P1022DS.  Therefore, we don't
759          * bother to disable/enable the SSI when setting SxCCR[WL], because
760          * the SSI will stop anyway.  Maybe one day, this will get fixed.
761          */
762
763         /* In synchronous mode, the SSI uses STCCR for capture */
764         if ((substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ||
765             ssi_private->cpu_dai_drv.symmetric_rates)
766                 regmap_update_bits(regs, CCSR_SSI_STCCR, CCSR_SSI_SxCCR_WL_MASK,
767                                 wl);
768         else
769                 regmap_update_bits(regs, CCSR_SSI_SRCCR, CCSR_SSI_SxCCR_WL_MASK,
770                                 wl);
771
772         return 0;
773 }
774
775 static int fsl_ssi_hw_free(struct snd_pcm_substream *substream,
776                 struct snd_soc_dai *cpu_dai)
777 {
778         struct snd_soc_pcm_runtime *rtd = substream->private_data;
779         struct fsl_ssi_private *ssi_private =
780                 snd_soc_dai_get_drvdata(rtd->cpu_dai);
781
782         if (fsl_ssi_is_i2s_master(ssi_private) &&
783                         ssi_private->baudclk_streams & BIT(substream->stream)) {
784                 clk_disable_unprepare(ssi_private->baudclk);
785                 ssi_private->baudclk_streams &= ~BIT(substream->stream);
786         }
787
788         return 0;
789 }
790
791 static int _fsl_ssi_set_dai_fmt(struct device *dev,
792                                 struct fsl_ssi_private *ssi_private,
793                                 unsigned int fmt)
794 {
795         struct regmap *regs = ssi_private->regs;
796         u32 strcr = 0, stcr, srcr, scr, mask;
797         u8 wm;
798
799         ssi_private->dai_fmt = fmt;
800
801         if (fsl_ssi_is_i2s_master(ssi_private) && IS_ERR(ssi_private->baudclk)) {
802                 dev_err(dev, "baudclk is missing which is necessary for master mode\n");
803                 return -EINVAL;
804         }
805
806         fsl_ssi_setup_reg_vals(ssi_private);
807
808         regmap_read(regs, CCSR_SSI_SCR, &scr);
809         scr &= ~(CCSR_SSI_SCR_SYN | CCSR_SSI_SCR_I2S_MODE_MASK);
810         scr |= CCSR_SSI_SCR_SYNC_TX_FS;
811
812         mask = CCSR_SSI_STCR_TXBIT0 | CCSR_SSI_STCR_TFDIR | CCSR_SSI_STCR_TXDIR |
813                 CCSR_SSI_STCR_TSCKP | CCSR_SSI_STCR_TFSI | CCSR_SSI_STCR_TFSL |
814                 CCSR_SSI_STCR_TEFS;
815         regmap_read(regs, CCSR_SSI_STCR, &stcr);
816         regmap_read(regs, CCSR_SSI_SRCR, &srcr);
817         stcr &= ~mask;
818         srcr &= ~mask;
819
820         ssi_private->i2s_mode = CCSR_SSI_SCR_NET;
821         switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
822         case SND_SOC_DAIFMT_I2S:
823                 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
824                 case SND_SOC_DAIFMT_CBM_CFS:
825                 case SND_SOC_DAIFMT_CBS_CFS:
826                         ssi_private->i2s_mode |= CCSR_SSI_SCR_I2S_MODE_MASTER;
827                         regmap_update_bits(regs, CCSR_SSI_STCCR,
828                                         CCSR_SSI_SxCCR_DC_MASK,
829                                         CCSR_SSI_SxCCR_DC(2));
830                         regmap_update_bits(regs, CCSR_SSI_SRCCR,
831                                         CCSR_SSI_SxCCR_DC_MASK,
832                                         CCSR_SSI_SxCCR_DC(2));
833                         break;
834                 case SND_SOC_DAIFMT_CBM_CFM:
835                         ssi_private->i2s_mode |= CCSR_SSI_SCR_I2S_MODE_SLAVE;
836                         break;
837                 default:
838                         return -EINVAL;
839                 }
840
841                 /* Data on rising edge of bclk, frame low, 1clk before data */
842                 strcr |= CCSR_SSI_STCR_TFSI | CCSR_SSI_STCR_TSCKP |
843                         CCSR_SSI_STCR_TXBIT0 | CCSR_SSI_STCR_TEFS;
844                 break;
845         case SND_SOC_DAIFMT_LEFT_J:
846                 /* Data on rising edge of bclk, frame high */
847                 strcr |= CCSR_SSI_STCR_TXBIT0 | CCSR_SSI_STCR_TSCKP;
848                 break;
849         case SND_SOC_DAIFMT_DSP_A:
850                 /* Data on rising edge of bclk, frame high, 1clk before data */
851                 strcr |= CCSR_SSI_STCR_TFSL | CCSR_SSI_STCR_TSCKP |
852                         CCSR_SSI_STCR_TXBIT0 | CCSR_SSI_STCR_TEFS;
853                 break;
854         case SND_SOC_DAIFMT_DSP_B:
855                 /* Data on rising edge of bclk, frame high */
856                 strcr |= CCSR_SSI_STCR_TFSL | CCSR_SSI_STCR_TSCKP |
857                         CCSR_SSI_STCR_TXBIT0;
858                 break;
859         case SND_SOC_DAIFMT_AC97:
860                 ssi_private->i2s_mode |= CCSR_SSI_SCR_I2S_MODE_NORMAL;
861                 break;
862         default:
863                 return -EINVAL;
864         }
865         scr |= ssi_private->i2s_mode;
866
867         /* DAI clock inversion */
868         switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
869         case SND_SOC_DAIFMT_NB_NF:
870                 /* Nothing to do for both normal cases */
871                 break;
872         case SND_SOC_DAIFMT_IB_NF:
873                 /* Invert bit clock */
874                 strcr ^= CCSR_SSI_STCR_TSCKP;
875                 break;
876         case SND_SOC_DAIFMT_NB_IF:
877                 /* Invert frame clock */
878                 strcr ^= CCSR_SSI_STCR_TFSI;
879                 break;
880         case SND_SOC_DAIFMT_IB_IF:
881                 /* Invert both clocks */
882                 strcr ^= CCSR_SSI_STCR_TSCKP;
883                 strcr ^= CCSR_SSI_STCR_TFSI;
884                 break;
885         default:
886                 return -EINVAL;
887         }
888
889         /* DAI clock master masks */
890         switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
891         case SND_SOC_DAIFMT_CBS_CFS:
892                 strcr |= CCSR_SSI_STCR_TFDIR | CCSR_SSI_STCR_TXDIR;
893                 scr |= CCSR_SSI_SCR_SYS_CLK_EN;
894                 break;
895         case SND_SOC_DAIFMT_CBM_CFM:
896                 scr &= ~CCSR_SSI_SCR_SYS_CLK_EN;
897                 break;
898         case SND_SOC_DAIFMT_CBM_CFS:
899                 strcr &= ~CCSR_SSI_STCR_TXDIR;
900                 strcr |= CCSR_SSI_STCR_TFDIR;
901                 scr &= ~CCSR_SSI_SCR_SYS_CLK_EN;
902                 break;
903         default:
904                 if (!fsl_ssi_is_ac97(ssi_private))
905                         return -EINVAL;
906         }
907
908         stcr |= strcr;
909         srcr |= strcr;
910
911         if (ssi_private->cpu_dai_drv.symmetric_rates
912                         || fsl_ssi_is_ac97(ssi_private)) {
913                 /* Need to clear RXDIR when using SYNC or AC97 mode */
914                 srcr &= ~CCSR_SSI_SRCR_RXDIR;
915                 scr |= CCSR_SSI_SCR_SYN;
916         }
917
918         regmap_write(regs, CCSR_SSI_STCR, stcr);
919         regmap_write(regs, CCSR_SSI_SRCR, srcr);
920         regmap_write(regs, CCSR_SSI_SCR, scr);
921
922         /*
923          * Set the watermark for transmit FIFI 0 and receive FIFO 0. We don't
924          * use FIFO 1. We program the transmit water to signal a DMA transfer
925          * if there are only two (or fewer) elements left in the FIFO. Two
926          * elements equals one frame (left channel, right channel). This value,
927          * however, depends on the depth of the transmit buffer.
928          *
929          * We set the watermark on the same level as the DMA burstsize.  For
930          * fiq it is probably better to use the biggest possible watermark
931          * size.
932          */
933         if (ssi_private->use_dma)
934                 wm = ssi_private->fifo_depth - 2;
935         else
936                 wm = ssi_private->fifo_depth;
937
938         regmap_write(regs, CCSR_SSI_SFCSR,
939                         CCSR_SSI_SFCSR_TFWM0(wm) | CCSR_SSI_SFCSR_RFWM0(wm) |
940                         CCSR_SSI_SFCSR_TFWM1(wm) | CCSR_SSI_SFCSR_RFWM1(wm));
941
942         if (ssi_private->use_dual_fifo) {
943                 regmap_update_bits(regs, CCSR_SSI_SRCR, CCSR_SSI_SRCR_RFEN1,
944                                 CCSR_SSI_SRCR_RFEN1);
945                 regmap_update_bits(regs, CCSR_SSI_STCR, CCSR_SSI_STCR_TFEN1,
946                                 CCSR_SSI_STCR_TFEN1);
947                 regmap_update_bits(regs, CCSR_SSI_SCR, CCSR_SSI_SCR_TCH_EN,
948                                 CCSR_SSI_SCR_TCH_EN);
949         }
950
951         if ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_AC97)
952                 fsl_ssi_setup_ac97(ssi_private);
953
954         return 0;
955
956 }
957
958 /**
959  * fsl_ssi_set_dai_fmt - configure Digital Audio Interface Format.
960  */
961 static int fsl_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
962 {
963         struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(cpu_dai);
964
965         return _fsl_ssi_set_dai_fmt(cpu_dai->dev, ssi_private, fmt);
966 }
967
968 /**
969  * fsl_ssi_set_dai_tdm_slot - set TDM slot number
970  *
971  * Note: This function can be only called when using SSI as DAI master
972  */
973 static int fsl_ssi_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai, u32 tx_mask,
974                                 u32 rx_mask, int slots, int slot_width)
975 {
976         struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(cpu_dai);
977         struct regmap *regs = ssi_private->regs;
978         u32 val;
979
980         /* The slot number should be >= 2 if using Network mode or I2S mode */
981         regmap_read(regs, CCSR_SSI_SCR, &val);
982         val &= CCSR_SSI_SCR_I2S_MODE_MASK | CCSR_SSI_SCR_NET;
983         if (val && slots < 2) {
984                 dev_err(cpu_dai->dev, "slot number should be >= 2 in I2S or NET\n");
985                 return -EINVAL;
986         }
987
988         regmap_update_bits(regs, CCSR_SSI_STCCR, CCSR_SSI_SxCCR_DC_MASK,
989                         CCSR_SSI_SxCCR_DC(slots));
990         regmap_update_bits(regs, CCSR_SSI_SRCCR, CCSR_SSI_SxCCR_DC_MASK,
991                         CCSR_SSI_SxCCR_DC(slots));
992
993         /* The register SxMSKs needs SSI to provide essential clock due to
994          * hardware design. So we here temporarily enable SSI to set them.
995          */
996         regmap_read(regs, CCSR_SSI_SCR, &val);
997         val &= CCSR_SSI_SCR_SSIEN;
998         regmap_update_bits(regs, CCSR_SSI_SCR, CCSR_SSI_SCR_SSIEN,
999                         CCSR_SSI_SCR_SSIEN);
1000
1001         regmap_write(regs, CCSR_SSI_STMSK, ~tx_mask);
1002         regmap_write(regs, CCSR_SSI_SRMSK, ~rx_mask);
1003
1004         regmap_update_bits(regs, CCSR_SSI_SCR, CCSR_SSI_SCR_SSIEN, val);
1005
1006         return 0;
1007 }
1008
1009 /**
1010  * fsl_ssi_trigger: start and stop the DMA transfer.
1011  *
1012  * This function is called by ALSA to start, stop, pause, and resume the DMA
1013  * transfer of data.
1014  *
1015  * The DMA channel is in external master start and pause mode, which
1016  * means the SSI completely controls the flow of data.
1017  */
1018 static int fsl_ssi_trigger(struct snd_pcm_substream *substream, int cmd,
1019                            struct snd_soc_dai *dai)
1020 {
1021         struct snd_soc_pcm_runtime *rtd = substream->private_data;
1022         struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(rtd->cpu_dai);
1023         struct regmap *regs = ssi_private->regs;
1024
1025         switch (cmd) {
1026         case SNDRV_PCM_TRIGGER_START:
1027         case SNDRV_PCM_TRIGGER_RESUME:
1028         case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1029                 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1030                         fsl_ssi_tx_config(ssi_private, true);
1031                 else
1032                         fsl_ssi_rx_config(ssi_private, true);
1033                 break;
1034
1035         case SNDRV_PCM_TRIGGER_STOP:
1036         case SNDRV_PCM_TRIGGER_SUSPEND:
1037         case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1038                 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1039                         fsl_ssi_tx_config(ssi_private, false);
1040                 else
1041                         fsl_ssi_rx_config(ssi_private, false);
1042                 break;
1043
1044         default:
1045                 return -EINVAL;
1046         }
1047
1048         if (fsl_ssi_is_ac97(ssi_private)) {
1049                 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1050                         regmap_write(regs, CCSR_SSI_SOR, CCSR_SSI_SOR_TX_CLR);
1051                 else
1052                         regmap_write(regs, CCSR_SSI_SOR, CCSR_SSI_SOR_RX_CLR);
1053         }
1054
1055         return 0;
1056 }
1057
1058 static int fsl_ssi_dai_probe(struct snd_soc_dai *dai)
1059 {
1060         struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(dai);
1061
1062         if (ssi_private->soc->imx && ssi_private->use_dma) {
1063                 dai->playback_dma_data = &ssi_private->dma_params_tx;
1064                 dai->capture_dma_data = &ssi_private->dma_params_rx;
1065         }
1066
1067         return 0;
1068 }
1069
1070 static const struct snd_soc_dai_ops fsl_ssi_dai_ops = {
1071         .startup        = fsl_ssi_startup,
1072         .shutdown       = fsl_ssi_shutdown,
1073         .hw_params      = fsl_ssi_hw_params,
1074         .hw_free        = fsl_ssi_hw_free,
1075         .set_fmt        = fsl_ssi_set_dai_fmt,
1076         .set_sysclk     = fsl_ssi_set_dai_sysclk,
1077         .set_tdm_slot   = fsl_ssi_set_dai_tdm_slot,
1078         .trigger        = fsl_ssi_trigger,
1079 };
1080
1081 /* Template for the CPU dai driver structure */
1082 static struct snd_soc_dai_driver fsl_ssi_dai_template = {
1083         .probe = fsl_ssi_dai_probe,
1084         .playback = {
1085                 .stream_name = "CPU-Playback",
1086                 .channels_min = 1,
1087                 .channels_max = 2,
1088                 .rates = FSLSSI_I2S_RATES,
1089                 .formats = FSLSSI_I2S_FORMATS,
1090         },
1091         .capture = {
1092                 .stream_name = "CPU-Capture",
1093                 .channels_min = 1,
1094                 .channels_max = 2,
1095                 .rates = FSLSSI_I2S_RATES,
1096                 .formats = FSLSSI_I2S_FORMATS,
1097         },
1098         .ops = &fsl_ssi_dai_ops,
1099 };
1100
1101 static const struct snd_soc_component_driver fsl_ssi_component = {
1102         .name           = "fsl-ssi",
1103 };
1104
1105 static struct snd_soc_dai_driver fsl_ssi_ac97_dai = {
1106         .bus_control = true,
1107         .probe = fsl_ssi_dai_probe,
1108         .playback = {
1109                 .stream_name = "AC97 Playback",
1110                 .channels_min = 2,
1111                 .channels_max = 2,
1112                 .rates = SNDRV_PCM_RATE_8000_48000,
1113                 .formats = SNDRV_PCM_FMTBIT_S16_LE,
1114         },
1115         .capture = {
1116                 .stream_name = "AC97 Capture",
1117                 .channels_min = 2,
1118                 .channels_max = 2,
1119                 .rates = SNDRV_PCM_RATE_48000,
1120                 .formats = SNDRV_PCM_FMTBIT_S16_LE,
1121         },
1122         .ops = &fsl_ssi_dai_ops,
1123 };
1124
1125
1126 static struct fsl_ssi_private *fsl_ac97_data;
1127
1128 static void fsl_ssi_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
1129                 unsigned short val)
1130 {
1131         struct regmap *regs = fsl_ac97_data->regs;
1132         unsigned int lreg;
1133         unsigned int lval;
1134         int ret;
1135
1136         if (reg > 0x7f)
1137                 return;
1138
1139         ret = clk_prepare_enable(fsl_ac97_data->clk);
1140         if (ret) {
1141                 pr_err("ac97 write clk_prepare_enable failed: %d\n",
1142                         ret);
1143                 return;
1144         }
1145
1146         lreg = reg <<  12;
1147         regmap_write(regs, CCSR_SSI_SACADD, lreg);
1148
1149         lval = val << 4;
1150         regmap_write(regs, CCSR_SSI_SACDAT, lval);
1151
1152         regmap_update_bits(regs, CCSR_SSI_SACNT, CCSR_SSI_SACNT_RDWR_MASK,
1153                         CCSR_SSI_SACNT_WR);
1154         udelay(100);
1155
1156         clk_disable_unprepare(fsl_ac97_data->clk);
1157 }
1158
1159 static unsigned short fsl_ssi_ac97_read(struct snd_ac97 *ac97,
1160                 unsigned short reg)
1161 {
1162         struct regmap *regs = fsl_ac97_data->regs;
1163
1164         unsigned short val = -1;
1165         u32 reg_val;
1166         unsigned int lreg;
1167         int ret;
1168
1169         ret = clk_prepare_enable(fsl_ac97_data->clk);
1170         if (ret) {
1171                 pr_err("ac97 read clk_prepare_enable failed: %d\n",
1172                         ret);
1173                 return -1;
1174         }
1175
1176         lreg = (reg & 0x7f) <<  12;
1177         regmap_write(regs, CCSR_SSI_SACADD, lreg);
1178         regmap_update_bits(regs, CCSR_SSI_SACNT, CCSR_SSI_SACNT_RDWR_MASK,
1179                         CCSR_SSI_SACNT_RD);
1180
1181         udelay(100);
1182
1183         regmap_read(regs, CCSR_SSI_SACDAT, &reg_val);
1184         val = (reg_val >> 4) & 0xffff;
1185
1186         clk_disable_unprepare(fsl_ac97_data->clk);
1187
1188         return val;
1189 }
1190
1191 static struct snd_ac97_bus_ops fsl_ssi_ac97_ops = {
1192         .read           = fsl_ssi_ac97_read,
1193         .write          = fsl_ssi_ac97_write,
1194 };
1195
1196 /**
1197  * Make every character in a string lower-case
1198  */
1199 static void make_lowercase(char *s)
1200 {
1201         char *p = s;
1202         char c;
1203
1204         while ((c = *p)) {
1205                 if ((c >= 'A') && (c <= 'Z'))
1206                         *p = c + ('a' - 'A');
1207                 p++;
1208         }
1209 }
1210
1211 static int fsl_ssi_imx_probe(struct platform_device *pdev,
1212                 struct fsl_ssi_private *ssi_private, void __iomem *iomem)
1213 {
1214         struct device_node *np = pdev->dev.of_node;
1215         u32 dmas[4];
1216         int ret;
1217
1218         if (ssi_private->has_ipg_clk_name)
1219                 ssi_private->clk = devm_clk_get(&pdev->dev, "ipg");
1220         else
1221                 ssi_private->clk = devm_clk_get(&pdev->dev, NULL);
1222         if (IS_ERR(ssi_private->clk)) {
1223                 ret = PTR_ERR(ssi_private->clk);
1224                 dev_err(&pdev->dev, "could not get clock: %d\n", ret);
1225                 return ret;
1226         }
1227
1228         if (!ssi_private->has_ipg_clk_name) {
1229                 ret = clk_prepare_enable(ssi_private->clk);
1230                 if (ret) {
1231                         dev_err(&pdev->dev, "clk_prepare_enable failed: %d\n", ret);
1232                         return ret;
1233                 }
1234         }
1235
1236         /* For those SLAVE implementations, we ignore non-baudclk cases
1237          * and, instead, abandon MASTER mode that needs baud clock.
1238          */
1239         ssi_private->baudclk = devm_clk_get(&pdev->dev, "baud");
1240         if (IS_ERR(ssi_private->baudclk))
1241                 dev_dbg(&pdev->dev, "could not get baud clock: %ld\n",
1242                          PTR_ERR(ssi_private->baudclk));
1243
1244         /*
1245          * We have burstsize be "fifo_depth - 2" to match the SSI
1246          * watermark setting in fsl_ssi_startup().
1247          */
1248         ssi_private->dma_params_tx.maxburst = ssi_private->fifo_depth - 2;
1249         ssi_private->dma_params_rx.maxburst = ssi_private->fifo_depth - 2;
1250         ssi_private->dma_params_tx.addr = ssi_private->ssi_phys + CCSR_SSI_STX0;
1251         ssi_private->dma_params_rx.addr = ssi_private->ssi_phys + CCSR_SSI_SRX0;
1252
1253         ret = of_property_read_u32_array(np, "dmas", dmas, 4);
1254         if (ssi_private->use_dma && !ret && dmas[2] == IMX_DMATYPE_SSI_DUAL) {
1255                 ssi_private->use_dual_fifo = true;
1256                 /* When using dual fifo mode, we need to keep watermark
1257                  * as even numbers due to dma script limitation.
1258                  */
1259                 ssi_private->dma_params_tx.maxburst &= ~0x1;
1260                 ssi_private->dma_params_rx.maxburst &= ~0x1;
1261         }
1262
1263         if (!ssi_private->use_dma) {
1264
1265                 /*
1266                  * Some boards use an incompatible codec. To get it
1267                  * working, we are using imx-fiq-pcm-audio, that
1268                  * can handle those codecs. DMA is not possible in this
1269                  * situation.
1270                  */
1271
1272                 ssi_private->fiq_params.irq = ssi_private->irq;
1273                 ssi_private->fiq_params.base = iomem;
1274                 ssi_private->fiq_params.dma_params_rx =
1275                         &ssi_private->dma_params_rx;
1276                 ssi_private->fiq_params.dma_params_tx =
1277                         &ssi_private->dma_params_tx;
1278
1279                 ret = imx_pcm_fiq_init(pdev, &ssi_private->fiq_params);
1280                 if (ret)
1281                         goto error_pcm;
1282         } else {
1283                 ret = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
1284                 if (ret)
1285                         goto error_pcm;
1286         }
1287
1288         return 0;
1289
1290 error_pcm:
1291
1292         if (!ssi_private->has_ipg_clk_name)
1293                 clk_disable_unprepare(ssi_private->clk);
1294         return ret;
1295 }
1296
1297 static void fsl_ssi_imx_clean(struct platform_device *pdev,
1298                 struct fsl_ssi_private *ssi_private)
1299 {
1300         if (!ssi_private->use_dma)
1301                 imx_pcm_fiq_exit(pdev);
1302         if (!ssi_private->has_ipg_clk_name)
1303                 clk_disable_unprepare(ssi_private->clk);
1304 }
1305
1306 static int fsl_ssi_probe(struct platform_device *pdev)
1307 {
1308         struct fsl_ssi_private *ssi_private;
1309         int ret = 0;
1310         struct device_node *np = pdev->dev.of_node;
1311         const struct of_device_id *of_id;
1312         const char *p, *sprop;
1313         const uint32_t *iprop;
1314         struct resource *res;
1315         void __iomem *iomem;
1316         char name[64];
1317
1318         of_id = of_match_device(fsl_ssi_ids, &pdev->dev);
1319         if (!of_id || !of_id->data)
1320                 return -EINVAL;
1321
1322         ssi_private = devm_kzalloc(&pdev->dev, sizeof(*ssi_private),
1323                         GFP_KERNEL);
1324         if (!ssi_private) {
1325                 dev_err(&pdev->dev, "could not allocate DAI object\n");
1326                 return -ENOMEM;
1327         }
1328
1329         ssi_private->soc = of_id->data;
1330
1331         sprop = of_get_property(np, "fsl,mode", NULL);
1332         if (sprop) {
1333                 if (!strcmp(sprop, "ac97-slave"))
1334                         ssi_private->dai_fmt = SND_SOC_DAIFMT_AC97;
1335         }
1336
1337         ssi_private->use_dma = !of_property_read_bool(np,
1338                         "fsl,fiq-stream-filter");
1339
1340         if (fsl_ssi_is_ac97(ssi_private)) {
1341                 memcpy(&ssi_private->cpu_dai_drv, &fsl_ssi_ac97_dai,
1342                                 sizeof(fsl_ssi_ac97_dai));
1343
1344                 fsl_ac97_data = ssi_private;
1345
1346                 ret = snd_soc_set_ac97_ops_of_reset(&fsl_ssi_ac97_ops, pdev);
1347                 if (ret) {
1348                         dev_err(&pdev->dev, "could not set AC'97 ops\n");
1349                         return ret;
1350                 }
1351         } else {
1352                 /* Initialize this copy of the CPU DAI driver structure */
1353                 memcpy(&ssi_private->cpu_dai_drv, &fsl_ssi_dai_template,
1354                        sizeof(fsl_ssi_dai_template));
1355         }
1356         ssi_private->cpu_dai_drv.name = dev_name(&pdev->dev);
1357
1358         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1359         iomem = devm_ioremap_resource(&pdev->dev, res);
1360         if (IS_ERR(iomem))
1361                 return PTR_ERR(iomem);
1362         ssi_private->ssi_phys = res->start;
1363
1364         ret = of_property_match_string(np, "clock-names", "ipg");
1365         if (ret < 0) {
1366                 ssi_private->has_ipg_clk_name = false;
1367                 ssi_private->regs = devm_regmap_init_mmio(&pdev->dev, iomem,
1368                         &fsl_ssi_regconfig);
1369         } else {
1370                 ssi_private->has_ipg_clk_name = true;
1371                 ssi_private->regs = devm_regmap_init_mmio_clk(&pdev->dev,
1372                         "ipg", iomem, &fsl_ssi_regconfig);
1373         }
1374         if (IS_ERR(ssi_private->regs)) {
1375                 dev_err(&pdev->dev, "Failed to init register map\n");
1376                 return PTR_ERR(ssi_private->regs);
1377         }
1378
1379         ssi_private->irq = platform_get_irq(pdev, 0);
1380         if (ssi_private->irq < 0) {
1381                 dev_err(&pdev->dev, "no irq for node %s\n", pdev->name);
1382                 return ssi_private->irq;
1383         }
1384
1385         /* Are the RX and the TX clocks locked? */
1386         if (!of_find_property(np, "fsl,ssi-asynchronous", NULL)) {
1387                 if (!fsl_ssi_is_ac97(ssi_private))
1388                         ssi_private->cpu_dai_drv.symmetric_rates = 1;
1389
1390                 ssi_private->cpu_dai_drv.symmetric_channels = 1;
1391                 ssi_private->cpu_dai_drv.symmetric_samplebits = 1;
1392         }
1393
1394         /* Determine the FIFO depth. */
1395         iprop = of_get_property(np, "fsl,fifo-depth", NULL);
1396         if (iprop)
1397                 ssi_private->fifo_depth = be32_to_cpup(iprop);
1398         else
1399                 /* Older 8610 DTs didn't have the fifo-depth property */
1400                 ssi_private->fifo_depth = 8;
1401
1402         dev_set_drvdata(&pdev->dev, ssi_private);
1403
1404         if (ssi_private->soc->imx) {
1405                 ret = fsl_ssi_imx_probe(pdev, ssi_private, iomem);
1406                 if (ret)
1407                         return ret;
1408         }
1409
1410         ret = devm_snd_soc_register_component(&pdev->dev, &fsl_ssi_component,
1411                                               &ssi_private->cpu_dai_drv, 1);
1412         if (ret) {
1413                 dev_err(&pdev->dev, "failed to register DAI: %d\n", ret);
1414                 goto error_asoc_register;
1415         }
1416
1417         if (ssi_private->use_dma) {
1418                 ret = devm_request_irq(&pdev->dev, ssi_private->irq,
1419                                         fsl_ssi_isr, 0, dev_name(&pdev->dev),
1420                                         ssi_private);
1421                 if (ret < 0) {
1422                         dev_err(&pdev->dev, "could not claim irq %u\n",
1423                                         ssi_private->irq);
1424                         goto error_asoc_register;
1425                 }
1426         }
1427
1428         ret = fsl_ssi_debugfs_create(&ssi_private->dbg_stats, &pdev->dev);
1429         if (ret)
1430                 goto error_asoc_register;
1431
1432         /*
1433          * If codec-handle property is missing from SSI node, we assume
1434          * that the machine driver uses new binding which does not require
1435          * SSI driver to trigger machine driver's probe.
1436          */
1437         if (!of_get_property(np, "codec-handle", NULL))
1438                 goto done;
1439
1440         /* Trigger the machine driver's probe function.  The platform driver
1441          * name of the machine driver is taken from /compatible property of the
1442          * device tree.  We also pass the address of the CPU DAI driver
1443          * structure.
1444          */
1445         sprop = of_get_property(of_find_node_by_path("/"), "compatible", NULL);
1446         /* Sometimes the compatible name has a "fsl," prefix, so we strip it. */
1447         p = strrchr(sprop, ',');
1448         if (p)
1449                 sprop = p + 1;
1450         snprintf(name, sizeof(name), "snd-soc-%s", sprop);
1451         make_lowercase(name);
1452
1453         ssi_private->pdev =
1454                 platform_device_register_data(&pdev->dev, name, 0, NULL, 0);
1455         if (IS_ERR(ssi_private->pdev)) {
1456                 ret = PTR_ERR(ssi_private->pdev);
1457                 dev_err(&pdev->dev, "failed to register platform: %d\n", ret);
1458                 goto error_sound_card;
1459         }
1460
1461 done:
1462         if (ssi_private->dai_fmt)
1463                 _fsl_ssi_set_dai_fmt(&pdev->dev, ssi_private,
1464                                      ssi_private->dai_fmt);
1465
1466         if (fsl_ssi_is_ac97(ssi_private)) {
1467                 u32 ssi_idx;
1468
1469                 ret = of_property_read_u32(np, "cell-index", &ssi_idx);
1470                 if (ret) {
1471                         dev_err(&pdev->dev, "cannot get SSI index property\n");
1472                         goto error_sound_card;
1473                 }
1474
1475                 ssi_private->pdev =
1476                         platform_device_register_data(NULL,
1477                                         "ac97-codec", ssi_idx, NULL, 0);
1478                 if (IS_ERR(ssi_private->pdev)) {
1479                         ret = PTR_ERR(ssi_private->pdev);
1480                         dev_err(&pdev->dev,
1481                                 "failed to register AC97 codec platform: %d\n",
1482                                 ret);
1483                         goto error_sound_card;
1484                 }
1485         }
1486
1487         return 0;
1488
1489 error_sound_card:
1490         fsl_ssi_debugfs_remove(&ssi_private->dbg_stats);
1491
1492 error_asoc_register:
1493         if (ssi_private->soc->imx)
1494                 fsl_ssi_imx_clean(pdev, ssi_private);
1495
1496         return ret;
1497 }
1498
1499 static int fsl_ssi_remove(struct platform_device *pdev)
1500 {
1501         struct fsl_ssi_private *ssi_private = dev_get_drvdata(&pdev->dev);
1502
1503         fsl_ssi_debugfs_remove(&ssi_private->dbg_stats);
1504
1505         if (ssi_private->pdev)
1506                 platform_device_unregister(ssi_private->pdev);
1507
1508         if (ssi_private->soc->imx)
1509                 fsl_ssi_imx_clean(pdev, ssi_private);
1510
1511         if (fsl_ssi_is_ac97(ssi_private))
1512                 snd_soc_set_ac97_ops(NULL);
1513
1514         return 0;
1515 }
1516
1517 static struct platform_driver fsl_ssi_driver = {
1518         .driver = {
1519                 .name = "fsl-ssi-dai",
1520                 .of_match_table = fsl_ssi_ids,
1521         },
1522         .probe = fsl_ssi_probe,
1523         .remove = fsl_ssi_remove,
1524 };
1525
1526 module_platform_driver(fsl_ssi_driver);
1527
1528 MODULE_ALIAS("platform:fsl-ssi-dai");
1529 MODULE_AUTHOR("Timur Tabi <timur@freescale.com>");
1530 MODULE_DESCRIPTION("Freescale Synchronous Serial Interface (SSI) ASoC Driver");
1531 MODULE_LICENSE("GPL v2");