]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blob - sound/soc/fsl/fsl_ssi.c
Merge tag 'berlin-fixes-for-4.3-1' of git://git.infradead.org/users/hesselba/linux...
[mirror_ubuntu-zesty-kernel.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");