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