Linux Audio

Check our new training course

Loading...
v6.2
   1// SPDX-License-Identifier: GPL-2.0
   2//
   3// Freescale S/PDIF ALSA SoC Digital Audio Interface (DAI) driver
   4//
   5// Copyright (C) 2013 Freescale Semiconductor, Inc.
   6//
   7// Based on stmp3xxx_spdif_dai.c
   8// Vladimir Barinov <vbarinov@embeddedalley.com>
   9// Copyright 2008 SigmaTel, Inc
  10// Copyright 2008 Embedded Alley Solutions, Inc
  11
  12#include <linux/bitrev.h>
  13#include <linux/clk.h>
  14#include <linux/module.h>
  15#include <linux/of_address.h>
  16#include <linux/of_device.h>
  17#include <linux/of_irq.h>
  18#include <linux/regmap.h>
  19#include <linux/pm_runtime.h>
  20
  21#include <sound/asoundef.h>
  22#include <sound/dmaengine_pcm.h>
  23#include <sound/soc.h>
  24
  25#include "fsl_spdif.h"
  26#include "fsl_utils.h"
  27#include "imx-pcm.h"
  28
  29#define FSL_SPDIF_TXFIFO_WML	0x8
  30#define FSL_SPDIF_RXFIFO_WML	0x8
  31
  32#define INTR_FOR_PLAYBACK	(INT_TXFIFO_RESYNC)
  33#define INTR_FOR_CAPTURE	(INT_SYM_ERR | INT_BIT_ERR | INT_URX_FUL |\
  34				INT_URX_OV | INT_QRX_FUL | INT_QRX_OV |\
  35				INT_UQ_SYNC | INT_UQ_ERR | INT_RXFIFO_RESYNC |\
  36				INT_LOSS_LOCK | INT_DPLL_LOCKED)
  37
  38#define SIE_INTR_FOR(tx)	(tx ? INTR_FOR_PLAYBACK : INTR_FOR_CAPTURE)
  39
  40/* Index list for the values that has if (DPLL Locked) condition */
  41static u8 srpc_dpll_locked[] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0xa, 0xb };
  42#define SRPC_NODPLL_START1	0x5
  43#define SRPC_NODPLL_START2	0xc
  44
  45#define DEFAULT_RXCLK_SRC	1
  46
  47#define RX_SAMPLE_RATE_KCONTROL "RX Sample Rate"
  48
  49/**
  50 * struct fsl_spdif_soc_data: soc specific data
  51 *
  52 * @imx: for imx platform
  53 * @shared_root_clock: flag of sharing a clock source with others;
  54 *                     so the driver shouldn't set root clock rate
  55 * @raw_capture_mode: if raw capture mode support
  56 * @cchannel_192b: if there are registers for 192bits C channel data
  57 * @interrupts: interrupt number
  58 * @tx_burst: tx maxburst size
  59 * @rx_burst: rx maxburst size
  60 * @tx_formats: tx supported data format
  61 */
  62struct fsl_spdif_soc_data {
  63	bool imx;
  64	bool shared_root_clock;
  65	bool raw_capture_mode;
  66	bool cchannel_192b;
  67	u32 interrupts;
  68	u32 tx_burst;
  69	u32 rx_burst;
  70	u64 tx_formats;
  71};
  72
  73/*
  74 * SPDIF control structure
  75 * Defines channel status, subcode and Q sub
  76 */
  77struct spdif_mixer_control {
  78	/* spinlock to access control data */
  79	spinlock_t ctl_lock;
  80
  81	/* IEC958 channel tx status bit */
  82	unsigned char ch_status[4];
  83
  84	/* User bits */
  85	unsigned char subcode[2 * SPDIF_UBITS_SIZE];
  86
  87	/* Q subcode part of user bits */
  88	unsigned char qsub[2 * SPDIF_QSUB_SIZE];
  89
  90	/* Buffer offset for U/Q */
  91	u32 upos;
  92	u32 qpos;
  93
  94	/* Ready buffer index of the two buffers */
  95	u32 ready_buf;
  96};
  97
  98/**
  99 * struct fsl_spdif_priv - Freescale SPDIF private data
 100 * @soc: SPDIF soc data
 101 * @fsl_spdif_control: SPDIF control data
 102 * @cpu_dai_drv: cpu dai driver
 103 * @snd_card: sound card pointer
 104 * @rxrate_kcontrol: kcontrol for RX Sample Rate
 105 * @pdev: platform device pointer
 106 * @regmap: regmap handler
 107 * @dpll_locked: dpll lock flag
 108 * @txrate: the best rates for playback
 109 * @txclk_df: STC_TXCLK_DF dividers value for playback
 110 * @sysclk_df: STC_SYSCLK_DF dividers value for playback
 111 * @txclk_src: STC_TXCLK_SRC values for playback
 112 * @rxclk_src: SRPC_CLKSRC_SEL values for capture
 113 * @txclk: tx clock sources for playback
 114 * @rxclk: rx clock sources for capture
 115 * @coreclk: core clock for register access via DMA
 116 * @sysclk: system clock for rx clock rate measurement
 117 * @spbaclk: SPBA clock (optional, depending on SoC design)
 118 * @dma_params_tx: DMA parameters for transmit channel
 119 * @dma_params_rx: DMA parameters for receive channel
 120 * @regcache_srpc: regcache for SRPC
 121 * @bypass: status of bypass input to output
 122 * @pll8k_clk: PLL clock for the rate of multiply of 8kHz
 123 * @pll11k_clk: PLL clock for the rate of multiply of 11kHz
 124 */
 125struct fsl_spdif_priv {
 126	const struct fsl_spdif_soc_data *soc;
 127	struct spdif_mixer_control fsl_spdif_control;
 128	struct snd_soc_dai_driver cpu_dai_drv;
 129	struct snd_card *snd_card;
 130	struct snd_kcontrol *rxrate_kcontrol;
 131	struct platform_device *pdev;
 132	struct regmap *regmap;
 133	bool dpll_locked;
 134	u32 txrate[SPDIF_TXRATE_MAX];
 135	u8 txclk_df[SPDIF_TXRATE_MAX];
 136	u16 sysclk_df[SPDIF_TXRATE_MAX];
 137	u8 txclk_src[SPDIF_TXRATE_MAX];
 138	u8 rxclk_src;
 139	struct clk *txclk[STC_TXCLK_SRC_MAX];
 140	struct clk *rxclk;
 141	struct clk *coreclk;
 142	struct clk *sysclk;
 143	struct clk *spbaclk;
 144	struct snd_dmaengine_dai_dma_data dma_params_tx;
 145	struct snd_dmaengine_dai_dma_data dma_params_rx;
 146	/* regcache for SRPC */
 147	u32 regcache_srpc;
 148	bool bypass;
 149	struct clk *pll8k_clk;
 150	struct clk *pll11k_clk;
 151};
 152
 153static struct fsl_spdif_soc_data fsl_spdif_vf610 = {
 154	.imx = false,
 155	.shared_root_clock = false,
 156	.raw_capture_mode = false,
 157	.interrupts = 1,
 158	.tx_burst = FSL_SPDIF_TXFIFO_WML,
 159	.rx_burst = FSL_SPDIF_RXFIFO_WML,
 160	.tx_formats = FSL_SPDIF_FORMATS_PLAYBACK,
 161};
 162
 163static struct fsl_spdif_soc_data fsl_spdif_imx35 = {
 164	.imx = true,
 165	.shared_root_clock = false,
 166	.raw_capture_mode = false,
 167	.interrupts = 1,
 168	.tx_burst = FSL_SPDIF_TXFIFO_WML,
 169	.rx_burst = FSL_SPDIF_RXFIFO_WML,
 170	.tx_formats = FSL_SPDIF_FORMATS_PLAYBACK,
 171};
 172
 173static struct fsl_spdif_soc_data fsl_spdif_imx6sx = {
 174	.imx = true,
 175	.shared_root_clock = true,
 176	.raw_capture_mode = false,
 177	.interrupts = 1,
 178	.tx_burst = FSL_SPDIF_TXFIFO_WML,
 179	.rx_burst = FSL_SPDIF_RXFIFO_WML,
 180	.tx_formats = FSL_SPDIF_FORMATS_PLAYBACK,
 181
 182};
 183
 184static struct fsl_spdif_soc_data fsl_spdif_imx8qm = {
 185	.imx = true,
 186	.shared_root_clock = true,
 187	.raw_capture_mode = false,
 188	.interrupts = 2,
 189	.tx_burst = 2,		/* Applied for EDMA */
 190	.rx_burst = 2,		/* Applied for EDMA */
 191	.tx_formats = SNDRV_PCM_FMTBIT_S24_LE,  /* Applied for EDMA */
 192};
 193
 194static struct fsl_spdif_soc_data fsl_spdif_imx8mm = {
 195	.imx = true,
 196	.shared_root_clock = false,
 197	.raw_capture_mode = true,
 198	.interrupts = 1,
 199	.tx_burst = FSL_SPDIF_TXFIFO_WML,
 200	.rx_burst = FSL_SPDIF_RXFIFO_WML,
 201	.tx_formats = FSL_SPDIF_FORMATS_PLAYBACK,
 202};
 203
 204static struct fsl_spdif_soc_data fsl_spdif_imx8ulp = {
 205	.imx = true,
 206	.shared_root_clock = true,
 207	.raw_capture_mode = false,
 208	.interrupts = 1,
 209	.tx_burst = 2,		/* Applied for EDMA */
 210	.rx_burst = 2,		/* Applied for EDMA */
 211	.tx_formats = SNDRV_PCM_FMTBIT_S24_LE,	/* Applied for EDMA */
 212	.cchannel_192b = true,
 213};
 214
 215/* Check if clk is a root clock that does not share clock source with others */
 216static inline bool fsl_spdif_can_set_clk_rate(struct fsl_spdif_priv *spdif, int clk)
 217{
 218	return (clk == STC_TXCLK_SPDIF_ROOT) && !spdif->soc->shared_root_clock;
 219}
 220
 221/* DPLL locked and lock loss interrupt handler */
 222static void spdif_irq_dpll_lock(struct fsl_spdif_priv *spdif_priv)
 223{
 224	struct regmap *regmap = spdif_priv->regmap;
 225	struct platform_device *pdev = spdif_priv->pdev;
 226	u32 locked;
 227
 228	regmap_read(regmap, REG_SPDIF_SRPC, &locked);
 229	locked &= SRPC_DPLL_LOCKED;
 230
 231	dev_dbg(&pdev->dev, "isr: Rx dpll %s \n",
 232			locked ? "locked" : "loss lock");
 233
 234	spdif_priv->dpll_locked = locked ? true : false;
 235
 236	if (spdif_priv->snd_card && spdif_priv->rxrate_kcontrol) {
 237		snd_ctl_notify(spdif_priv->snd_card,
 238			       SNDRV_CTL_EVENT_MASK_VALUE,
 239			       &spdif_priv->rxrate_kcontrol->id);
 240	}
 241}
 242
 243/* Receiver found illegal symbol interrupt handler */
 244static void spdif_irq_sym_error(struct fsl_spdif_priv *spdif_priv)
 245{
 246	struct regmap *regmap = spdif_priv->regmap;
 247	struct platform_device *pdev = spdif_priv->pdev;
 248
 249	dev_dbg(&pdev->dev, "isr: receiver found illegal symbol\n");
 250
 251	/* Clear illegal symbol if DPLL unlocked since no audio stream */
 252	if (!spdif_priv->dpll_locked)
 253		regmap_update_bits(regmap, REG_SPDIF_SIE, INT_SYM_ERR, 0);
 254}
 255
 256/* U/Q Channel receive register full */
 257static void spdif_irq_uqrx_full(struct fsl_spdif_priv *spdif_priv, char name)
 258{
 259	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 260	struct regmap *regmap = spdif_priv->regmap;
 261	struct platform_device *pdev = spdif_priv->pdev;
 262	u32 *pos, size, val, reg;
 263
 264	switch (name) {
 265	case 'U':
 266		pos = &ctrl->upos;
 267		size = SPDIF_UBITS_SIZE;
 268		reg = REG_SPDIF_SRU;
 269		break;
 270	case 'Q':
 271		pos = &ctrl->qpos;
 272		size = SPDIF_QSUB_SIZE;
 273		reg = REG_SPDIF_SRQ;
 274		break;
 275	default:
 276		dev_err(&pdev->dev, "unsupported channel name\n");
 277		return;
 278	}
 279
 280	dev_dbg(&pdev->dev, "isr: %c Channel receive register full\n", name);
 281
 282	if (*pos >= size * 2) {
 283		*pos = 0;
 284	} else if (unlikely((*pos % size) + 3 > size)) {
 285		dev_err(&pdev->dev, "User bit receive buffer overflow\n");
 286		return;
 287	}
 288
 289	regmap_read(regmap, reg, &val);
 290	ctrl->subcode[*pos++] = val >> 16;
 291	ctrl->subcode[*pos++] = val >> 8;
 292	ctrl->subcode[*pos++] = val;
 293}
 294
 295/* U/Q Channel sync found */
 296static void spdif_irq_uq_sync(struct fsl_spdif_priv *spdif_priv)
 297{
 298	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 299	struct platform_device *pdev = spdif_priv->pdev;
 300
 301	dev_dbg(&pdev->dev, "isr: U/Q Channel sync found\n");
 302
 303	/* U/Q buffer reset */
 304	if (ctrl->qpos == 0)
 305		return;
 306
 307	/* Set ready to this buffer */
 308	ctrl->ready_buf = (ctrl->qpos - 1) / SPDIF_QSUB_SIZE + 1;
 309}
 310
 311/* U/Q Channel framing error */
 312static void spdif_irq_uq_err(struct fsl_spdif_priv *spdif_priv)
 313{
 314	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 315	struct regmap *regmap = spdif_priv->regmap;
 316	struct platform_device *pdev = spdif_priv->pdev;
 317	u32 val;
 318
 319	dev_dbg(&pdev->dev, "isr: U/Q Channel framing error\n");
 320
 321	/* Read U/Q data to clear the irq and do buffer reset */
 322	regmap_read(regmap, REG_SPDIF_SRU, &val);
 323	regmap_read(regmap, REG_SPDIF_SRQ, &val);
 324
 325	/* Drop this U/Q buffer */
 326	ctrl->ready_buf = 0;
 327	ctrl->upos = 0;
 328	ctrl->qpos = 0;
 329}
 330
 331/* Get spdif interrupt status and clear the interrupt */
 332static u32 spdif_intr_status_clear(struct fsl_spdif_priv *spdif_priv)
 333{
 334	struct regmap *regmap = spdif_priv->regmap;
 335	u32 val, val2;
 336
 337	regmap_read(regmap, REG_SPDIF_SIS, &val);
 338	regmap_read(regmap, REG_SPDIF_SIE, &val2);
 339
 340	regmap_write(regmap, REG_SPDIF_SIC, val & val2);
 341
 342	return val;
 343}
 344
 345static irqreturn_t spdif_isr(int irq, void *devid)
 346{
 347	struct fsl_spdif_priv *spdif_priv = (struct fsl_spdif_priv *)devid;
 348	struct platform_device *pdev = spdif_priv->pdev;
 349	u32 sis;
 350
 351	sis = spdif_intr_status_clear(spdif_priv);
 352
 353	if (sis & INT_DPLL_LOCKED)
 354		spdif_irq_dpll_lock(spdif_priv);
 355
 356	if (sis & INT_TXFIFO_UNOV)
 357		dev_dbg(&pdev->dev, "isr: Tx FIFO under/overrun\n");
 358
 359	if (sis & INT_TXFIFO_RESYNC)
 360		dev_dbg(&pdev->dev, "isr: Tx FIFO resync\n");
 361
 362	if (sis & INT_CNEW)
 363		dev_dbg(&pdev->dev, "isr: cstatus new\n");
 364
 365	if (sis & INT_VAL_NOGOOD)
 366		dev_dbg(&pdev->dev, "isr: validity flag no good\n");
 367
 368	if (sis & INT_SYM_ERR)
 369		spdif_irq_sym_error(spdif_priv);
 370
 371	if (sis & INT_BIT_ERR)
 372		dev_dbg(&pdev->dev, "isr: receiver found parity bit error\n");
 373
 374	if (sis & INT_URX_FUL)
 375		spdif_irq_uqrx_full(spdif_priv, 'U');
 376
 377	if (sis & INT_URX_OV)
 378		dev_dbg(&pdev->dev, "isr: U Channel receive register overrun\n");
 379
 380	if (sis & INT_QRX_FUL)
 381		spdif_irq_uqrx_full(spdif_priv, 'Q');
 382
 383	if (sis & INT_QRX_OV)
 384		dev_dbg(&pdev->dev, "isr: Q Channel receive register overrun\n");
 385
 386	if (sis & INT_UQ_SYNC)
 387		spdif_irq_uq_sync(spdif_priv);
 388
 389	if (sis & INT_UQ_ERR)
 390		spdif_irq_uq_err(spdif_priv);
 391
 392	if (sis & INT_RXFIFO_UNOV)
 393		dev_dbg(&pdev->dev, "isr: Rx FIFO under/overrun\n");
 394
 395	if (sis & INT_RXFIFO_RESYNC)
 396		dev_dbg(&pdev->dev, "isr: Rx FIFO resync\n");
 397
 398	if (sis & INT_LOSS_LOCK)
 399		spdif_irq_dpll_lock(spdif_priv);
 400
 401	/* FIXME: Write Tx FIFO to clear TxEm */
 402	if (sis & INT_TX_EM)
 403		dev_dbg(&pdev->dev, "isr: Tx FIFO empty\n");
 404
 405	/* FIXME: Read Rx FIFO to clear RxFIFOFul */
 406	if (sis & INT_RXFIFO_FUL)
 407		dev_dbg(&pdev->dev, "isr: Rx FIFO full\n");
 408
 409	return IRQ_HANDLED;
 410}
 411
 412static int spdif_softreset(struct fsl_spdif_priv *spdif_priv)
 413{
 414	struct regmap *regmap = spdif_priv->regmap;
 415	u32 val, cycle = 1000;
 416
 417	regcache_cache_bypass(regmap, true);
 418
 419	regmap_write(regmap, REG_SPDIF_SCR, SCR_SOFT_RESET);
 420
 421	/*
 422	 * RESET bit would be cleared after finishing its reset procedure,
 423	 * which typically lasts 8 cycles. 1000 cycles will keep it safe.
 424	 */
 425	do {
 426		regmap_read(regmap, REG_SPDIF_SCR, &val);
 427	} while ((val & SCR_SOFT_RESET) && cycle--);
 428
 429	regcache_cache_bypass(regmap, false);
 430	regcache_mark_dirty(regmap);
 431	regcache_sync(regmap);
 432
 433	if (cycle)
 434		return 0;
 435	else
 436		return -EBUSY;
 437}
 438
 439static void spdif_set_cstatus(struct spdif_mixer_control *ctrl,
 440				u8 mask, u8 cstatus)
 441{
 442	ctrl->ch_status[3] &= ~mask;
 443	ctrl->ch_status[3] |= cstatus & mask;
 444}
 445
 446static void spdif_write_channel_status(struct fsl_spdif_priv *spdif_priv)
 447{
 448	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 449	struct regmap *regmap = spdif_priv->regmap;
 450	struct platform_device *pdev = spdif_priv->pdev;
 451	u32 ch_status;
 452
 453	ch_status = (bitrev8(ctrl->ch_status[0]) << 16) |
 454		    (bitrev8(ctrl->ch_status[1]) << 8) |
 455		    bitrev8(ctrl->ch_status[2]);
 456	regmap_write(regmap, REG_SPDIF_STCSCH, ch_status);
 457
 458	dev_dbg(&pdev->dev, "STCSCH: 0x%06x\n", ch_status);
 459
 460	ch_status = bitrev8(ctrl->ch_status[3]) << 16;
 461	regmap_write(regmap, REG_SPDIF_STCSCL, ch_status);
 462
 463	dev_dbg(&pdev->dev, "STCSCL: 0x%06x\n", ch_status);
 464
 465	if (spdif_priv->soc->cchannel_192b) {
 466		ch_status = (bitrev8(ctrl->ch_status[0]) << 24) |
 467			    (bitrev8(ctrl->ch_status[1]) << 16) |
 468			    (bitrev8(ctrl->ch_status[2]) << 8) |
 469			    bitrev8(ctrl->ch_status[3]);
 470
 471		regmap_update_bits(regmap, REG_SPDIF_SCR, 0x1000000, 0x1000000);
 472
 473		/*
 474		 * The first 32bit should be in REG_SPDIF_STCCA_31_0 register,
 475		 * but here we need to set REG_SPDIF_STCCA_191_160 on 8ULP
 476		 * then can get correct result with HDMI analyzer capture.
 477		 * There is a hardware bug here.
 478		 */
 479		regmap_write(regmap, REG_SPDIF_STCCA_191_160, ch_status);
 480	}
 481}
 482
 483/* Set SPDIF PhaseConfig register for rx clock */
 484static int spdif_set_rx_clksrc(struct fsl_spdif_priv *spdif_priv,
 485				enum spdif_gainsel gainsel, int dpll_locked)
 486{
 487	struct regmap *regmap = spdif_priv->regmap;
 488	u8 clksrc = spdif_priv->rxclk_src;
 489
 490	if (clksrc >= SRPC_CLKSRC_MAX || gainsel >= GAINSEL_MULTI_MAX)
 491		return -EINVAL;
 492
 493	regmap_update_bits(regmap, REG_SPDIF_SRPC,
 494			SRPC_CLKSRC_SEL_MASK | SRPC_GAINSEL_MASK,
 495			SRPC_CLKSRC_SEL_SET(clksrc) | SRPC_GAINSEL_SET(gainsel));
 496
 497	return 0;
 498}
 499
 500static int fsl_spdif_probe_txclk(struct fsl_spdif_priv *spdif_priv, enum spdif_txrate index);
 501
 502static int spdif_set_sample_rate(struct snd_pcm_substream *substream,
 503				int sample_rate)
 504{
 505	struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
 506	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
 507	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 508	struct regmap *regmap = spdif_priv->regmap;
 509	struct platform_device *pdev = spdif_priv->pdev;
 510	unsigned long csfs = 0;
 511	u32 stc, mask, rate;
 512	u16 sysclk_df;
 513	u8 clk, txclk_df;
 514	int ret;
 515
 516	switch (sample_rate) {
 
 
 
 
 517	case 32000:
 518		rate = SPDIF_TXRATE_32000;
 519		csfs = IEC958_AES3_CON_FS_32000;
 520		break;
 521	case 44100:
 522		rate = SPDIF_TXRATE_44100;
 523		csfs = IEC958_AES3_CON_FS_44100;
 524		break;
 525	case 48000:
 526		rate = SPDIF_TXRATE_48000;
 527		csfs = IEC958_AES3_CON_FS_48000;
 528		break;
 529	case 88200:
 530		rate = SPDIF_TXRATE_88200;
 531		csfs = IEC958_AES3_CON_FS_88200;
 532		break;
 533	case 96000:
 534		rate = SPDIF_TXRATE_96000;
 535		csfs = IEC958_AES3_CON_FS_96000;
 536		break;
 537	case 176400:
 538		rate = SPDIF_TXRATE_176400;
 539		csfs = IEC958_AES3_CON_FS_176400;
 540		break;
 541	case 192000:
 542		rate = SPDIF_TXRATE_192000;
 543		csfs = IEC958_AES3_CON_FS_192000;
 544		break;
 545	default:
 546		dev_err(&pdev->dev, "unsupported sample rate %d\n", sample_rate);
 547		return -EINVAL;
 548	}
 549
 550	ret = fsl_spdif_probe_txclk(spdif_priv, rate);
 551	if (ret)
 552		return ret;
 553
 554	clk = spdif_priv->txclk_src[rate];
 555	if (clk >= STC_TXCLK_SRC_MAX) {
 556		dev_err(&pdev->dev, "tx clock source is out of range\n");
 557		return -EINVAL;
 558	}
 559
 560	txclk_df = spdif_priv->txclk_df[rate];
 561	if (txclk_df == 0) {
 562		dev_err(&pdev->dev, "the txclk_df can't be zero\n");
 563		return -EINVAL;
 564	}
 565
 566	sysclk_df = spdif_priv->sysclk_df[rate];
 567
 568	if (!fsl_spdif_can_set_clk_rate(spdif_priv, clk))
 569		goto clk_set_bypass;
 570
 571	/* The S/PDIF block needs a clock of 64 * fs * txclk_df */
 572	ret = clk_set_rate(spdif_priv->txclk[clk],
 573			   64 * sample_rate * txclk_df);
 574	if (ret) {
 575		dev_err(&pdev->dev, "failed to set tx clock rate\n");
 576		return ret;
 577	}
 578
 579clk_set_bypass:
 580	dev_dbg(&pdev->dev, "expected clock rate = %d\n",
 581			(64 * sample_rate * txclk_df * sysclk_df));
 582	dev_dbg(&pdev->dev, "actual clock rate = %ld\n",
 583			clk_get_rate(spdif_priv->txclk[clk]));
 584
 585	/* set fs field in consumer channel status */
 586	spdif_set_cstatus(ctrl, IEC958_AES3_CON_FS, csfs);
 587
 588	/* select clock source and divisor */
 589	stc = STC_TXCLK_ALL_EN | STC_TXCLK_SRC_SET(clk) |
 590	      STC_TXCLK_DF(txclk_df) | STC_SYSCLK_DF(sysclk_df);
 591	mask = STC_TXCLK_ALL_EN_MASK | STC_TXCLK_SRC_MASK |
 592	       STC_TXCLK_DF_MASK | STC_SYSCLK_DF_MASK;
 593	regmap_update_bits(regmap, REG_SPDIF_STC, mask, stc);
 594
 595	dev_dbg(&pdev->dev, "set sample rate to %dHz for %dHz playback\n",
 596			spdif_priv->txrate[rate], sample_rate);
 597
 598	return 0;
 599}
 600
 601static int fsl_spdif_startup(struct snd_pcm_substream *substream,
 602			     struct snd_soc_dai *cpu_dai)
 603{
 604	struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
 605	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
 606	struct platform_device *pdev = spdif_priv->pdev;
 607	struct regmap *regmap = spdif_priv->regmap;
 608	u32 scr, mask;
 609	int ret;
 610
 611	/* Reset module and interrupts only for first initialization */
 612	if (!snd_soc_dai_active(cpu_dai)) {
 613		ret = spdif_softreset(spdif_priv);
 614		if (ret) {
 615			dev_err(&pdev->dev, "failed to soft reset\n");
 616			return ret;
 617		}
 618
 619		/* Disable all the interrupts */
 620		regmap_update_bits(regmap, REG_SPDIF_SIE, 0xffffff, 0);
 621	}
 622
 623	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
 624		scr = SCR_TXFIFO_AUTOSYNC | SCR_TXFIFO_CTRL_NORMAL |
 625			SCR_TXSEL_NORMAL | SCR_USRC_SEL_CHIP |
 626			SCR_TXFIFO_FSEL_IF8;
 627		mask = SCR_TXFIFO_AUTOSYNC_MASK | SCR_TXFIFO_CTRL_MASK |
 628			SCR_TXSEL_MASK | SCR_USRC_SEL_MASK |
 629			SCR_TXFIFO_FSEL_MASK;
 630	} else {
 631		scr = SCR_RXFIFO_FSEL_IF8 | SCR_RXFIFO_AUTOSYNC;
 632		mask = SCR_RXFIFO_FSEL_MASK | SCR_RXFIFO_AUTOSYNC_MASK|
 633			SCR_RXFIFO_CTL_MASK | SCR_RXFIFO_OFF_MASK;
 634	}
 635	regmap_update_bits(regmap, REG_SPDIF_SCR, mask, scr);
 636
 637	/* Power up SPDIF module */
 638	regmap_update_bits(regmap, REG_SPDIF_SCR, SCR_LOW_POWER, 0);
 639
 640	return 0;
 641}
 642
 643static void fsl_spdif_shutdown(struct snd_pcm_substream *substream,
 644				struct snd_soc_dai *cpu_dai)
 645{
 646	struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
 647	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
 648	struct regmap *regmap = spdif_priv->regmap;
 649	u32 scr, mask;
 650
 651	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
 652		scr = 0;
 653		mask = SCR_TXFIFO_AUTOSYNC_MASK | SCR_TXFIFO_CTRL_MASK |
 654			SCR_TXSEL_MASK | SCR_USRC_SEL_MASK |
 655			SCR_TXFIFO_FSEL_MASK;
 656		/* Disable TX clock */
 657		regmap_update_bits(regmap, REG_SPDIF_STC, STC_TXCLK_ALL_EN_MASK, 0);
 658	} else {
 659		scr = SCR_RXFIFO_OFF | SCR_RXFIFO_CTL_ZERO;
 660		mask = SCR_RXFIFO_FSEL_MASK | SCR_RXFIFO_AUTOSYNC_MASK|
 661			SCR_RXFIFO_CTL_MASK | SCR_RXFIFO_OFF_MASK;
 662	}
 663	regmap_update_bits(regmap, REG_SPDIF_SCR, mask, scr);
 664
 665	/* Power down SPDIF module only if tx&rx are both inactive */
 666	if (!snd_soc_dai_active(cpu_dai)) {
 667		spdif_intr_status_clear(spdif_priv);
 668		regmap_update_bits(regmap, REG_SPDIF_SCR,
 669				SCR_LOW_POWER, SCR_LOW_POWER);
 670	}
 671}
 672
 673static int spdif_reparent_rootclk(struct fsl_spdif_priv *spdif_priv, unsigned int sample_rate)
 674{
 675	struct platform_device *pdev = spdif_priv->pdev;
 676	struct clk *clk;
 677	int ret;
 678
 679	/* Reparent clock if required condition is true */
 680	if (!fsl_spdif_can_set_clk_rate(spdif_priv, STC_TXCLK_SPDIF_ROOT))
 681		return 0;
 682
 683	/* Get root clock */
 684	clk = spdif_priv->txclk[STC_TXCLK_SPDIF_ROOT];
 685
 686	/* Disable clock first, for it was enabled by pm_runtime */
 687	clk_disable_unprepare(clk);
 688	fsl_asoc_reparent_pll_clocks(&pdev->dev, clk, spdif_priv->pll8k_clk,
 689				     spdif_priv->pll11k_clk, sample_rate);
 690	ret = clk_prepare_enable(clk);
 691	if (ret)
 692		return ret;
 693
 694	return 0;
 695}
 696static int fsl_spdif_hw_params(struct snd_pcm_substream *substream,
 697				struct snd_pcm_hw_params *params,
 698				struct snd_soc_dai *dai)
 699{
 700	struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
 701	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
 702	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 703	struct platform_device *pdev = spdif_priv->pdev;
 704	u32 sample_rate = params_rate(params);
 705	int ret = 0;
 706
 707	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
 708		ret = spdif_reparent_rootclk(spdif_priv, sample_rate);
 709		if (ret) {
 710			dev_err(&pdev->dev, "%s: reparent root clk failed: %d\n",
 711				__func__, sample_rate);
 712			return ret;
 713		}
 714
 715		ret  = spdif_set_sample_rate(substream, sample_rate);
 716		if (ret) {
 717			dev_err(&pdev->dev, "%s: set sample rate failed: %d\n",
 718					__func__, sample_rate);
 719			return ret;
 720		}
 721		spdif_set_cstatus(ctrl, IEC958_AES3_CON_CLOCK,
 722				  IEC958_AES3_CON_CLOCK_1000PPM);
 723		spdif_write_channel_status(spdif_priv);
 724	} else {
 725		/* Setup rx clock source */
 726		ret = spdif_set_rx_clksrc(spdif_priv, SPDIF_DEFAULT_GAINSEL, 1);
 727	}
 728
 729	return ret;
 730}
 731
 732static int fsl_spdif_trigger(struct snd_pcm_substream *substream,
 733				int cmd, struct snd_soc_dai *dai)
 734{
 735	struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
 736	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
 737	struct regmap *regmap = spdif_priv->regmap;
 738	bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK;
 739	u32 intr = SIE_INTR_FOR(tx);
 740	u32 dmaen = SCR_DMA_xX_EN(tx);
 741
 742	switch (cmd) {
 743	case SNDRV_PCM_TRIGGER_START:
 744	case SNDRV_PCM_TRIGGER_RESUME:
 745	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
 746		regmap_update_bits(regmap, REG_SPDIF_SIE, intr, intr);
 747		regmap_update_bits(regmap, REG_SPDIF_SCR, dmaen, dmaen);
 748		break;
 749	case SNDRV_PCM_TRIGGER_STOP:
 750	case SNDRV_PCM_TRIGGER_SUSPEND:
 751	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
 752		regmap_update_bits(regmap, REG_SPDIF_SCR, dmaen, 0);
 753		regmap_update_bits(regmap, REG_SPDIF_SIE, intr, 0);
 
 
 754		break;
 755	default:
 756		return -EINVAL;
 757	}
 758
 759	return 0;
 760}
 761
 762static const struct snd_soc_dai_ops fsl_spdif_dai_ops = {
 763	.startup = fsl_spdif_startup,
 764	.hw_params = fsl_spdif_hw_params,
 765	.trigger = fsl_spdif_trigger,
 766	.shutdown = fsl_spdif_shutdown,
 767};
 768
 769
 770/*
 771 * FSL SPDIF IEC958 controller(mixer) functions
 772 *
 773 *	Channel status get/put control
 774 *	User bit value get/put control
 775 *	Valid bit value get control
 776 *	DPLL lock status get control
 777 *	User bit sync mode selection control
 778 */
 779
 780static int fsl_spdif_info(struct snd_kcontrol *kcontrol,
 781				struct snd_ctl_elem_info *uinfo)
 782{
 783	uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
 784	uinfo->count = 1;
 785
 786	return 0;
 787}
 788
 789static int fsl_spdif_pb_get(struct snd_kcontrol *kcontrol,
 790				struct snd_ctl_elem_value *uvalue)
 791{
 792	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 793	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 794	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 795
 796	uvalue->value.iec958.status[0] = ctrl->ch_status[0];
 797	uvalue->value.iec958.status[1] = ctrl->ch_status[1];
 798	uvalue->value.iec958.status[2] = ctrl->ch_status[2];
 799	uvalue->value.iec958.status[3] = ctrl->ch_status[3];
 800
 801	return 0;
 802}
 803
 804static int fsl_spdif_pb_put(struct snd_kcontrol *kcontrol,
 805				struct snd_ctl_elem_value *uvalue)
 806{
 807	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 808	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 809	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 810
 811	ctrl->ch_status[0] = uvalue->value.iec958.status[0];
 812	ctrl->ch_status[1] = uvalue->value.iec958.status[1];
 813	ctrl->ch_status[2] = uvalue->value.iec958.status[2];
 814	ctrl->ch_status[3] = uvalue->value.iec958.status[3];
 815
 816	spdif_write_channel_status(spdif_priv);
 817
 818	return 0;
 819}
 820
 821/* Get channel status from SPDIF_RX_CCHAN register */
 822static int fsl_spdif_capture_get(struct snd_kcontrol *kcontrol,
 823				struct snd_ctl_elem_value *ucontrol)
 824{
 825	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 826	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 827	struct regmap *regmap = spdif_priv->regmap;
 828	u32 cstatus, val;
 829
 830	regmap_read(regmap, REG_SPDIF_SIS, &val);
 831	if (!(val & INT_CNEW))
 832		return -EAGAIN;
 833
 834	regmap_read(regmap, REG_SPDIF_SRCSH, &cstatus);
 835	ucontrol->value.iec958.status[0] = (cstatus >> 16) & 0xFF;
 836	ucontrol->value.iec958.status[1] = (cstatus >> 8) & 0xFF;
 837	ucontrol->value.iec958.status[2] = cstatus & 0xFF;
 838
 839	regmap_read(regmap, REG_SPDIF_SRCSL, &cstatus);
 840	ucontrol->value.iec958.status[3] = (cstatus >> 16) & 0xFF;
 841	ucontrol->value.iec958.status[4] = (cstatus >> 8) & 0xFF;
 842	ucontrol->value.iec958.status[5] = cstatus & 0xFF;
 843
 844	/* Clear intr */
 845	regmap_write(regmap, REG_SPDIF_SIC, INT_CNEW);
 846
 847	return 0;
 848}
 849
 850/*
 851 * Get User bits (subcode) from chip value which readed out
 852 * in UChannel register.
 853 */
 854static int fsl_spdif_subcode_get(struct snd_kcontrol *kcontrol,
 855				struct snd_ctl_elem_value *ucontrol)
 856{
 857	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 858	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 859	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 860	unsigned long flags;
 861	int ret = -EAGAIN;
 862
 863	spin_lock_irqsave(&ctrl->ctl_lock, flags);
 864	if (ctrl->ready_buf) {
 865		int idx = (ctrl->ready_buf - 1) * SPDIF_UBITS_SIZE;
 866		memcpy(&ucontrol->value.iec958.subcode[0],
 867				&ctrl->subcode[idx], SPDIF_UBITS_SIZE);
 868		ret = 0;
 869	}
 870	spin_unlock_irqrestore(&ctrl->ctl_lock, flags);
 871
 872	return ret;
 873}
 874
 875/* Q-subcode information. The byte size is SPDIF_UBITS_SIZE/8 */
 876static int fsl_spdif_qinfo(struct snd_kcontrol *kcontrol,
 877				struct snd_ctl_elem_info *uinfo)
 878{
 879	uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
 880	uinfo->count = SPDIF_QSUB_SIZE;
 881
 882	return 0;
 883}
 884
 885/* Get Q subcode from chip value which readed out in QChannel register */
 886static int fsl_spdif_qget(struct snd_kcontrol *kcontrol,
 887				struct snd_ctl_elem_value *ucontrol)
 888{
 889	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 890	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 891	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 892	unsigned long flags;
 893	int ret = -EAGAIN;
 894
 895	spin_lock_irqsave(&ctrl->ctl_lock, flags);
 896	if (ctrl->ready_buf) {
 897		int idx = (ctrl->ready_buf - 1) * SPDIF_QSUB_SIZE;
 898		memcpy(&ucontrol->value.bytes.data[0],
 899				&ctrl->qsub[idx], SPDIF_QSUB_SIZE);
 900		ret = 0;
 901	}
 902	spin_unlock_irqrestore(&ctrl->ctl_lock, flags);
 903
 904	return ret;
 905}
 906
 907/* Get valid good bit from interrupt status register */
 908static int fsl_spdif_rx_vbit_get(struct snd_kcontrol *kcontrol,
 909				 struct snd_ctl_elem_value *ucontrol)
 910{
 911	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 912	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 913	struct regmap *regmap = spdif_priv->regmap;
 914	u32 val;
 915
 916	regmap_read(regmap, REG_SPDIF_SIS, &val);
 917	ucontrol->value.integer.value[0] = (val & INT_VAL_NOGOOD) != 0;
 918	regmap_write(regmap, REG_SPDIF_SIC, INT_VAL_NOGOOD);
 919
 920	return 0;
 921}
 922
 923static int fsl_spdif_tx_vbit_get(struct snd_kcontrol *kcontrol,
 924				 struct snd_ctl_elem_value *ucontrol)
 925{
 926	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 927	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 928	struct regmap *regmap = spdif_priv->regmap;
 929	u32 val;
 930
 931	regmap_read(regmap, REG_SPDIF_SCR, &val);
 932	val = (val & SCR_VAL_MASK) >> SCR_VAL_OFFSET;
 933	val = 1 - val;
 934	ucontrol->value.integer.value[0] = val;
 935
 936	return 0;
 937}
 938
 939static int fsl_spdif_tx_vbit_put(struct snd_kcontrol *kcontrol,
 940				 struct snd_ctl_elem_value *ucontrol)
 941{
 942	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 943	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 944	struct regmap *regmap = spdif_priv->regmap;
 945	u32 val = (1 - ucontrol->value.integer.value[0]) << SCR_VAL_OFFSET;
 946
 947	regmap_update_bits(regmap, REG_SPDIF_SCR, SCR_VAL_MASK, val);
 948
 949	return 0;
 950}
 951
 952static int fsl_spdif_rx_rcm_get(struct snd_kcontrol *kcontrol,
 953				struct snd_ctl_elem_value *ucontrol)
 954{
 955	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 956	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 957	struct regmap *regmap = spdif_priv->regmap;
 958	u32 val;
 959
 960	regmap_read(regmap, REG_SPDIF_SCR, &val);
 961	val = (val & SCR_RAW_CAPTURE_MODE) ? 1 : 0;
 962	ucontrol->value.integer.value[0] = val;
 963
 964	return 0;
 965}
 966
 967static int fsl_spdif_rx_rcm_put(struct snd_kcontrol *kcontrol,
 968				struct snd_ctl_elem_value *ucontrol)
 969{
 970	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 971	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 972	struct regmap *regmap = spdif_priv->regmap;
 973	u32 val = (ucontrol->value.integer.value[0] ? SCR_RAW_CAPTURE_MODE : 0);
 974
 975	if (val)
 976		cpu_dai->driver->capture.formats |= SNDRV_PCM_FMTBIT_S32_LE;
 977	else
 978		cpu_dai->driver->capture.formats &= ~SNDRV_PCM_FMTBIT_S32_LE;
 979
 980	regmap_update_bits(regmap, REG_SPDIF_SCR, SCR_RAW_CAPTURE_MODE, val);
 981
 982	return 0;
 983}
 984
 985static int fsl_spdif_bypass_get(struct snd_kcontrol *kcontrol,
 986				struct snd_ctl_elem_value *ucontrol)
 987{
 988	struct snd_soc_dai *dai = snd_kcontrol_chip(kcontrol);
 989	struct fsl_spdif_priv *priv = snd_soc_dai_get_drvdata(dai);
 990
 991	ucontrol->value.integer.value[0] = priv->bypass ? 1 : 0;
 992
 993	return 0;
 994}
 995
 996static int fsl_spdif_bypass_put(struct snd_kcontrol *kcontrol,
 997				struct snd_ctl_elem_value *ucontrol)
 998{
 999	struct snd_soc_dai *dai = snd_kcontrol_chip(kcontrol);
1000	struct fsl_spdif_priv *priv = snd_soc_dai_get_drvdata(dai);
1001	struct snd_soc_card *card = dai->component->card;
1002	bool set = (ucontrol->value.integer.value[0] != 0);
1003	struct regmap *regmap = priv->regmap;
1004	struct snd_soc_pcm_runtime *rtd;
1005	u32 scr, mask;
1006	int stream;
1007
1008	rtd = snd_soc_get_pcm_runtime(card, card->dai_link);
1009
1010	if (priv->bypass == set)
1011		return 0; /* nothing to do */
1012
1013	if (snd_soc_dai_active(dai)) {
1014		dev_err(dai->dev, "Cannot change BYPASS mode while stream is running.\n");
1015		return -EBUSY;
1016	}
1017
1018	pm_runtime_get_sync(dai->dev);
1019
1020	if (set) {
1021		/* Disable interrupts */
1022		regmap_update_bits(regmap, REG_SPDIF_SIE, 0xffffff, 0);
1023
1024		/* Configure BYPASS mode */
1025		scr = SCR_TXSEL_RX | SCR_RXFIFO_OFF;
1026		mask = SCR_RXFIFO_FSEL_MASK | SCR_RXFIFO_AUTOSYNC_MASK |
1027			SCR_RXFIFO_CTL_MASK | SCR_RXFIFO_OFF_MASK | SCR_TXSEL_MASK;
1028		/* Power up SPDIF module */
1029		mask |= SCR_LOW_POWER;
1030	} else {
1031		/* Power down SPDIF module, disable TX */
1032		scr = SCR_LOW_POWER | SCR_TXSEL_OFF;
1033		mask = SCR_LOW_POWER | SCR_TXSEL_MASK;
1034	}
1035
1036	regmap_update_bits(regmap, REG_SPDIF_SCR, mask, scr);
1037
1038	/* Disable playback & capture if BYPASS mode is enabled, enable otherwise */
1039	for_each_pcm_streams(stream)
1040		rtd->pcm->streams[stream].substream_count = (set ? 0 : 1);
1041
1042	priv->bypass = set;
1043	pm_runtime_put_sync(dai->dev);
1044
1045	return 0;
1046}
1047
1048/* DPLL lock information */
1049static int fsl_spdif_rxrate_info(struct snd_kcontrol *kcontrol,
1050				struct snd_ctl_elem_info *uinfo)
1051{
1052	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1053	uinfo->count = 1;
1054	uinfo->value.integer.min = 16000;
1055	uinfo->value.integer.max = 192000;
1056
1057	return 0;
1058}
1059
1060static u32 gainsel_multi[GAINSEL_MULTI_MAX] = {
1061	24, 16, 12, 8, 6, 4, 3,
1062};
1063
1064/* Get RX data clock rate given the SPDIF bus_clk */
1065static int spdif_get_rxclk_rate(struct fsl_spdif_priv *spdif_priv,
1066				enum spdif_gainsel gainsel)
1067{
1068	struct regmap *regmap = spdif_priv->regmap;
1069	struct platform_device *pdev = spdif_priv->pdev;
1070	u64 tmpval64, busclk_freq = 0;
1071	u32 freqmeas, phaseconf;
1072	u8 clksrc;
1073
1074	regmap_read(regmap, REG_SPDIF_SRFM, &freqmeas);
1075	regmap_read(regmap, REG_SPDIF_SRPC, &phaseconf);
1076
1077	clksrc = (phaseconf >> SRPC_CLKSRC_SEL_OFFSET) & 0xf;
1078
1079	/* Get bus clock from system */
1080	if (srpc_dpll_locked[clksrc] && (phaseconf & SRPC_DPLL_LOCKED))
1081		busclk_freq = clk_get_rate(spdif_priv->sysclk);
1082
1083	/* FreqMeas_CLK = (BUS_CLK * FreqMeas) / 2 ^ 10 / GAINSEL / 128 */
1084	tmpval64 = (u64) busclk_freq * freqmeas;
1085	do_div(tmpval64, gainsel_multi[gainsel] * 1024);
1086	do_div(tmpval64, 128 * 1024);
1087
1088	dev_dbg(&pdev->dev, "FreqMeas: %d\n", freqmeas);
1089	dev_dbg(&pdev->dev, "BusclkFreq: %lld\n", busclk_freq);
1090	dev_dbg(&pdev->dev, "RxRate: %lld\n", tmpval64);
1091
1092	return (int)tmpval64;
1093}
1094
1095/*
1096 * Get DPLL lock or not info from stable interrupt status register.
1097 * User application must use this control to get locked,
1098 * then can do next PCM operation
1099 */
1100static int fsl_spdif_rxrate_get(struct snd_kcontrol *kcontrol,
1101				struct snd_ctl_elem_value *ucontrol)
1102{
1103	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
1104	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
1105	int rate = 0;
1106
1107	if (spdif_priv->dpll_locked)
1108		rate = spdif_get_rxclk_rate(spdif_priv, SPDIF_DEFAULT_GAINSEL);
1109
1110	ucontrol->value.integer.value[0] = rate;
1111
1112	return 0;
1113}
1114
1115/*
1116 * User bit sync mode:
1117 * 1 CD User channel subcode
1118 * 0 Non-CD data
1119 */
1120static int fsl_spdif_usync_get(struct snd_kcontrol *kcontrol,
1121			       struct snd_ctl_elem_value *ucontrol)
1122{
1123	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
1124	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
1125	struct regmap *regmap = spdif_priv->regmap;
1126	u32 val;
1127
1128	regmap_read(regmap, REG_SPDIF_SRCD, &val);
1129	ucontrol->value.integer.value[0] = (val & SRCD_CD_USER) != 0;
1130
1131	return 0;
1132}
1133
1134/*
1135 * User bit sync mode:
1136 * 1 CD User channel subcode
1137 * 0 Non-CD data
1138 */
1139static int fsl_spdif_usync_put(struct snd_kcontrol *kcontrol,
1140				struct snd_ctl_elem_value *ucontrol)
1141{
1142	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
1143	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
1144	struct regmap *regmap = spdif_priv->regmap;
1145	u32 val = ucontrol->value.integer.value[0] << SRCD_CD_USER_OFFSET;
1146
1147	regmap_update_bits(regmap, REG_SPDIF_SRCD, SRCD_CD_USER, val);
1148
1149	return 0;
1150}
1151
1152/* FSL SPDIF IEC958 controller defines */
1153static struct snd_kcontrol_new fsl_spdif_ctrls[] = {
1154	/* Status cchanel controller */
1155	{
1156		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1157		.name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
1158		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1159			SNDRV_CTL_ELEM_ACCESS_WRITE |
1160			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1161		.info = fsl_spdif_info,
1162		.get = fsl_spdif_pb_get,
1163		.put = fsl_spdif_pb_put,
1164	},
1165	{
1166		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1167		.name = SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
1168		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1169			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1170		.info = fsl_spdif_info,
1171		.get = fsl_spdif_capture_get,
1172	},
1173	/* User bits controller */
1174	{
1175		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1176		.name = "IEC958 Subcode Capture Default",
1177		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1178			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1179		.info = fsl_spdif_info,
1180		.get = fsl_spdif_subcode_get,
1181	},
1182	{
1183		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1184		.name = "IEC958 Q-subcode Capture Default",
1185		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1186			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1187		.info = fsl_spdif_qinfo,
1188		.get = fsl_spdif_qget,
1189	},
1190	/* Valid bit error controller */
1191	{
1192		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1193		.name = "IEC958 RX V-Bit Errors",
1194		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1195			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1196		.info = snd_ctl_boolean_mono_info,
1197		.get = fsl_spdif_rx_vbit_get,
1198	},
1199	{
1200		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1201		.name = "IEC958 TX V-Bit",
1202		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1203			SNDRV_CTL_ELEM_ACCESS_WRITE |
1204			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1205		.info = snd_ctl_boolean_mono_info,
1206		.get = fsl_spdif_tx_vbit_get,
1207		.put = fsl_spdif_tx_vbit_put,
1208	},
1209	/* DPLL lock info get controller */
1210	{
1211		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1212		.name = RX_SAMPLE_RATE_KCONTROL,
1213		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1214			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1215		.info = fsl_spdif_rxrate_info,
1216		.get = fsl_spdif_rxrate_get,
1217	},
1218	/* RX bypass controller */
1219	{
1220		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1221		.name = "Bypass Mode",
1222		.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
1223		.info = snd_ctl_boolean_mono_info,
1224		.get = fsl_spdif_bypass_get,
1225		.put = fsl_spdif_bypass_put,
1226	},
1227	/* User bit sync mode set/get controller */
1228	{
1229		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1230		.name = "IEC958 USyncMode CDText",
1231		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1232			SNDRV_CTL_ELEM_ACCESS_WRITE |
1233			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1234		.info = snd_ctl_boolean_mono_info,
1235		.get = fsl_spdif_usync_get,
1236		.put = fsl_spdif_usync_put,
1237	},
1238};
1239
1240static struct snd_kcontrol_new fsl_spdif_ctrls_rcm[] = {
1241	{
1242		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1243		.name = "IEC958 Raw Capture Mode",
1244		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1245			SNDRV_CTL_ELEM_ACCESS_WRITE |
1246			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1247		.info = snd_ctl_boolean_mono_info,
1248		.get = fsl_spdif_rx_rcm_get,
1249		.put = fsl_spdif_rx_rcm_put,
1250	},
1251};
1252
1253static int fsl_spdif_dai_probe(struct snd_soc_dai *dai)
1254{
1255	struct fsl_spdif_priv *spdif_private = snd_soc_dai_get_drvdata(dai);
1256
1257	snd_soc_dai_init_dma_data(dai, &spdif_private->dma_params_tx,
1258				  &spdif_private->dma_params_rx);
1259
1260	snd_soc_add_dai_controls(dai, fsl_spdif_ctrls, ARRAY_SIZE(fsl_spdif_ctrls));
1261
1262	if (spdif_private->soc->raw_capture_mode)
1263		snd_soc_add_dai_controls(dai, fsl_spdif_ctrls_rcm,
1264					 ARRAY_SIZE(fsl_spdif_ctrls_rcm));
1265
1266	spdif_private->snd_card = dai->component->card->snd_card;
1267	spdif_private->rxrate_kcontrol = snd_soc_card_get_kcontrol(dai->component->card,
1268								   RX_SAMPLE_RATE_KCONTROL);
1269	if (!spdif_private->rxrate_kcontrol)
1270		dev_err(&spdif_private->pdev->dev, "failed to get %s kcontrol\n",
1271			RX_SAMPLE_RATE_KCONTROL);
1272
1273	/*Clear the val bit for Tx*/
1274	regmap_update_bits(spdif_private->regmap, REG_SPDIF_SCR,
1275			   SCR_VAL_MASK, SCR_VAL_CLEAR);
1276
1277	return 0;
1278}
1279
 
 
 
 
 
 
 
 
1280static struct snd_soc_dai_driver fsl_spdif_dai = {
1281	.probe = &fsl_spdif_dai_probe,
1282	.playback = {
1283		.stream_name = "CPU-Playback",
1284		.channels_min = 2,
1285		.channels_max = 2,
1286		.rates = FSL_SPDIF_RATES_PLAYBACK,
1287		.formats = FSL_SPDIF_FORMATS_PLAYBACK,
1288	},
1289	.capture = {
1290		.stream_name = "CPU-Capture",
1291		.channels_min = 2,
1292		.channels_max = 2,
1293		.rates = FSL_SPDIF_RATES_CAPTURE,
1294		.formats = FSL_SPDIF_FORMATS_CAPTURE,
1295	},
1296	.ops = &fsl_spdif_dai_ops,
1297};
1298
1299static const struct snd_soc_component_driver fsl_spdif_component = {
1300	.name			= "fsl-spdif",
1301	.legacy_dai_naming	= 1,
1302};
1303
1304/* FSL SPDIF REGMAP */
1305static const struct reg_default fsl_spdif_reg_defaults[] = {
1306	{REG_SPDIF_SCR,    0x00000400},
1307	{REG_SPDIF_SRCD,   0x00000000},
1308	{REG_SPDIF_SIE,	   0x00000000},
1309	{REG_SPDIF_STL,	   0x00000000},
1310	{REG_SPDIF_STR,	   0x00000000},
1311	{REG_SPDIF_STCSCH, 0x00000000},
1312	{REG_SPDIF_STCSCL, 0x00000000},
1313	{REG_SPDIF_STCSPH, 0x00000000},
1314	{REG_SPDIF_STCSPL, 0x00000000},
1315	{REG_SPDIF_STC,	   0x00020f00},
1316};
1317
1318static bool fsl_spdif_readable_reg(struct device *dev, unsigned int reg)
1319{
1320	switch (reg) {
1321	case REG_SPDIF_SCR:
1322	case REG_SPDIF_SRCD:
1323	case REG_SPDIF_SRPC:
1324	case REG_SPDIF_SIE:
1325	case REG_SPDIF_SIS:
1326	case REG_SPDIF_SRL:
1327	case REG_SPDIF_SRR:
1328	case REG_SPDIF_SRCSH:
1329	case REG_SPDIF_SRCSL:
1330	case REG_SPDIF_SRU:
1331	case REG_SPDIF_SRQ:
1332	case REG_SPDIF_STCSCH:
1333	case REG_SPDIF_STCSCL:
1334	case REG_SPDIF_STCSPH:
1335	case REG_SPDIF_STCSPL:
1336	case REG_SPDIF_SRFM:
1337	case REG_SPDIF_STC:
1338	case REG_SPDIF_SRCCA_31_0:
1339	case REG_SPDIF_SRCCA_63_32:
1340	case REG_SPDIF_SRCCA_95_64:
1341	case REG_SPDIF_SRCCA_127_96:
1342	case REG_SPDIF_SRCCA_159_128:
1343	case REG_SPDIF_SRCCA_191_160:
1344	case REG_SPDIF_STCCA_31_0:
1345	case REG_SPDIF_STCCA_63_32:
1346	case REG_SPDIF_STCCA_95_64:
1347	case REG_SPDIF_STCCA_127_96:
1348	case REG_SPDIF_STCCA_159_128:
1349	case REG_SPDIF_STCCA_191_160:
1350		return true;
1351	default:
1352		return false;
1353	}
1354}
1355
1356static bool fsl_spdif_volatile_reg(struct device *dev, unsigned int reg)
1357{
1358	switch (reg) {
1359	case REG_SPDIF_SRPC:
1360	case REG_SPDIF_SIS:
1361	case REG_SPDIF_SRL:
1362	case REG_SPDIF_SRR:
1363	case REG_SPDIF_SRCSH:
1364	case REG_SPDIF_SRCSL:
1365	case REG_SPDIF_SRU:
1366	case REG_SPDIF_SRQ:
1367	case REG_SPDIF_SRFM:
1368	case REG_SPDIF_SRCCA_31_0:
1369	case REG_SPDIF_SRCCA_63_32:
1370	case REG_SPDIF_SRCCA_95_64:
1371	case REG_SPDIF_SRCCA_127_96:
1372	case REG_SPDIF_SRCCA_159_128:
1373	case REG_SPDIF_SRCCA_191_160:
1374		return true;
1375	default:
1376		return false;
1377	}
1378}
1379
1380static bool fsl_spdif_writeable_reg(struct device *dev, unsigned int reg)
1381{
1382	switch (reg) {
1383	case REG_SPDIF_SCR:
1384	case REG_SPDIF_SRCD:
1385	case REG_SPDIF_SRPC:
1386	case REG_SPDIF_SIE:
1387	case REG_SPDIF_SIC:
1388	case REG_SPDIF_STL:
1389	case REG_SPDIF_STR:
1390	case REG_SPDIF_STCSCH:
1391	case REG_SPDIF_STCSCL:
1392	case REG_SPDIF_STCSPH:
1393	case REG_SPDIF_STCSPL:
1394	case REG_SPDIF_STC:
1395	case REG_SPDIF_STCCA_31_0:
1396	case REG_SPDIF_STCCA_63_32:
1397	case REG_SPDIF_STCCA_95_64:
1398	case REG_SPDIF_STCCA_127_96:
1399	case REG_SPDIF_STCCA_159_128:
1400	case REG_SPDIF_STCCA_191_160:
1401		return true;
1402	default:
1403		return false;
1404	}
1405}
1406
1407static const struct regmap_config fsl_spdif_regmap_config = {
1408	.reg_bits = 32,
1409	.reg_stride = 4,
1410	.val_bits = 32,
1411
1412	.max_register = REG_SPDIF_STCCA_191_160,
1413	.reg_defaults = fsl_spdif_reg_defaults,
1414	.num_reg_defaults = ARRAY_SIZE(fsl_spdif_reg_defaults),
1415	.readable_reg = fsl_spdif_readable_reg,
1416	.volatile_reg = fsl_spdif_volatile_reg,
1417	.writeable_reg = fsl_spdif_writeable_reg,
1418	.cache_type = REGCACHE_FLAT,
1419};
1420
1421static u32 fsl_spdif_txclk_caldiv(struct fsl_spdif_priv *spdif_priv,
1422				struct clk *clk, u64 savesub,
1423				enum spdif_txrate index, bool round)
1424{
1425	static const u32 rate[] = { 32000, 44100, 48000, 88200, 96000, 176400,
1426				    192000, };
1427	bool is_sysclk = clk_is_match(clk, spdif_priv->sysclk);
1428	u64 rate_ideal, rate_actual, sub;
1429	u32 arate;
1430	u16 sysclk_dfmin, sysclk_dfmax, sysclk_df;
1431	u8 txclk_df;
1432
1433	/* The sysclk has an extra divisor [2, 512] */
1434	sysclk_dfmin = is_sysclk ? 2 : 1;
1435	sysclk_dfmax = is_sysclk ? 512 : 1;
1436
1437	for (sysclk_df = sysclk_dfmin; sysclk_df <= sysclk_dfmax; sysclk_df++) {
1438		for (txclk_df = 1; txclk_df <= 128; txclk_df++) {
1439			rate_ideal = rate[index] * txclk_df * 64ULL;
1440			if (round)
1441				rate_actual = clk_round_rate(clk, rate_ideal);
1442			else
1443				rate_actual = clk_get_rate(clk);
1444
1445			arate = rate_actual / 64;
1446			arate /= txclk_df * sysclk_df;
1447
1448			if (arate == rate[index]) {
1449				/* We are lucky */
1450				savesub = 0;
1451				spdif_priv->txclk_df[index] = txclk_df;
1452				spdif_priv->sysclk_df[index] = sysclk_df;
1453				spdif_priv->txrate[index] = arate;
1454				goto out;
1455			} else if (arate / rate[index] == 1) {
1456				/* A little bigger than expect */
1457				sub = (u64)(arate - rate[index]) * 100000;
1458				do_div(sub, rate[index]);
1459				if (sub >= savesub)
1460					continue;
1461				savesub = sub;
1462				spdif_priv->txclk_df[index] = txclk_df;
1463				spdif_priv->sysclk_df[index] = sysclk_df;
1464				spdif_priv->txrate[index] = arate;
1465			} else if (rate[index] / arate == 1) {
1466				/* A little smaller than expect */
1467				sub = (u64)(rate[index] - arate) * 100000;
1468				do_div(sub, rate[index]);
1469				if (sub >= savesub)
1470					continue;
1471				savesub = sub;
1472				spdif_priv->txclk_df[index] = txclk_df;
1473				spdif_priv->sysclk_df[index] = sysclk_df;
1474				spdif_priv->txrate[index] = arate;
1475			}
1476		}
1477	}
1478
1479out:
1480	return savesub;
1481}
1482
1483static int fsl_spdif_probe_txclk(struct fsl_spdif_priv *spdif_priv,
1484				enum spdif_txrate index)
1485{
1486	static const u32 rate[] = { 32000, 44100, 48000, 88200, 96000, 176400,
1487				    192000, };
1488	struct platform_device *pdev = spdif_priv->pdev;
1489	struct device *dev = &pdev->dev;
1490	u64 savesub = 100000, ret;
1491	struct clk *clk;
1492	int i;
1493
1494	for (i = 0; i < STC_TXCLK_SRC_MAX; i++) {
1495		clk = spdif_priv->txclk[i];
1496		if (IS_ERR(clk)) {
1497			dev_err(dev, "no rxtx%d clock in devicetree\n", i);
1498			return PTR_ERR(clk);
1499		}
1500		if (!clk_get_rate(clk))
1501			continue;
1502
1503		ret = fsl_spdif_txclk_caldiv(spdif_priv, clk, savesub, index,
1504					     fsl_spdif_can_set_clk_rate(spdif_priv, i));
1505		if (savesub == ret)
1506			continue;
1507
1508		savesub = ret;
1509		spdif_priv->txclk_src[index] = i;
1510
1511		/* To quick catch a divisor, we allow a 0.1% deviation */
1512		if (savesub < 100)
1513			break;
1514	}
1515
1516	dev_dbg(dev, "use rxtx%d as tx clock source for %dHz sample rate\n",
1517			spdif_priv->txclk_src[index], rate[index]);
1518	dev_dbg(dev, "use txclk df %d for %dHz sample rate\n",
1519			spdif_priv->txclk_df[index], rate[index]);
1520	if (clk_is_match(spdif_priv->txclk[spdif_priv->txclk_src[index]], spdif_priv->sysclk))
1521		dev_dbg(dev, "use sysclk df %d for %dHz sample rate\n",
1522				spdif_priv->sysclk_df[index], rate[index]);
1523	dev_dbg(dev, "the best rate for %dHz sample rate is %dHz\n",
1524			rate[index], spdif_priv->txrate[index]);
1525
1526	return 0;
1527}
1528
1529static int fsl_spdif_probe(struct platform_device *pdev)
1530{
1531	struct fsl_spdif_priv *spdif_priv;
1532	struct spdif_mixer_control *ctrl;
1533	struct resource *res;
1534	void __iomem *regs;
1535	int irq, ret, i;
1536	char tmp[16];
1537
1538	spdif_priv = devm_kzalloc(&pdev->dev, sizeof(*spdif_priv), GFP_KERNEL);
1539	if (!spdif_priv)
1540		return -ENOMEM;
1541
1542	spdif_priv->pdev = pdev;
1543
1544	spdif_priv->soc = of_device_get_match_data(&pdev->dev);
1545
1546	/* Initialize this copy of the CPU DAI driver structure */
1547	memcpy(&spdif_priv->cpu_dai_drv, &fsl_spdif_dai, sizeof(fsl_spdif_dai));
1548	spdif_priv->cpu_dai_drv.name = dev_name(&pdev->dev);
1549	spdif_priv->cpu_dai_drv.playback.formats =
1550				spdif_priv->soc->tx_formats;
1551
1552	/* Get the addresses and IRQ */
1553	regs = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
1554	if (IS_ERR(regs))
1555		return PTR_ERR(regs);
1556
1557	spdif_priv->regmap = devm_regmap_init_mmio(&pdev->dev, regs, &fsl_spdif_regmap_config);
1558	if (IS_ERR(spdif_priv->regmap)) {
1559		dev_err(&pdev->dev, "regmap init failed\n");
1560		return PTR_ERR(spdif_priv->regmap);
1561	}
1562
1563	for (i = 0; i < spdif_priv->soc->interrupts; i++) {
1564		irq = platform_get_irq(pdev, i);
1565		if (irq < 0)
1566			return irq;
1567
1568		ret = devm_request_irq(&pdev->dev, irq, spdif_isr, 0,
1569				       dev_name(&pdev->dev), spdif_priv);
1570		if (ret) {
1571			dev_err(&pdev->dev, "could not claim irq %u\n", irq);
1572			return ret;
1573		}
1574	}
1575
1576	for (i = 0; i < STC_TXCLK_SRC_MAX; i++) {
1577		sprintf(tmp, "rxtx%d", i);
1578		spdif_priv->txclk[i] = devm_clk_get(&pdev->dev, tmp);
1579		if (IS_ERR(spdif_priv->txclk[i])) {
1580			dev_err(&pdev->dev, "no rxtx%d clock in devicetree\n", i);
1581			return PTR_ERR(spdif_priv->txclk[i]);
1582		}
1583	}
1584
1585	/* Get system clock for rx clock rate calculation */
1586	spdif_priv->sysclk = spdif_priv->txclk[5];
1587	if (IS_ERR(spdif_priv->sysclk)) {
1588		dev_err(&pdev->dev, "no sys clock (rxtx5) in devicetree\n");
1589		return PTR_ERR(spdif_priv->sysclk);
1590	}
1591
1592	/* Get core clock for data register access via DMA */
1593	spdif_priv->coreclk = devm_clk_get(&pdev->dev, "core");
1594	if (IS_ERR(spdif_priv->coreclk)) {
1595		dev_err(&pdev->dev, "no core clock in devicetree\n");
1596		return PTR_ERR(spdif_priv->coreclk);
1597	}
1598
1599	spdif_priv->spbaclk = devm_clk_get(&pdev->dev, "spba");
1600	if (IS_ERR(spdif_priv->spbaclk))
1601		dev_warn(&pdev->dev, "no spba clock in devicetree\n");
1602
1603	/* Select clock source for rx/tx clock */
1604	spdif_priv->rxclk = spdif_priv->txclk[1];
1605	if (IS_ERR(spdif_priv->rxclk)) {
1606		dev_err(&pdev->dev, "no rxtx1 clock in devicetree\n");
1607		return PTR_ERR(spdif_priv->rxclk);
1608	}
1609	spdif_priv->rxclk_src = DEFAULT_RXCLK_SRC;
1610
1611	fsl_asoc_get_pll_clocks(&pdev->dev, &spdif_priv->pll8k_clk,
1612				&spdif_priv->pll11k_clk);
1613
1614	/* Initial spinlock for control data */
1615	ctrl = &spdif_priv->fsl_spdif_control;
1616	spin_lock_init(&ctrl->ctl_lock);
1617
1618	/* Init tx channel status default value */
1619	ctrl->ch_status[0] = IEC958_AES0_CON_NOT_COPYRIGHT |
1620			     IEC958_AES0_CON_EMPHASIS_5015;
1621	ctrl->ch_status[1] = IEC958_AES1_CON_DIGDIGCONV_ID;
1622	ctrl->ch_status[2] = 0x00;
1623	ctrl->ch_status[3] = IEC958_AES3_CON_FS_44100 |
1624			     IEC958_AES3_CON_CLOCK_1000PPM;
1625
1626	spdif_priv->dpll_locked = false;
1627
1628	spdif_priv->dma_params_tx.maxburst = spdif_priv->soc->tx_burst;
1629	spdif_priv->dma_params_rx.maxburst = spdif_priv->soc->rx_burst;
1630	spdif_priv->dma_params_tx.addr = res->start + REG_SPDIF_STL;
1631	spdif_priv->dma_params_rx.addr = res->start + REG_SPDIF_SRL;
1632
1633	/* Register with ASoC */
1634	dev_set_drvdata(&pdev->dev, spdif_priv);
1635	pm_runtime_enable(&pdev->dev);
1636	regcache_cache_only(spdif_priv->regmap, true);
1637
1638	/*
1639	 * Register platform component before registering cpu dai for there
1640	 * is not defer probe for platform component in snd_soc_add_pcm_runtime().
1641	 */
1642	ret = imx_pcm_dma_init(pdev);
1643	if (ret) {
1644		dev_err_probe(&pdev->dev, ret, "imx_pcm_dma_init failed\n");
1645		goto err_pm_disable;
1646	}
1647
1648	ret = devm_snd_soc_register_component(&pdev->dev, &fsl_spdif_component,
1649					      &spdif_priv->cpu_dai_drv, 1);
1650	if (ret) {
1651		dev_err(&pdev->dev, "failed to register DAI: %d\n", ret);
1652		goto err_pm_disable;
1653	}
1654
1655	return ret;
1656
1657err_pm_disable:
1658	pm_runtime_disable(&pdev->dev);
1659	return ret;
1660}
1661
1662static int fsl_spdif_remove(struct platform_device *pdev)
1663{
1664	pm_runtime_disable(&pdev->dev);
1665
1666	return 0;
1667}
1668
1669#ifdef CONFIG_PM
1670static int fsl_spdif_runtime_suspend(struct device *dev)
1671{
1672	struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev);
1673	int i;
1674
1675	/* Disable all the interrupts */
1676	regmap_update_bits(spdif_priv->regmap, REG_SPDIF_SIE, 0xffffff, 0);
1677
1678	regmap_read(spdif_priv->regmap, REG_SPDIF_SRPC,
1679			&spdif_priv->regcache_srpc);
1680	regcache_cache_only(spdif_priv->regmap, true);
1681
1682	for (i = 0; i < STC_TXCLK_SRC_MAX; i++)
1683		clk_disable_unprepare(spdif_priv->txclk[i]);
1684
1685	if (!IS_ERR(spdif_priv->spbaclk))
1686		clk_disable_unprepare(spdif_priv->spbaclk);
1687	clk_disable_unprepare(spdif_priv->coreclk);
1688
1689	return 0;
1690}
1691
1692static int fsl_spdif_runtime_resume(struct device *dev)
1693{
1694	struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev);
1695	int ret;
1696	int i;
1697
1698	ret = clk_prepare_enable(spdif_priv->coreclk);
1699	if (ret) {
1700		dev_err(dev, "failed to enable core clock\n");
1701		return ret;
1702	}
1703
1704	if (!IS_ERR(spdif_priv->spbaclk)) {
1705		ret = clk_prepare_enable(spdif_priv->spbaclk);
1706		if (ret) {
1707			dev_err(dev, "failed to enable spba clock\n");
1708			goto disable_core_clk;
1709		}
1710	}
1711
1712	for (i = 0; i < STC_TXCLK_SRC_MAX; i++) {
1713		ret = clk_prepare_enable(spdif_priv->txclk[i]);
1714		if (ret)
1715			goto disable_tx_clk;
1716	}
1717
1718	regcache_cache_only(spdif_priv->regmap, false);
1719	regcache_mark_dirty(spdif_priv->regmap);
1720
1721	regmap_update_bits(spdif_priv->regmap, REG_SPDIF_SRPC,
1722			SRPC_CLKSRC_SEL_MASK | SRPC_GAINSEL_MASK,
1723			spdif_priv->regcache_srpc);
1724
1725	ret = regcache_sync(spdif_priv->regmap);
1726	if (ret)
1727		goto disable_tx_clk;
1728
1729	return 0;
1730
1731disable_tx_clk:
1732	for (i--; i >= 0; i--)
1733		clk_disable_unprepare(spdif_priv->txclk[i]);
1734	if (!IS_ERR(spdif_priv->spbaclk))
1735		clk_disable_unprepare(spdif_priv->spbaclk);
1736disable_core_clk:
1737	clk_disable_unprepare(spdif_priv->coreclk);
1738
1739	return ret;
1740}
1741#endif /* CONFIG_PM */
1742
1743static const struct dev_pm_ops fsl_spdif_pm = {
1744	SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
1745				pm_runtime_force_resume)
1746	SET_RUNTIME_PM_OPS(fsl_spdif_runtime_suspend, fsl_spdif_runtime_resume,
1747			   NULL)
1748};
1749
1750static const struct of_device_id fsl_spdif_dt_ids[] = {
1751	{ .compatible = "fsl,imx35-spdif", .data = &fsl_spdif_imx35, },
1752	{ .compatible = "fsl,vf610-spdif", .data = &fsl_spdif_vf610, },
1753	{ .compatible = "fsl,imx6sx-spdif", .data = &fsl_spdif_imx6sx, },
1754	{ .compatible = "fsl,imx8qm-spdif", .data = &fsl_spdif_imx8qm, },
1755	{ .compatible = "fsl,imx8mm-spdif", .data = &fsl_spdif_imx8mm, },
1756	{ .compatible = "fsl,imx8ulp-spdif", .data = &fsl_spdif_imx8ulp, },
1757	{}
1758};
1759MODULE_DEVICE_TABLE(of, fsl_spdif_dt_ids);
1760
1761static struct platform_driver fsl_spdif_driver = {
1762	.driver = {
1763		.name = "fsl-spdif-dai",
1764		.of_match_table = fsl_spdif_dt_ids,
1765		.pm = &fsl_spdif_pm,
1766	},
1767	.probe = fsl_spdif_probe,
1768	.remove = fsl_spdif_remove,
1769};
1770
1771module_platform_driver(fsl_spdif_driver);
1772
1773MODULE_AUTHOR("Freescale Semiconductor, Inc.");
1774MODULE_DESCRIPTION("Freescale S/PDIF CPU DAI Driver");
1775MODULE_LICENSE("GPL v2");
1776MODULE_ALIAS("platform:fsl-spdif-dai");
v6.8
   1// SPDX-License-Identifier: GPL-2.0
   2//
   3// Freescale S/PDIF ALSA SoC Digital Audio Interface (DAI) driver
   4//
   5// Copyright (C) 2013 Freescale Semiconductor, Inc.
   6//
   7// Based on stmp3xxx_spdif_dai.c
   8// Vladimir Barinov <vbarinov@embeddedalley.com>
   9// Copyright 2008 SigmaTel, Inc
  10// Copyright 2008 Embedded Alley Solutions, Inc
  11
  12#include <linux/bitrev.h>
  13#include <linux/clk.h>
  14#include <linux/module.h>
  15#include <linux/of.h>
 
 
  16#include <linux/regmap.h>
  17#include <linux/pm_runtime.h>
  18
  19#include <sound/asoundef.h>
  20#include <sound/dmaengine_pcm.h>
  21#include <sound/soc.h>
  22
  23#include "fsl_spdif.h"
  24#include "fsl_utils.h"
  25#include "imx-pcm.h"
  26
  27#define FSL_SPDIF_TXFIFO_WML	0x8
  28#define FSL_SPDIF_RXFIFO_WML	0x8
  29
  30#define INTR_FOR_PLAYBACK	(INT_TXFIFO_RESYNC)
  31#define INTR_FOR_CAPTURE	(INT_SYM_ERR | INT_BIT_ERR | INT_URX_FUL |\
  32				INT_URX_OV | INT_QRX_FUL | INT_QRX_OV |\
  33				INT_UQ_SYNC | INT_UQ_ERR | INT_RXFIFO_RESYNC |\
  34				INT_LOSS_LOCK | INT_DPLL_LOCKED)
  35
  36#define SIE_INTR_FOR(tx)	(tx ? INTR_FOR_PLAYBACK : INTR_FOR_CAPTURE)
  37
  38/* Index list for the values that has if (DPLL Locked) condition */
  39static u8 srpc_dpll_locked[] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0xa, 0xb };
  40#define SRPC_NODPLL_START1	0x5
  41#define SRPC_NODPLL_START2	0xc
  42
  43#define DEFAULT_RXCLK_SRC	1
  44
  45#define RX_SAMPLE_RATE_KCONTROL "RX Sample Rate"
  46
  47/**
  48 * struct fsl_spdif_soc_data: soc specific data
  49 *
  50 * @imx: for imx platform
  51 * @shared_root_clock: flag of sharing a clock source with others;
  52 *                     so the driver shouldn't set root clock rate
  53 * @raw_capture_mode: if raw capture mode support
  54 * @cchannel_192b: if there are registers for 192bits C channel data
  55 * @interrupts: interrupt number
  56 * @tx_burst: tx maxburst size
  57 * @rx_burst: rx maxburst size
  58 * @tx_formats: tx supported data format
  59 */
  60struct fsl_spdif_soc_data {
  61	bool imx;
  62	bool shared_root_clock;
  63	bool raw_capture_mode;
  64	bool cchannel_192b;
  65	u32 interrupts;
  66	u32 tx_burst;
  67	u32 rx_burst;
  68	u64 tx_formats;
  69};
  70
  71/*
  72 * SPDIF control structure
  73 * Defines channel status, subcode and Q sub
  74 */
  75struct spdif_mixer_control {
  76	/* spinlock to access control data */
  77	spinlock_t ctl_lock;
  78
  79	/* IEC958 channel tx status bit */
  80	unsigned char ch_status[4];
  81
  82	/* User bits */
  83	unsigned char subcode[2 * SPDIF_UBITS_SIZE];
  84
  85	/* Q subcode part of user bits */
  86	unsigned char qsub[2 * SPDIF_QSUB_SIZE];
  87
  88	/* Buffer offset for U/Q */
  89	u32 upos;
  90	u32 qpos;
  91
  92	/* Ready buffer index of the two buffers */
  93	u32 ready_buf;
  94};
  95
  96/**
  97 * struct fsl_spdif_priv - Freescale SPDIF private data
  98 * @soc: SPDIF soc data
  99 * @fsl_spdif_control: SPDIF control data
 100 * @cpu_dai_drv: cpu dai driver
 101 * @snd_card: sound card pointer
 102 * @rxrate_kcontrol: kcontrol for RX Sample Rate
 103 * @pdev: platform device pointer
 104 * @regmap: regmap handler
 105 * @dpll_locked: dpll lock flag
 106 * @txrate: the best rates for playback
 107 * @txclk_df: STC_TXCLK_DF dividers value for playback
 108 * @sysclk_df: STC_SYSCLK_DF dividers value for playback
 109 * @txclk_src: STC_TXCLK_SRC values for playback
 110 * @rxclk_src: SRPC_CLKSRC_SEL values for capture
 111 * @txclk: tx clock sources for playback
 112 * @rxclk: rx clock sources for capture
 113 * @coreclk: core clock for register access via DMA
 114 * @sysclk: system clock for rx clock rate measurement
 115 * @spbaclk: SPBA clock (optional, depending on SoC design)
 116 * @dma_params_tx: DMA parameters for transmit channel
 117 * @dma_params_rx: DMA parameters for receive channel
 118 * @regcache_srpc: regcache for SRPC
 119 * @bypass: status of bypass input to output
 120 * @pll8k_clk: PLL clock for the rate of multiply of 8kHz
 121 * @pll11k_clk: PLL clock for the rate of multiply of 11kHz
 122 */
 123struct fsl_spdif_priv {
 124	const struct fsl_spdif_soc_data *soc;
 125	struct spdif_mixer_control fsl_spdif_control;
 126	struct snd_soc_dai_driver cpu_dai_drv;
 127	struct snd_card *snd_card;
 128	struct snd_kcontrol *rxrate_kcontrol;
 129	struct platform_device *pdev;
 130	struct regmap *regmap;
 131	bool dpll_locked;
 132	u32 txrate[SPDIF_TXRATE_MAX];
 133	u8 txclk_df[SPDIF_TXRATE_MAX];
 134	u16 sysclk_df[SPDIF_TXRATE_MAX];
 135	u8 txclk_src[SPDIF_TXRATE_MAX];
 136	u8 rxclk_src;
 137	struct clk *txclk[STC_TXCLK_SRC_MAX];
 138	struct clk *rxclk;
 139	struct clk *coreclk;
 140	struct clk *sysclk;
 141	struct clk *spbaclk;
 142	struct snd_dmaengine_dai_dma_data dma_params_tx;
 143	struct snd_dmaengine_dai_dma_data dma_params_rx;
 144	/* regcache for SRPC */
 145	u32 regcache_srpc;
 146	bool bypass;
 147	struct clk *pll8k_clk;
 148	struct clk *pll11k_clk;
 149};
 150
 151static struct fsl_spdif_soc_data fsl_spdif_vf610 = {
 152	.imx = false,
 153	.shared_root_clock = false,
 154	.raw_capture_mode = false,
 155	.interrupts = 1,
 156	.tx_burst = FSL_SPDIF_TXFIFO_WML,
 157	.rx_burst = FSL_SPDIF_RXFIFO_WML,
 158	.tx_formats = FSL_SPDIF_FORMATS_PLAYBACK,
 159};
 160
 161static struct fsl_spdif_soc_data fsl_spdif_imx35 = {
 162	.imx = true,
 163	.shared_root_clock = false,
 164	.raw_capture_mode = false,
 165	.interrupts = 1,
 166	.tx_burst = FSL_SPDIF_TXFIFO_WML,
 167	.rx_burst = FSL_SPDIF_RXFIFO_WML,
 168	.tx_formats = FSL_SPDIF_FORMATS_PLAYBACK,
 169};
 170
 171static struct fsl_spdif_soc_data fsl_spdif_imx6sx = {
 172	.imx = true,
 173	.shared_root_clock = true,
 174	.raw_capture_mode = false,
 175	.interrupts = 1,
 176	.tx_burst = FSL_SPDIF_TXFIFO_WML,
 177	.rx_burst = FSL_SPDIF_RXFIFO_WML,
 178	.tx_formats = FSL_SPDIF_FORMATS_PLAYBACK,
 179
 180};
 181
 182static struct fsl_spdif_soc_data fsl_spdif_imx8qm = {
 183	.imx = true,
 184	.shared_root_clock = true,
 185	.raw_capture_mode = false,
 186	.interrupts = 2,
 187	.tx_burst = 2,		/* Applied for EDMA */
 188	.rx_burst = 2,		/* Applied for EDMA */
 189	.tx_formats = SNDRV_PCM_FMTBIT_S24_LE,  /* Applied for EDMA */
 190};
 191
 192static struct fsl_spdif_soc_data fsl_spdif_imx8mm = {
 193	.imx = true,
 194	.shared_root_clock = false,
 195	.raw_capture_mode = true,
 196	.interrupts = 1,
 197	.tx_burst = FSL_SPDIF_TXFIFO_WML,
 198	.rx_burst = FSL_SPDIF_RXFIFO_WML,
 199	.tx_formats = FSL_SPDIF_FORMATS_PLAYBACK,
 200};
 201
 202static struct fsl_spdif_soc_data fsl_spdif_imx8ulp = {
 203	.imx = true,
 204	.shared_root_clock = true,
 205	.raw_capture_mode = false,
 206	.interrupts = 1,
 207	.tx_burst = 2,		/* Applied for EDMA */
 208	.rx_burst = 2,		/* Applied for EDMA */
 209	.tx_formats = SNDRV_PCM_FMTBIT_S24_LE,	/* Applied for EDMA */
 210	.cchannel_192b = true,
 211};
 212
 213/* Check if clk is a root clock that does not share clock source with others */
 214static inline bool fsl_spdif_can_set_clk_rate(struct fsl_spdif_priv *spdif, int clk)
 215{
 216	return (clk == STC_TXCLK_SPDIF_ROOT) && !spdif->soc->shared_root_clock;
 217}
 218
 219/* DPLL locked and lock loss interrupt handler */
 220static void spdif_irq_dpll_lock(struct fsl_spdif_priv *spdif_priv)
 221{
 222	struct regmap *regmap = spdif_priv->regmap;
 223	struct platform_device *pdev = spdif_priv->pdev;
 224	u32 locked;
 225
 226	regmap_read(regmap, REG_SPDIF_SRPC, &locked);
 227	locked &= SRPC_DPLL_LOCKED;
 228
 229	dev_dbg(&pdev->dev, "isr: Rx dpll %s \n",
 230			locked ? "locked" : "loss lock");
 231
 232	spdif_priv->dpll_locked = locked ? true : false;
 233
 234	if (spdif_priv->snd_card && spdif_priv->rxrate_kcontrol) {
 235		snd_ctl_notify(spdif_priv->snd_card,
 236			       SNDRV_CTL_EVENT_MASK_VALUE,
 237			       &spdif_priv->rxrate_kcontrol->id);
 238	}
 239}
 240
 241/* Receiver found illegal symbol interrupt handler */
 242static void spdif_irq_sym_error(struct fsl_spdif_priv *spdif_priv)
 243{
 244	struct regmap *regmap = spdif_priv->regmap;
 245	struct platform_device *pdev = spdif_priv->pdev;
 246
 247	dev_dbg(&pdev->dev, "isr: receiver found illegal symbol\n");
 248
 249	/* Clear illegal symbol if DPLL unlocked since no audio stream */
 250	if (!spdif_priv->dpll_locked)
 251		regmap_update_bits(regmap, REG_SPDIF_SIE, INT_SYM_ERR, 0);
 252}
 253
 254/* U/Q Channel receive register full */
 255static void spdif_irq_uqrx_full(struct fsl_spdif_priv *spdif_priv, char name)
 256{
 257	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 258	struct regmap *regmap = spdif_priv->regmap;
 259	struct platform_device *pdev = spdif_priv->pdev;
 260	u32 *pos, size, val, reg;
 261
 262	switch (name) {
 263	case 'U':
 264		pos = &ctrl->upos;
 265		size = SPDIF_UBITS_SIZE;
 266		reg = REG_SPDIF_SRU;
 267		break;
 268	case 'Q':
 269		pos = &ctrl->qpos;
 270		size = SPDIF_QSUB_SIZE;
 271		reg = REG_SPDIF_SRQ;
 272		break;
 273	default:
 274		dev_err(&pdev->dev, "unsupported channel name\n");
 275		return;
 276	}
 277
 278	dev_dbg(&pdev->dev, "isr: %c Channel receive register full\n", name);
 279
 280	if (*pos >= size * 2) {
 281		*pos = 0;
 282	} else if (unlikely((*pos % size) + 3 > size)) {
 283		dev_err(&pdev->dev, "User bit receive buffer overflow\n");
 284		return;
 285	}
 286
 287	regmap_read(regmap, reg, &val);
 288	ctrl->subcode[*pos++] = val >> 16;
 289	ctrl->subcode[*pos++] = val >> 8;
 290	ctrl->subcode[*pos++] = val;
 291}
 292
 293/* U/Q Channel sync found */
 294static void spdif_irq_uq_sync(struct fsl_spdif_priv *spdif_priv)
 295{
 296	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 297	struct platform_device *pdev = spdif_priv->pdev;
 298
 299	dev_dbg(&pdev->dev, "isr: U/Q Channel sync found\n");
 300
 301	/* U/Q buffer reset */
 302	if (ctrl->qpos == 0)
 303		return;
 304
 305	/* Set ready to this buffer */
 306	ctrl->ready_buf = (ctrl->qpos - 1) / SPDIF_QSUB_SIZE + 1;
 307}
 308
 309/* U/Q Channel framing error */
 310static void spdif_irq_uq_err(struct fsl_spdif_priv *spdif_priv)
 311{
 312	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 313	struct regmap *regmap = spdif_priv->regmap;
 314	struct platform_device *pdev = spdif_priv->pdev;
 315	u32 val;
 316
 317	dev_dbg(&pdev->dev, "isr: U/Q Channel framing error\n");
 318
 319	/* Read U/Q data to clear the irq and do buffer reset */
 320	regmap_read(regmap, REG_SPDIF_SRU, &val);
 321	regmap_read(regmap, REG_SPDIF_SRQ, &val);
 322
 323	/* Drop this U/Q buffer */
 324	ctrl->ready_buf = 0;
 325	ctrl->upos = 0;
 326	ctrl->qpos = 0;
 327}
 328
 329/* Get spdif interrupt status and clear the interrupt */
 330static u32 spdif_intr_status_clear(struct fsl_spdif_priv *spdif_priv)
 331{
 332	struct regmap *regmap = spdif_priv->regmap;
 333	u32 val, val2;
 334
 335	regmap_read(regmap, REG_SPDIF_SIS, &val);
 336	regmap_read(regmap, REG_SPDIF_SIE, &val2);
 337
 338	regmap_write(regmap, REG_SPDIF_SIC, val & val2);
 339
 340	return val;
 341}
 342
 343static irqreturn_t spdif_isr(int irq, void *devid)
 344{
 345	struct fsl_spdif_priv *spdif_priv = (struct fsl_spdif_priv *)devid;
 346	struct platform_device *pdev = spdif_priv->pdev;
 347	u32 sis;
 348
 349	sis = spdif_intr_status_clear(spdif_priv);
 350
 351	if (sis & INT_DPLL_LOCKED)
 352		spdif_irq_dpll_lock(spdif_priv);
 353
 354	if (sis & INT_TXFIFO_UNOV)
 355		dev_dbg(&pdev->dev, "isr: Tx FIFO under/overrun\n");
 356
 357	if (sis & INT_TXFIFO_RESYNC)
 358		dev_dbg(&pdev->dev, "isr: Tx FIFO resync\n");
 359
 360	if (sis & INT_CNEW)
 361		dev_dbg(&pdev->dev, "isr: cstatus new\n");
 362
 363	if (sis & INT_VAL_NOGOOD)
 364		dev_dbg(&pdev->dev, "isr: validity flag no good\n");
 365
 366	if (sis & INT_SYM_ERR)
 367		spdif_irq_sym_error(spdif_priv);
 368
 369	if (sis & INT_BIT_ERR)
 370		dev_dbg(&pdev->dev, "isr: receiver found parity bit error\n");
 371
 372	if (sis & INT_URX_FUL)
 373		spdif_irq_uqrx_full(spdif_priv, 'U');
 374
 375	if (sis & INT_URX_OV)
 376		dev_dbg(&pdev->dev, "isr: U Channel receive register overrun\n");
 377
 378	if (sis & INT_QRX_FUL)
 379		spdif_irq_uqrx_full(spdif_priv, 'Q');
 380
 381	if (sis & INT_QRX_OV)
 382		dev_dbg(&pdev->dev, "isr: Q Channel receive register overrun\n");
 383
 384	if (sis & INT_UQ_SYNC)
 385		spdif_irq_uq_sync(spdif_priv);
 386
 387	if (sis & INT_UQ_ERR)
 388		spdif_irq_uq_err(spdif_priv);
 389
 390	if (sis & INT_RXFIFO_UNOV)
 391		dev_dbg(&pdev->dev, "isr: Rx FIFO under/overrun\n");
 392
 393	if (sis & INT_RXFIFO_RESYNC)
 394		dev_dbg(&pdev->dev, "isr: Rx FIFO resync\n");
 395
 396	if (sis & INT_LOSS_LOCK)
 397		spdif_irq_dpll_lock(spdif_priv);
 398
 399	/* FIXME: Write Tx FIFO to clear TxEm */
 400	if (sis & INT_TX_EM)
 401		dev_dbg(&pdev->dev, "isr: Tx FIFO empty\n");
 402
 403	/* FIXME: Read Rx FIFO to clear RxFIFOFul */
 404	if (sis & INT_RXFIFO_FUL)
 405		dev_dbg(&pdev->dev, "isr: Rx FIFO full\n");
 406
 407	return IRQ_HANDLED;
 408}
 409
 410static int spdif_softreset(struct fsl_spdif_priv *spdif_priv)
 411{
 412	struct regmap *regmap = spdif_priv->regmap;
 413	u32 val, cycle = 1000;
 414
 415	regcache_cache_bypass(regmap, true);
 416
 417	regmap_write(regmap, REG_SPDIF_SCR, SCR_SOFT_RESET);
 418
 419	/*
 420	 * RESET bit would be cleared after finishing its reset procedure,
 421	 * which typically lasts 8 cycles. 1000 cycles will keep it safe.
 422	 */
 423	do {
 424		regmap_read(regmap, REG_SPDIF_SCR, &val);
 425	} while ((val & SCR_SOFT_RESET) && cycle--);
 426
 427	regcache_cache_bypass(regmap, false);
 428	regcache_mark_dirty(regmap);
 429	regcache_sync(regmap);
 430
 431	if (cycle)
 432		return 0;
 433	else
 434		return -EBUSY;
 435}
 436
 437static void spdif_set_cstatus(struct spdif_mixer_control *ctrl,
 438				u8 mask, u8 cstatus)
 439{
 440	ctrl->ch_status[3] &= ~mask;
 441	ctrl->ch_status[3] |= cstatus & mask;
 442}
 443
 444static void spdif_write_channel_status(struct fsl_spdif_priv *spdif_priv)
 445{
 446	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 447	struct regmap *regmap = spdif_priv->regmap;
 448	struct platform_device *pdev = spdif_priv->pdev;
 449	u32 ch_status;
 450
 451	ch_status = (bitrev8(ctrl->ch_status[0]) << 16) |
 452		    (bitrev8(ctrl->ch_status[1]) << 8) |
 453		    bitrev8(ctrl->ch_status[2]);
 454	regmap_write(regmap, REG_SPDIF_STCSCH, ch_status);
 455
 456	dev_dbg(&pdev->dev, "STCSCH: 0x%06x\n", ch_status);
 457
 458	ch_status = bitrev8(ctrl->ch_status[3]) << 16;
 459	regmap_write(regmap, REG_SPDIF_STCSCL, ch_status);
 460
 461	dev_dbg(&pdev->dev, "STCSCL: 0x%06x\n", ch_status);
 462
 463	if (spdif_priv->soc->cchannel_192b) {
 464		ch_status = (bitrev8(ctrl->ch_status[0]) << 24) |
 465			    (bitrev8(ctrl->ch_status[1]) << 16) |
 466			    (bitrev8(ctrl->ch_status[2]) << 8) |
 467			    bitrev8(ctrl->ch_status[3]);
 468
 469		regmap_update_bits(regmap, REG_SPDIF_SCR, 0x1000000, 0x1000000);
 470
 471		/*
 472		 * The first 32bit should be in REG_SPDIF_STCCA_31_0 register,
 473		 * but here we need to set REG_SPDIF_STCCA_191_160 on 8ULP
 474		 * then can get correct result with HDMI analyzer capture.
 475		 * There is a hardware bug here.
 476		 */
 477		regmap_write(regmap, REG_SPDIF_STCCA_191_160, ch_status);
 478	}
 479}
 480
 481/* Set SPDIF PhaseConfig register for rx clock */
 482static int spdif_set_rx_clksrc(struct fsl_spdif_priv *spdif_priv,
 483				enum spdif_gainsel gainsel, int dpll_locked)
 484{
 485	struct regmap *regmap = spdif_priv->regmap;
 486	u8 clksrc = spdif_priv->rxclk_src;
 487
 488	if (clksrc >= SRPC_CLKSRC_MAX || gainsel >= GAINSEL_MULTI_MAX)
 489		return -EINVAL;
 490
 491	regmap_update_bits(regmap, REG_SPDIF_SRPC,
 492			SRPC_CLKSRC_SEL_MASK | SRPC_GAINSEL_MASK,
 493			SRPC_CLKSRC_SEL_SET(clksrc) | SRPC_GAINSEL_SET(gainsel));
 494
 495	return 0;
 496}
 497
 498static int fsl_spdif_probe_txclk(struct fsl_spdif_priv *spdif_priv, enum spdif_txrate index);
 499
 500static int spdif_set_sample_rate(struct snd_pcm_substream *substream,
 501				int sample_rate)
 502{
 503	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
 504	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0));
 505	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 506	struct regmap *regmap = spdif_priv->regmap;
 507	struct platform_device *pdev = spdif_priv->pdev;
 508	unsigned long csfs = 0;
 509	u32 stc, mask, rate;
 510	u16 sysclk_df;
 511	u8 clk, txclk_df;
 512	int ret;
 513
 514	switch (sample_rate) {
 515	case 22050:
 516		rate = SPDIF_TXRATE_22050;
 517		csfs = IEC958_AES3_CON_FS_22050;
 518		break;
 519	case 32000:
 520		rate = SPDIF_TXRATE_32000;
 521		csfs = IEC958_AES3_CON_FS_32000;
 522		break;
 523	case 44100:
 524		rate = SPDIF_TXRATE_44100;
 525		csfs = IEC958_AES3_CON_FS_44100;
 526		break;
 527	case 48000:
 528		rate = SPDIF_TXRATE_48000;
 529		csfs = IEC958_AES3_CON_FS_48000;
 530		break;
 531	case 88200:
 532		rate = SPDIF_TXRATE_88200;
 533		csfs = IEC958_AES3_CON_FS_88200;
 534		break;
 535	case 96000:
 536		rate = SPDIF_TXRATE_96000;
 537		csfs = IEC958_AES3_CON_FS_96000;
 538		break;
 539	case 176400:
 540		rate = SPDIF_TXRATE_176400;
 541		csfs = IEC958_AES3_CON_FS_176400;
 542		break;
 543	case 192000:
 544		rate = SPDIF_TXRATE_192000;
 545		csfs = IEC958_AES3_CON_FS_192000;
 546		break;
 547	default:
 548		dev_err(&pdev->dev, "unsupported sample rate %d\n", sample_rate);
 549		return -EINVAL;
 550	}
 551
 552	ret = fsl_spdif_probe_txclk(spdif_priv, rate);
 553	if (ret)
 554		return ret;
 555
 556	clk = spdif_priv->txclk_src[rate];
 557	if (clk >= STC_TXCLK_SRC_MAX) {
 558		dev_err(&pdev->dev, "tx clock source is out of range\n");
 559		return -EINVAL;
 560	}
 561
 562	txclk_df = spdif_priv->txclk_df[rate];
 563	if (txclk_df == 0) {
 564		dev_err(&pdev->dev, "the txclk_df can't be zero\n");
 565		return -EINVAL;
 566	}
 567
 568	sysclk_df = spdif_priv->sysclk_df[rate];
 569
 570	if (!fsl_spdif_can_set_clk_rate(spdif_priv, clk))
 571		goto clk_set_bypass;
 572
 573	/* The S/PDIF block needs a clock of 64 * fs * txclk_df */
 574	ret = clk_set_rate(spdif_priv->txclk[clk],
 575			   64 * sample_rate * txclk_df);
 576	if (ret) {
 577		dev_err(&pdev->dev, "failed to set tx clock rate\n");
 578		return ret;
 579	}
 580
 581clk_set_bypass:
 582	dev_dbg(&pdev->dev, "expected clock rate = %d\n",
 583			(64 * sample_rate * txclk_df * sysclk_df));
 584	dev_dbg(&pdev->dev, "actual clock rate = %ld\n",
 585			clk_get_rate(spdif_priv->txclk[clk]));
 586
 587	/* set fs field in consumer channel status */
 588	spdif_set_cstatus(ctrl, IEC958_AES3_CON_FS, csfs);
 589
 590	/* select clock source and divisor */
 591	stc = STC_TXCLK_ALL_EN | STC_TXCLK_SRC_SET(clk) |
 592	      STC_TXCLK_DF(txclk_df) | STC_SYSCLK_DF(sysclk_df);
 593	mask = STC_TXCLK_ALL_EN_MASK | STC_TXCLK_SRC_MASK |
 594	       STC_TXCLK_DF_MASK | STC_SYSCLK_DF_MASK;
 595	regmap_update_bits(regmap, REG_SPDIF_STC, mask, stc);
 596
 597	dev_dbg(&pdev->dev, "set sample rate to %dHz for %dHz playback\n",
 598			spdif_priv->txrate[rate], sample_rate);
 599
 600	return 0;
 601}
 602
 603static int fsl_spdif_startup(struct snd_pcm_substream *substream,
 604			     struct snd_soc_dai *cpu_dai)
 605{
 606	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
 607	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0));
 608	struct platform_device *pdev = spdif_priv->pdev;
 609	struct regmap *regmap = spdif_priv->regmap;
 610	u32 scr, mask;
 611	int ret;
 612
 613	/* Reset module and interrupts only for first initialization */
 614	if (!snd_soc_dai_active(cpu_dai)) {
 615		ret = spdif_softreset(spdif_priv);
 616		if (ret) {
 617			dev_err(&pdev->dev, "failed to soft reset\n");
 618			return ret;
 619		}
 620
 621		/* Disable all the interrupts */
 622		regmap_update_bits(regmap, REG_SPDIF_SIE, 0xffffff, 0);
 623	}
 624
 625	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
 626		scr = SCR_TXFIFO_AUTOSYNC | SCR_TXFIFO_CTRL_NORMAL |
 627			SCR_TXSEL_NORMAL | SCR_USRC_SEL_CHIP |
 628			SCR_TXFIFO_FSEL_IF8;
 629		mask = SCR_TXFIFO_AUTOSYNC_MASK | SCR_TXFIFO_CTRL_MASK |
 630			SCR_TXSEL_MASK | SCR_USRC_SEL_MASK |
 631			SCR_TXFIFO_FSEL_MASK;
 632	} else {
 633		scr = SCR_RXFIFO_FSEL_IF8 | SCR_RXFIFO_AUTOSYNC;
 634		mask = SCR_RXFIFO_FSEL_MASK | SCR_RXFIFO_AUTOSYNC_MASK|
 635			SCR_RXFIFO_CTL_MASK | SCR_RXFIFO_OFF_MASK;
 636	}
 637	regmap_update_bits(regmap, REG_SPDIF_SCR, mask, scr);
 638
 639	/* Power up SPDIF module */
 640	regmap_update_bits(regmap, REG_SPDIF_SCR, SCR_LOW_POWER, 0);
 641
 642	return 0;
 643}
 644
 645static void fsl_spdif_shutdown(struct snd_pcm_substream *substream,
 646				struct snd_soc_dai *cpu_dai)
 647{
 648	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
 649	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0));
 650	struct regmap *regmap = spdif_priv->regmap;
 651	u32 scr, mask;
 652
 653	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
 654		scr = 0;
 655		mask = SCR_TXFIFO_AUTOSYNC_MASK | SCR_TXFIFO_CTRL_MASK |
 656			SCR_TXSEL_MASK | SCR_USRC_SEL_MASK |
 657			SCR_TXFIFO_FSEL_MASK;
 658		/* Disable TX clock */
 659		regmap_update_bits(regmap, REG_SPDIF_STC, STC_TXCLK_ALL_EN_MASK, 0);
 660	} else {
 661		scr = SCR_RXFIFO_OFF | SCR_RXFIFO_CTL_ZERO;
 662		mask = SCR_RXFIFO_FSEL_MASK | SCR_RXFIFO_AUTOSYNC_MASK|
 663			SCR_RXFIFO_CTL_MASK | SCR_RXFIFO_OFF_MASK;
 664	}
 665	regmap_update_bits(regmap, REG_SPDIF_SCR, mask, scr);
 666
 667	/* Power down SPDIF module only if tx&rx are both inactive */
 668	if (!snd_soc_dai_active(cpu_dai)) {
 669		spdif_intr_status_clear(spdif_priv);
 670		regmap_update_bits(regmap, REG_SPDIF_SCR,
 671				SCR_LOW_POWER, SCR_LOW_POWER);
 672	}
 673}
 674
 675static int spdif_reparent_rootclk(struct fsl_spdif_priv *spdif_priv, unsigned int sample_rate)
 676{
 677	struct platform_device *pdev = spdif_priv->pdev;
 678	struct clk *clk;
 679	int ret;
 680
 681	/* Reparent clock if required condition is true */
 682	if (!fsl_spdif_can_set_clk_rate(spdif_priv, STC_TXCLK_SPDIF_ROOT))
 683		return 0;
 684
 685	/* Get root clock */
 686	clk = spdif_priv->txclk[STC_TXCLK_SPDIF_ROOT];
 687
 688	/* Disable clock first, for it was enabled by pm_runtime */
 689	clk_disable_unprepare(clk);
 690	fsl_asoc_reparent_pll_clocks(&pdev->dev, clk, spdif_priv->pll8k_clk,
 691				     spdif_priv->pll11k_clk, sample_rate);
 692	ret = clk_prepare_enable(clk);
 693	if (ret)
 694		return ret;
 695
 696	return 0;
 697}
 698static int fsl_spdif_hw_params(struct snd_pcm_substream *substream,
 699				struct snd_pcm_hw_params *params,
 700				struct snd_soc_dai *dai)
 701{
 702	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
 703	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0));
 704	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 705	struct platform_device *pdev = spdif_priv->pdev;
 706	u32 sample_rate = params_rate(params);
 707	int ret = 0;
 708
 709	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
 710		ret = spdif_reparent_rootclk(spdif_priv, sample_rate);
 711		if (ret) {
 712			dev_err(&pdev->dev, "%s: reparent root clk failed: %d\n",
 713				__func__, sample_rate);
 714			return ret;
 715		}
 716
 717		ret  = spdif_set_sample_rate(substream, sample_rate);
 718		if (ret) {
 719			dev_err(&pdev->dev, "%s: set sample rate failed: %d\n",
 720					__func__, sample_rate);
 721			return ret;
 722		}
 723		spdif_set_cstatus(ctrl, IEC958_AES3_CON_CLOCK,
 724				  IEC958_AES3_CON_CLOCK_1000PPM);
 725		spdif_write_channel_status(spdif_priv);
 726	} else {
 727		/* Setup rx clock source */
 728		ret = spdif_set_rx_clksrc(spdif_priv, SPDIF_DEFAULT_GAINSEL, 1);
 729	}
 730
 731	return ret;
 732}
 733
 734static int fsl_spdif_trigger(struct snd_pcm_substream *substream,
 735				int cmd, struct snd_soc_dai *dai)
 736{
 737	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
 738	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0));
 739	struct regmap *regmap = spdif_priv->regmap;
 740	bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK;
 741	u32 intr = SIE_INTR_FOR(tx);
 742	u32 dmaen = SCR_DMA_xX_EN(tx);
 743
 744	switch (cmd) {
 745	case SNDRV_PCM_TRIGGER_START:
 746	case SNDRV_PCM_TRIGGER_RESUME:
 747	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
 748		regmap_update_bits(regmap, REG_SPDIF_SIE, intr, intr);
 749		regmap_update_bits(regmap, REG_SPDIF_SCR, dmaen, dmaen);
 750		break;
 751	case SNDRV_PCM_TRIGGER_STOP:
 752	case SNDRV_PCM_TRIGGER_SUSPEND:
 753	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
 754		regmap_update_bits(regmap, REG_SPDIF_SCR, dmaen, 0);
 755		regmap_update_bits(regmap, REG_SPDIF_SIE, intr, 0);
 756		regmap_write(regmap, REG_SPDIF_STL, 0x0);
 757		regmap_write(regmap, REG_SPDIF_STR, 0x0);
 758		break;
 759	default:
 760		return -EINVAL;
 761	}
 762
 763	return 0;
 764}
 765
 
 
 
 
 
 
 
 
 766/*
 767 * FSL SPDIF IEC958 controller(mixer) functions
 768 *
 769 *	Channel status get/put control
 770 *	User bit value get/put control
 771 *	Valid bit value get control
 772 *	DPLL lock status get control
 773 *	User bit sync mode selection control
 774 */
 775
 776static int fsl_spdif_info(struct snd_kcontrol *kcontrol,
 777				struct snd_ctl_elem_info *uinfo)
 778{
 779	uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
 780	uinfo->count = 1;
 781
 782	return 0;
 783}
 784
 785static int fsl_spdif_pb_get(struct snd_kcontrol *kcontrol,
 786				struct snd_ctl_elem_value *uvalue)
 787{
 788	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 789	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 790	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 791
 792	uvalue->value.iec958.status[0] = ctrl->ch_status[0];
 793	uvalue->value.iec958.status[1] = ctrl->ch_status[1];
 794	uvalue->value.iec958.status[2] = ctrl->ch_status[2];
 795	uvalue->value.iec958.status[3] = ctrl->ch_status[3];
 796
 797	return 0;
 798}
 799
 800static int fsl_spdif_pb_put(struct snd_kcontrol *kcontrol,
 801				struct snd_ctl_elem_value *uvalue)
 802{
 803	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 804	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 805	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 806
 807	ctrl->ch_status[0] = uvalue->value.iec958.status[0];
 808	ctrl->ch_status[1] = uvalue->value.iec958.status[1];
 809	ctrl->ch_status[2] = uvalue->value.iec958.status[2];
 810	ctrl->ch_status[3] = uvalue->value.iec958.status[3];
 811
 812	spdif_write_channel_status(spdif_priv);
 813
 814	return 0;
 815}
 816
 817/* Get channel status from SPDIF_RX_CCHAN register */
 818static int fsl_spdif_capture_get(struct snd_kcontrol *kcontrol,
 819				struct snd_ctl_elem_value *ucontrol)
 820{
 821	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 822	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 823	struct regmap *regmap = spdif_priv->regmap;
 824	u32 cstatus, val;
 825
 826	regmap_read(regmap, REG_SPDIF_SIS, &val);
 827	if (!(val & INT_CNEW))
 828		return -EAGAIN;
 829
 830	regmap_read(regmap, REG_SPDIF_SRCSH, &cstatus);
 831	ucontrol->value.iec958.status[0] = (cstatus >> 16) & 0xFF;
 832	ucontrol->value.iec958.status[1] = (cstatus >> 8) & 0xFF;
 833	ucontrol->value.iec958.status[2] = cstatus & 0xFF;
 834
 835	regmap_read(regmap, REG_SPDIF_SRCSL, &cstatus);
 836	ucontrol->value.iec958.status[3] = (cstatus >> 16) & 0xFF;
 837	ucontrol->value.iec958.status[4] = (cstatus >> 8) & 0xFF;
 838	ucontrol->value.iec958.status[5] = cstatus & 0xFF;
 839
 840	/* Clear intr */
 841	regmap_write(regmap, REG_SPDIF_SIC, INT_CNEW);
 842
 843	return 0;
 844}
 845
 846/*
 847 * Get User bits (subcode) from chip value which readed out
 848 * in UChannel register.
 849 */
 850static int fsl_spdif_subcode_get(struct snd_kcontrol *kcontrol,
 851				struct snd_ctl_elem_value *ucontrol)
 852{
 853	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 854	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 855	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 856	unsigned long flags;
 857	int ret = -EAGAIN;
 858
 859	spin_lock_irqsave(&ctrl->ctl_lock, flags);
 860	if (ctrl->ready_buf) {
 861		int idx = (ctrl->ready_buf - 1) * SPDIF_UBITS_SIZE;
 862		memcpy(&ucontrol->value.iec958.subcode[0],
 863				&ctrl->subcode[idx], SPDIF_UBITS_SIZE);
 864		ret = 0;
 865	}
 866	spin_unlock_irqrestore(&ctrl->ctl_lock, flags);
 867
 868	return ret;
 869}
 870
 871/* Q-subcode information. The byte size is SPDIF_UBITS_SIZE/8 */
 872static int fsl_spdif_qinfo(struct snd_kcontrol *kcontrol,
 873				struct snd_ctl_elem_info *uinfo)
 874{
 875	uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
 876	uinfo->count = SPDIF_QSUB_SIZE;
 877
 878	return 0;
 879}
 880
 881/* Get Q subcode from chip value which readed out in QChannel register */
 882static int fsl_spdif_qget(struct snd_kcontrol *kcontrol,
 883				struct snd_ctl_elem_value *ucontrol)
 884{
 885	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 886	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 887	struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
 888	unsigned long flags;
 889	int ret = -EAGAIN;
 890
 891	spin_lock_irqsave(&ctrl->ctl_lock, flags);
 892	if (ctrl->ready_buf) {
 893		int idx = (ctrl->ready_buf - 1) * SPDIF_QSUB_SIZE;
 894		memcpy(&ucontrol->value.bytes.data[0],
 895				&ctrl->qsub[idx], SPDIF_QSUB_SIZE);
 896		ret = 0;
 897	}
 898	spin_unlock_irqrestore(&ctrl->ctl_lock, flags);
 899
 900	return ret;
 901}
 902
 903/* Get valid good bit from interrupt status register */
 904static int fsl_spdif_rx_vbit_get(struct snd_kcontrol *kcontrol,
 905				 struct snd_ctl_elem_value *ucontrol)
 906{
 907	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 908	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 909	struct regmap *regmap = spdif_priv->regmap;
 910	u32 val;
 911
 912	regmap_read(regmap, REG_SPDIF_SIS, &val);
 913	ucontrol->value.integer.value[0] = (val & INT_VAL_NOGOOD) != 0;
 914	regmap_write(regmap, REG_SPDIF_SIC, INT_VAL_NOGOOD);
 915
 916	return 0;
 917}
 918
 919static int fsl_spdif_tx_vbit_get(struct snd_kcontrol *kcontrol,
 920				 struct snd_ctl_elem_value *ucontrol)
 921{
 922	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 923	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 924	struct regmap *regmap = spdif_priv->regmap;
 925	u32 val;
 926
 927	regmap_read(regmap, REG_SPDIF_SCR, &val);
 928	val = (val & SCR_VAL_MASK) >> SCR_VAL_OFFSET;
 929	val = 1 - val;
 930	ucontrol->value.integer.value[0] = val;
 931
 932	return 0;
 933}
 934
 935static int fsl_spdif_tx_vbit_put(struct snd_kcontrol *kcontrol,
 936				 struct snd_ctl_elem_value *ucontrol)
 937{
 938	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 939	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 940	struct regmap *regmap = spdif_priv->regmap;
 941	u32 val = (1 - ucontrol->value.integer.value[0]) << SCR_VAL_OFFSET;
 942
 943	regmap_update_bits(regmap, REG_SPDIF_SCR, SCR_VAL_MASK, val);
 944
 945	return 0;
 946}
 947
 948static int fsl_spdif_rx_rcm_get(struct snd_kcontrol *kcontrol,
 949				struct snd_ctl_elem_value *ucontrol)
 950{
 951	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 952	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 953	struct regmap *regmap = spdif_priv->regmap;
 954	u32 val;
 955
 956	regmap_read(regmap, REG_SPDIF_SCR, &val);
 957	val = (val & SCR_RAW_CAPTURE_MODE) ? 1 : 0;
 958	ucontrol->value.integer.value[0] = val;
 959
 960	return 0;
 961}
 962
 963static int fsl_spdif_rx_rcm_put(struct snd_kcontrol *kcontrol,
 964				struct snd_ctl_elem_value *ucontrol)
 965{
 966	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
 967	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
 968	struct regmap *regmap = spdif_priv->regmap;
 969	u32 val = (ucontrol->value.integer.value[0] ? SCR_RAW_CAPTURE_MODE : 0);
 970
 971	if (val)
 972		cpu_dai->driver->capture.formats |= SNDRV_PCM_FMTBIT_S32_LE;
 973	else
 974		cpu_dai->driver->capture.formats &= ~SNDRV_PCM_FMTBIT_S32_LE;
 975
 976	regmap_update_bits(regmap, REG_SPDIF_SCR, SCR_RAW_CAPTURE_MODE, val);
 977
 978	return 0;
 979}
 980
 981static int fsl_spdif_bypass_get(struct snd_kcontrol *kcontrol,
 982				struct snd_ctl_elem_value *ucontrol)
 983{
 984	struct snd_soc_dai *dai = snd_kcontrol_chip(kcontrol);
 985	struct fsl_spdif_priv *priv = snd_soc_dai_get_drvdata(dai);
 986
 987	ucontrol->value.integer.value[0] = priv->bypass ? 1 : 0;
 988
 989	return 0;
 990}
 991
 992static int fsl_spdif_bypass_put(struct snd_kcontrol *kcontrol,
 993				struct snd_ctl_elem_value *ucontrol)
 994{
 995	struct snd_soc_dai *dai = snd_kcontrol_chip(kcontrol);
 996	struct fsl_spdif_priv *priv = snd_soc_dai_get_drvdata(dai);
 997	struct snd_soc_card *card = dai->component->card;
 998	bool set = (ucontrol->value.integer.value[0] != 0);
 999	struct regmap *regmap = priv->regmap;
1000	struct snd_soc_pcm_runtime *rtd;
1001	u32 scr, mask;
1002	int stream;
1003
1004	rtd = snd_soc_get_pcm_runtime(card, card->dai_link);
1005
1006	if (priv->bypass == set)
1007		return 0; /* nothing to do */
1008
1009	if (snd_soc_dai_active(dai)) {
1010		dev_err(dai->dev, "Cannot change BYPASS mode while stream is running.\n");
1011		return -EBUSY;
1012	}
1013
1014	pm_runtime_get_sync(dai->dev);
1015
1016	if (set) {
1017		/* Disable interrupts */
1018		regmap_update_bits(regmap, REG_SPDIF_SIE, 0xffffff, 0);
1019
1020		/* Configure BYPASS mode */
1021		scr = SCR_TXSEL_RX | SCR_RXFIFO_OFF;
1022		mask = SCR_RXFIFO_FSEL_MASK | SCR_RXFIFO_AUTOSYNC_MASK |
1023			SCR_RXFIFO_CTL_MASK | SCR_RXFIFO_OFF_MASK | SCR_TXSEL_MASK;
1024		/* Power up SPDIF module */
1025		mask |= SCR_LOW_POWER;
1026	} else {
1027		/* Power down SPDIF module, disable TX */
1028		scr = SCR_LOW_POWER | SCR_TXSEL_OFF;
1029		mask = SCR_LOW_POWER | SCR_TXSEL_MASK;
1030	}
1031
1032	regmap_update_bits(regmap, REG_SPDIF_SCR, mask, scr);
1033
1034	/* Disable playback & capture if BYPASS mode is enabled, enable otherwise */
1035	for_each_pcm_streams(stream)
1036		rtd->pcm->streams[stream].substream_count = (set ? 0 : 1);
1037
1038	priv->bypass = set;
1039	pm_runtime_put_sync(dai->dev);
1040
1041	return 0;
1042}
1043
1044/* DPLL lock information */
1045static int fsl_spdif_rxrate_info(struct snd_kcontrol *kcontrol,
1046				struct snd_ctl_elem_info *uinfo)
1047{
1048	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1049	uinfo->count = 1;
1050	uinfo->value.integer.min = 16000;
1051	uinfo->value.integer.max = 192000;
1052
1053	return 0;
1054}
1055
1056static u32 gainsel_multi[GAINSEL_MULTI_MAX] = {
1057	24, 16, 12, 8, 6, 4, 3,
1058};
1059
1060/* Get RX data clock rate given the SPDIF bus_clk */
1061static int spdif_get_rxclk_rate(struct fsl_spdif_priv *spdif_priv,
1062				enum spdif_gainsel gainsel)
1063{
1064	struct regmap *regmap = spdif_priv->regmap;
1065	struct platform_device *pdev = spdif_priv->pdev;
1066	u64 tmpval64, busclk_freq = 0;
1067	u32 freqmeas, phaseconf;
1068	u8 clksrc;
1069
1070	regmap_read(regmap, REG_SPDIF_SRFM, &freqmeas);
1071	regmap_read(regmap, REG_SPDIF_SRPC, &phaseconf);
1072
1073	clksrc = (phaseconf >> SRPC_CLKSRC_SEL_OFFSET) & 0xf;
1074
1075	/* Get bus clock from system */
1076	if (srpc_dpll_locked[clksrc] && (phaseconf & SRPC_DPLL_LOCKED))
1077		busclk_freq = clk_get_rate(spdif_priv->sysclk);
1078
1079	/* FreqMeas_CLK = (BUS_CLK * FreqMeas) / 2 ^ 10 / GAINSEL / 128 */
1080	tmpval64 = (u64) busclk_freq * freqmeas;
1081	do_div(tmpval64, gainsel_multi[gainsel] * 1024);
1082	do_div(tmpval64, 128 * 1024);
1083
1084	dev_dbg(&pdev->dev, "FreqMeas: %d\n", freqmeas);
1085	dev_dbg(&pdev->dev, "BusclkFreq: %lld\n", busclk_freq);
1086	dev_dbg(&pdev->dev, "RxRate: %lld\n", tmpval64);
1087
1088	return (int)tmpval64;
1089}
1090
1091/*
1092 * Get DPLL lock or not info from stable interrupt status register.
1093 * User application must use this control to get locked,
1094 * then can do next PCM operation
1095 */
1096static int fsl_spdif_rxrate_get(struct snd_kcontrol *kcontrol,
1097				struct snd_ctl_elem_value *ucontrol)
1098{
1099	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
1100	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
1101	int rate = 0;
1102
1103	if (spdif_priv->dpll_locked)
1104		rate = spdif_get_rxclk_rate(spdif_priv, SPDIF_DEFAULT_GAINSEL);
1105
1106	ucontrol->value.integer.value[0] = rate;
1107
1108	return 0;
1109}
1110
1111/*
1112 * User bit sync mode:
1113 * 1 CD User channel subcode
1114 * 0 Non-CD data
1115 */
1116static int fsl_spdif_usync_get(struct snd_kcontrol *kcontrol,
1117			       struct snd_ctl_elem_value *ucontrol)
1118{
1119	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
1120	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
1121	struct regmap *regmap = spdif_priv->regmap;
1122	u32 val;
1123
1124	regmap_read(regmap, REG_SPDIF_SRCD, &val);
1125	ucontrol->value.integer.value[0] = (val & SRCD_CD_USER) != 0;
1126
1127	return 0;
1128}
1129
1130/*
1131 * User bit sync mode:
1132 * 1 CD User channel subcode
1133 * 0 Non-CD data
1134 */
1135static int fsl_spdif_usync_put(struct snd_kcontrol *kcontrol,
1136				struct snd_ctl_elem_value *ucontrol)
1137{
1138	struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
1139	struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
1140	struct regmap *regmap = spdif_priv->regmap;
1141	u32 val = ucontrol->value.integer.value[0] << SRCD_CD_USER_OFFSET;
1142
1143	regmap_update_bits(regmap, REG_SPDIF_SRCD, SRCD_CD_USER, val);
1144
1145	return 0;
1146}
1147
1148/* FSL SPDIF IEC958 controller defines */
1149static struct snd_kcontrol_new fsl_spdif_ctrls[] = {
1150	/* Status cchanel controller */
1151	{
1152		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1153		.name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
1154		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1155			SNDRV_CTL_ELEM_ACCESS_WRITE |
1156			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1157		.info = fsl_spdif_info,
1158		.get = fsl_spdif_pb_get,
1159		.put = fsl_spdif_pb_put,
1160	},
1161	{
1162		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1163		.name = SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
1164		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1165			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1166		.info = fsl_spdif_info,
1167		.get = fsl_spdif_capture_get,
1168	},
1169	/* User bits controller */
1170	{
1171		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1172		.name = "IEC958 Subcode Capture Default",
1173		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1174			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1175		.info = fsl_spdif_info,
1176		.get = fsl_spdif_subcode_get,
1177	},
1178	{
1179		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1180		.name = "IEC958 Q-subcode Capture Default",
1181		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1182			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1183		.info = fsl_spdif_qinfo,
1184		.get = fsl_spdif_qget,
1185	},
1186	/* Valid bit error controller */
1187	{
1188		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1189		.name = "IEC958 RX V-Bit Errors",
1190		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1191			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1192		.info = snd_ctl_boolean_mono_info,
1193		.get = fsl_spdif_rx_vbit_get,
1194	},
1195	{
1196		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1197		.name = "IEC958 TX V-Bit",
1198		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1199			SNDRV_CTL_ELEM_ACCESS_WRITE |
1200			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1201		.info = snd_ctl_boolean_mono_info,
1202		.get = fsl_spdif_tx_vbit_get,
1203		.put = fsl_spdif_tx_vbit_put,
1204	},
1205	/* DPLL lock info get controller */
1206	{
1207		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1208		.name = RX_SAMPLE_RATE_KCONTROL,
1209		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1210			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1211		.info = fsl_spdif_rxrate_info,
1212		.get = fsl_spdif_rxrate_get,
1213	},
1214	/* RX bypass controller */
1215	{
1216		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1217		.name = "Bypass Mode",
1218		.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
1219		.info = snd_ctl_boolean_mono_info,
1220		.get = fsl_spdif_bypass_get,
1221		.put = fsl_spdif_bypass_put,
1222	},
1223	/* User bit sync mode set/get controller */
1224	{
1225		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1226		.name = "IEC958 USyncMode CDText",
1227		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1228			SNDRV_CTL_ELEM_ACCESS_WRITE |
1229			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1230		.info = snd_ctl_boolean_mono_info,
1231		.get = fsl_spdif_usync_get,
1232		.put = fsl_spdif_usync_put,
1233	},
1234};
1235
1236static struct snd_kcontrol_new fsl_spdif_ctrls_rcm[] = {
1237	{
1238		.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1239		.name = "IEC958 Raw Capture Mode",
1240		.access = SNDRV_CTL_ELEM_ACCESS_READ |
1241			SNDRV_CTL_ELEM_ACCESS_WRITE |
1242			SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1243		.info = snd_ctl_boolean_mono_info,
1244		.get = fsl_spdif_rx_rcm_get,
1245		.put = fsl_spdif_rx_rcm_put,
1246	},
1247};
1248
1249static int fsl_spdif_dai_probe(struct snd_soc_dai *dai)
1250{
1251	struct fsl_spdif_priv *spdif_private = snd_soc_dai_get_drvdata(dai);
1252
1253	snd_soc_dai_init_dma_data(dai, &spdif_private->dma_params_tx,
1254				  &spdif_private->dma_params_rx);
1255
1256	snd_soc_add_dai_controls(dai, fsl_spdif_ctrls, ARRAY_SIZE(fsl_spdif_ctrls));
1257
1258	if (spdif_private->soc->raw_capture_mode)
1259		snd_soc_add_dai_controls(dai, fsl_spdif_ctrls_rcm,
1260					 ARRAY_SIZE(fsl_spdif_ctrls_rcm));
1261
1262	spdif_private->snd_card = dai->component->card->snd_card;
1263	spdif_private->rxrate_kcontrol = snd_soc_card_get_kcontrol(dai->component->card,
1264								   RX_SAMPLE_RATE_KCONTROL);
1265	if (!spdif_private->rxrate_kcontrol)
1266		dev_err(&spdif_private->pdev->dev, "failed to get %s kcontrol\n",
1267			RX_SAMPLE_RATE_KCONTROL);
1268
1269	/*Clear the val bit for Tx*/
1270	regmap_update_bits(spdif_private->regmap, REG_SPDIF_SCR,
1271			   SCR_VAL_MASK, SCR_VAL_CLEAR);
1272
1273	return 0;
1274}
1275
1276static const struct snd_soc_dai_ops fsl_spdif_dai_ops = {
1277	.probe		= fsl_spdif_dai_probe,
1278	.startup	= fsl_spdif_startup,
1279	.hw_params	= fsl_spdif_hw_params,
1280	.trigger	= fsl_spdif_trigger,
1281	.shutdown	= fsl_spdif_shutdown,
1282};
1283
1284static struct snd_soc_dai_driver fsl_spdif_dai = {
 
1285	.playback = {
1286		.stream_name = "CPU-Playback",
1287		.channels_min = 2,
1288		.channels_max = 2,
1289		.rates = FSL_SPDIF_RATES_PLAYBACK,
1290		.formats = FSL_SPDIF_FORMATS_PLAYBACK,
1291	},
1292	.capture = {
1293		.stream_name = "CPU-Capture",
1294		.channels_min = 2,
1295		.channels_max = 2,
1296		.rates = FSL_SPDIF_RATES_CAPTURE,
1297		.formats = FSL_SPDIF_FORMATS_CAPTURE,
1298	},
1299	.ops = &fsl_spdif_dai_ops,
1300};
1301
1302static const struct snd_soc_component_driver fsl_spdif_component = {
1303	.name			= "fsl-spdif",
1304	.legacy_dai_naming	= 1,
1305};
1306
1307/* FSL SPDIF REGMAP */
1308static const struct reg_default fsl_spdif_reg_defaults[] = {
1309	{REG_SPDIF_SCR,    0x00000400},
1310	{REG_SPDIF_SRCD,   0x00000000},
1311	{REG_SPDIF_SIE,	   0x00000000},
1312	{REG_SPDIF_STL,	   0x00000000},
1313	{REG_SPDIF_STR,	   0x00000000},
1314	{REG_SPDIF_STCSCH, 0x00000000},
1315	{REG_SPDIF_STCSCL, 0x00000000},
1316	{REG_SPDIF_STCSPH, 0x00000000},
1317	{REG_SPDIF_STCSPL, 0x00000000},
1318	{REG_SPDIF_STC,	   0x00020f00},
1319};
1320
1321static bool fsl_spdif_readable_reg(struct device *dev, unsigned int reg)
1322{
1323	switch (reg) {
1324	case REG_SPDIF_SCR:
1325	case REG_SPDIF_SRCD:
1326	case REG_SPDIF_SRPC:
1327	case REG_SPDIF_SIE:
1328	case REG_SPDIF_SIS:
1329	case REG_SPDIF_SRL:
1330	case REG_SPDIF_SRR:
1331	case REG_SPDIF_SRCSH:
1332	case REG_SPDIF_SRCSL:
1333	case REG_SPDIF_SRU:
1334	case REG_SPDIF_SRQ:
1335	case REG_SPDIF_STCSCH:
1336	case REG_SPDIF_STCSCL:
1337	case REG_SPDIF_STCSPH:
1338	case REG_SPDIF_STCSPL:
1339	case REG_SPDIF_SRFM:
1340	case REG_SPDIF_STC:
1341	case REG_SPDIF_SRCCA_31_0:
1342	case REG_SPDIF_SRCCA_63_32:
1343	case REG_SPDIF_SRCCA_95_64:
1344	case REG_SPDIF_SRCCA_127_96:
1345	case REG_SPDIF_SRCCA_159_128:
1346	case REG_SPDIF_SRCCA_191_160:
1347	case REG_SPDIF_STCCA_31_0:
1348	case REG_SPDIF_STCCA_63_32:
1349	case REG_SPDIF_STCCA_95_64:
1350	case REG_SPDIF_STCCA_127_96:
1351	case REG_SPDIF_STCCA_159_128:
1352	case REG_SPDIF_STCCA_191_160:
1353		return true;
1354	default:
1355		return false;
1356	}
1357}
1358
1359static bool fsl_spdif_volatile_reg(struct device *dev, unsigned int reg)
1360{
1361	switch (reg) {
1362	case REG_SPDIF_SRPC:
1363	case REG_SPDIF_SIS:
1364	case REG_SPDIF_SRL:
1365	case REG_SPDIF_SRR:
1366	case REG_SPDIF_SRCSH:
1367	case REG_SPDIF_SRCSL:
1368	case REG_SPDIF_SRU:
1369	case REG_SPDIF_SRQ:
1370	case REG_SPDIF_SRFM:
1371	case REG_SPDIF_SRCCA_31_0:
1372	case REG_SPDIF_SRCCA_63_32:
1373	case REG_SPDIF_SRCCA_95_64:
1374	case REG_SPDIF_SRCCA_127_96:
1375	case REG_SPDIF_SRCCA_159_128:
1376	case REG_SPDIF_SRCCA_191_160:
1377		return true;
1378	default:
1379		return false;
1380	}
1381}
1382
1383static bool fsl_spdif_writeable_reg(struct device *dev, unsigned int reg)
1384{
1385	switch (reg) {
1386	case REG_SPDIF_SCR:
1387	case REG_SPDIF_SRCD:
1388	case REG_SPDIF_SRPC:
1389	case REG_SPDIF_SIE:
1390	case REG_SPDIF_SIC:
1391	case REG_SPDIF_STL:
1392	case REG_SPDIF_STR:
1393	case REG_SPDIF_STCSCH:
1394	case REG_SPDIF_STCSCL:
1395	case REG_SPDIF_STCSPH:
1396	case REG_SPDIF_STCSPL:
1397	case REG_SPDIF_STC:
1398	case REG_SPDIF_STCCA_31_0:
1399	case REG_SPDIF_STCCA_63_32:
1400	case REG_SPDIF_STCCA_95_64:
1401	case REG_SPDIF_STCCA_127_96:
1402	case REG_SPDIF_STCCA_159_128:
1403	case REG_SPDIF_STCCA_191_160:
1404		return true;
1405	default:
1406		return false;
1407	}
1408}
1409
1410static const struct regmap_config fsl_spdif_regmap_config = {
1411	.reg_bits = 32,
1412	.reg_stride = 4,
1413	.val_bits = 32,
1414
1415	.max_register = REG_SPDIF_STCCA_191_160,
1416	.reg_defaults = fsl_spdif_reg_defaults,
1417	.num_reg_defaults = ARRAY_SIZE(fsl_spdif_reg_defaults),
1418	.readable_reg = fsl_spdif_readable_reg,
1419	.volatile_reg = fsl_spdif_volatile_reg,
1420	.writeable_reg = fsl_spdif_writeable_reg,
1421	.cache_type = REGCACHE_FLAT,
1422};
1423
1424static u32 fsl_spdif_txclk_caldiv(struct fsl_spdif_priv *spdif_priv,
1425				struct clk *clk, u64 savesub,
1426				enum spdif_txrate index, bool round)
1427{
1428	static const u32 rate[] = { 22050, 32000, 44100, 48000, 88200, 96000, 176400,
1429				    192000, };
1430	bool is_sysclk = clk_is_match(clk, spdif_priv->sysclk);
1431	u64 rate_ideal, rate_actual, sub;
1432	u32 arate;
1433	u16 sysclk_dfmin, sysclk_dfmax, sysclk_df;
1434	u8 txclk_df;
1435
1436	/* The sysclk has an extra divisor [2, 512] */
1437	sysclk_dfmin = is_sysclk ? 2 : 1;
1438	sysclk_dfmax = is_sysclk ? 512 : 1;
1439
1440	for (sysclk_df = sysclk_dfmin; sysclk_df <= sysclk_dfmax; sysclk_df++) {
1441		for (txclk_df = 1; txclk_df <= 128; txclk_df++) {
1442			rate_ideal = rate[index] * txclk_df * 64ULL;
1443			if (round)
1444				rate_actual = clk_round_rate(clk, rate_ideal);
1445			else
1446				rate_actual = clk_get_rate(clk);
1447
1448			arate = rate_actual / 64;
1449			arate /= txclk_df * sysclk_df;
1450
1451			if (arate == rate[index]) {
1452				/* We are lucky */
1453				savesub = 0;
1454				spdif_priv->txclk_df[index] = txclk_df;
1455				spdif_priv->sysclk_df[index] = sysclk_df;
1456				spdif_priv->txrate[index] = arate;
1457				goto out;
1458			} else if (arate / rate[index] == 1) {
1459				/* A little bigger than expect */
1460				sub = (u64)(arate - rate[index]) * 100000;
1461				do_div(sub, rate[index]);
1462				if (sub >= savesub)
1463					continue;
1464				savesub = sub;
1465				spdif_priv->txclk_df[index] = txclk_df;
1466				spdif_priv->sysclk_df[index] = sysclk_df;
1467				spdif_priv->txrate[index] = arate;
1468			} else if (rate[index] / arate == 1) {
1469				/* A little smaller than expect */
1470				sub = (u64)(rate[index] - arate) * 100000;
1471				do_div(sub, rate[index]);
1472				if (sub >= savesub)
1473					continue;
1474				savesub = sub;
1475				spdif_priv->txclk_df[index] = txclk_df;
1476				spdif_priv->sysclk_df[index] = sysclk_df;
1477				spdif_priv->txrate[index] = arate;
1478			}
1479		}
1480	}
1481
1482out:
1483	return savesub;
1484}
1485
1486static int fsl_spdif_probe_txclk(struct fsl_spdif_priv *spdif_priv,
1487				enum spdif_txrate index)
1488{
1489	static const u32 rate[] = { 22050, 32000, 44100, 48000, 88200, 96000, 176400,
1490				    192000, };
1491	struct platform_device *pdev = spdif_priv->pdev;
1492	struct device *dev = &pdev->dev;
1493	u64 savesub = 100000, ret;
1494	struct clk *clk;
1495	int i;
1496
1497	for (i = 0; i < STC_TXCLK_SRC_MAX; i++) {
1498		clk = spdif_priv->txclk[i];
1499		if (IS_ERR(clk)) {
1500			dev_err(dev, "no rxtx%d clock in devicetree\n", i);
1501			return PTR_ERR(clk);
1502		}
1503		if (!clk_get_rate(clk))
1504			continue;
1505
1506		ret = fsl_spdif_txclk_caldiv(spdif_priv, clk, savesub, index,
1507					     fsl_spdif_can_set_clk_rate(spdif_priv, i));
1508		if (savesub == ret)
1509			continue;
1510
1511		savesub = ret;
1512		spdif_priv->txclk_src[index] = i;
1513
1514		/* To quick catch a divisor, we allow a 0.1% deviation */
1515		if (savesub < 100)
1516			break;
1517	}
1518
1519	dev_dbg(dev, "use rxtx%d as tx clock source for %dHz sample rate\n",
1520			spdif_priv->txclk_src[index], rate[index]);
1521	dev_dbg(dev, "use txclk df %d for %dHz sample rate\n",
1522			spdif_priv->txclk_df[index], rate[index]);
1523	if (clk_is_match(spdif_priv->txclk[spdif_priv->txclk_src[index]], spdif_priv->sysclk))
1524		dev_dbg(dev, "use sysclk df %d for %dHz sample rate\n",
1525				spdif_priv->sysclk_df[index], rate[index]);
1526	dev_dbg(dev, "the best rate for %dHz sample rate is %dHz\n",
1527			rate[index], spdif_priv->txrate[index]);
1528
1529	return 0;
1530}
1531
1532static int fsl_spdif_probe(struct platform_device *pdev)
1533{
1534	struct fsl_spdif_priv *spdif_priv;
1535	struct spdif_mixer_control *ctrl;
1536	struct resource *res;
1537	void __iomem *regs;
1538	int irq, ret, i;
1539	char tmp[16];
1540
1541	spdif_priv = devm_kzalloc(&pdev->dev, sizeof(*spdif_priv), GFP_KERNEL);
1542	if (!spdif_priv)
1543		return -ENOMEM;
1544
1545	spdif_priv->pdev = pdev;
1546
1547	spdif_priv->soc = of_device_get_match_data(&pdev->dev);
1548
1549	/* Initialize this copy of the CPU DAI driver structure */
1550	memcpy(&spdif_priv->cpu_dai_drv, &fsl_spdif_dai, sizeof(fsl_spdif_dai));
1551	spdif_priv->cpu_dai_drv.name = dev_name(&pdev->dev);
1552	spdif_priv->cpu_dai_drv.playback.formats =
1553				spdif_priv->soc->tx_formats;
1554
1555	/* Get the addresses and IRQ */
1556	regs = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
1557	if (IS_ERR(regs))
1558		return PTR_ERR(regs);
1559
1560	spdif_priv->regmap = devm_regmap_init_mmio(&pdev->dev, regs, &fsl_spdif_regmap_config);
1561	if (IS_ERR(spdif_priv->regmap)) {
1562		dev_err(&pdev->dev, "regmap init failed\n");
1563		return PTR_ERR(spdif_priv->regmap);
1564	}
1565
1566	for (i = 0; i < spdif_priv->soc->interrupts; i++) {
1567		irq = platform_get_irq(pdev, i);
1568		if (irq < 0)
1569			return irq;
1570
1571		ret = devm_request_irq(&pdev->dev, irq, spdif_isr, 0,
1572				       dev_name(&pdev->dev), spdif_priv);
1573		if (ret) {
1574			dev_err(&pdev->dev, "could not claim irq %u\n", irq);
1575			return ret;
1576		}
1577	}
1578
1579	for (i = 0; i < STC_TXCLK_SRC_MAX; i++) {
1580		sprintf(tmp, "rxtx%d", i);
1581		spdif_priv->txclk[i] = devm_clk_get(&pdev->dev, tmp);
1582		if (IS_ERR(spdif_priv->txclk[i])) {
1583			dev_err(&pdev->dev, "no rxtx%d clock in devicetree\n", i);
1584			return PTR_ERR(spdif_priv->txclk[i]);
1585		}
1586	}
1587
1588	/* Get system clock for rx clock rate calculation */
1589	spdif_priv->sysclk = spdif_priv->txclk[5];
1590	if (IS_ERR(spdif_priv->sysclk)) {
1591		dev_err(&pdev->dev, "no sys clock (rxtx5) in devicetree\n");
1592		return PTR_ERR(spdif_priv->sysclk);
1593	}
1594
1595	/* Get core clock for data register access via DMA */
1596	spdif_priv->coreclk = devm_clk_get(&pdev->dev, "core");
1597	if (IS_ERR(spdif_priv->coreclk)) {
1598		dev_err(&pdev->dev, "no core clock in devicetree\n");
1599		return PTR_ERR(spdif_priv->coreclk);
1600	}
1601
1602	spdif_priv->spbaclk = devm_clk_get(&pdev->dev, "spba");
1603	if (IS_ERR(spdif_priv->spbaclk))
1604		dev_warn(&pdev->dev, "no spba clock in devicetree\n");
1605
1606	/* Select clock source for rx/tx clock */
1607	spdif_priv->rxclk = spdif_priv->txclk[1];
1608	if (IS_ERR(spdif_priv->rxclk)) {
1609		dev_err(&pdev->dev, "no rxtx1 clock in devicetree\n");
1610		return PTR_ERR(spdif_priv->rxclk);
1611	}
1612	spdif_priv->rxclk_src = DEFAULT_RXCLK_SRC;
1613
1614	fsl_asoc_get_pll_clocks(&pdev->dev, &spdif_priv->pll8k_clk,
1615				&spdif_priv->pll11k_clk);
1616
1617	/* Initial spinlock for control data */
1618	ctrl = &spdif_priv->fsl_spdif_control;
1619	spin_lock_init(&ctrl->ctl_lock);
1620
1621	/* Init tx channel status default value */
1622	ctrl->ch_status[0] = IEC958_AES0_CON_NOT_COPYRIGHT |
1623			     IEC958_AES0_CON_EMPHASIS_5015;
1624	ctrl->ch_status[1] = IEC958_AES1_CON_DIGDIGCONV_ID;
1625	ctrl->ch_status[2] = 0x00;
1626	ctrl->ch_status[3] = IEC958_AES3_CON_FS_44100 |
1627			     IEC958_AES3_CON_CLOCK_1000PPM;
1628
1629	spdif_priv->dpll_locked = false;
1630
1631	spdif_priv->dma_params_tx.maxburst = spdif_priv->soc->tx_burst;
1632	spdif_priv->dma_params_rx.maxburst = spdif_priv->soc->rx_burst;
1633	spdif_priv->dma_params_tx.addr = res->start + REG_SPDIF_STL;
1634	spdif_priv->dma_params_rx.addr = res->start + REG_SPDIF_SRL;
1635
1636	/* Register with ASoC */
1637	dev_set_drvdata(&pdev->dev, spdif_priv);
1638	pm_runtime_enable(&pdev->dev);
1639	regcache_cache_only(spdif_priv->regmap, true);
1640
1641	/*
1642	 * Register platform component before registering cpu dai for there
1643	 * is not defer probe for platform component in snd_soc_add_pcm_runtime().
1644	 */
1645	ret = imx_pcm_dma_init(pdev);
1646	if (ret) {
1647		dev_err_probe(&pdev->dev, ret, "imx_pcm_dma_init failed\n");
1648		goto err_pm_disable;
1649	}
1650
1651	ret = devm_snd_soc_register_component(&pdev->dev, &fsl_spdif_component,
1652					      &spdif_priv->cpu_dai_drv, 1);
1653	if (ret) {
1654		dev_err(&pdev->dev, "failed to register DAI: %d\n", ret);
1655		goto err_pm_disable;
1656	}
1657
1658	return ret;
1659
1660err_pm_disable:
1661	pm_runtime_disable(&pdev->dev);
1662	return ret;
1663}
1664
1665static void fsl_spdif_remove(struct platform_device *pdev)
1666{
1667	pm_runtime_disable(&pdev->dev);
 
 
1668}
1669
1670#ifdef CONFIG_PM
1671static int fsl_spdif_runtime_suspend(struct device *dev)
1672{
1673	struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev);
1674	int i;
1675
1676	/* Disable all the interrupts */
1677	regmap_update_bits(spdif_priv->regmap, REG_SPDIF_SIE, 0xffffff, 0);
1678
1679	regmap_read(spdif_priv->regmap, REG_SPDIF_SRPC,
1680			&spdif_priv->regcache_srpc);
1681	regcache_cache_only(spdif_priv->regmap, true);
1682
1683	for (i = 0; i < STC_TXCLK_SRC_MAX; i++)
1684		clk_disable_unprepare(spdif_priv->txclk[i]);
1685
1686	if (!IS_ERR(spdif_priv->spbaclk))
1687		clk_disable_unprepare(spdif_priv->spbaclk);
1688	clk_disable_unprepare(spdif_priv->coreclk);
1689
1690	return 0;
1691}
1692
1693static int fsl_spdif_runtime_resume(struct device *dev)
1694{
1695	struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev);
1696	int ret;
1697	int i;
1698
1699	ret = clk_prepare_enable(spdif_priv->coreclk);
1700	if (ret) {
1701		dev_err(dev, "failed to enable core clock\n");
1702		return ret;
1703	}
1704
1705	if (!IS_ERR(spdif_priv->spbaclk)) {
1706		ret = clk_prepare_enable(spdif_priv->spbaclk);
1707		if (ret) {
1708			dev_err(dev, "failed to enable spba clock\n");
1709			goto disable_core_clk;
1710		}
1711	}
1712
1713	for (i = 0; i < STC_TXCLK_SRC_MAX; i++) {
1714		ret = clk_prepare_enable(spdif_priv->txclk[i]);
1715		if (ret)
1716			goto disable_tx_clk;
1717	}
1718
1719	regcache_cache_only(spdif_priv->regmap, false);
1720	regcache_mark_dirty(spdif_priv->regmap);
1721
1722	regmap_update_bits(spdif_priv->regmap, REG_SPDIF_SRPC,
1723			SRPC_CLKSRC_SEL_MASK | SRPC_GAINSEL_MASK,
1724			spdif_priv->regcache_srpc);
1725
1726	ret = regcache_sync(spdif_priv->regmap);
1727	if (ret)
1728		goto disable_tx_clk;
1729
1730	return 0;
1731
1732disable_tx_clk:
1733	for (i--; i >= 0; i--)
1734		clk_disable_unprepare(spdif_priv->txclk[i]);
1735	if (!IS_ERR(spdif_priv->spbaclk))
1736		clk_disable_unprepare(spdif_priv->spbaclk);
1737disable_core_clk:
1738	clk_disable_unprepare(spdif_priv->coreclk);
1739
1740	return ret;
1741}
1742#endif /* CONFIG_PM */
1743
1744static const struct dev_pm_ops fsl_spdif_pm = {
1745	SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
1746				pm_runtime_force_resume)
1747	SET_RUNTIME_PM_OPS(fsl_spdif_runtime_suspend, fsl_spdif_runtime_resume,
1748			   NULL)
1749};
1750
1751static const struct of_device_id fsl_spdif_dt_ids[] = {
1752	{ .compatible = "fsl,imx35-spdif", .data = &fsl_spdif_imx35, },
1753	{ .compatible = "fsl,vf610-spdif", .data = &fsl_spdif_vf610, },
1754	{ .compatible = "fsl,imx6sx-spdif", .data = &fsl_spdif_imx6sx, },
1755	{ .compatible = "fsl,imx8qm-spdif", .data = &fsl_spdif_imx8qm, },
1756	{ .compatible = "fsl,imx8mm-spdif", .data = &fsl_spdif_imx8mm, },
1757	{ .compatible = "fsl,imx8ulp-spdif", .data = &fsl_spdif_imx8ulp, },
1758	{}
1759};
1760MODULE_DEVICE_TABLE(of, fsl_spdif_dt_ids);
1761
1762static struct platform_driver fsl_spdif_driver = {
1763	.driver = {
1764		.name = "fsl-spdif-dai",
1765		.of_match_table = fsl_spdif_dt_ids,
1766		.pm = &fsl_spdif_pm,
1767	},
1768	.probe = fsl_spdif_probe,
1769	.remove_new = fsl_spdif_remove,
1770};
1771
1772module_platform_driver(fsl_spdif_driver);
1773
1774MODULE_AUTHOR("Freescale Semiconductor, Inc.");
1775MODULE_DESCRIPTION("Freescale S/PDIF CPU DAI Driver");
1776MODULE_LICENSE("GPL v2");
1777MODULE_ALIAS("platform:fsl-spdif-dai");