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/mutex.h> 42 #include <linux/slab.h> 43 #include <linux/spinlock.h> 44 #include <linux/of.h> 45 #include <linux/of_address.h> 46 #include <linux/of_irq.h> 47 #include <linux/of_platform.h> 48 49 #include <sound/core.h> 50 #include <sound/pcm.h> 51 #include <sound/pcm_params.h> 52 #include <sound/initval.h> 53 #include <sound/soc.h> 54 #include <sound/dmaengine_pcm.h> 55 56 #include "fsl_ssi.h" 57 #include "imx-pcm.h" 58 59 /* Define RX and TX to index ssi->regvals array; Can be 0 or 1 only */ 60 #define RX 0 61 #define TX 1 62 63 /** 64 * FSLSSI_I2S_FORMATS: audio formats supported by the SSI 65 * 66 * The SSI has a limitation in that the samples must be in the same byte 67 * order as the host CPU. This is because when multiple bytes are written 68 * to the STX register, the bytes and bits must be written in the same 69 * order. The STX is a shift register, so all the bits need to be aligned 70 * (bit-endianness must match byte-endianness). Processors typically write 71 * the bits within a byte in the same order that the bytes of a word are 72 * written in. So if the host CPU is big-endian, then only big-endian 73 * samples will be written to STX properly. 74 */ 75 #ifdef __BIG_ENDIAN 76 #define FSLSSI_I2S_FORMATS \ 77 (SNDRV_PCM_FMTBIT_S8 | \ 78 SNDRV_PCM_FMTBIT_S16_BE | \ 79 SNDRV_PCM_FMTBIT_S18_3BE | \ 80 SNDRV_PCM_FMTBIT_S20_3BE | \ 81 SNDRV_PCM_FMTBIT_S24_3BE | \ 82 SNDRV_PCM_FMTBIT_S24_BE) 83 #else 84 #define FSLSSI_I2S_FORMATS \ 85 (SNDRV_PCM_FMTBIT_S8 | \ 86 SNDRV_PCM_FMTBIT_S16_LE | \ 87 SNDRV_PCM_FMTBIT_S18_3LE | \ 88 SNDRV_PCM_FMTBIT_S20_3LE | \ 89 SNDRV_PCM_FMTBIT_S24_3LE | \ 90 SNDRV_PCM_FMTBIT_S24_LE) 91 #endif 92 93 /* 94 * In AC97 mode, TXDIR bit is forced to 0 and TFDIR bit is forced to 1: 95 * - SSI inputs external bit clock and outputs frame sync clock -- CBM_CFS 96 * - Also have NB_NF to mark these two clocks will not be inverted 97 */ 98 #define FSLSSI_AC97_DAIFMT \ 99 (SND_SOC_DAIFMT_AC97 | \ 100 SND_SOC_DAIFMT_CBM_CFS | \ 101 SND_SOC_DAIFMT_NB_NF) 102 103 #define FSLSSI_SIER_DBG_RX_FLAGS \ 104 (SSI_SIER_RFF0_EN | \ 105 SSI_SIER_RLS_EN | \ 106 SSI_SIER_RFS_EN | \ 107 SSI_SIER_ROE0_EN | \ 108 SSI_SIER_RFRC_EN) 109 #define FSLSSI_SIER_DBG_TX_FLAGS \ 110 (SSI_SIER_TFE0_EN | \ 111 SSI_SIER_TLS_EN | \ 112 SSI_SIER_TFS_EN | \ 113 SSI_SIER_TUE0_EN | \ 114 SSI_SIER_TFRC_EN) 115 116 enum fsl_ssi_type { 117 FSL_SSI_MCP8610, 118 FSL_SSI_MX21, 119 FSL_SSI_MX35, 120 FSL_SSI_MX51, 121 }; 122 123 struct fsl_ssi_regvals { 124 u32 sier; 125 u32 srcr; 126 u32 stcr; 127 u32 scr; 128 }; 129 130 static bool fsl_ssi_readable_reg(struct device *dev, unsigned int reg) 131 { 132 switch (reg) { 133 case REG_SSI_SACCEN: 134 case REG_SSI_SACCDIS: 135 return false; 136 default: 137 return true; 138 } 139 } 140 141 static bool fsl_ssi_volatile_reg(struct device *dev, unsigned int reg) 142 { 143 switch (reg) { 144 case REG_SSI_STX0: 145 case REG_SSI_STX1: 146 case REG_SSI_SRX0: 147 case REG_SSI_SRX1: 148 case REG_SSI_SISR: 149 case REG_SSI_SFCSR: 150 case REG_SSI_SACNT: 151 case REG_SSI_SACADD: 152 case REG_SSI_SACDAT: 153 case REG_SSI_SATAG: 154 case REG_SSI_SACCST: 155 case REG_SSI_SOR: 156 return true; 157 default: 158 return false; 159 } 160 } 161 162 static bool fsl_ssi_precious_reg(struct device *dev, unsigned int reg) 163 { 164 switch (reg) { 165 case REG_SSI_SRX0: 166 case REG_SSI_SRX1: 167 case REG_SSI_SISR: 168 case REG_SSI_SACADD: 169 case REG_SSI_SACDAT: 170 case REG_SSI_SATAG: 171 return true; 172 default: 173 return false; 174 } 175 } 176 177 static bool fsl_ssi_writeable_reg(struct device *dev, unsigned int reg) 178 { 179 switch (reg) { 180 case REG_SSI_SRX0: 181 case REG_SSI_SRX1: 182 case REG_SSI_SACCST: 183 return false; 184 default: 185 return true; 186 } 187 } 188 189 static const struct regmap_config fsl_ssi_regconfig = { 190 .max_register = REG_SSI_SACCDIS, 191 .reg_bits = 32, 192 .val_bits = 32, 193 .reg_stride = 4, 194 .val_format_endian = REGMAP_ENDIAN_NATIVE, 195 .num_reg_defaults_raw = REG_SSI_SACCDIS / sizeof(uint32_t) + 1, 196 .readable_reg = fsl_ssi_readable_reg, 197 .volatile_reg = fsl_ssi_volatile_reg, 198 .precious_reg = fsl_ssi_precious_reg, 199 .writeable_reg = fsl_ssi_writeable_reg, 200 .cache_type = REGCACHE_FLAT, 201 }; 202 203 struct fsl_ssi_soc_data { 204 bool imx; 205 bool imx21regs; /* imx21-class SSI - no SACC{ST,EN,DIS} regs */ 206 bool offline_config; 207 u32 sisr_write_mask; 208 }; 209 210 /** 211 * fsl_ssi: per-SSI private data 212 * 213 * @regs: Pointer to the regmap registers 214 * @irq: IRQ of this SSI 215 * @cpu_dai_drv: CPU DAI driver for this device 216 * 217 * @dai_fmt: DAI configuration this device is currently used with 218 * @streams: Mask of current active streams: BIT(TX) and BIT(RX) 219 * @i2s_net: I2S and Network mode configurations of SCR register 220 * (this is the initial settings based on the DAI format) 221 * @synchronous: Use synchronous mode - both of TX and RX use STCK and SFCK 222 * @use_dma: DMA is used or FIQ with stream filter 223 * @use_dual_fifo: DMA with support for dual FIFO mode 224 * @has_ipg_clk_name: If "ipg" is in the clock name list of device tree 225 * @fifo_depth: Depth of the SSI FIFOs 226 * @slot_width: Width of each DAI slot 227 * @slots: Number of slots 228 * @regvals: Specific RX/TX register settings 229 * 230 * @clk: Clock source to access register 231 * @baudclk: Clock source to generate bit and frame-sync clocks 232 * @baudclk_streams: Active streams that are using baudclk 233 * 234 * @regcache_sfcsr: Cache sfcsr register value during suspend and resume 235 * @regcache_sacnt: Cache sacnt register value during suspend and resume 236 * 237 * @dma_params_tx: DMA transmit parameters 238 * @dma_params_rx: DMA receive parameters 239 * @ssi_phys: physical address of the SSI registers 240 * 241 * @fiq_params: FIQ stream filtering parameters 242 * 243 * @card_pdev: Platform_device pointer to register a sound card for PowerPC or 244 * to register a CODEC platform device for AC97 245 * @card_name: Platform_device name to register a sound card for PowerPC or 246 * to register a CODEC platform device for AC97 247 * @card_idx: The index of SSI to register a sound card for PowerPC or 248 * to register a CODEC platform device for AC97 249 * 250 * @dbg_stats: Debugging statistics 251 * 252 * @soc: SoC specific data 253 * @dev: Pointer to &pdev->dev 254 * 255 * @fifo_watermark: The FIFO watermark setting. Notifies DMA when there are 256 * @fifo_watermark or fewer words in TX fifo or 257 * @fifo_watermark or more empty words in RX fifo. 258 * @dma_maxburst: Max number of words to transfer in one go. So far, 259 * this is always the same as fifo_watermark. 260 * 261 * @ac97_reg_lock: Mutex lock to serialize AC97 register access operations 262 */ 263 struct fsl_ssi { 264 struct regmap *regs; 265 int irq; 266 struct snd_soc_dai_driver cpu_dai_drv; 267 268 unsigned int dai_fmt; 269 u8 streams; 270 u8 i2s_net; 271 bool synchronous; 272 bool use_dma; 273 bool use_dual_fifo; 274 bool has_ipg_clk_name; 275 unsigned int fifo_depth; 276 unsigned int slot_width; 277 unsigned int slots; 278 struct fsl_ssi_regvals regvals[2]; 279 280 struct clk *clk; 281 struct clk *baudclk; 282 unsigned int baudclk_streams; 283 284 u32 regcache_sfcsr; 285 u32 regcache_sacnt; 286 287 struct snd_dmaengine_dai_dma_data dma_params_tx; 288 struct snd_dmaengine_dai_dma_data dma_params_rx; 289 dma_addr_t ssi_phys; 290 291 struct imx_pcm_fiq_params fiq_params; 292 293 struct platform_device *card_pdev; 294 char card_name[32]; 295 u32 card_idx; 296 297 struct fsl_ssi_dbg dbg_stats; 298 299 const struct fsl_ssi_soc_data *soc; 300 struct device *dev; 301 302 u32 fifo_watermark; 303 u32 dma_maxburst; 304 305 struct mutex ac97_reg_lock; 306 }; 307 308 /* 309 * SoC specific data 310 * 311 * Notes: 312 * 1) SSI in earlier SoCS has critical bits in control registers that 313 * cannot be changed after SSI starts running -- a software reset 314 * (set SSIEN to 0) is required to change their values. So adding 315 * an offline_config flag for these SoCs. 316 * 2) SDMA is available since imx35. However, imx35 does not support 317 * DMA bits changing when SSI is running, so set offline_config. 318 * 3) imx51 and later versions support register configurations when 319 * SSI is running (SSIEN); For these versions, DMA needs to be 320 * configured before SSI sends DMA request to avoid an undefined 321 * DMA request on the SDMA side. 322 */ 323 324 static struct fsl_ssi_soc_data fsl_ssi_mpc8610 = { 325 .imx = false, 326 .offline_config = true, 327 .sisr_write_mask = SSI_SISR_RFRC | SSI_SISR_TFRC | 328 SSI_SISR_ROE0 | SSI_SISR_ROE1 | 329 SSI_SISR_TUE0 | SSI_SISR_TUE1, 330 }; 331 332 static struct fsl_ssi_soc_data fsl_ssi_imx21 = { 333 .imx = true, 334 .imx21regs = true, 335 .offline_config = true, 336 .sisr_write_mask = 0, 337 }; 338 339 static struct fsl_ssi_soc_data fsl_ssi_imx35 = { 340 .imx = true, 341 .offline_config = true, 342 .sisr_write_mask = SSI_SISR_RFRC | SSI_SISR_TFRC | 343 SSI_SISR_ROE0 | SSI_SISR_ROE1 | 344 SSI_SISR_TUE0 | SSI_SISR_TUE1, 345 }; 346 347 static struct fsl_ssi_soc_data fsl_ssi_imx51 = { 348 .imx = true, 349 .offline_config = false, 350 .sisr_write_mask = SSI_SISR_ROE0 | SSI_SISR_ROE1 | 351 SSI_SISR_TUE0 | SSI_SISR_TUE1, 352 }; 353 354 static const struct of_device_id fsl_ssi_ids[] = { 355 { .compatible = "fsl,mpc8610-ssi", .data = &fsl_ssi_mpc8610 }, 356 { .compatible = "fsl,imx51-ssi", .data = &fsl_ssi_imx51 }, 357 { .compatible = "fsl,imx35-ssi", .data = &fsl_ssi_imx35 }, 358 { .compatible = "fsl,imx21-ssi", .data = &fsl_ssi_imx21 }, 359 {} 360 }; 361 MODULE_DEVICE_TABLE(of, fsl_ssi_ids); 362 363 static bool fsl_ssi_is_ac97(struct fsl_ssi *ssi) 364 { 365 return (ssi->dai_fmt & SND_SOC_DAIFMT_FORMAT_MASK) == 366 SND_SOC_DAIFMT_AC97; 367 } 368 369 static bool fsl_ssi_is_i2s_master(struct fsl_ssi *ssi) 370 { 371 return (ssi->dai_fmt & SND_SOC_DAIFMT_MASTER_MASK) == 372 SND_SOC_DAIFMT_CBS_CFS; 373 } 374 375 static bool fsl_ssi_is_i2s_cbm_cfs(struct fsl_ssi *ssi) 376 { 377 return (ssi->dai_fmt & SND_SOC_DAIFMT_MASTER_MASK) == 378 SND_SOC_DAIFMT_CBM_CFS; 379 } 380 381 /** 382 * Interrupt handler to gather states 383 */ 384 static irqreturn_t fsl_ssi_isr(int irq, void *dev_id) 385 { 386 struct fsl_ssi *ssi = dev_id; 387 struct regmap *regs = ssi->regs; 388 __be32 sisr; 389 __be32 sisr2; 390 391 regmap_read(regs, REG_SSI_SISR, &sisr); 392 393 sisr2 = sisr & ssi->soc->sisr_write_mask; 394 /* Clear the bits that we set */ 395 if (sisr2) 396 regmap_write(regs, REG_SSI_SISR, sisr2); 397 398 fsl_ssi_dbg_isr(&ssi->dbg_stats, sisr); 399 400 return IRQ_HANDLED; 401 } 402 403 /** 404 * Set SCR, SIER, STCR and SRCR registers with cached values in regvals 405 * 406 * Notes: 407 * 1) For offline_config SoCs, enable all necessary bits of both streams 408 * when 1st stream starts, even if the opposite stream will not start 409 * 2) It also clears FIFO before setting regvals; SOR is safe to set online 410 */ 411 static void fsl_ssi_config_enable(struct fsl_ssi *ssi, bool tx) 412 { 413 struct fsl_ssi_regvals *vals = ssi->regvals; 414 int dir = tx ? TX : RX; 415 u32 sier, srcr, stcr; 416 417 /* Clear dirty data in the FIFO; It also prevents channel slipping */ 418 regmap_update_bits(ssi->regs, REG_SSI_SOR, 419 SSI_SOR_xX_CLR(tx), SSI_SOR_xX_CLR(tx)); 420 421 /* 422 * On offline_config SoCs, SxCR and SIER are already configured when 423 * the previous stream started. So skip all SxCR and SIER settings 424 * to prevent online reconfigurations, then jump to set SCR directly 425 */ 426 if (ssi->soc->offline_config && ssi->streams) 427 goto enable_scr; 428 429 if (ssi->soc->offline_config) { 430 /* 431 * Online reconfiguration not supported, so enable all bits for 432 * both streams at once to avoid necessity of reconfigurations 433 */ 434 srcr = vals[RX].srcr | vals[TX].srcr; 435 stcr = vals[RX].stcr | vals[TX].stcr; 436 sier = vals[RX].sier | vals[TX].sier; 437 } else { 438 /* Otherwise, only set bits for the current stream */ 439 srcr = vals[dir].srcr; 440 stcr = vals[dir].stcr; 441 sier = vals[dir].sier; 442 } 443 444 /* Configure SRCR, STCR and SIER at once */ 445 regmap_update_bits(ssi->regs, REG_SSI_SRCR, srcr, srcr); 446 regmap_update_bits(ssi->regs, REG_SSI_STCR, stcr, stcr); 447 regmap_update_bits(ssi->regs, REG_SSI_SIER, sier, sier); 448 449 enable_scr: 450 /* 451 * Start DMA before setting TE to avoid FIFO underrun 452 * which may cause a channel slip or a channel swap 453 * 454 * TODO: FIQ cases might also need this upon testing 455 */ 456 if (ssi->use_dma && tx) { 457 int try = 100; 458 u32 sfcsr; 459 460 /* Enable SSI first to send TX DMA request */ 461 regmap_update_bits(ssi->regs, REG_SSI_SCR, 462 SSI_SCR_SSIEN, SSI_SCR_SSIEN); 463 464 /* Busy wait until TX FIFO not empty -- DMA working */ 465 do { 466 regmap_read(ssi->regs, REG_SSI_SFCSR, &sfcsr); 467 if (SSI_SFCSR_TFCNT0(sfcsr)) 468 break; 469 } while (--try); 470 471 /* FIFO still empty -- something might be wrong */ 472 if (!SSI_SFCSR_TFCNT0(sfcsr)) 473 dev_warn(ssi->dev, "Timeout waiting TX FIFO filling\n"); 474 } 475 /* Enable all remaining bits in SCR */ 476 regmap_update_bits(ssi->regs, REG_SSI_SCR, 477 vals[dir].scr, vals[dir].scr); 478 479 /* Log the enabled stream to the mask */ 480 ssi->streams |= BIT(dir); 481 } 482 483 /** 484 * Exclude bits that are used by the opposite stream 485 * 486 * When both streams are active, disabling some bits for the current stream 487 * might break the other stream if these bits are used by it. 488 * 489 * @vals : regvals of the current stream 490 * @avals: regvals of the opposite stream 491 * @aactive: active state of the opposite stream 492 * 493 * 1) XOR vals and avals to get the differences if the other stream is active; 494 * Otherwise, return current vals if the other stream is not active 495 * 2) AND the result of 1) with the current vals 496 */ 497 #define _ssi_xor_shared_bits(vals, avals, aactive) \ 498 ((vals) ^ ((avals) * (aactive))) 499 500 #define ssi_excl_shared_bits(vals, avals, aactive) \ 501 ((vals) & _ssi_xor_shared_bits(vals, avals, aactive)) 502 503 /** 504 * Unset SCR, SIER, STCR and SRCR registers with cached values in regvals 505 * 506 * Notes: 507 * 1) For offline_config SoCs, to avoid online reconfigurations, disable all 508 * bits of both streams at once when the last stream is abort to end 509 * 2) It also clears FIFO after unsetting regvals; SOR is safe to set online 510 */ 511 static void fsl_ssi_config_disable(struct fsl_ssi *ssi, bool tx) 512 { 513 struct fsl_ssi_regvals *vals, *avals; 514 u32 sier, srcr, stcr, scr; 515 int adir = tx ? RX : TX; 516 int dir = tx ? TX : RX; 517 bool aactive; 518 519 /* Check if the opposite stream is active */ 520 aactive = ssi->streams & BIT(adir); 521 522 vals = &ssi->regvals[dir]; 523 524 /* Get regvals of the opposite stream to keep opposite stream safe */ 525 avals = &ssi->regvals[adir]; 526 527 /* 528 * To keep the other stream safe, exclude shared bits between 529 * both streams, and get safe bits to disable current stream 530 */ 531 scr = ssi_excl_shared_bits(vals->scr, avals->scr, aactive); 532 533 /* Disable safe bits of SCR register for the current stream */ 534 regmap_update_bits(ssi->regs, REG_SSI_SCR, scr, 0); 535 536 /* Log the disabled stream to the mask */ 537 ssi->streams &= ~BIT(dir); 538 539 /* 540 * On offline_config SoCs, if the other stream is active, skip 541 * SxCR and SIER settings to prevent online reconfigurations 542 */ 543 if (ssi->soc->offline_config && aactive) 544 goto fifo_clear; 545 546 if (ssi->soc->offline_config) { 547 /* Now there is only current stream active, disable all bits */ 548 srcr = vals->srcr | avals->srcr; 549 stcr = vals->stcr | avals->stcr; 550 sier = vals->sier | avals->sier; 551 } else { 552 /* 553 * To keep the other stream safe, exclude shared bits between 554 * both streams, and get safe bits to disable current stream 555 */ 556 sier = ssi_excl_shared_bits(vals->sier, avals->sier, aactive); 557 srcr = ssi_excl_shared_bits(vals->srcr, avals->srcr, aactive); 558 stcr = ssi_excl_shared_bits(vals->stcr, avals->stcr, aactive); 559 } 560 561 /* Clear configurations of SRCR, STCR and SIER at once */ 562 regmap_update_bits(ssi->regs, REG_SSI_SRCR, srcr, 0); 563 regmap_update_bits(ssi->regs, REG_SSI_STCR, stcr, 0); 564 regmap_update_bits(ssi->regs, REG_SSI_SIER, sier, 0); 565 566 fifo_clear: 567 /* Clear remaining data in the FIFO */ 568 regmap_update_bits(ssi->regs, REG_SSI_SOR, 569 SSI_SOR_xX_CLR(tx), SSI_SOR_xX_CLR(tx)); 570 } 571 572 static void fsl_ssi_tx_ac97_saccst_setup(struct fsl_ssi *ssi) 573 { 574 struct regmap *regs = ssi->regs; 575 576 /* no SACC{ST,EN,DIS} regs on imx21-class SSI */ 577 if (!ssi->soc->imx21regs) { 578 /* Disable all channel slots */ 579 regmap_write(regs, REG_SSI_SACCDIS, 0xff); 580 /* Enable slots 3 & 4 -- PCM Playback Left & Right channels */ 581 regmap_write(regs, REG_SSI_SACCEN, 0x300); 582 } 583 } 584 585 /** 586 * Cache critical bits of SIER, SRCR, STCR and SCR to later set them safely 587 */ 588 static void fsl_ssi_setup_regvals(struct fsl_ssi *ssi) 589 { 590 struct fsl_ssi_regvals *vals = ssi->regvals; 591 592 vals[RX].sier = SSI_SIER_RFF0_EN | FSLSSI_SIER_DBG_RX_FLAGS; 593 vals[RX].srcr = SSI_SRCR_RFEN0; 594 vals[RX].scr = SSI_SCR_SSIEN | SSI_SCR_RE; 595 vals[TX].sier = SSI_SIER_TFE0_EN | FSLSSI_SIER_DBG_TX_FLAGS; 596 vals[TX].stcr = SSI_STCR_TFEN0; 597 vals[TX].scr = SSI_SCR_SSIEN | SSI_SCR_TE; 598 599 /* AC97 has already enabled SSIEN, RE and TE, so ignore them */ 600 if (fsl_ssi_is_ac97(ssi)) 601 vals[RX].scr = vals[TX].scr = 0; 602 603 if (ssi->use_dual_fifo) { 604 vals[RX].srcr |= SSI_SRCR_RFEN1; 605 vals[TX].stcr |= SSI_STCR_TFEN1; 606 } 607 608 if (ssi->use_dma) { 609 vals[RX].sier |= SSI_SIER_RDMAE; 610 vals[TX].sier |= SSI_SIER_TDMAE; 611 } else { 612 vals[RX].sier |= SSI_SIER_RIE; 613 vals[TX].sier |= SSI_SIER_TIE; 614 } 615 } 616 617 static void fsl_ssi_setup_ac97(struct fsl_ssi *ssi) 618 { 619 struct regmap *regs = ssi->regs; 620 621 /* Setup the clock control register */ 622 regmap_write(regs, REG_SSI_STCCR, SSI_SxCCR_WL(17) | SSI_SxCCR_DC(13)); 623 regmap_write(regs, REG_SSI_SRCCR, SSI_SxCCR_WL(17) | SSI_SxCCR_DC(13)); 624 625 /* Enable AC97 mode and startup the SSI */ 626 regmap_write(regs, REG_SSI_SACNT, SSI_SACNT_AC97EN | SSI_SACNT_FV); 627 628 /* AC97 has to communicate with codec before starting a stream */ 629 regmap_update_bits(regs, REG_SSI_SCR, 630 SSI_SCR_SSIEN | SSI_SCR_TE | SSI_SCR_RE, 631 SSI_SCR_SSIEN | SSI_SCR_TE | SSI_SCR_RE); 632 633 regmap_write(regs, REG_SSI_SOR, SSI_SOR_WAIT(3)); 634 } 635 636 static int fsl_ssi_startup(struct snd_pcm_substream *substream, 637 struct snd_soc_dai *dai) 638 { 639 struct snd_soc_pcm_runtime *rtd = substream->private_data; 640 struct fsl_ssi *ssi = snd_soc_dai_get_drvdata(rtd->cpu_dai); 641 int ret; 642 643 ret = clk_prepare_enable(ssi->clk); 644 if (ret) 645 return ret; 646 647 /* 648 * When using dual fifo mode, it is safer to ensure an even period 649 * size. If appearing to an odd number while DMA always starts its 650 * task from fifo0, fifo1 would be neglected at the end of each 651 * period. But SSI would still access fifo1 with an invalid data. 652 */ 653 if (ssi->use_dual_fifo) 654 snd_pcm_hw_constraint_step(substream->runtime, 0, 655 SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 2); 656 657 return 0; 658 } 659 660 static void fsl_ssi_shutdown(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 *ssi = snd_soc_dai_get_drvdata(rtd->cpu_dai); 665 666 clk_disable_unprepare(ssi->clk); 667 } 668 669 /** 670 * Configure Digital Audio Interface bit clock 671 * 672 * Note: This function can be only called when using SSI as DAI master 673 * 674 * Quick instruction for parameters: 675 * freq: Output BCLK frequency = samplerate * slots * slot_width 676 * (In 2-channel I2S Master mode, slot_width is fixed 32) 677 */ 678 static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream, 679 struct snd_soc_dai *dai, 680 struct snd_pcm_hw_params *hw_params) 681 { 682 bool tx2, tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; 683 struct fsl_ssi *ssi = snd_soc_dai_get_drvdata(dai); 684 struct regmap *regs = ssi->regs; 685 u32 pm = 999, div2, psr, stccr, mask, afreq, factor, i; 686 unsigned long clkrate, baudrate, tmprate; 687 unsigned int slots = params_channels(hw_params); 688 unsigned int slot_width = 32; 689 u64 sub, savesub = 100000; 690 unsigned int freq; 691 bool baudclk_is_used; 692 int ret; 693 694 /* Override slots and slot_width if being specifically set... */ 695 if (ssi->slots) 696 slots = ssi->slots; 697 /* ...but keep 32 bits if slots is 2 -- I2S Master mode */ 698 if (ssi->slot_width && slots != 2) 699 slot_width = ssi->slot_width; 700 701 /* Generate bit clock based on the slot number and slot width */ 702 freq = slots * slot_width * params_rate(hw_params); 703 704 /* Don't apply it to any non-baudclk circumstance */ 705 if (IS_ERR(ssi->baudclk)) 706 return -EINVAL; 707 708 /* 709 * Hardware limitation: The bclk rate must be 710 * never greater than 1/5 IPG clock rate 711 */ 712 if (freq * 5 > clk_get_rate(ssi->clk)) { 713 dev_err(dai->dev, "bitclk > ipgclk / 5\n"); 714 return -EINVAL; 715 } 716 717 baudclk_is_used = ssi->baudclk_streams & ~(BIT(substream->stream)); 718 719 /* It should be already enough to divide clock by setting pm alone */ 720 psr = 0; 721 div2 = 0; 722 723 factor = (div2 + 1) * (7 * psr + 1) * 2; 724 725 for (i = 0; i < 255; i++) { 726 tmprate = freq * factor * (i + 1); 727 728 if (baudclk_is_used) 729 clkrate = clk_get_rate(ssi->baudclk); 730 else 731 clkrate = clk_round_rate(ssi->baudclk, tmprate); 732 733 clkrate /= factor; 734 afreq = clkrate / (i + 1); 735 736 if (freq == afreq) 737 sub = 0; 738 else if (freq / afreq == 1) 739 sub = freq - afreq; 740 else if (afreq / freq == 1) 741 sub = afreq - freq; 742 else 743 continue; 744 745 /* Calculate the fraction */ 746 sub *= 100000; 747 do_div(sub, freq); 748 749 if (sub < savesub && !(i == 0 && psr == 0 && div2 == 0)) { 750 baudrate = tmprate; 751 savesub = sub; 752 pm = i; 753 } 754 755 /* We are lucky */ 756 if (savesub == 0) 757 break; 758 } 759 760 /* No proper pm found if it is still remaining the initial value */ 761 if (pm == 999) { 762 dev_err(dai->dev, "failed to handle the required sysclk\n"); 763 return -EINVAL; 764 } 765 766 stccr = SSI_SxCCR_PM(pm + 1) | (div2 ? SSI_SxCCR_DIV2 : 0) | 767 (psr ? SSI_SxCCR_PSR : 0); 768 mask = SSI_SxCCR_PM_MASK | SSI_SxCCR_DIV2 | SSI_SxCCR_PSR; 769 770 /* STCCR is used for RX in synchronous mode */ 771 tx2 = tx || ssi->synchronous; 772 regmap_update_bits(regs, REG_SSI_SxCCR(tx2), mask, stccr); 773 774 if (!baudclk_is_used) { 775 ret = clk_set_rate(ssi->baudclk, baudrate); 776 if (ret) { 777 dev_err(dai->dev, "failed to set baudclk rate\n"); 778 return -EINVAL; 779 } 780 } 781 782 return 0; 783 } 784 785 /** 786 * Configure SSI based on PCM hardware parameters 787 * 788 * Notes: 789 * 1) SxCCR.WL bits are critical bits that require SSI to be temporarily 790 * disabled on offline_config SoCs. Even for online configurable SoCs 791 * running in synchronous mode (both TX and RX use STCCR), it is not 792 * safe to re-configure them when both two streams start running. 793 * 2) SxCCR.PM, SxCCR.DIV2 and SxCCR.PSR bits will be configured in the 794 * fsl_ssi_set_bclk() if SSI is the DAI clock master. 795 */ 796 static int fsl_ssi_hw_params(struct snd_pcm_substream *substream, 797 struct snd_pcm_hw_params *hw_params, 798 struct snd_soc_dai *dai) 799 { 800 bool tx2, tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; 801 struct fsl_ssi *ssi = snd_soc_dai_get_drvdata(dai); 802 struct regmap *regs = ssi->regs; 803 unsigned int channels = params_channels(hw_params); 804 unsigned int sample_size = params_width(hw_params); 805 u32 wl = SSI_SxCCR_WL(sample_size); 806 int ret; 807 808 /* 809 * SSI is properly configured if it is enabled and running in 810 * the synchronous mode; Note that AC97 mode is an exception 811 * that should set separate configurations for STCCR and SRCCR 812 * despite running in the synchronous mode. 813 */ 814 if (ssi->streams && ssi->synchronous) 815 return 0; 816 817 if (fsl_ssi_is_i2s_master(ssi)) { 818 ret = fsl_ssi_set_bclk(substream, dai, hw_params); 819 if (ret) 820 return ret; 821 822 /* Do not enable the clock if it is already enabled */ 823 if (!(ssi->baudclk_streams & BIT(substream->stream))) { 824 ret = clk_prepare_enable(ssi->baudclk); 825 if (ret) 826 return ret; 827 828 ssi->baudclk_streams |= BIT(substream->stream); 829 } 830 } 831 832 if (!fsl_ssi_is_ac97(ssi)) { 833 /* 834 * Keep the ssi->i2s_net intact while having a local variable 835 * to override settings for special use cases. Otherwise, the 836 * ssi->i2s_net will lose the settings for regular use cases. 837 */ 838 u8 i2s_net = ssi->i2s_net; 839 840 /* Normal + Network mode to send 16-bit data in 32-bit frames */ 841 if (fsl_ssi_is_i2s_cbm_cfs(ssi) && sample_size == 16) 842 i2s_net = SSI_SCR_I2S_MODE_NORMAL | SSI_SCR_NET; 843 844 /* Use Normal mode to send mono data at 1st slot of 2 slots */ 845 if (channels == 1) 846 i2s_net = SSI_SCR_I2S_MODE_NORMAL; 847 848 regmap_update_bits(regs, REG_SSI_SCR, 849 SSI_SCR_I2S_NET_MASK, i2s_net); 850 } 851 852 /* In synchronous mode, the SSI uses STCCR for capture */ 853 tx2 = tx || ssi->synchronous; 854 regmap_update_bits(regs, REG_SSI_SxCCR(tx2), SSI_SxCCR_WL_MASK, wl); 855 856 return 0; 857 } 858 859 static int fsl_ssi_hw_free(struct snd_pcm_substream *substream, 860 struct snd_soc_dai *dai) 861 { 862 struct snd_soc_pcm_runtime *rtd = substream->private_data; 863 struct fsl_ssi *ssi = snd_soc_dai_get_drvdata(rtd->cpu_dai); 864 865 if (fsl_ssi_is_i2s_master(ssi) && 866 ssi->baudclk_streams & BIT(substream->stream)) { 867 clk_disable_unprepare(ssi->baudclk); 868 ssi->baudclk_streams &= ~BIT(substream->stream); 869 } 870 871 return 0; 872 } 873 874 static int _fsl_ssi_set_dai_fmt(struct fsl_ssi *ssi, unsigned int fmt) 875 { 876 u32 strcr = 0, scr = 0, stcr, srcr, mask; 877 878 ssi->dai_fmt = fmt; 879 880 /* Synchronize frame sync clock for TE to avoid data slipping */ 881 scr |= SSI_SCR_SYNC_TX_FS; 882 883 /* Set to default shifting settings: LSB_ALIGNED */ 884 strcr |= SSI_STCR_TXBIT0; 885 886 /* Use Network mode as default */ 887 ssi->i2s_net = SSI_SCR_NET; 888 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { 889 case SND_SOC_DAIFMT_I2S: 890 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { 891 case SND_SOC_DAIFMT_CBS_CFS: 892 if (IS_ERR(ssi->baudclk)) { 893 dev_err(ssi->dev, 894 "missing baudclk for master mode\n"); 895 return -EINVAL; 896 } 897 /* fall through */ 898 case SND_SOC_DAIFMT_CBM_CFS: 899 ssi->i2s_net |= SSI_SCR_I2S_MODE_MASTER; 900 break; 901 case SND_SOC_DAIFMT_CBM_CFM: 902 ssi->i2s_net |= SSI_SCR_I2S_MODE_SLAVE; 903 break; 904 default: 905 return -EINVAL; 906 } 907 908 regmap_update_bits(ssi->regs, REG_SSI_STCCR, 909 SSI_SxCCR_DC_MASK, SSI_SxCCR_DC(2)); 910 regmap_update_bits(ssi->regs, REG_SSI_SRCCR, 911 SSI_SxCCR_DC_MASK, SSI_SxCCR_DC(2)); 912 913 /* Data on rising edge of bclk, frame low, 1clk before data */ 914 strcr |= SSI_STCR_TFSI | SSI_STCR_TSCKP | SSI_STCR_TEFS; 915 break; 916 case SND_SOC_DAIFMT_LEFT_J: 917 /* Data on rising edge of bclk, frame high */ 918 strcr |= SSI_STCR_TSCKP; 919 break; 920 case SND_SOC_DAIFMT_DSP_A: 921 /* Data on rising edge of bclk, frame high, 1clk before data */ 922 strcr |= SSI_STCR_TFSL | SSI_STCR_TSCKP | SSI_STCR_TEFS; 923 break; 924 case SND_SOC_DAIFMT_DSP_B: 925 /* Data on rising edge of bclk, frame high */ 926 strcr |= SSI_STCR_TFSL | SSI_STCR_TSCKP; 927 break; 928 case SND_SOC_DAIFMT_AC97: 929 /* Data on falling edge of bclk, frame high, 1clk before data */ 930 strcr |= SSI_STCR_TEFS; 931 break; 932 default: 933 return -EINVAL; 934 } 935 936 scr |= ssi->i2s_net; 937 938 /* DAI clock inversion */ 939 switch (fmt & SND_SOC_DAIFMT_INV_MASK) { 940 case SND_SOC_DAIFMT_NB_NF: 941 /* Nothing to do for both normal cases */ 942 break; 943 case SND_SOC_DAIFMT_IB_NF: 944 /* Invert bit clock */ 945 strcr ^= SSI_STCR_TSCKP; 946 break; 947 case SND_SOC_DAIFMT_NB_IF: 948 /* Invert frame clock */ 949 strcr ^= SSI_STCR_TFSI; 950 break; 951 case SND_SOC_DAIFMT_IB_IF: 952 /* Invert both clocks */ 953 strcr ^= SSI_STCR_TSCKP; 954 strcr ^= SSI_STCR_TFSI; 955 break; 956 default: 957 return -EINVAL; 958 } 959 960 /* DAI clock master masks */ 961 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { 962 case SND_SOC_DAIFMT_CBS_CFS: 963 /* Output bit and frame sync clocks */ 964 strcr |= SSI_STCR_TFDIR | SSI_STCR_TXDIR; 965 scr |= SSI_SCR_SYS_CLK_EN; 966 break; 967 case SND_SOC_DAIFMT_CBM_CFM: 968 /* Input bit or frame sync clocks */ 969 break; 970 case SND_SOC_DAIFMT_CBM_CFS: 971 /* Input bit clock but output frame sync clock */ 972 strcr |= SSI_STCR_TFDIR; 973 break; 974 default: 975 return -EINVAL; 976 } 977 978 stcr = strcr; 979 srcr = strcr; 980 981 /* Set SYN mode and clear RXDIR bit when using SYN or AC97 mode */ 982 if (ssi->synchronous || fsl_ssi_is_ac97(ssi)) { 983 srcr &= ~SSI_SRCR_RXDIR; 984 scr |= SSI_SCR_SYN; 985 } 986 987 mask = SSI_STCR_TFDIR | SSI_STCR_TXDIR | SSI_STCR_TSCKP | 988 SSI_STCR_TFSL | SSI_STCR_TFSI | SSI_STCR_TEFS | SSI_STCR_TXBIT0; 989 990 regmap_update_bits(ssi->regs, REG_SSI_STCR, mask, stcr); 991 regmap_update_bits(ssi->regs, REG_SSI_SRCR, mask, srcr); 992 993 mask = SSI_SCR_SYNC_TX_FS | SSI_SCR_I2S_MODE_MASK | 994 SSI_SCR_SYS_CLK_EN | SSI_SCR_SYN; 995 regmap_update_bits(ssi->regs, REG_SSI_SCR, mask, scr); 996 997 return 0; 998 } 999 1000 /** 1001 * Configure Digital Audio Interface (DAI) Format 1002 */ 1003 static int fsl_ssi_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) 1004 { 1005 struct fsl_ssi *ssi = snd_soc_dai_get_drvdata(dai); 1006 1007 /* AC97 configured DAIFMT earlier in the probe() */ 1008 if (fsl_ssi_is_ac97(ssi)) 1009 return 0; 1010 1011 return _fsl_ssi_set_dai_fmt(ssi, fmt); 1012 } 1013 1014 /** 1015 * Set TDM slot number and slot width 1016 */ 1017 static int fsl_ssi_set_dai_tdm_slot(struct snd_soc_dai *dai, u32 tx_mask, 1018 u32 rx_mask, int slots, int slot_width) 1019 { 1020 struct fsl_ssi *ssi = snd_soc_dai_get_drvdata(dai); 1021 struct regmap *regs = ssi->regs; 1022 u32 val; 1023 1024 /* The word length should be 8, 10, 12, 16, 18, 20, 22 or 24 */ 1025 if (slot_width & 1 || slot_width < 8 || slot_width > 24) { 1026 dev_err(dai->dev, "invalid slot width: %d\n", slot_width); 1027 return -EINVAL; 1028 } 1029 1030 /* The slot number should be >= 2 if using Network mode or I2S mode */ 1031 if (ssi->i2s_net && slots < 2) { 1032 dev_err(dai->dev, "slot number should be >= 2 in I2S or NET\n"); 1033 return -EINVAL; 1034 } 1035 1036 regmap_update_bits(regs, REG_SSI_STCCR, 1037 SSI_SxCCR_DC_MASK, SSI_SxCCR_DC(slots)); 1038 regmap_update_bits(regs, REG_SSI_SRCCR, 1039 SSI_SxCCR_DC_MASK, SSI_SxCCR_DC(slots)); 1040 1041 /* Save the SCR register value */ 1042 regmap_read(regs, REG_SSI_SCR, &val); 1043 /* Temporarily enable SSI to allow SxMSKs to be configurable */ 1044 regmap_update_bits(regs, REG_SSI_SCR, SSI_SCR_SSIEN, SSI_SCR_SSIEN); 1045 1046 regmap_write(regs, REG_SSI_STMSK, ~tx_mask); 1047 regmap_write(regs, REG_SSI_SRMSK, ~rx_mask); 1048 1049 /* Restore the value of SSIEN bit */ 1050 regmap_update_bits(regs, REG_SSI_SCR, SSI_SCR_SSIEN, val); 1051 1052 ssi->slot_width = slot_width; 1053 ssi->slots = slots; 1054 1055 return 0; 1056 } 1057 1058 /** 1059 * Start or stop SSI and corresponding DMA transaction. 1060 * 1061 * The DMA channel is in external master start and pause mode, which 1062 * means the SSI completely controls the flow of data. 1063 */ 1064 static int fsl_ssi_trigger(struct snd_pcm_substream *substream, int cmd, 1065 struct snd_soc_dai *dai) 1066 { 1067 struct snd_soc_pcm_runtime *rtd = substream->private_data; 1068 struct fsl_ssi *ssi = snd_soc_dai_get_drvdata(rtd->cpu_dai); 1069 bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; 1070 1071 switch (cmd) { 1072 case SNDRV_PCM_TRIGGER_START: 1073 case SNDRV_PCM_TRIGGER_RESUME: 1074 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 1075 /* 1076 * SACCST might be modified via AC Link by a CODEC if it sends 1077 * extra bits in their SLOTREQ requests, which'll accidentally 1078 * send valid data to slots other than normal playback slots. 1079 * 1080 * To be safe, configure SACCST right before TX starts. 1081 */ 1082 if (tx && fsl_ssi_is_ac97(ssi)) 1083 fsl_ssi_tx_ac97_saccst_setup(ssi); 1084 fsl_ssi_config_enable(ssi, tx); 1085 break; 1086 1087 case SNDRV_PCM_TRIGGER_STOP: 1088 case SNDRV_PCM_TRIGGER_SUSPEND: 1089 case SNDRV_PCM_TRIGGER_PAUSE_PUSH: 1090 fsl_ssi_config_disable(ssi, tx); 1091 break; 1092 1093 default: 1094 return -EINVAL; 1095 } 1096 1097 return 0; 1098 } 1099 1100 static int fsl_ssi_dai_probe(struct snd_soc_dai *dai) 1101 { 1102 struct fsl_ssi *ssi = snd_soc_dai_get_drvdata(dai); 1103 1104 if (ssi->soc->imx && ssi->use_dma) 1105 snd_soc_dai_init_dma_data(dai, &ssi->dma_params_tx, 1106 &ssi->dma_params_rx); 1107 1108 return 0; 1109 } 1110 1111 static const struct snd_soc_dai_ops fsl_ssi_dai_ops = { 1112 .startup = fsl_ssi_startup, 1113 .shutdown = fsl_ssi_shutdown, 1114 .hw_params = fsl_ssi_hw_params, 1115 .hw_free = fsl_ssi_hw_free, 1116 .set_fmt = fsl_ssi_set_dai_fmt, 1117 .set_tdm_slot = fsl_ssi_set_dai_tdm_slot, 1118 .trigger = fsl_ssi_trigger, 1119 }; 1120 1121 static struct snd_soc_dai_driver fsl_ssi_dai_template = { 1122 .probe = fsl_ssi_dai_probe, 1123 .playback = { 1124 .stream_name = "CPU-Playback", 1125 .channels_min = 1, 1126 .channels_max = 32, 1127 .rates = SNDRV_PCM_RATE_CONTINUOUS, 1128 .formats = FSLSSI_I2S_FORMATS, 1129 }, 1130 .capture = { 1131 .stream_name = "CPU-Capture", 1132 .channels_min = 1, 1133 .channels_max = 32, 1134 .rates = SNDRV_PCM_RATE_CONTINUOUS, 1135 .formats = FSLSSI_I2S_FORMATS, 1136 }, 1137 .ops = &fsl_ssi_dai_ops, 1138 }; 1139 1140 static const struct snd_soc_component_driver fsl_ssi_component = { 1141 .name = "fsl-ssi", 1142 }; 1143 1144 static struct snd_soc_dai_driver fsl_ssi_ac97_dai = { 1145 .bus_control = true, 1146 .symmetric_channels = 1, 1147 .probe = fsl_ssi_dai_probe, 1148 .playback = { 1149 .stream_name = "AC97 Playback", 1150 .channels_min = 2, 1151 .channels_max = 2, 1152 .rates = SNDRV_PCM_RATE_8000_48000, 1153 .formats = SNDRV_PCM_FMTBIT_S16 | SNDRV_PCM_FMTBIT_S20, 1154 }, 1155 .capture = { 1156 .stream_name = "AC97 Capture", 1157 .channels_min = 2, 1158 .channels_max = 2, 1159 .rates = SNDRV_PCM_RATE_48000, 1160 /* 16-bit capture is broken (errata ERR003778) */ 1161 .formats = SNDRV_PCM_FMTBIT_S20, 1162 }, 1163 .ops = &fsl_ssi_dai_ops, 1164 }; 1165 1166 static struct fsl_ssi *fsl_ac97_data; 1167 1168 static void fsl_ssi_ac97_write(struct snd_ac97 *ac97, unsigned short reg, 1169 unsigned short val) 1170 { 1171 struct regmap *regs = fsl_ac97_data->regs; 1172 unsigned int lreg; 1173 unsigned int lval; 1174 int ret; 1175 1176 if (reg > 0x7f) 1177 return; 1178 1179 mutex_lock(&fsl_ac97_data->ac97_reg_lock); 1180 1181 ret = clk_prepare_enable(fsl_ac97_data->clk); 1182 if (ret) { 1183 pr_err("ac97 write clk_prepare_enable failed: %d\n", 1184 ret); 1185 goto ret_unlock; 1186 } 1187 1188 lreg = reg << 12; 1189 regmap_write(regs, REG_SSI_SACADD, lreg); 1190 1191 lval = val << 4; 1192 regmap_write(regs, REG_SSI_SACDAT, lval); 1193 1194 regmap_update_bits(regs, REG_SSI_SACNT, 1195 SSI_SACNT_RDWR_MASK, SSI_SACNT_WR); 1196 udelay(100); 1197 1198 clk_disable_unprepare(fsl_ac97_data->clk); 1199 1200 ret_unlock: 1201 mutex_unlock(&fsl_ac97_data->ac97_reg_lock); 1202 } 1203 1204 static unsigned short fsl_ssi_ac97_read(struct snd_ac97 *ac97, 1205 unsigned short reg) 1206 { 1207 struct regmap *regs = fsl_ac97_data->regs; 1208 unsigned short val = 0; 1209 u32 reg_val; 1210 unsigned int lreg; 1211 int ret; 1212 1213 mutex_lock(&fsl_ac97_data->ac97_reg_lock); 1214 1215 ret = clk_prepare_enable(fsl_ac97_data->clk); 1216 if (ret) { 1217 pr_err("ac97 read clk_prepare_enable failed: %d\n", ret); 1218 goto ret_unlock; 1219 } 1220 1221 lreg = (reg & 0x7f) << 12; 1222 regmap_write(regs, REG_SSI_SACADD, lreg); 1223 regmap_update_bits(regs, REG_SSI_SACNT, 1224 SSI_SACNT_RDWR_MASK, SSI_SACNT_RD); 1225 1226 udelay(100); 1227 1228 regmap_read(regs, REG_SSI_SACDAT, ®_val); 1229 val = (reg_val >> 4) & 0xffff; 1230 1231 clk_disable_unprepare(fsl_ac97_data->clk); 1232 1233 ret_unlock: 1234 mutex_unlock(&fsl_ac97_data->ac97_reg_lock); 1235 return val; 1236 } 1237 1238 static struct snd_ac97_bus_ops fsl_ssi_ac97_ops = { 1239 .read = fsl_ssi_ac97_read, 1240 .write = fsl_ssi_ac97_write, 1241 }; 1242 1243 /** 1244 * Initialize SSI registers 1245 */ 1246 static int fsl_ssi_hw_init(struct fsl_ssi *ssi) 1247 { 1248 u32 wm = ssi->fifo_watermark; 1249 1250 /* Initialize regvals */ 1251 fsl_ssi_setup_regvals(ssi); 1252 1253 /* Set watermarks */ 1254 regmap_write(ssi->regs, REG_SSI_SFCSR, 1255 SSI_SFCSR_TFWM0(wm) | SSI_SFCSR_RFWM0(wm) | 1256 SSI_SFCSR_TFWM1(wm) | SSI_SFCSR_RFWM1(wm)); 1257 1258 /* Enable Dual FIFO mode */ 1259 if (ssi->use_dual_fifo) 1260 regmap_update_bits(ssi->regs, REG_SSI_SCR, 1261 SSI_SCR_TCH_EN, SSI_SCR_TCH_EN); 1262 1263 /* AC97 should start earlier to communicate with CODECs */ 1264 if (fsl_ssi_is_ac97(ssi)) { 1265 _fsl_ssi_set_dai_fmt(ssi, ssi->dai_fmt); 1266 fsl_ssi_setup_ac97(ssi); 1267 } 1268 1269 return 0; 1270 } 1271 1272 /** 1273 * Clear SSI registers 1274 */ 1275 static void fsl_ssi_hw_clean(struct fsl_ssi *ssi) 1276 { 1277 /* Disable registers for AC97 */ 1278 if (fsl_ssi_is_ac97(ssi)) { 1279 /* Disable TE and RE bits first */ 1280 regmap_update_bits(ssi->regs, REG_SSI_SCR, 1281 SSI_SCR_TE | SSI_SCR_RE, 0); 1282 /* Disable AC97 mode */ 1283 regmap_write(ssi->regs, REG_SSI_SACNT, 0); 1284 /* Unset WAIT bits */ 1285 regmap_write(ssi->regs, REG_SSI_SOR, 0); 1286 /* Disable SSI -- software reset */ 1287 regmap_update_bits(ssi->regs, REG_SSI_SCR, SSI_SCR_SSIEN, 0); 1288 } 1289 } 1290 /** 1291 * Make every character in a string lower-case 1292 */ 1293 static void make_lowercase(char *s) 1294 { 1295 if (!s) 1296 return; 1297 for (; *s; s++) 1298 *s = tolower(*s); 1299 } 1300 1301 static int fsl_ssi_imx_probe(struct platform_device *pdev, 1302 struct fsl_ssi *ssi, void __iomem *iomem) 1303 { 1304 struct device *dev = &pdev->dev; 1305 int ret; 1306 1307 /* Backward compatible for a DT without ipg clock name assigned */ 1308 if (ssi->has_ipg_clk_name) 1309 ssi->clk = devm_clk_get(dev, "ipg"); 1310 else 1311 ssi->clk = devm_clk_get(dev, NULL); 1312 if (IS_ERR(ssi->clk)) { 1313 ret = PTR_ERR(ssi->clk); 1314 dev_err(dev, "failed to get clock: %d\n", ret); 1315 return ret; 1316 } 1317 1318 /* Enable the clock since regmap will not handle it in this case */ 1319 if (!ssi->has_ipg_clk_name) { 1320 ret = clk_prepare_enable(ssi->clk); 1321 if (ret) { 1322 dev_err(dev, "clk_prepare_enable failed: %d\n", ret); 1323 return ret; 1324 } 1325 } 1326 1327 /* Do not error out for slave cases that live without a baud clock */ 1328 ssi->baudclk = devm_clk_get(dev, "baud"); 1329 if (IS_ERR(ssi->baudclk)) 1330 dev_dbg(dev, "failed to get baud clock: %ld\n", 1331 PTR_ERR(ssi->baudclk)); 1332 1333 ssi->dma_params_tx.maxburst = ssi->dma_maxburst; 1334 ssi->dma_params_rx.maxburst = ssi->dma_maxburst; 1335 ssi->dma_params_tx.addr = ssi->ssi_phys + REG_SSI_STX0; 1336 ssi->dma_params_rx.addr = ssi->ssi_phys + REG_SSI_SRX0; 1337 1338 /* Use even numbers to avoid channel swap due to SDMA script design */ 1339 if (ssi->use_dual_fifo) { 1340 ssi->dma_params_tx.maxburst &= ~0x1; 1341 ssi->dma_params_rx.maxburst &= ~0x1; 1342 } 1343 1344 if (!ssi->use_dma) { 1345 /* 1346 * Some boards use an incompatible codec. Use imx-fiq-pcm-audio 1347 * to get it working, as DMA is not possible in this situation. 1348 */ 1349 ssi->fiq_params.irq = ssi->irq; 1350 ssi->fiq_params.base = iomem; 1351 ssi->fiq_params.dma_params_rx = &ssi->dma_params_rx; 1352 ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx; 1353 1354 ret = imx_pcm_fiq_init(pdev, &ssi->fiq_params); 1355 if (ret) 1356 goto error_pcm; 1357 } else { 1358 ret = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE); 1359 if (ret) 1360 goto error_pcm; 1361 } 1362 1363 return 0; 1364 1365 error_pcm: 1366 if (!ssi->has_ipg_clk_name) 1367 clk_disable_unprepare(ssi->clk); 1368 1369 return ret; 1370 } 1371 1372 static void fsl_ssi_imx_clean(struct platform_device *pdev, struct fsl_ssi *ssi) 1373 { 1374 if (!ssi->use_dma) 1375 imx_pcm_fiq_exit(pdev); 1376 if (!ssi->has_ipg_clk_name) 1377 clk_disable_unprepare(ssi->clk); 1378 } 1379 1380 static int fsl_ssi_probe_from_dt(struct fsl_ssi *ssi) 1381 { 1382 struct device *dev = ssi->dev; 1383 struct device_node *np = dev->of_node; 1384 const struct of_device_id *of_id; 1385 const char *p, *sprop; 1386 const __be32 *iprop; 1387 u32 dmas[4]; 1388 int ret; 1389 1390 of_id = of_match_device(fsl_ssi_ids, dev); 1391 if (!of_id || !of_id->data) 1392 return -EINVAL; 1393 1394 ssi->soc = of_id->data; 1395 1396 ret = of_property_match_string(np, "clock-names", "ipg"); 1397 /* Get error code if not found */ 1398 ssi->has_ipg_clk_name = ret >= 0; 1399 1400 /* Check if being used in AC97 mode */ 1401 sprop = of_get_property(np, "fsl,mode", NULL); 1402 if (sprop && !strcmp(sprop, "ac97-slave")) { 1403 ssi->dai_fmt = FSLSSI_AC97_DAIFMT; 1404 1405 ret = of_property_read_u32(np, "cell-index", &ssi->card_idx); 1406 if (ret) { 1407 dev_err(dev, "failed to get SSI index property\n"); 1408 return -EINVAL; 1409 } 1410 strcpy(ssi->card_name, "ac97-codec"); 1411 } else if (!of_find_property(np, "fsl,ssi-asynchronous", NULL)) { 1412 /* 1413 * In synchronous mode, STCK and STFS ports are used by RX 1414 * as well. So the software should limit the sample rates, 1415 * sample bits and channels to be symmetric. 1416 * 1417 * This is exclusive with FSLSSI_AC97_FORMATS as AC97 runs 1418 * in the SSI synchronous mode however it does not have to 1419 * limit symmetric sample rates and sample bits. 1420 */ 1421 ssi->synchronous = true; 1422 } 1423 1424 /* Select DMA or FIQ */ 1425 ssi->use_dma = !of_property_read_bool(np, "fsl,fiq-stream-filter"); 1426 1427 /* Fetch FIFO depth; Set to 8 for older DT without this property */ 1428 iprop = of_get_property(np, "fsl,fifo-depth", NULL); 1429 if (iprop) 1430 ssi->fifo_depth = be32_to_cpup(iprop); 1431 else 1432 ssi->fifo_depth = 8; 1433 1434 /* Use dual FIFO mode depending on the support from SDMA script */ 1435 ret = of_property_read_u32_array(np, "dmas", dmas, 4); 1436 if (ssi->use_dma && !ret && dmas[2] == IMX_DMATYPE_SSI_DUAL) 1437 ssi->use_dual_fifo = true; 1438 1439 /* 1440 * Backward compatible for older bindings by manually triggering the 1441 * machine driver's probe(). Use /compatible property, including the 1442 * address of CPU DAI driver structure, as the name of machine driver 1443 * 1444 * If card_name is set by AC97 earlier, bypass here since it uses a 1445 * different name to register the device. 1446 */ 1447 if (!ssi->card_name[0] && of_get_property(np, "codec-handle", NULL)) { 1448 sprop = of_get_property(of_find_node_by_path("/"), 1449 "compatible", NULL); 1450 /* Strip "fsl," in the compatible name if applicable */ 1451 p = strrchr(sprop, ','); 1452 if (p) 1453 sprop = p + 1; 1454 snprintf(ssi->card_name, sizeof(ssi->card_name), 1455 "snd-soc-%s", sprop); 1456 make_lowercase(ssi->card_name); 1457 ssi->card_idx = 0; 1458 } 1459 1460 return 0; 1461 } 1462 1463 static int fsl_ssi_probe(struct platform_device *pdev) 1464 { 1465 struct regmap_config regconfig = fsl_ssi_regconfig; 1466 struct device *dev = &pdev->dev; 1467 struct fsl_ssi *ssi; 1468 struct resource *res; 1469 void __iomem *iomem; 1470 int ret = 0; 1471 1472 ssi = devm_kzalloc(dev, sizeof(*ssi), GFP_KERNEL); 1473 if (!ssi) 1474 return -ENOMEM; 1475 1476 ssi->dev = dev; 1477 1478 /* Probe from DT */ 1479 ret = fsl_ssi_probe_from_dt(ssi); 1480 if (ret) 1481 return ret; 1482 1483 if (fsl_ssi_is_ac97(ssi)) { 1484 memcpy(&ssi->cpu_dai_drv, &fsl_ssi_ac97_dai, 1485 sizeof(fsl_ssi_ac97_dai)); 1486 fsl_ac97_data = ssi; 1487 } else { 1488 memcpy(&ssi->cpu_dai_drv, &fsl_ssi_dai_template, 1489 sizeof(fsl_ssi_dai_template)); 1490 } 1491 ssi->cpu_dai_drv.name = dev_name(dev); 1492 1493 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1494 iomem = devm_ioremap_resource(dev, res); 1495 if (IS_ERR(iomem)) 1496 return PTR_ERR(iomem); 1497 ssi->ssi_phys = res->start; 1498 1499 if (ssi->soc->imx21regs) { 1500 /* No SACC{ST,EN,DIS} regs in imx21-class SSI */ 1501 regconfig.max_register = REG_SSI_SRMSK; 1502 regconfig.num_reg_defaults_raw = 1503 REG_SSI_SRMSK / sizeof(uint32_t) + 1; 1504 } 1505 1506 if (ssi->has_ipg_clk_name) 1507 ssi->regs = devm_regmap_init_mmio_clk(dev, "ipg", iomem, 1508 ®config); 1509 else 1510 ssi->regs = devm_regmap_init_mmio(dev, iomem, ®config); 1511 if (IS_ERR(ssi->regs)) { 1512 dev_err(dev, "failed to init register map\n"); 1513 return PTR_ERR(ssi->regs); 1514 } 1515 1516 ssi->irq = platform_get_irq(pdev, 0); 1517 if (ssi->irq < 0) { 1518 dev_err(dev, "no irq for node %s\n", pdev->name); 1519 return ssi->irq; 1520 } 1521 1522 /* Set software limitations for synchronous mode except AC97 */ 1523 if (ssi->synchronous && !fsl_ssi_is_ac97(ssi)) { 1524 ssi->cpu_dai_drv.symmetric_rates = 1; 1525 ssi->cpu_dai_drv.symmetric_channels = 1; 1526 ssi->cpu_dai_drv.symmetric_samplebits = 1; 1527 } 1528 1529 /* 1530 * Configure TX and RX DMA watermarks -- when to send a DMA request 1531 * 1532 * Values should be tested to avoid FIFO under/over run. Set maxburst 1533 * to fifo_watermark to maxiumize DMA transaction to reduce overhead. 1534 */ 1535 switch (ssi->fifo_depth) { 1536 case 15: 1537 /* 1538 * Set to 8 as a balanced configuration -- When TX FIFO has 8 1539 * empty slots, send a DMA request to fill these 8 slots. The 1540 * remaining 7 slots should be able to allow DMA to finish the 1541 * transaction before TX FIFO underruns; Same applies to RX. 1542 * 1543 * Tested with cases running at 48kHz @ 16 bits x 16 channels 1544 */ 1545 ssi->fifo_watermark = 8; 1546 ssi->dma_maxburst = 8; 1547 break; 1548 case 8: 1549 default: 1550 /* Safely use old watermark configurations for older chips */ 1551 ssi->fifo_watermark = ssi->fifo_depth - 2; 1552 ssi->dma_maxburst = ssi->fifo_depth - 2; 1553 break; 1554 } 1555 1556 dev_set_drvdata(dev, ssi); 1557 1558 if (ssi->soc->imx) { 1559 ret = fsl_ssi_imx_probe(pdev, ssi, iomem); 1560 if (ret) 1561 return ret; 1562 } 1563 1564 if (fsl_ssi_is_ac97(ssi)) { 1565 mutex_init(&ssi->ac97_reg_lock); 1566 ret = snd_soc_set_ac97_ops_of_reset(&fsl_ssi_ac97_ops, pdev); 1567 if (ret) { 1568 dev_err(dev, "failed to set AC'97 ops\n"); 1569 goto error_ac97_ops; 1570 } 1571 } 1572 1573 ret = devm_snd_soc_register_component(dev, &fsl_ssi_component, 1574 &ssi->cpu_dai_drv, 1); 1575 if (ret) { 1576 dev_err(dev, "failed to register DAI: %d\n", ret); 1577 goto error_asoc_register; 1578 } 1579 1580 if (ssi->use_dma) { 1581 ret = devm_request_irq(dev, ssi->irq, fsl_ssi_isr, 0, 1582 dev_name(dev), ssi); 1583 if (ret < 0) { 1584 dev_err(dev, "failed to claim irq %u\n", ssi->irq); 1585 goto error_asoc_register; 1586 } 1587 } 1588 1589 ret = fsl_ssi_debugfs_create(&ssi->dbg_stats, dev); 1590 if (ret) 1591 goto error_asoc_register; 1592 1593 /* Initially configures SSI registers */ 1594 fsl_ssi_hw_init(ssi); 1595 1596 /* Register a platform device for older bindings or AC97 */ 1597 if (ssi->card_name[0]) { 1598 struct device *parent = dev; 1599 /* 1600 * Do not set SSI dev as the parent of AC97 CODEC device since 1601 * it does not have a DT node. Otherwise ASoC core will assume 1602 * CODEC has the same DT node as the SSI, so it may bypass the 1603 * dai_probe() of SSI and then cause NULL DMA data pointers. 1604 */ 1605 if (fsl_ssi_is_ac97(ssi)) 1606 parent = NULL; 1607 1608 ssi->card_pdev = platform_device_register_data(parent, 1609 ssi->card_name, ssi->card_idx, NULL, 0); 1610 if (IS_ERR(ssi->card_pdev)) { 1611 ret = PTR_ERR(ssi->card_pdev); 1612 dev_err(dev, "failed to register %s: %d\n", 1613 ssi->card_name, ret); 1614 goto error_sound_card; 1615 } 1616 } 1617 1618 return 0; 1619 1620 error_sound_card: 1621 fsl_ssi_debugfs_remove(&ssi->dbg_stats); 1622 error_asoc_register: 1623 if (fsl_ssi_is_ac97(ssi)) 1624 snd_soc_set_ac97_ops(NULL); 1625 error_ac97_ops: 1626 if (fsl_ssi_is_ac97(ssi)) 1627 mutex_destroy(&ssi->ac97_reg_lock); 1628 1629 if (ssi->soc->imx) 1630 fsl_ssi_imx_clean(pdev, ssi); 1631 1632 return ret; 1633 } 1634 1635 static int fsl_ssi_remove(struct platform_device *pdev) 1636 { 1637 struct fsl_ssi *ssi = dev_get_drvdata(&pdev->dev); 1638 1639 fsl_ssi_debugfs_remove(&ssi->dbg_stats); 1640 1641 if (ssi->card_pdev) 1642 platform_device_unregister(ssi->card_pdev); 1643 1644 /* Clean up SSI registers */ 1645 fsl_ssi_hw_clean(ssi); 1646 1647 if (ssi->soc->imx) 1648 fsl_ssi_imx_clean(pdev, ssi); 1649 1650 if (fsl_ssi_is_ac97(ssi)) { 1651 snd_soc_set_ac97_ops(NULL); 1652 mutex_destroy(&ssi->ac97_reg_lock); 1653 } 1654 1655 return 0; 1656 } 1657 1658 #ifdef CONFIG_PM_SLEEP 1659 static int fsl_ssi_suspend(struct device *dev) 1660 { 1661 struct fsl_ssi *ssi = dev_get_drvdata(dev); 1662 struct regmap *regs = ssi->regs; 1663 1664 regmap_read(regs, REG_SSI_SFCSR, &ssi->regcache_sfcsr); 1665 regmap_read(regs, REG_SSI_SACNT, &ssi->regcache_sacnt); 1666 1667 regcache_cache_only(regs, true); 1668 regcache_mark_dirty(regs); 1669 1670 return 0; 1671 } 1672 1673 static int fsl_ssi_resume(struct device *dev) 1674 { 1675 struct fsl_ssi *ssi = dev_get_drvdata(dev); 1676 struct regmap *regs = ssi->regs; 1677 1678 regcache_cache_only(regs, false); 1679 1680 regmap_update_bits(regs, REG_SSI_SFCSR, 1681 SSI_SFCSR_RFWM1_MASK | SSI_SFCSR_TFWM1_MASK | 1682 SSI_SFCSR_RFWM0_MASK | SSI_SFCSR_TFWM0_MASK, 1683 ssi->regcache_sfcsr); 1684 regmap_write(regs, REG_SSI_SACNT, ssi->regcache_sacnt); 1685 1686 return regcache_sync(regs); 1687 } 1688 #endif /* CONFIG_PM_SLEEP */ 1689 1690 static const struct dev_pm_ops fsl_ssi_pm = { 1691 SET_SYSTEM_SLEEP_PM_OPS(fsl_ssi_suspend, fsl_ssi_resume) 1692 }; 1693 1694 static struct platform_driver fsl_ssi_driver = { 1695 .driver = { 1696 .name = "fsl-ssi-dai", 1697 .of_match_table = fsl_ssi_ids, 1698 .pm = &fsl_ssi_pm, 1699 }, 1700 .probe = fsl_ssi_probe, 1701 .remove = fsl_ssi_remove, 1702 }; 1703 1704 module_platform_driver(fsl_ssi_driver); 1705 1706 MODULE_ALIAS("platform:fsl-ssi-dai"); 1707 MODULE_AUTHOR("Timur Tabi <timur@freescale.com>"); 1708 MODULE_DESCRIPTION("Freescale Synchronous Serial Interface (SSI) ASoC Driver"); 1709 MODULE_LICENSE("GPL v2"); 1710