davinci-mcasp.c 42.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/*
 * ALSA SoC McASP Audio Layer for TI DAVINCI processor
 *
 * Multi-channel Audio Serial Port Driver
 *
 * Author: Nirmal Pandey <n-pandey@ti.com>,
 *         Suresh Rajashekara <suresh.r@ti.com>
 *         Steve Chen <schen@.mvista.com>
 *
 * Copyright:   (C) 2009 MontaVista Software, Inc., <source@mvista.com>
 * Copyright:   (C) 2009  Texas Instruments, India
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#include <linux/init.h>
#include <linux/module.h>
#include <linux/device.h>
21
#include <linux/slab.h>
22 23
#include <linux/delay.h>
#include <linux/io.h>
24
#include <linux/clk.h>
25
#include <linux/pm_runtime.h>
26 27 28
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/of_device.h>
29

30
#include <sound/asoundef.h>
31 32 33 34 35
#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/pcm_params.h>
#include <sound/initval.h>
#include <sound/soc.h>
36
#include <sound/dmaengine_pcm.h>
37
#include <sound/omap-pcm.h>
38 39

#include "davinci-pcm.h"
40
#include "edma-pcm.h"
41 42
#include "davinci-mcasp.h"

43 44
#define MCASP_MAX_AFIFO_DEPTH	64

45 46 47 48 49 50 51
static u32 context_regs[] = {
	DAVINCI_MCASP_TXFMCTL_REG,
	DAVINCI_MCASP_RXFMCTL_REG,
	DAVINCI_MCASP_TXFMT_REG,
	DAVINCI_MCASP_RXFMT_REG,
	DAVINCI_MCASP_ACLKXCTL_REG,
	DAVINCI_MCASP_ACLKRCTL_REG,
52 53
	DAVINCI_MCASP_AHCLKXCTL_REG,
	DAVINCI_MCASP_AHCLKRCTL_REG,
54
	DAVINCI_MCASP_PDIR_REG,
55 56 57 58
	DAVINCI_MCASP_RXMASK_REG,
	DAVINCI_MCASP_TXMASK_REG,
	DAVINCI_MCASP_RXTDM_REG,
	DAVINCI_MCASP_TXTDM_REG,
59 60
};

61
struct davinci_mcasp_context {
62
	u32	config_regs[ARRAY_SIZE(context_regs)];
63 64
	u32	afifo_regs[2]; /* for read/write fifo control registers */
	u32	*xrsr_regs; /* for serializer configuration */
65 66
};

67
struct davinci_mcasp {
68
	struct davinci_pcm_dma_params dma_params[2];
69
	struct snd_dmaengine_dai_dma_data dma_data[2];
70
	void __iomem *base;
71
	u32 fifo_base;
72
	struct device *dev;
73
	struct snd_pcm_substream *substreams[2];
74 75 76 77 78 79 80

	/* McASP specific data */
	int	tdm_slots;
	u8	op_mode;
	u8	num_serializer;
	u8	*serial_dir;
	u8	version;
81
	u8	bclk_div;
82
	u16	bclk_lrclk_ratio;
83
	int	streams;
84
	u32	irq_request[2];
85

86 87 88
	int	sysclk_freq;
	bool	bclk_master;

89 90 91 92
	/* McASP FIFO related */
	u8	txnumevt;
	u8	rxnumevt;

93 94
	bool	dat_port;

95 96 97
	/* Used for comstraint setting on the second stream */
	u32	channels;

98
#ifdef CONFIG_PM_SLEEP
99
	struct davinci_mcasp_context context;
100 101 102
#endif
};

103 104
static inline void mcasp_set_bits(struct davinci_mcasp *mcasp, u32 offset,
				  u32 val)
105
{
106
	void __iomem *reg = mcasp->base + offset;
107 108 109
	__raw_writel(__raw_readl(reg) | val, reg);
}

110 111
static inline void mcasp_clr_bits(struct davinci_mcasp *mcasp, u32 offset,
				  u32 val)
112
{
113
	void __iomem *reg = mcasp->base + offset;
114 115 116
	__raw_writel((__raw_readl(reg) & ~(val)), reg);
}

117 118
static inline void mcasp_mod_bits(struct davinci_mcasp *mcasp, u32 offset,
				  u32 val, u32 mask)
119
{
120
	void __iomem *reg = mcasp->base + offset;
121 122 123
	__raw_writel((__raw_readl(reg) & ~mask) | val, reg);
}

124 125
static inline void mcasp_set_reg(struct davinci_mcasp *mcasp, u32 offset,
				 u32 val)
126
{
127
	__raw_writel(val, mcasp->base + offset);
128 129
}

130
static inline u32 mcasp_get_reg(struct davinci_mcasp *mcasp, u32 offset)
131
{
132
	return (u32)__raw_readl(mcasp->base + offset);
133 134
}

135
static void mcasp_set_ctl_reg(struct davinci_mcasp *mcasp, u32 ctl_reg, u32 val)
136 137 138
{
	int i = 0;

139
	mcasp_set_bits(mcasp, ctl_reg, val);
140 141 142 143

	/* programming GBLCTL needs to read back from GBLCTL and verfiy */
	/* loop count is to avoid the lock-up */
	for (i = 0; i < 1000; i++) {
144
		if ((mcasp_get_reg(mcasp, ctl_reg) & val) == val)
145 146 147
			break;
	}

148
	if (i == 1000 && ((mcasp_get_reg(mcasp, ctl_reg) & val) != val))
149 150 151
		printk(KERN_ERR "GBLCTL write error\n");
}

152 153
static bool mcasp_is_synchronous(struct davinci_mcasp *mcasp)
{
154 155
	u32 rxfmctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMCTL_REG);
	u32 aclkxctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKXCTL_REG);
156 157 158 159

	return !(aclkxctl & TX_ASYNC) && rxfmctl & AFSRE;
}

160
static void mcasp_start_rx(struct davinci_mcasp *mcasp)
161
{
162 163 164 165 166 167 168
	if (mcasp->rxnumevt) {	/* enable FIFO */
		u32 reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;

		mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
		mcasp_set_bits(mcasp, reg, FIFO_ENABLE);
	}

169
	/* Start clocks */
170 171
	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXHCLKRST);
	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXCLKRST);
172 173 174 175 176 177
	/*
	 * When ASYNC == 0 the transmit and receive sections operate
	 * synchronously from the transmit clock and frame sync. We need to make
	 * sure that the TX signlas are enabled when starting reception.
	 */
	if (mcasp_is_synchronous(mcasp)) {
178 179
		mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXHCLKRST);
		mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXCLKRST);
180 181
	}

182
	/* Activate serializer(s) */
183
	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXSERCLR);
184
	/* Release RX state machine */
185
	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXSMRST);
186
	/* Release Frame Sync generator */
187
	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXFSRST);
188
	if (mcasp_is_synchronous(mcasp))
189
		mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXFSRST);
190 191 192 193

	/* enable receive IRQs */
	mcasp_set_bits(mcasp, DAVINCI_MCASP_EVTCTLR_REG,
		       mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE]);
194 195
}

196
static void mcasp_start_tx(struct davinci_mcasp *mcasp)
197
{
198 199
	u32 cnt;

200 201 202 203 204 205 206
	if (mcasp->txnumevt) {	/* enable FIFO */
		u32 reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;

		mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
		mcasp_set_bits(mcasp, reg, FIFO_ENABLE);
	}

207
	/* Start clocks */
208 209
	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXHCLKRST);
	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXCLKRST);
210
	/* Activate serializer(s) */
211
	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXSERCLR);
212

213
	/* wait for XDATA to be cleared */
214
	cnt = 0;
215 216
	while (!(mcasp_get_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG) &
		 ~XRDATA) && (cnt < 100000))
217 218
		cnt++;

219 220 221 222
	/* Release TX state machine */
	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXSMRST);
	/* Release Frame Sync generator */
	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXFSRST);
223 224 225 226

	/* enable transmit IRQs */
	mcasp_set_bits(mcasp, DAVINCI_MCASP_EVTCTLX_REG,
		       mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK]);
227 228
}

229
static void davinci_mcasp_start(struct davinci_mcasp *mcasp, int stream)
230
{
231 232
	mcasp->streams++;

233
	if (stream == SNDRV_PCM_STREAM_PLAYBACK)
234
		mcasp_start_tx(mcasp);
235
	else
236
		mcasp_start_rx(mcasp);
237 238
}

239
static void mcasp_stop_rx(struct davinci_mcasp *mcasp)
240
{
241 242 243 244
	/* disable IRQ sources */
	mcasp_clr_bits(mcasp, DAVINCI_MCASP_EVTCTLR_REG,
		       mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE]);

245 246 247 248 249
	/*
	 * In synchronous mode stop the TX clocks if no other stream is
	 * running
	 */
	if (mcasp_is_synchronous(mcasp) && !mcasp->streams)
250
		mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, 0);
251

252 253
	mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, 0);
	mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, 0xFFFFFFFF);
254 255 256 257 258 259

	if (mcasp->rxnumevt) {	/* disable FIFO */
		u32 reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;

		mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
	}
260 261
}

262
static void mcasp_stop_tx(struct davinci_mcasp *mcasp)
263
{
264 265
	u32 val = 0;

266 267 268 269
	/* disable IRQ sources */
	mcasp_clr_bits(mcasp, DAVINCI_MCASP_EVTCTLX_REG,
		       mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK]);

270 271 272 273 274 275 276
	/*
	 * In synchronous mode keep TX clocks running if the capture stream is
	 * still running.
	 */
	if (mcasp_is_synchronous(mcasp) && mcasp->streams)
		val =  TXHCLKRST | TXCLKRST | TXFSRST;

277 278
	mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, val);
	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, 0xFFFFFFFF);
279 280 281 282 283 284

	if (mcasp->txnumevt) {	/* disable FIFO */
		u32 reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;

		mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
	}
285 286
}

287
static void davinci_mcasp_stop(struct davinci_mcasp *mcasp, int stream)
288
{
289 290
	mcasp->streams--;

291
	if (stream == SNDRV_PCM_STREAM_PLAYBACK)
292
		mcasp_stop_tx(mcasp);
293
	else
294
		mcasp_stop_rx(mcasp);
295 296
}

297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366
static irqreturn_t davinci_mcasp_tx_irq_handler(int irq, void *data)
{
	struct davinci_mcasp *mcasp = (struct davinci_mcasp *)data;
	struct snd_pcm_substream *substream;
	u32 irq_mask = mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK];
	u32 handled_mask = 0;
	u32 stat;

	stat = mcasp_get_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG);
	if (stat & XUNDRN & irq_mask) {
		dev_warn(mcasp->dev, "Transmit buffer underflow\n");
		handled_mask |= XUNDRN;

		substream = mcasp->substreams[SNDRV_PCM_STREAM_PLAYBACK];
		if (substream) {
			snd_pcm_stream_lock_irq(substream);
			if (snd_pcm_running(substream))
				snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
			snd_pcm_stream_unlock_irq(substream);
		}
	}

	if (!handled_mask)
		dev_warn(mcasp->dev, "unhandled tx event. txstat: 0x%08x\n",
			 stat);

	if (stat & XRERR)
		handled_mask |= XRERR;

	/* Ack the handled event only */
	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, handled_mask);

	return IRQ_RETVAL(handled_mask);
}

static irqreturn_t davinci_mcasp_rx_irq_handler(int irq, void *data)
{
	struct davinci_mcasp *mcasp = (struct davinci_mcasp *)data;
	struct snd_pcm_substream *substream;
	u32 irq_mask = mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE];
	u32 handled_mask = 0;
	u32 stat;

	stat = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG);
	if (stat & ROVRN & irq_mask) {
		dev_warn(mcasp->dev, "Receive buffer overflow\n");
		handled_mask |= ROVRN;

		substream = mcasp->substreams[SNDRV_PCM_STREAM_CAPTURE];
		if (substream) {
			snd_pcm_stream_lock_irq(substream);
			if (snd_pcm_running(substream))
				snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
			snd_pcm_stream_unlock_irq(substream);
		}
	}

	if (!handled_mask)
		dev_warn(mcasp->dev, "unhandled rx event. rxstat: 0x%08x\n",
			 stat);

	if (stat & XRERR)
		handled_mask |= XRERR;

	/* Ack the handled event only */
	mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, handled_mask);

	return IRQ_RETVAL(handled_mask);
}

367 368 369
static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
					 unsigned int fmt)
{
370
	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
371
	int ret = 0;
372
	u32 data_delay;
373
	bool fs_pol_rising;
374
	bool inv_fs = false;
375

376
	pm_runtime_get_sync(mcasp->dev);
377
	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
378 379 380 381 382 383
	case SND_SOC_DAIFMT_DSP_A:
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
		/* 1st data bit occur one ACLK cycle after the frame sync */
		data_delay = 1;
		break;
384 385
	case SND_SOC_DAIFMT_DSP_B:
	case SND_SOC_DAIFMT_AC97:
386 387
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
388 389
		/* No delay after FS */
		data_delay = 0;
390
		break;
391
	case SND_SOC_DAIFMT_I2S:
392
		/* configure a full-word SYNC pulse (LRCLK) */
393 394
		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
395 396
		/* 1st data bit occur one ACLK cycle after the frame sync */
		data_delay = 1;
397 398
		/* FS need to be inverted */
		inv_fs = true;
399
		break;
400 401 402 403 404 405 406
	case SND_SOC_DAIFMT_LEFT_J:
		/* configure a full-word SYNC pulse (LRCLK) */
		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
		/* No delay after FS */
		data_delay = 0;
		break;
407 408 409
	default:
		ret = -EINVAL;
		goto out;
410 411
	}

412 413 414 415 416
	mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, FSXDLY(data_delay),
		       FSXDLY(3));
	mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, FSRDLY(data_delay),
		       FSRDLY(3));

417 418 419
	switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
	case SND_SOC_DAIFMT_CBS_CFS:
		/* codec is clock and frame slave */
420 421
		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
422

423 424
		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
425

426 427
		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, ACLKX | ACLKR);
		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AFSX | AFSR);
428
		mcasp->bclk_master = 1;
429
		break;
430 431
	case SND_SOC_DAIFMT_CBM_CFS:
		/* codec is clock master and frame slave */
432 433
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
434

435 436
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
437

438 439
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, ACLKX | ACLKR);
		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AFSX | AFSR);
440
		mcasp->bclk_master = 0;
441
		break;
442 443
	case SND_SOC_DAIFMT_CBM_CFM:
		/* codec is clock and frame master */
444 445
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
446

447 448
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
449

450 451
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG,
			       ACLKX | AHCLKX | AFSX | ACLKR | AHCLKR | AFSR);
452
		mcasp->bclk_master = 0;
453 454
		break;
	default:
455 456
		ret = -EINVAL;
		goto out;
457 458 459 460
	}

	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
	case SND_SOC_DAIFMT_IB_NF:
461
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
462
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
463
		fs_pol_rising = true;
464 465
		break;
	case SND_SOC_DAIFMT_NB_IF:
466
		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
467
		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
468
		fs_pol_rising = false;
469 470
		break;
	case SND_SOC_DAIFMT_IB_IF:
471
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
472
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
473
		fs_pol_rising = false;
474 475
		break;
	case SND_SOC_DAIFMT_NB_NF:
476 477
		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
478
		fs_pol_rising = true;
479 480
		break;
	default:
481
		ret = -EINVAL;
482 483 484
		goto out;
	}

485 486 487
	if (inv_fs)
		fs_pol_rising = !fs_pol_rising;

488 489 490 491 492 493
	if (fs_pol_rising) {
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
	} else {
		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
494
	}
495 496 497
out:
	pm_runtime_put_sync(mcasp->dev);
	return ret;
498 499
}

500 501
static int __davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id,
				      int div, bool explicit)
502
{
503
	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
504 505 506

	switch (div_id) {
	case 0:		/* MCLK divider */
507
		mcasp_mod_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG,
508
			       AHCLKXDIV(div - 1), AHCLKXDIV_MASK);
509
		mcasp_mod_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG,
510 511 512 513
			       AHCLKRDIV(div - 1), AHCLKRDIV_MASK);
		break;

	case 1:		/* BCLK divider */
514
		mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG,
515
			       ACLKXDIV(div - 1), ACLKXDIV_MASK);
516
		mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG,
517
			       ACLKRDIV(div - 1), ACLKRDIV_MASK);
518 519
		if (explicit)
			mcasp->bclk_div = div;
520 521
		break;

522
	case 2:		/* BCLK/LRCLK ratio */
523
		mcasp->bclk_lrclk_ratio = div;
524 525
		break;

526 527 528 529 530 531 532
	default:
		return -EINVAL;
	}

	return 0;
}

533 534 535 536 537 538
static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id,
				    int div)
{
	return __davinci_mcasp_set_clkdiv(dai, div_id, div, 1);
}

539 540 541
static int davinci_mcasp_set_sysclk(struct snd_soc_dai *dai, int clk_id,
				    unsigned int freq, int dir)
{
542
	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
543 544

	if (dir == SND_SOC_CLOCK_OUT) {
545 546 547
		mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
		mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AHCLKX);
548
	} else {
549 550 551
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AHCLKX);
552 553
	}

554 555
	mcasp->sysclk_freq = freq;

556 557 558
	return 0;
}

559
static int davinci_config_channel_size(struct davinci_mcasp *mcasp,
560
				       int word_length)
561
{
562
	u32 fmt;
D
Daniel Mack 已提交
563
	u32 tx_rotate = (word_length / 4) & 0x7;
564
	u32 mask = (1ULL << word_length) - 1;
565 566 567 568 569 570 571 572 573 574
	/*
	 * For captured data we should not rotate, inversion and masking is
	 * enoguh to get the data to the right position:
	 * Format	  data from bus		after reverse (XRBUF)
	 * S16_LE:	|LSB|MSB|xxx|xxx|	|xxx|xxx|MSB|LSB|
	 * S24_3LE:	|LSB|DAT|MSB|xxx|	|xxx|MSB|DAT|LSB|
	 * S24_LE:	|LSB|DAT|MSB|xxx|	|xxx|MSB|DAT|LSB|
	 * S32_LE:	|LSB|DAT|DAT|MSB|	|MSB|DAT|DAT|LSB|
	 */
	u32 rx_rotate = 0;
575

576 577 578 579 580
	/*
	 * if s BCLK-to-LRCLK ratio has been configured via the set_clkdiv()
	 * callback, take it into account here. That allows us to for example
	 * send 32 bits per channel to the codec, while only 16 of them carry
	 * audio payload.
581 582 583
	 * The clock ratio is given for a full period of data (for I2S format
	 * both left and right channels), so it has to be divided by number of
	 * tdm-slots (for I2S - divided by 2).
584
	 */
585 586 587 588 589 590 591 592 593 594 595
	if (mcasp->bclk_lrclk_ratio) {
		u32 slot_length = mcasp->bclk_lrclk_ratio / mcasp->tdm_slots;

		/*
		 * When we have more bclk then it is needed for the data, we
		 * need to use the rotation to move the received samples to have
		 * correct alignment.
		 */
		rx_rotate = (slot_length - word_length) / 4;
		word_length = slot_length;
	}
596

597 598
	/* mapping of the XSSZ bit-field as described in the datasheet */
	fmt = (word_length >> 1) - 1;
599

600
	if (mcasp->op_mode != DAVINCI_MCASP_DIT_MODE) {
601 602 603 604 605 606 607 608 609
		mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, RXSSZ(fmt),
			       RXSSZ(0x0F));
		mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXSSZ(fmt),
			       TXSSZ(0x0F));
		mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(tx_rotate),
			       TXROT(7));
		mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, RXROT(rx_rotate),
			       RXROT(7));
		mcasp_set_reg(mcasp, DAVINCI_MCASP_RXMASK_REG, mask);
610 611
	}

612
	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXMASK_REG, mask);
613

614 615 616
	return 0;
}

617
static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
618
				 int period_words, int channels)
619
{
620 621
	struct davinci_pcm_dma_params *dma_params = &mcasp->dma_params[stream];
	struct snd_dmaengine_dai_dma_data *dma_data = &mcasp->dma_data[stream];
622
	int i;
623 624
	u8 tx_ser = 0;
	u8 rx_ser = 0;
625
	u8 slots = mcasp->tdm_slots;
626
	u8 max_active_serializers = (channels + slots - 1) / slots;
627
	int active_serializers, numevt, n;
628
	u32 reg;
629
	/* Default configuration */
630
	if (mcasp->version < MCASP_VERSION_3)
631
		mcasp_set_bits(mcasp, DAVINCI_MCASP_PWREMUMGT_REG, MCASP_SOFT);
632 633

	/* All PINS as McASP */
634
	mcasp_set_reg(mcasp, DAVINCI_MCASP_PFUNC_REG, 0x00000000);
635 636

	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
637 638
		mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, 0xFFFFFFFF);
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_XEVTCTL_REG, TXDATADMADIS);
639
	} else {
640 641
		mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, 0xFFFFFFFF);
		mcasp_clr_bits(mcasp, DAVINCI_MCASP_REVTCTL_REG, RXDATADMADIS);
642 643
	}

644
	for (i = 0; i < mcasp->num_serializer; i++) {
645 646
		mcasp_set_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
			       mcasp->serial_dir[i]);
647
		if (mcasp->serial_dir[i] == TX_MODE &&
648
					tx_ser < max_active_serializers) {
649
			mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AXR(i));
650
			tx_ser++;
651
		} else if (mcasp->serial_dir[i] == RX_MODE &&
652
					rx_ser < max_active_serializers) {
653
			mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AXR(i));
654
			rx_ser++;
655
		} else {
656 657
			mcasp_mod_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
				       SRMOD_INACTIVE, SRMOD_MASK);
658 659 660
		}
	}

661 662 663 664 665 666 667 668 669
	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
		active_serializers = tx_ser;
		numevt = mcasp->txnumevt;
		reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
	} else {
		active_serializers = rx_ser;
		numevt = mcasp->rxnumevt;
		reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
	}
670

671
	if (active_serializers < max_active_serializers) {
672
		dev_warn(mcasp->dev, "stream has more channels (%d) than are "
673 674
			 "enabled in mcasp (%d)\n", channels,
			 active_serializers * slots);
675 676 677
		return -EINVAL;
	}

678
	/* AFIFO is not in use */
679 680
	if (!numevt) {
		/* Configure the burst size for platform drivers */
681 682 683 684 685 686 687 688 689 690 691 692 693
		if (active_serializers > 1) {
			/*
			 * If more than one serializers are in use we have one
			 * DMA request to provide data for all serializers.
			 * For example if three serializers are enabled the DMA
			 * need to transfer three words per DMA request.
			 */
			dma_params->fifo_level = active_serializers;
			dma_data->maxburst = active_serializers;
		} else {
			dma_params->fifo_level = 0;
			dma_data->maxburst = 0;
		}
694
		return 0;
695
	}
696

697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714
	if (period_words % active_serializers) {
		dev_err(mcasp->dev, "Invalid combination of period words and "
			"active serializers: %d, %d\n", period_words,
			active_serializers);
		return -EINVAL;
	}

	/*
	 * Calculate the optimal AFIFO depth for platform side:
	 * The number of words for numevt need to be in steps of active
	 * serializers.
	 */
	n = numevt % active_serializers;
	if (n)
		numevt += (active_serializers - n);
	while (period_words % numevt && numevt > 0)
		numevt -= active_serializers;
	if (numevt <= 0)
715
		numevt = active_serializers;
716

717 718
	mcasp_mod_bits(mcasp, reg, active_serializers, NUMDMA_MASK);
	mcasp_mod_bits(mcasp, reg, NUMEVT(numevt), NUMEVT_MASK);
719

720
	/* Configure the burst size for platform drivers */
721 722
	if (numevt == 1)
		numevt = 0;
723 724 725
	dma_params->fifo_level = numevt;
	dma_data->maxburst = numevt;

726
	return 0;
727 728
}

729 730
static int mcasp_i2s_hw_param(struct davinci_mcasp *mcasp, int stream,
			      int channels)
731 732
{
	int i, active_slots;
733 734
	int total_slots;
	int active_serializers;
735
	u32 mask = 0;
736
	u32 busel = 0;
737

738 739 740 741 742 743 744 745 746 747 748 749 750 751
	total_slots = mcasp->tdm_slots;

	/*
	 * If more than one serializer is needed, then use them with
	 * their specified tdm_slots count. Otherwise, one serializer
	 * can cope with the transaction using as many slots as channels
	 * in the stream, requires channels symmetry
	 */
	active_serializers = (channels + total_slots - 1) / total_slots;
	if (active_serializers == 1)
		active_slots = channels;
	else
		active_slots = total_slots;

752 753 754
	for (i = 0; i < active_slots; i++)
		mask |= (1 << i);

755
	mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, TX_ASYNC);
756

757 758 759
	if (!mcasp->dat_port)
		busel = TXSEL;

760 761 762
	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXTDM_REG, mask);
	mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, busel | TXORD);
	mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG,
763
		       FSXMOD(total_slots), FSXMOD(0x1FF));
764 765 766 767

	mcasp_set_reg(mcasp, DAVINCI_MCASP_RXTDM_REG, mask);
	mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, busel | RXORD);
	mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG,
768
		       FSRMOD(total_slots), FSRMOD(0x1FF));
769 770

	return 0;
771 772 773
}

/* S/PDIF */
774 775
static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp,
			      unsigned int rate)
776
{
777 778 779
	u32 cs_value = 0;
	u8 *cs_bytes = (u8*) &cs_value;

780 781
	/* Set the TX format : 24 bit right rotation, 32 bit slot, Pad 0
	   and LSB first */
782
	mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(6) | TXSSZ(15));
783 784

	/* Set TX frame synch : DIT Mode, 1 bit width, internal, rising edge */
785
	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE | FSXMOD(0x180));
786 787

	/* Set the TX tdm : for all the slots */
788
	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXTDM_REG, 0xFFFFFFFF);
789 790

	/* Set the TX clock controls : div = 1 and internal */
791
	mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE | TX_ASYNC);
792

793
	mcasp_clr_bits(mcasp, DAVINCI_MCASP_XEVTCTL_REG, TXDATADMADIS);
794 795

	/* Only 44100 and 48000 are valid, both have the same setting */
796
	mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXDIV(3));
797 798

	/* Enable the DIT */
799
	mcasp_set_bits(mcasp, DAVINCI_MCASP_TXDITCTL_REG, DITEN);
800

801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840
	/* Set S/PDIF channel status bits */
	cs_bytes[0] = IEC958_AES0_CON_NOT_COPYRIGHT;
	cs_bytes[1] = IEC958_AES1_CON_PCM_CODER;

	switch (rate) {
	case 22050:
		cs_bytes[3] |= IEC958_AES3_CON_FS_22050;
		break;
	case 24000:
		cs_bytes[3] |= IEC958_AES3_CON_FS_24000;
		break;
	case 32000:
		cs_bytes[3] |= IEC958_AES3_CON_FS_32000;
		break;
	case 44100:
		cs_bytes[3] |= IEC958_AES3_CON_FS_44100;
		break;
	case 48000:
		cs_bytes[3] |= IEC958_AES3_CON_FS_48000;
		break;
	case 88200:
		cs_bytes[3] |= IEC958_AES3_CON_FS_88200;
		break;
	case 96000:
		cs_bytes[3] |= IEC958_AES3_CON_FS_96000;
		break;
	case 176400:
		cs_bytes[3] |= IEC958_AES3_CON_FS_176400;
		break;
	case 192000:
		cs_bytes[3] |= IEC958_AES3_CON_FS_192000;
		break;
	default:
		printk(KERN_WARNING "unsupported sampling rate: %d\n", rate);
		return -EINVAL;
	}

	mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRA_REG, cs_value);
	mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRB_REG, cs_value);

841
	return 0;
842 843 844 845 846 847
}

static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
					struct snd_pcm_hw_params *params,
					struct snd_soc_dai *cpu_dai)
{
848
	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
849
	struct davinci_pcm_dma_params *dma_params =
850
					&mcasp->dma_params[substream->stream];
851
	int word_length;
852
	int channels = params_channels(params);
853
	int period_size = params_period_size(params);
854
	int ret;
855

856 857 858 859 860
	/*
	 * If mcasp is BCLK master, and a BCLK divider was not provided by
	 * the machine driver, we need to calculate the ratio.
	 */
	if (mcasp->bclk_master && mcasp->bclk_div == 0 && mcasp->sysclk_freq) {
861
		unsigned int bclk_freq = snd_soc_params_to_bclk(params);
862
		unsigned int div = mcasp->sysclk_freq / bclk_freq;
863
		if (mcasp->sysclk_freq % bclk_freq != 0) {
864 865 866 867 868 869
			if (((mcasp->sysclk_freq / div) - bclk_freq) >
			    (bclk_freq - (mcasp->sysclk_freq / (div+1))))
				div++;
			dev_warn(mcasp->dev,
				 "Inaccurate BCLK: %u Hz / %u != %u Hz\n",
				 mcasp->sysclk_freq, div, bclk_freq);
870
		}
871
		__davinci_mcasp_set_clkdiv(cpu_dai, 1, div, 0);
872 873
	}

874 875
	ret = mcasp_common_hw_param(mcasp, substream->stream,
				    period_size * channels, channels);
876 877 878
	if (ret)
		return ret;

879
	if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
880
		ret = mcasp_dit_hw_param(mcasp, params_rate(params));
881
	else
882 883
		ret = mcasp_i2s_hw_param(mcasp, substream->stream,
					 channels);
884 885 886

	if (ret)
		return ret;
887 888

	switch (params_format(params)) {
889
	case SNDRV_PCM_FORMAT_U8:
890 891
	case SNDRV_PCM_FORMAT_S8:
		dma_params->data_type = 1;
892
		word_length = 8;
893 894
		break;

895
	case SNDRV_PCM_FORMAT_U16_LE:
896 897
	case SNDRV_PCM_FORMAT_S16_LE:
		dma_params->data_type = 2;
898
		word_length = 16;
899 900
		break;

901 902 903
	case SNDRV_PCM_FORMAT_U24_3LE:
	case SNDRV_PCM_FORMAT_S24_3LE:
		dma_params->data_type = 3;
904
		word_length = 24;
905 906
		break;

907 908
	case SNDRV_PCM_FORMAT_U24_LE:
	case SNDRV_PCM_FORMAT_S24_LE:
909 910 911 912
		dma_params->data_type = 4;
		word_length = 24;
		break;

913
	case SNDRV_PCM_FORMAT_U32_LE:
914 915
	case SNDRV_PCM_FORMAT_S32_LE:
		dma_params->data_type = 4;
916
		word_length = 32;
917 918 919 920 921 922
		break;

	default:
		printk(KERN_WARNING "davinci-mcasp: unsupported PCM format");
		return -EINVAL;
	}
923

924
	if (mcasp->version == MCASP_VERSION_2 && !dma_params->fifo_level)
925 926
		dma_params->acnt = 4;
	else
927 928
		dma_params->acnt = dma_params->data_type;

929
	davinci_config_channel_size(mcasp, word_length);
930

931 932 933
	if (mcasp->op_mode == DAVINCI_MCASP_IIS_MODE)
		mcasp->channels = channels;

934 935 936 937 938 939
	return 0;
}

static int davinci_mcasp_trigger(struct snd_pcm_substream *substream,
				     int cmd, struct snd_soc_dai *cpu_dai)
{
940
	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
941 942 943 944
	int ret = 0;

	switch (cmd) {
	case SNDRV_PCM_TRIGGER_RESUME:
945 946
	case SNDRV_PCM_TRIGGER_START:
	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
947
		davinci_mcasp_start(mcasp, substream->stream);
948 949
		break;
	case SNDRV_PCM_TRIGGER_SUSPEND:
950
	case SNDRV_PCM_TRIGGER_STOP:
951
	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
952
		davinci_mcasp_stop(mcasp, substream->stream);
953 954 955 956 957 958 959 960 961
		break;

	default:
		ret = -EINVAL;
	}

	return ret;
}

962 963 964 965 966 967 968
static int davinci_mcasp_startup(struct snd_pcm_substream *substream,
				 struct snd_soc_dai *cpu_dai)
{
	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
	u32 max_channels = 0;
	int i, dir;

969 970
	mcasp->substreams[substream->stream] = substream;

971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008
	if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
		return 0;

	/*
	 * Limit the maximum allowed channels for the first stream:
	 * number of serializers for the direction * tdm slots per serializer
	 */
	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
		dir = TX_MODE;
	else
		dir = RX_MODE;

	for (i = 0; i < mcasp->num_serializer; i++) {
		if (mcasp->serial_dir[i] == dir)
			max_channels++;
	}
	max_channels *= mcasp->tdm_slots;
	/*
	 * If the already active stream has less channels than the calculated
	 * limnit based on the seirializers * tdm_slots, we need to use that as
	 * a constraint for the second stream.
	 * Otherwise (first stream or less allowed channels) we use the
	 * calculated constraint.
	 */
	if (mcasp->channels && mcasp->channels < max_channels)
		max_channels = mcasp->channels;

	snd_pcm_hw_constraint_minmax(substream->runtime,
				     SNDRV_PCM_HW_PARAM_CHANNELS,
				     2, max_channels);
	return 0;
}

static void davinci_mcasp_shutdown(struct snd_pcm_substream *substream,
				   struct snd_soc_dai *cpu_dai)
{
	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);

1009 1010
	mcasp->substreams[substream->stream] = NULL;

1011 1012 1013 1014 1015 1016 1017
	if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
		return;

	if (!cpu_dai->active)
		mcasp->channels = 0;
}

1018
static const struct snd_soc_dai_ops davinci_mcasp_dai_ops = {
1019 1020
	.startup	= davinci_mcasp_startup,
	.shutdown	= davinci_mcasp_shutdown,
1021 1022 1023
	.trigger	= davinci_mcasp_trigger,
	.hw_params	= davinci_mcasp_hw_params,
	.set_fmt	= davinci_mcasp_set_dai_fmt,
1024
	.set_clkdiv	= davinci_mcasp_set_clkdiv,
1025
	.set_sysclk	= davinci_mcasp_set_sysclk,
1026 1027
};

1028 1029 1030 1031
static int davinci_mcasp_dai_probe(struct snd_soc_dai *dai)
{
	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);

1032
	if (mcasp->version >= MCASP_VERSION_3) {
1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046
		/* Using dmaengine PCM */
		dai->playback_dma_data =
				&mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
		dai->capture_dma_data =
				&mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
	} else {
		/* Using davinci-pcm */
		dai->playback_dma_data = mcasp->dma_params;
		dai->capture_dma_data = mcasp->dma_params;
	}

	return 0;
}

1047 1048 1049 1050
#ifdef CONFIG_PM_SLEEP
static int davinci_mcasp_suspend(struct snd_soc_dai *dai)
{
	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
1051
	struct davinci_mcasp_context *context = &mcasp->context;
1052
	u32 reg;
1053
	int i;
1054

1055 1056
	for (i = 0; i < ARRAY_SIZE(context_regs); i++)
		context->config_regs[i] = mcasp_get_reg(mcasp, context_regs[i]);
1057

1058 1059 1060 1061 1062 1063 1064 1065
	if (mcasp->txnumevt) {
		reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
		context->afifo_regs[0] = mcasp_get_reg(mcasp, reg);
	}
	if (mcasp->rxnumevt) {
		reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
		context->afifo_regs[1] = mcasp_get_reg(mcasp, reg);
	}
1066

1067 1068 1069
	for (i = 0; i < mcasp->num_serializer; i++)
		context->xrsr_regs[i] = mcasp_get_reg(mcasp,
						DAVINCI_MCASP_XRSRCTL_REG(i));
1070 1071 1072 1073 1074 1075 1076

	return 0;
}

static int davinci_mcasp_resume(struct snd_soc_dai *dai)
{
	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
1077
	struct davinci_mcasp_context *context = &mcasp->context;
1078
	u32 reg;
1079
	int i;
1080

1081 1082
	for (i = 0; i < ARRAY_SIZE(context_regs); i++)
		mcasp_set_reg(mcasp, context_regs[i], context->config_regs[i]);
1083

1084 1085 1086 1087 1088 1089 1090 1091
	if (mcasp->txnumevt) {
		reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
		mcasp_set_reg(mcasp, reg, context->afifo_regs[0]);
	}
	if (mcasp->rxnumevt) {
		reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
		mcasp_set_reg(mcasp, reg, context->afifo_regs[1]);
	}
1092

1093 1094 1095
	for (i = 0; i < mcasp->num_serializer; i++)
		mcasp_set_reg(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
			      context->xrsr_regs[i]);
1096 1097 1098 1099 1100 1101 1102 1103

	return 0;
}
#else
#define davinci_mcasp_suspend NULL
#define davinci_mcasp_resume NULL
#endif

1104 1105
#define DAVINCI_MCASP_RATES	SNDRV_PCM_RATE_8000_192000

1106 1107 1108 1109
#define DAVINCI_MCASP_PCM_FMTS (SNDRV_PCM_FMTBIT_S8 | \
				SNDRV_PCM_FMTBIT_U8 | \
				SNDRV_PCM_FMTBIT_S16_LE | \
				SNDRV_PCM_FMTBIT_U16_LE | \
1110 1111 1112 1113
				SNDRV_PCM_FMTBIT_S24_LE | \
				SNDRV_PCM_FMTBIT_U24_LE | \
				SNDRV_PCM_FMTBIT_S24_3LE | \
				SNDRV_PCM_FMTBIT_U24_3LE | \
1114 1115 1116
				SNDRV_PCM_FMTBIT_S32_LE | \
				SNDRV_PCM_FMTBIT_U32_LE)

1117
static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
1118
	{
1119
		.name		= "davinci-mcasp.0",
1120
		.probe		= davinci_mcasp_dai_probe,
1121 1122
		.suspend	= davinci_mcasp_suspend,
		.resume		= davinci_mcasp_resume,
1123 1124
		.playback	= {
			.channels_min	= 2,
1125
			.channels_max	= 32 * 16,
1126
			.rates 		= DAVINCI_MCASP_RATES,
1127
			.formats	= DAVINCI_MCASP_PCM_FMTS,
1128 1129 1130
		},
		.capture 	= {
			.channels_min 	= 2,
1131
			.channels_max	= 32 * 16,
1132
			.rates 		= DAVINCI_MCASP_RATES,
1133
			.formats	= DAVINCI_MCASP_PCM_FMTS,
1134 1135 1136
		},
		.ops 		= &davinci_mcasp_dai_ops,

1137
		.symmetric_samplebits	= 1,
1138 1139
	},
	{
1140
		.name		= "davinci-mcasp.1",
1141
		.probe		= davinci_mcasp_dai_probe,
1142 1143 1144 1145
		.playback 	= {
			.channels_min	= 1,
			.channels_max	= 384,
			.rates		= DAVINCI_MCASP_RATES,
1146
			.formats	= DAVINCI_MCASP_PCM_FMTS,
1147 1148 1149 1150 1151 1152
		},
		.ops 		= &davinci_mcasp_dai_ops,
	},

};

1153 1154 1155 1156
static const struct snd_soc_component_driver davinci_mcasp_component = {
	.name		= "davinci-mcasp",
};

1157
/* Some HW specific values and defaults. The rest is filled in from DT. */
1158
static struct davinci_mcasp_pdata dm646x_mcasp_pdata = {
1159 1160 1161 1162 1163 1164
	.tx_dma_offset = 0x400,
	.rx_dma_offset = 0x400,
	.asp_chan_q = EVENTQ_0,
	.version = MCASP_VERSION_1,
};

1165
static struct davinci_mcasp_pdata da830_mcasp_pdata = {
1166 1167 1168 1169 1170 1171
	.tx_dma_offset = 0x2000,
	.rx_dma_offset = 0x2000,
	.asp_chan_q = EVENTQ_0,
	.version = MCASP_VERSION_2,
};

1172
static struct davinci_mcasp_pdata am33xx_mcasp_pdata = {
1173 1174 1175 1176 1177 1178
	.tx_dma_offset = 0,
	.rx_dma_offset = 0,
	.asp_chan_q = EVENTQ_0,
	.version = MCASP_VERSION_3,
};

1179
static struct davinci_mcasp_pdata dra7_mcasp_pdata = {
1180 1181 1182 1183 1184 1185
	.tx_dma_offset = 0x200,
	.rx_dma_offset = 0x284,
	.asp_chan_q = EVENTQ_0,
	.version = MCASP_VERSION_4,
};

1186 1187 1188
static const struct of_device_id mcasp_dt_ids[] = {
	{
		.compatible = "ti,dm646x-mcasp-audio",
1189
		.data = &dm646x_mcasp_pdata,
1190 1191 1192
	},
	{
		.compatible = "ti,da830-mcasp-audio",
1193
		.data = &da830_mcasp_pdata,
1194
	},
1195
	{
1196
		.compatible = "ti,am33xx-mcasp-audio",
1197
		.data = &am33xx_mcasp_pdata,
1198
	},
1199 1200 1201 1202
	{
		.compatible = "ti,dra7-mcasp-audio",
		.data = &dra7_mcasp_pdata,
	},
1203 1204 1205 1206
	{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, mcasp_dt_ids);

1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246
static int mcasp_reparent_fck(struct platform_device *pdev)
{
	struct device_node *node = pdev->dev.of_node;
	struct clk *gfclk, *parent_clk;
	const char *parent_name;
	int ret;

	if (!node)
		return 0;

	parent_name = of_get_property(node, "fck_parent", NULL);
	if (!parent_name)
		return 0;

	gfclk = clk_get(&pdev->dev, "fck");
	if (IS_ERR(gfclk)) {
		dev_err(&pdev->dev, "failed to get fck\n");
		return PTR_ERR(gfclk);
	}

	parent_clk = clk_get(NULL, parent_name);
	if (IS_ERR(parent_clk)) {
		dev_err(&pdev->dev, "failed to get parent clock\n");
		ret = PTR_ERR(parent_clk);
		goto err1;
	}

	ret = clk_set_parent(gfclk, parent_clk);
	if (ret) {
		dev_err(&pdev->dev, "failed to reparent fck\n");
		goto err2;
	}

err2:
	clk_put(parent_clk);
err1:
	clk_put(gfclk);
	return ret;
}

1247
static struct davinci_mcasp_pdata *davinci_mcasp_set_pdata_from_of(
1248 1249 1250
						struct platform_device *pdev)
{
	struct device_node *np = pdev->dev.of_node;
1251
	struct davinci_mcasp_pdata *pdata = NULL;
1252
	const struct of_device_id *match =
1253
			of_match_device(mcasp_dt_ids, &pdev->dev);
1254
	struct of_phandle_args dma_spec;
1255 1256 1257 1258 1259 1260 1261 1262 1263

	const u32 *of_serial_dir32;
	u32 val;
	int i, ret = 0;

	if (pdev->dev.platform_data) {
		pdata = pdev->dev.platform_data;
		return pdata;
	} else if (match) {
1264
		pdata = (struct davinci_mcasp_pdata*) match->data;
1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275
	} else {
		/* control shouldn't reach here. something is wrong */
		ret = -EINVAL;
		goto nodata;
	}

	ret = of_property_read_u32(np, "op-mode", &val);
	if (ret >= 0)
		pdata->op_mode = val;

	ret = of_property_read_u32(np, "tdm-slots", &val);
1276 1277 1278 1279 1280 1281 1282 1283
	if (ret >= 0) {
		if (val < 2 || val > 32) {
			dev_err(&pdev->dev,
				"tdm-slots must be in rage [2-32]\n");
			ret = -EINVAL;
			goto nodata;
		}

1284
		pdata->tdm_slots = val;
1285
	}
1286 1287 1288 1289

	of_serial_dir32 = of_get_property(np, "serial-dir", &val);
	val /= sizeof(u32);
	if (of_serial_dir32) {
1290 1291 1292
		u8 *of_serial_dir = devm_kzalloc(&pdev->dev,
						 (sizeof(*of_serial_dir) * val),
						 GFP_KERNEL);
1293 1294 1295 1296 1297
		if (!of_serial_dir) {
			ret = -ENOMEM;
			goto nodata;
		}

1298
		for (i = 0; i < val; i++)
1299 1300
			of_serial_dir[i] = be32_to_cpup(&of_serial_dir32[i]);

1301
		pdata->num_serializer = val;
1302 1303 1304
		pdata->serial_dir = of_serial_dir;
	}

1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326
	ret = of_property_match_string(np, "dma-names", "tx");
	if (ret < 0)
		goto nodata;

	ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
					 &dma_spec);
	if (ret < 0)
		goto nodata;

	pdata->tx_dma_channel = dma_spec.args[0];

	ret = of_property_match_string(np, "dma-names", "rx");
	if (ret < 0)
		goto nodata;

	ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
					 &dma_spec);
	if (ret < 0)
		goto nodata;

	pdata->rx_dma_channel = dma_spec.args[0];

1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353
	ret = of_property_read_u32(np, "tx-num-evt", &val);
	if (ret >= 0)
		pdata->txnumevt = val;

	ret = of_property_read_u32(np, "rx-num-evt", &val);
	if (ret >= 0)
		pdata->rxnumevt = val;

	ret = of_property_read_u32(np, "sram-size-playback", &val);
	if (ret >= 0)
		pdata->sram_size_playback = val;

	ret = of_property_read_u32(np, "sram-size-capture", &val);
	if (ret >= 0)
		pdata->sram_size_capture = val;

	return  pdata;

nodata:
	if (ret < 0) {
		dev_err(&pdev->dev, "Error populating platform data, err %d\n",
			ret);
		pdata = NULL;
	}
	return  pdata;
}

1354 1355
static int davinci_mcasp_probe(struct platform_device *pdev)
{
1356
	struct davinci_pcm_dma_params *dma_params;
1357
	struct snd_dmaengine_dai_dma_data *dma_data;
1358
	struct resource *mem, *ioarea, *res, *dat;
1359
	struct davinci_mcasp_pdata *pdata;
1360
	struct davinci_mcasp *mcasp;
1361 1362
	char *irq_name;
	int irq;
1363
	int ret;
1364

1365 1366 1367 1368 1369
	if (!pdev->dev.platform_data && !pdev->dev.of_node) {
		dev_err(&pdev->dev, "No platform data supplied\n");
		return -EINVAL;
	}

1370
	mcasp = devm_kzalloc(&pdev->dev, sizeof(struct davinci_mcasp),
1371
			   GFP_KERNEL);
1372
	if (!mcasp)
1373 1374
		return	-ENOMEM;

1375 1376 1377 1378 1379 1380
	pdata = davinci_mcasp_set_pdata_from_of(pdev);
	if (!pdata) {
		dev_err(&pdev->dev, "no platform data\n");
		return -EINVAL;
	}

1381
	mem = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
1382
	if (!mem) {
1383
		dev_warn(mcasp->dev,
1384 1385 1386 1387 1388 1389
			 "\"mpu\" mem resource not found, using index 0\n");
		mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
		if (!mem) {
			dev_err(&pdev->dev, "no mem resource?\n");
			return -ENODEV;
		}
1390 1391
	}

1392
	ioarea = devm_request_mem_region(&pdev->dev, mem->start,
1393
			resource_size(mem), pdev->name);
1394 1395
	if (!ioarea) {
		dev_err(&pdev->dev, "Audio region already claimed\n");
1396
		return -EBUSY;
1397 1398
	}

1399
	pm_runtime_enable(&pdev->dev);
1400

1401 1402 1403
	ret = pm_runtime_get_sync(&pdev->dev);
	if (IS_ERR_VALUE(ret)) {
		dev_err(&pdev->dev, "pm_runtime_get_sync() failed\n");
1404
		pm_runtime_disable(&pdev->dev);
1405 1406
		return ret;
	}
1407

1408 1409
	mcasp->base = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
	if (!mcasp->base) {
1410 1411
		dev_err(&pdev->dev, "ioremap failed\n");
		ret = -ENOMEM;
1412
		goto err;
1413 1414
	}

1415
	mcasp->op_mode = pdata->op_mode;
1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430
	/* sanity check for tdm slots parameter */
	if (mcasp->op_mode == DAVINCI_MCASP_IIS_MODE) {
		if (pdata->tdm_slots < 2) {
			dev_err(&pdev->dev, "invalid tdm slots: %d\n",
				pdata->tdm_slots);
			mcasp->tdm_slots = 2;
		} else if (pdata->tdm_slots > 32) {
			dev_err(&pdev->dev, "invalid tdm slots: %d\n",
				pdata->tdm_slots);
			mcasp->tdm_slots = 32;
		} else {
			mcasp->tdm_slots = pdata->tdm_slots;
		}
	}

1431
	mcasp->num_serializer = pdata->num_serializer;
1432 1433 1434 1435 1436
#ifdef CONFIG_PM_SLEEP
	mcasp->context.xrsr_regs = devm_kzalloc(&pdev->dev,
					sizeof(u32) * mcasp->num_serializer,
					GFP_KERNEL);
#endif
1437 1438 1439 1440
	mcasp->serial_dir = pdata->serial_dir;
	mcasp->version = pdata->version;
	mcasp->txnumevt = pdata->txnumevt;
	mcasp->rxnumevt = pdata->rxnumevt;
1441

1442
	mcasp->dev = &pdev->dev;
1443

1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473
	irq = platform_get_irq_byname(pdev, "rx");
	if (irq >= 0) {
		irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_rx\n",
					  dev_name(&pdev->dev));
		ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
						davinci_mcasp_rx_irq_handler,
						IRQF_ONESHOT, irq_name, mcasp);
		if (ret) {
			dev_err(&pdev->dev, "RX IRQ request failed\n");
			goto err;
		}

		mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE] = ROVRN;
	}

	irq = platform_get_irq_byname(pdev, "tx");
	if (irq >= 0) {
		irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_tx\n",
					  dev_name(&pdev->dev));
		ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
						davinci_mcasp_tx_irq_handler,
						IRQF_ONESHOT, irq_name, mcasp);
		if (ret) {
			dev_err(&pdev->dev, "TX IRQ request failed\n");
			goto err;
		}

		mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK] = XUNDRN;
	}

1474
	dat = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat");
1475 1476
	if (dat)
		mcasp->dat_port = true;
1477

1478
	dma_params = &mcasp->dma_params[SNDRV_PCM_STREAM_PLAYBACK];
1479
	dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
1480 1481 1482 1483
	dma_params->asp_chan_q = pdata->asp_chan_q;
	dma_params->ram_chan_q = pdata->ram_chan_q;
	dma_params->sram_pool = pdata->sram_pool;
	dma_params->sram_size = pdata->sram_size_playback;
1484
	if (dat)
1485
		dma_params->dma_addr = dat->start;
1486
	else
1487
		dma_params->dma_addr = mem->start + pdata->tx_dma_offset;
1488

1489
	/* Unconditional dmaengine stuff */
1490
	dma_data->addr = dma_params->dma_addr;
1491

1492
	res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
1493
	if (res)
1494
		dma_params->channel = res->start;
1495
	else
1496
		dma_params->channel = pdata->tx_dma_channel;
1497

1498 1499 1500 1501 1502 1503
	/* dmaengine filter data for DT and non-DT boot */
	if (pdev->dev.of_node)
		dma_data->filter_data = "tx";
	else
		dma_data->filter_data = &dma_params->channel;

1504
	dma_params = &mcasp->dma_params[SNDRV_PCM_STREAM_CAPTURE];
1505
	dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
1506 1507 1508 1509
	dma_params->asp_chan_q = pdata->asp_chan_q;
	dma_params->ram_chan_q = pdata->ram_chan_q;
	dma_params->sram_pool = pdata->sram_pool;
	dma_params->sram_size = pdata->sram_size_capture;
1510
	if (dat)
1511
		dma_params->dma_addr = dat->start;
1512
	else
1513
		dma_params->dma_addr = mem->start + pdata->rx_dma_offset;
1514

1515
	/* Unconditional dmaengine stuff */
1516
	dma_data->addr = dma_params->dma_addr;
1517

1518 1519
	if (mcasp->version < MCASP_VERSION_3) {
		mcasp->fifo_base = DAVINCI_MCASP_V2_AFIFO_BASE;
1520
		/* dma_params->dma_addr is pointing to the data port address */
1521 1522 1523 1524
		mcasp->dat_port = true;
	} else {
		mcasp->fifo_base = DAVINCI_MCASP_V3_AFIFO_BASE;
	}
1525 1526

	res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
1527
	if (res)
1528
		dma_params->channel = res->start;
1529
	else
1530
		dma_params->channel = pdata->rx_dma_channel;
1531

1532 1533 1534 1535 1536
	/* dmaengine filter data for DT and non-DT boot */
	if (pdev->dev.of_node)
		dma_data->filter_data = "rx";
	else
		dma_data->filter_data = &dma_params->channel;
1537

1538
	dev_set_drvdata(&pdev->dev, mcasp);
1539 1540 1541

	mcasp_reparent_fck(pdev);

1542 1543 1544
	ret = devm_snd_soc_register_component(&pdev->dev,
					&davinci_mcasp_component,
					&davinci_mcasp_dai[pdata->op_mode], 1);
1545 1546

	if (ret != 0)
1547
		goto err;
1548

1549
	switch (mcasp->version) {
1550 1551 1552
#if IS_BUILTIN(CONFIG_SND_DAVINCI_SOC) || \
	(IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
	 IS_MODULE(CONFIG_SND_DAVINCI_SOC))
1553 1554
	case MCASP_VERSION_1:
	case MCASP_VERSION_2:
1555
		ret = davinci_soc_platform_register(&pdev->dev);
1556
		break;
1557
#endif
1558 1559 1560 1561 1562 1563 1564
#if IS_BUILTIN(CONFIG_SND_EDMA_SOC) || \
	(IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
	 IS_MODULE(CONFIG_SND_EDMA_SOC))
	case MCASP_VERSION_3:
		ret = edma_pcm_platform_register(&pdev->dev);
		break;
#endif
1565 1566 1567
#if IS_BUILTIN(CONFIG_SND_OMAP_SOC) || \
	(IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
	 IS_MODULE(CONFIG_SND_OMAP_SOC))
1568 1569 1570
	case MCASP_VERSION_4:
		ret = omap_pcm_platform_register(&pdev->dev);
		break;
1571
#endif
1572 1573 1574 1575 1576 1577 1578 1579 1580
	default:
		dev_err(&pdev->dev, "Invalid McASP version: %d\n",
			mcasp->version);
		ret = -EINVAL;
		break;
	}

	if (ret) {
		dev_err(&pdev->dev, "register PCM failed: %d\n", ret);
1581
		goto err;
1582 1583
	}

1584 1585
	return 0;

1586
err:
1587 1588
	pm_runtime_put_sync(&pdev->dev);
	pm_runtime_disable(&pdev->dev);
1589 1590 1591 1592 1593
	return ret;
}

static int davinci_mcasp_remove(struct platform_device *pdev)
{
1594 1595
	pm_runtime_put_sync(&pdev->dev);
	pm_runtime_disable(&pdev->dev);
1596 1597 1598 1599 1600 1601 1602 1603 1604

	return 0;
}

static struct platform_driver davinci_mcasp_driver = {
	.probe		= davinci_mcasp_probe,
	.remove		= davinci_mcasp_remove,
	.driver		= {
		.name	= "davinci-mcasp",
1605
		.of_match_table = mcasp_dt_ids,
1606 1607 1608
	},
};

1609
module_platform_driver(davinci_mcasp_driver);
1610 1611 1612 1613

MODULE_AUTHOR("Steve Chen");
MODULE_DESCRIPTION("TI DAVINCI McASP SoC Interface");
MODULE_LICENSE("GPL");