Linux Audio

Check our new training course

Loading...
v4.6
   1/*
   2 * ALSA SoC McASP Audio Layer for TI DAVINCI processor
   3 *
   4 * Multi-channel Audio Serial Port Driver
   5 *
   6 * Author: Nirmal Pandey <n-pandey@ti.com>,
   7 *         Suresh Rajashekara <suresh.r@ti.com>
   8 *         Steve Chen <schen@.mvista.com>
   9 *
  10 * Copyright:   (C) 2009 MontaVista Software, Inc., <source@mvista.com>
  11 * Copyright:   (C) 2009  Texas Instruments, India
  12 *
  13 * This program is free software; you can redistribute it and/or modify
  14 * it under the terms of the GNU General Public License version 2 as
  15 * published by the Free Software Foundation.
  16 */
  17
  18#include <linux/init.h>
  19#include <linux/module.h>
  20#include <linux/device.h>
  21#include <linux/slab.h>
  22#include <linux/delay.h>
  23#include <linux/io.h>
  24#include <linux/clk.h>
  25#include <linux/pm_runtime.h>
  26#include <linux/of.h>
  27#include <linux/of_platform.h>
  28#include <linux/of_device.h>
  29#include <linux/platform_data/davinci_asp.h>
  30#include <linux/math64.h>
  31
  32#include <sound/asoundef.h>
  33#include <sound/core.h>
  34#include <sound/pcm.h>
  35#include <sound/pcm_params.h>
  36#include <sound/initval.h>
  37#include <sound/soc.h>
  38#include <sound/dmaengine_pcm.h>
  39#include <sound/omap-pcm.h>
  40
  41#include "edma-pcm.h"
  42#include "davinci-mcasp.h"
  43
  44#define MCASP_MAX_AFIFO_DEPTH	64
  45
  46static u32 context_regs[] = {
  47	DAVINCI_MCASP_TXFMCTL_REG,
  48	DAVINCI_MCASP_RXFMCTL_REG,
  49	DAVINCI_MCASP_TXFMT_REG,
  50	DAVINCI_MCASP_RXFMT_REG,
  51	DAVINCI_MCASP_ACLKXCTL_REG,
  52	DAVINCI_MCASP_ACLKRCTL_REG,
  53	DAVINCI_MCASP_AHCLKXCTL_REG,
  54	DAVINCI_MCASP_AHCLKRCTL_REG,
  55	DAVINCI_MCASP_PDIR_REG,
  56	DAVINCI_MCASP_RXMASK_REG,
  57	DAVINCI_MCASP_TXMASK_REG,
  58	DAVINCI_MCASP_RXTDM_REG,
  59	DAVINCI_MCASP_TXTDM_REG,
  60};
  61
  62struct davinci_mcasp_context {
  63	u32	config_regs[ARRAY_SIZE(context_regs)];
  64	u32	afifo_regs[2]; /* for read/write fifo control registers */
  65	u32	*xrsr_regs; /* for serializer configuration */
  66	bool	pm_state;
  67};
  68
  69struct davinci_mcasp_ruledata {
  70	struct davinci_mcasp *mcasp;
  71	int serializers;
  72};
  73
  74struct davinci_mcasp {
 
  75	struct snd_dmaengine_dai_dma_data dma_data[2];
  76	void __iomem *base;
  77	u32 fifo_base;
  78	struct device *dev;
  79	struct snd_pcm_substream *substreams[2];
  80	unsigned int dai_fmt;
  81
  82	/* McASP specific data */
  83	int	tdm_slots;
  84	u32	tdm_mask[2];
  85	int	slot_width;
  86	u8	op_mode;
  87	u8	num_serializer;
  88	u8	*serial_dir;
  89	u8	version;
  90	u8	bclk_div;
  91	int	streams;
  92	u32	irq_request[2];
  93	int	dma_request[2];
  94
  95	int	sysclk_freq;
  96	bool	bclk_master;
  97
  98	/* McASP FIFO related */
  99	u8	txnumevt;
 100	u8	rxnumevt;
 101
 102	bool	dat_port;
 103
 104	/* Used for comstraint setting on the second stream */
 105	u32	channels;
 106
 107#ifdef CONFIG_PM_SLEEP
 108	struct davinci_mcasp_context context;
 109#endif
 110
 111	struct davinci_mcasp_ruledata ruledata[2];
 112	struct snd_pcm_hw_constraint_list chconstr[2];
 113};
 114
 115static inline void mcasp_set_bits(struct davinci_mcasp *mcasp, u32 offset,
 116				  u32 val)
 117{
 118	void __iomem *reg = mcasp->base + offset;
 119	__raw_writel(__raw_readl(reg) | val, reg);
 120}
 121
 122static inline void mcasp_clr_bits(struct davinci_mcasp *mcasp, u32 offset,
 123				  u32 val)
 124{
 125	void __iomem *reg = mcasp->base + offset;
 126	__raw_writel((__raw_readl(reg) & ~(val)), reg);
 127}
 128
 129static inline void mcasp_mod_bits(struct davinci_mcasp *mcasp, u32 offset,
 130				  u32 val, u32 mask)
 131{
 132	void __iomem *reg = mcasp->base + offset;
 133	__raw_writel((__raw_readl(reg) & ~mask) | val, reg);
 134}
 135
 136static inline void mcasp_set_reg(struct davinci_mcasp *mcasp, u32 offset,
 137				 u32 val)
 138{
 139	__raw_writel(val, mcasp->base + offset);
 140}
 141
 142static inline u32 mcasp_get_reg(struct davinci_mcasp *mcasp, u32 offset)
 143{
 144	return (u32)__raw_readl(mcasp->base + offset);
 145}
 146
 147static void mcasp_set_ctl_reg(struct davinci_mcasp *mcasp, u32 ctl_reg, u32 val)
 148{
 149	int i = 0;
 150
 151	mcasp_set_bits(mcasp, ctl_reg, val);
 152
 153	/* programming GBLCTL needs to read back from GBLCTL and verfiy */
 154	/* loop count is to avoid the lock-up */
 155	for (i = 0; i < 1000; i++) {
 156		if ((mcasp_get_reg(mcasp, ctl_reg) & val) == val)
 157			break;
 158	}
 159
 160	if (i == 1000 && ((mcasp_get_reg(mcasp, ctl_reg) & val) != val))
 161		printk(KERN_ERR "GBLCTL write error\n");
 162}
 163
 164static bool mcasp_is_synchronous(struct davinci_mcasp *mcasp)
 165{
 166	u32 rxfmctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMCTL_REG);
 167	u32 aclkxctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKXCTL_REG);
 168
 169	return !(aclkxctl & TX_ASYNC) && rxfmctl & AFSRE;
 170}
 171
 172static void mcasp_start_rx(struct davinci_mcasp *mcasp)
 173{
 174	if (mcasp->rxnumevt) {	/* enable FIFO */
 175		u32 reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
 176
 177		mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
 178		mcasp_set_bits(mcasp, reg, FIFO_ENABLE);
 179	}
 180
 181	/* Start clocks */
 182	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXHCLKRST);
 183	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXCLKRST);
 
 184	/*
 185	 * When ASYNC == 0 the transmit and receive sections operate
 186	 * synchronously from the transmit clock and frame sync. We need to make
 187	 * sure that the TX signlas are enabled when starting reception.
 188	 */
 189	if (mcasp_is_synchronous(mcasp)) {
 190		mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXHCLKRST);
 191		mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXCLKRST);
 192	}
 193
 194	/* Activate serializer(s) */
 195	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXSERCLR);
 196	/* Release RX state machine */
 
 197	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXSMRST);
 198	/* Release Frame Sync generator */
 199	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXFSRST);
 
 
 
 
 
 200	if (mcasp_is_synchronous(mcasp))
 201		mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXFSRST);
 202
 203	/* enable receive IRQs */
 204	mcasp_set_bits(mcasp, DAVINCI_MCASP_EVTCTLR_REG,
 205		       mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE]);
 206}
 207
 208static void mcasp_start_tx(struct davinci_mcasp *mcasp)
 209{
 
 210	u32 cnt;
 211
 212	if (mcasp->txnumevt) {	/* enable FIFO */
 213		u32 reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
 214
 215		mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
 216		mcasp_set_bits(mcasp, reg, FIFO_ENABLE);
 217	}
 218
 219	/* Start clocks */
 220	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXHCLKRST);
 221	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXCLKRST);
 222	/* Activate serializer(s) */
 223	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXSERCLR);
 
 224
 225	/* wait for XDATA to be cleared */
 226	cnt = 0;
 227	while ((mcasp_get_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG) & XRDATA) &&
 228	       (cnt < 100000))
 229		cnt++;
 230
 231	/* Release TX state machine */
 232	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXSMRST);
 233	/* Release Frame Sync generator */
 234	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXFSRST);
 
 
 
 
 
 
 
 
 
 
 
 
 
 235
 236	/* enable transmit IRQs */
 237	mcasp_set_bits(mcasp, DAVINCI_MCASP_EVTCTLX_REG,
 238		       mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK]);
 239}
 240
 241static void davinci_mcasp_start(struct davinci_mcasp *mcasp, int stream)
 242{
 
 
 243	mcasp->streams++;
 244
 245	if (stream == SNDRV_PCM_STREAM_PLAYBACK)
 
 
 
 
 
 246		mcasp_start_tx(mcasp);
 247	else
 
 
 
 
 
 248		mcasp_start_rx(mcasp);
 
 249}
 250
 251static void mcasp_stop_rx(struct davinci_mcasp *mcasp)
 252{
 253	/* disable IRQ sources */
 254	mcasp_clr_bits(mcasp, DAVINCI_MCASP_EVTCTLR_REG,
 255		       mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE]);
 256
 257	/*
 258	 * In synchronous mode stop the TX clocks if no other stream is
 259	 * running
 260	 */
 261	if (mcasp_is_synchronous(mcasp) && !mcasp->streams)
 262		mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, 0);
 263
 264	mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, 0);
 265	mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, 0xFFFFFFFF);
 266
 267	if (mcasp->rxnumevt) {	/* disable FIFO */
 268		u32 reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
 269
 270		mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
 271	}
 272}
 273
 274static void mcasp_stop_tx(struct davinci_mcasp *mcasp)
 275{
 276	u32 val = 0;
 277
 278	/* disable IRQ sources */
 279	mcasp_clr_bits(mcasp, DAVINCI_MCASP_EVTCTLX_REG,
 280		       mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK]);
 281
 282	/*
 283	 * In synchronous mode keep TX clocks running if the capture stream is
 284	 * still running.
 285	 */
 286	if (mcasp_is_synchronous(mcasp) && mcasp->streams)
 287		val =  TXHCLKRST | TXCLKRST | TXFSRST;
 288
 289	mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, val);
 290	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, 0xFFFFFFFF);
 291
 292	if (mcasp->txnumevt) {	/* disable FIFO */
 293		u32 reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
 294
 295		mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
 296	}
 297}
 298
 299static void davinci_mcasp_stop(struct davinci_mcasp *mcasp, int stream)
 300{
 301	mcasp->streams--;
 302
 303	if (stream == SNDRV_PCM_STREAM_PLAYBACK)
 304		mcasp_stop_tx(mcasp);
 305	else
 306		mcasp_stop_rx(mcasp);
 307}
 308
 309static irqreturn_t davinci_mcasp_tx_irq_handler(int irq, void *data)
 310{
 311	struct davinci_mcasp *mcasp = (struct davinci_mcasp *)data;
 312	struct snd_pcm_substream *substream;
 313	u32 irq_mask = mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK];
 314	u32 handled_mask = 0;
 315	u32 stat;
 316
 317	stat = mcasp_get_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG);
 318	if (stat & XUNDRN & irq_mask) {
 319		dev_warn(mcasp->dev, "Transmit buffer underflow\n");
 320		handled_mask |= XUNDRN;
 321
 322		substream = mcasp->substreams[SNDRV_PCM_STREAM_PLAYBACK];
 323		if (substream) {
 324			snd_pcm_stream_lock_irq(substream);
 325			if (snd_pcm_running(substream))
 326				snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
 327			snd_pcm_stream_unlock_irq(substream);
 328		}
 329	}
 330
 331	if (!handled_mask)
 332		dev_warn(mcasp->dev, "unhandled tx event. txstat: 0x%08x\n",
 333			 stat);
 334
 335	if (stat & XRERR)
 336		handled_mask |= XRERR;
 337
 338	/* Ack the handled event only */
 339	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, handled_mask);
 340
 341	return IRQ_RETVAL(handled_mask);
 342}
 343
 344static irqreturn_t davinci_mcasp_rx_irq_handler(int irq, void *data)
 345{
 346	struct davinci_mcasp *mcasp = (struct davinci_mcasp *)data;
 347	struct snd_pcm_substream *substream;
 348	u32 irq_mask = mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE];
 349	u32 handled_mask = 0;
 350	u32 stat;
 351
 352	stat = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG);
 353	if (stat & ROVRN & irq_mask) {
 354		dev_warn(mcasp->dev, "Receive buffer overflow\n");
 355		handled_mask |= ROVRN;
 356
 357		substream = mcasp->substreams[SNDRV_PCM_STREAM_CAPTURE];
 358		if (substream) {
 359			snd_pcm_stream_lock_irq(substream);
 360			if (snd_pcm_running(substream))
 361				snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
 362			snd_pcm_stream_unlock_irq(substream);
 363		}
 
 364	}
 365
 366	if (!handled_mask)
 367		dev_warn(mcasp->dev, "unhandled rx event. rxstat: 0x%08x\n",
 368			 stat);
 369
 370	if (stat & XRERR)
 371		handled_mask |= XRERR;
 372
 373	/* Ack the handled event only */
 374	mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, handled_mask);
 375
 376	return IRQ_RETVAL(handled_mask);
 377}
 378
 379static irqreturn_t davinci_mcasp_common_irq_handler(int irq, void *data)
 380{
 381	struct davinci_mcasp *mcasp = (struct davinci_mcasp *)data;
 382	irqreturn_t ret = IRQ_NONE;
 383
 384	if (mcasp->substreams[SNDRV_PCM_STREAM_PLAYBACK])
 385		ret = davinci_mcasp_tx_irq_handler(irq, data);
 386
 387	if (mcasp->substreams[SNDRV_PCM_STREAM_CAPTURE])
 388		ret |= davinci_mcasp_rx_irq_handler(irq, data);
 389
 390	return ret;
 391}
 392
 393static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
 394					 unsigned int fmt)
 395{
 396	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
 397	int ret = 0;
 398	u32 data_delay;
 399	bool fs_pol_rising;
 400	bool inv_fs = false;
 401
 402	if (!fmt)
 403		return 0;
 404
 405	pm_runtime_get_sync(mcasp->dev);
 406	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
 407	case SND_SOC_DAIFMT_DSP_A:
 408		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
 409		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
 410		/* 1st data bit occur one ACLK cycle after the frame sync */
 411		data_delay = 1;
 412		break;
 413	case SND_SOC_DAIFMT_DSP_B:
 414	case SND_SOC_DAIFMT_AC97:
 415		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
 416		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
 417		/* No delay after FS */
 418		data_delay = 0;
 419		break;
 420	case SND_SOC_DAIFMT_I2S:
 421		/* configure a full-word SYNC pulse (LRCLK) */
 422		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
 423		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
 424		/* 1st data bit occur one ACLK cycle after the frame sync */
 425		data_delay = 1;
 426		/* FS need to be inverted */
 427		inv_fs = true;
 428		break;
 429	case SND_SOC_DAIFMT_LEFT_J:
 430		/* configure a full-word SYNC pulse (LRCLK) */
 431		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
 432		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
 433		/* No delay after FS */
 434		data_delay = 0;
 
 
 435		break;
 436	default:
 437		ret = -EINVAL;
 438		goto out;
 439	}
 440
 441	mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, FSXDLY(data_delay),
 442		       FSXDLY(3));
 443	mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, FSRDLY(data_delay),
 444		       FSRDLY(3));
 445
 446	switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
 447	case SND_SOC_DAIFMT_CBS_CFS:
 448		/* codec is clock and frame slave */
 449		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
 450		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
 451
 452		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
 453		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
 454
 455		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, ACLKX | ACLKR);
 456		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AFSX | AFSR);
 457		mcasp->bclk_master = 1;
 458		break;
 459	case SND_SOC_DAIFMT_CBS_CFM:
 460		/* codec is clock slave and frame master */
 461		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
 462		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
 463
 464		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
 465		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
 466
 467		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, ACLKX | ACLKR);
 468		mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AFSX | AFSR);
 469		mcasp->bclk_master = 1;
 470		break;
 471	case SND_SOC_DAIFMT_CBM_CFS:
 472		/* codec is clock master and frame slave */
 473		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
 474		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
 475
 476		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
 477		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
 478
 479		mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, ACLKX | ACLKR);
 480		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AFSX | AFSR);
 481		mcasp->bclk_master = 0;
 482		break;
 483	case SND_SOC_DAIFMT_CBM_CFM:
 484		/* codec is clock and frame master */
 485		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
 486		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
 487
 488		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
 489		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
 490
 491		mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG,
 492			       ACLKX | AHCLKX | AFSX | ACLKR | AHCLKR | AFSR);
 493		mcasp->bclk_master = 0;
 494		break;
 
 495	default:
 496		ret = -EINVAL;
 497		goto out;
 498	}
 499
 500	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
 501	case SND_SOC_DAIFMT_IB_NF:
 502		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
 
 
 503		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
 504		fs_pol_rising = true;
 505		break;
 
 506	case SND_SOC_DAIFMT_NB_IF:
 507		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
 
 
 508		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
 509		fs_pol_rising = false;
 510		break;
 
 511	case SND_SOC_DAIFMT_IB_IF:
 512		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
 
 
 513		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
 514		fs_pol_rising = false;
 515		break;
 
 516	case SND_SOC_DAIFMT_NB_NF:
 517		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
 
 
 518		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
 519		fs_pol_rising = true;
 520		break;
 
 521	default:
 522		ret = -EINVAL;
 523		goto out;
 524	}
 525
 526	if (inv_fs)
 527		fs_pol_rising = !fs_pol_rising;
 528
 529	if (fs_pol_rising) {
 530		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
 531		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
 532	} else {
 533		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
 534		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
 535	}
 536
 537	mcasp->dai_fmt = fmt;
 538out:
 539	pm_runtime_put(mcasp->dev);
 540	return ret;
 541}
 542
 543static int __davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id,
 544				      int div, bool explicit)
 545{
 546	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
 547
 548	pm_runtime_get_sync(mcasp->dev);
 549	switch (div_id) {
 550	case 0:		/* MCLK divider */
 551		mcasp_mod_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG,
 552			       AHCLKXDIV(div - 1), AHCLKXDIV_MASK);
 553		mcasp_mod_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG,
 554			       AHCLKRDIV(div - 1), AHCLKRDIV_MASK);
 555		break;
 556
 557	case 1:		/* BCLK divider */
 558		mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG,
 559			       ACLKXDIV(div - 1), ACLKXDIV_MASK);
 560		mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG,
 561			       ACLKRDIV(div - 1), ACLKRDIV_MASK);
 562		if (explicit)
 563			mcasp->bclk_div = div;
 564		break;
 565
 566	case 2:	/*
 567		 * BCLK/LRCLK ratio descries how many bit-clock cycles
 568		 * fit into one frame. The clock ratio is given for a
 569		 * full period of data (for I2S format both left and
 570		 * right channels), so it has to be divided by number
 571		 * of tdm-slots (for I2S - divided by 2).
 572		 * Instead of storing this ratio, we calculate a new
 573		 * tdm_slot width by dividing the the ratio by the
 574		 * number of configured tdm slots.
 575		 */
 576		mcasp->slot_width = div / mcasp->tdm_slots;
 577		if (div % mcasp->tdm_slots)
 578			dev_warn(mcasp->dev,
 579				 "%s(): BCLK/LRCLK %d is not divisible by %d tdm slots",
 580				 __func__, div, mcasp->tdm_slots);
 581		break;
 582
 583	default:
 584		return -EINVAL;
 585	}
 586
 587	pm_runtime_put(mcasp->dev);
 588	return 0;
 589}
 590
 591static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id,
 592				    int div)
 593{
 594	return __davinci_mcasp_set_clkdiv(dai, div_id, div, 1);
 595}
 596
 597static int davinci_mcasp_set_sysclk(struct snd_soc_dai *dai, int clk_id,
 598				    unsigned int freq, int dir)
 599{
 600	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
 601
 602	pm_runtime_get_sync(mcasp->dev);
 603	if (dir == SND_SOC_CLOCK_OUT) {
 604		mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
 605		mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
 606		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AHCLKX);
 607	} else {
 608		mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
 609		mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
 610		mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AHCLKX);
 611	}
 612
 613	mcasp->sysclk_freq = freq;
 614
 615	pm_runtime_put(mcasp->dev);
 616	return 0;
 617}
 618
 619/* All serializers must have equal number of channels */
 620static int davinci_mcasp_ch_constraint(struct davinci_mcasp *mcasp, int stream,
 621				       int serializers)
 622{
 623	struct snd_pcm_hw_constraint_list *cl = &mcasp->chconstr[stream];
 624	unsigned int *list = (unsigned int *) cl->list;
 625	int slots = mcasp->tdm_slots;
 626	int i, count = 0;
 627
 628	if (mcasp->tdm_mask[stream])
 629		slots = hweight32(mcasp->tdm_mask[stream]);
 630
 631	for (i = 2; i <= slots; i++)
 632		list[count++] = i;
 633
 634	for (i = 2; i <= serializers; i++)
 635		list[count++] = i*slots;
 636
 637	cl->count = count;
 638
 639	return 0;
 640}
 641
 642static int davinci_mcasp_set_ch_constraints(struct davinci_mcasp *mcasp)
 643{
 644	int rx_serializers = 0, tx_serializers = 0, ret, i;
 645
 646	for (i = 0; i < mcasp->num_serializer; i++)
 647		if (mcasp->serial_dir[i] == TX_MODE)
 648			tx_serializers++;
 649		else if (mcasp->serial_dir[i] == RX_MODE)
 650			rx_serializers++;
 651
 652	ret = davinci_mcasp_ch_constraint(mcasp, SNDRV_PCM_STREAM_PLAYBACK,
 653					  tx_serializers);
 654	if (ret)
 655		return ret;
 656
 657	ret = davinci_mcasp_ch_constraint(mcasp, SNDRV_PCM_STREAM_CAPTURE,
 658					  rx_serializers);
 659
 660	return ret;
 661}
 662
 663
 664static int davinci_mcasp_set_tdm_slot(struct snd_soc_dai *dai,
 665				      unsigned int tx_mask,
 666				      unsigned int rx_mask,
 667				      int slots, int slot_width)
 668{
 669	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
 670
 671	dev_dbg(mcasp->dev,
 672		 "%s() tx_mask 0x%08x rx_mask 0x%08x slots %d width %d\n",
 673		 __func__, tx_mask, rx_mask, slots, slot_width);
 674
 675	if (tx_mask >= (1<<slots) || rx_mask >= (1<<slots)) {
 676		dev_err(mcasp->dev,
 677			"Bad tdm mask tx: 0x%08x rx: 0x%08x slots %d\n",
 678			tx_mask, rx_mask, slots);
 679		return -EINVAL;
 680	}
 681
 682	if (slot_width &&
 683	    (slot_width < 8 || slot_width > 32 || slot_width % 4 != 0)) {
 684		dev_err(mcasp->dev, "%s: Unsupported slot_width %d\n",
 685			__func__, slot_width);
 686		return -EINVAL;
 687	}
 688
 689	mcasp->tdm_slots = slots;
 690	mcasp->tdm_mask[SNDRV_PCM_STREAM_PLAYBACK] = tx_mask;
 691	mcasp->tdm_mask[SNDRV_PCM_STREAM_CAPTURE] = rx_mask;
 692	mcasp->slot_width = slot_width;
 693
 694	return davinci_mcasp_set_ch_constraints(mcasp);
 695}
 696
 697static int davinci_config_channel_size(struct davinci_mcasp *mcasp,
 698				       int sample_width)
 699{
 700	u32 fmt;
 701	u32 tx_rotate = (sample_width / 4) & 0x7;
 702	u32 mask = (1ULL << sample_width) - 1;
 703	u32 slot_width = sample_width;
 704
 705	/*
 706	 * For captured data we should not rotate, inversion and masking is
 707	 * enoguh to get the data to the right position:
 708	 * Format	  data from bus		after reverse (XRBUF)
 709	 * S16_LE:	|LSB|MSB|xxx|xxx|	|xxx|xxx|MSB|LSB|
 710	 * S24_3LE:	|LSB|DAT|MSB|xxx|	|xxx|MSB|DAT|LSB|
 711	 * S24_LE:	|LSB|DAT|MSB|xxx|	|xxx|MSB|DAT|LSB|
 712	 * S32_LE:	|LSB|DAT|DAT|MSB|	|MSB|DAT|DAT|LSB|
 713	 */
 714	u32 rx_rotate = 0;
 715
 716	/*
 717	 * Setting the tdm slot width either with set_clkdiv() or
 718	 * set_tdm_slot() allows us to for example send 32 bits per
 719	 * channel to the codec, while only 16 of them carry audio
 720	 * payload.
 
 
 
 721	 */
 722	if (mcasp->slot_width) {
 723		/*
 724		 * When we have more bclk then it is needed for the
 725		 * data, we need to use the rotation to move the
 726		 * received samples to have correct alignment.
 727		 */
 728		slot_width = mcasp->slot_width;
 729		rx_rotate = (slot_width - sample_width) / 4;
 730	}
 731
 732	/* mapping of the XSSZ bit-field as described in the datasheet */
 733	fmt = (slot_width >> 1) - 1;
 734
 735	if (mcasp->op_mode != DAVINCI_MCASP_DIT_MODE) {
 736		mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, RXSSZ(fmt),
 737			       RXSSZ(0x0F));
 738		mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXSSZ(fmt),
 739			       TXSSZ(0x0F));
 740		mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(tx_rotate),
 741			       TXROT(7));
 742		mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, RXROT(rx_rotate),
 743			       RXROT(7));
 744		mcasp_set_reg(mcasp, DAVINCI_MCASP_RXMASK_REG, mask);
 745	}
 746
 747	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXMASK_REG, mask);
 748
 749	return 0;
 750}
 751
 752static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
 753				 int period_words, int channels)
 754{
 755	struct snd_dmaengine_dai_dma_data *dma_data = &mcasp->dma_data[stream];
 756	int i;
 757	u8 tx_ser = 0;
 758	u8 rx_ser = 0;
 
 759	u8 slots = mcasp->tdm_slots;
 760	u8 max_active_serializers = (channels + slots - 1) / slots;
 761	int active_serializers, numevt;
 762	u32 reg;
 763	/* Default configuration */
 764	if (mcasp->version < MCASP_VERSION_3)
 765		mcasp_set_bits(mcasp, DAVINCI_MCASP_PWREMUMGT_REG, MCASP_SOFT);
 766
 767	/* All PINS as McASP */
 768	mcasp_set_reg(mcasp, DAVINCI_MCASP_PFUNC_REG, 0x00000000);
 769
 770	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
 771		mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, 0xFFFFFFFF);
 772		mcasp_clr_bits(mcasp, DAVINCI_MCASP_XEVTCTL_REG, TXDATADMADIS);
 773	} else {
 774		mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, 0xFFFFFFFF);
 775		mcasp_clr_bits(mcasp, DAVINCI_MCASP_REVTCTL_REG, RXDATADMADIS);
 776	}
 777
 778	for (i = 0; i < mcasp->num_serializer; i++) {
 779		mcasp_set_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
 780			       mcasp->serial_dir[i]);
 781		if (mcasp->serial_dir[i] == TX_MODE &&
 782					tx_ser < max_active_serializers) {
 783			mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AXR(i));
 784			mcasp_mod_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
 785				       DISMOD_LOW, DISMOD_MASK);
 786			tx_ser++;
 787		} else if (mcasp->serial_dir[i] == RX_MODE &&
 788					rx_ser < max_active_serializers) {
 789			mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AXR(i));
 790			rx_ser++;
 791		} else {
 792			mcasp_mod_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
 793				       SRMOD_INACTIVE, SRMOD_MASK);
 794		}
 795	}
 796
 797	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
 798		active_serializers = tx_ser;
 799		numevt = mcasp->txnumevt;
 800		reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
 801	} else {
 802		active_serializers = rx_ser;
 803		numevt = mcasp->rxnumevt;
 804		reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
 805	}
 806
 807	if (active_serializers < max_active_serializers) {
 808		dev_warn(mcasp->dev, "stream has more channels (%d) than are "
 809			 "enabled in mcasp (%d)\n", channels,
 810			 active_serializers * slots);
 811		return -EINVAL;
 812	}
 813
 814	/* AFIFO is not in use */
 815	if (!numevt) {
 816		/* Configure the burst size for platform drivers */
 817		if (active_serializers > 1) {
 818			/*
 819			 * If more than one serializers are in use we have one
 820			 * DMA request to provide data for all serializers.
 821			 * For example if three serializers are enabled the DMA
 822			 * need to transfer three words per DMA request.
 823			 */
 824			dma_data->maxburst = active_serializers;
 825		} else {
 826			dma_data->maxburst = 0;
 827		}
 828		return 0;
 829	}
 830
 831	if (period_words % active_serializers) {
 832		dev_err(mcasp->dev, "Invalid combination of period words and "
 833			"active serializers: %d, %d\n", period_words,
 834			active_serializers);
 835		return -EINVAL;
 836	}
 837
 838	/*
 839	 * Calculate the optimal AFIFO depth for platform side:
 840	 * The number of words for numevt need to be in steps of active
 841	 * serializers.
 842	 */
 843	numevt = (numevt / active_serializers) * active_serializers;
 844
 845	while (period_words % numevt && numevt > 0)
 846		numevt -= active_serializers;
 847	if (numevt <= 0)
 848		numevt = active_serializers;
 849
 850	mcasp_mod_bits(mcasp, reg, active_serializers, NUMDMA_MASK);
 851	mcasp_mod_bits(mcasp, reg, NUMEVT(numevt), NUMEVT_MASK);
 852
 853	/* Configure the burst size for platform drivers */
 854	if (numevt == 1)
 855		numevt = 0;
 856	dma_data->maxburst = numevt;
 857
 858	return 0;
 859}
 860
 861static int mcasp_i2s_hw_param(struct davinci_mcasp *mcasp, int stream,
 862			      int channels)
 863{
 864	int i, active_slots;
 865	int total_slots;
 866	int active_serializers;
 867	u32 mask = 0;
 868	u32 busel = 0;
 869
 870	total_slots = mcasp->tdm_slots;
 
 
 
 
 871
 872	/*
 873	 * If more than one serializer is needed, then use them with
 874	 * all the specified tdm_slots. Otherwise, one serializer can
 875	 * cope with the transaction using just as many slots as there
 876	 * are channels in the stream.
 877	 */
 878	if (mcasp->tdm_mask[stream]) {
 879		active_slots = hweight32(mcasp->tdm_mask[stream]);
 880		active_serializers = (channels + active_slots - 1) /
 881			active_slots;
 882		if (active_serializers == 1) {
 883			active_slots = channels;
 884			for (i = 0; i < total_slots; i++) {
 885				if ((1 << i) & mcasp->tdm_mask[stream]) {
 886					mask |= (1 << i);
 887					if (--active_slots <= 0)
 888						break;
 889				}
 890			}
 891		}
 892	} else {
 893		active_serializers = (channels + total_slots - 1) / total_slots;
 894		if (active_serializers == 1)
 895			active_slots = channels;
 896		else
 897			active_slots = total_slots;
 898
 899		for (i = 0; i < active_slots; i++)
 900			mask |= (1 << i);
 901	}
 902	mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, TX_ASYNC);
 903
 904	if (!mcasp->dat_port)
 905		busel = TXSEL;
 906
 907	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
 908		mcasp_set_reg(mcasp, DAVINCI_MCASP_TXTDM_REG, mask);
 909		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, busel | TXORD);
 910		mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG,
 911			       FSXMOD(total_slots), FSXMOD(0x1FF));
 912	} else if (stream == SNDRV_PCM_STREAM_CAPTURE) {
 913		mcasp_set_reg(mcasp, DAVINCI_MCASP_RXTDM_REG, mask);
 914		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, busel | RXORD);
 915		mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG,
 916			       FSRMOD(total_slots), FSRMOD(0x1FF));
 917		/*
 918		 * If McASP is set to be TX/RX synchronous and the playback is
 919		 * not running already we need to configure the TX slots in
 920		 * order to have correct FSX on the bus
 921		 */
 922		if (mcasp_is_synchronous(mcasp) && !mcasp->channels)
 923			mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG,
 924				       FSXMOD(total_slots), FSXMOD(0x1FF));
 925	}
 926
 927	return 0;
 928}
 929
 930/* S/PDIF */
 931static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp,
 932			      unsigned int rate)
 933{
 934	u32 cs_value = 0;
 935	u8 *cs_bytes = (u8*) &cs_value;
 936
 937	/* Set the TX format : 24 bit right rotation, 32 bit slot, Pad 0
 938	   and LSB first */
 939	mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(6) | TXSSZ(15));
 940
 941	/* Set TX frame synch : DIT Mode, 1 bit width, internal, rising edge */
 942	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE | FSXMOD(0x180));
 943
 944	/* Set the TX tdm : for all the slots */
 945	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXTDM_REG, 0xFFFFFFFF);
 946
 947	/* Set the TX clock controls : div = 1 and internal */
 948	mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE | TX_ASYNC);
 949
 950	mcasp_clr_bits(mcasp, DAVINCI_MCASP_XEVTCTL_REG, TXDATADMADIS);
 951
 952	/* Only 44100 and 48000 are valid, both have the same setting */
 953	mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXDIV(3));
 954
 955	/* Enable the DIT */
 956	mcasp_set_bits(mcasp, DAVINCI_MCASP_TXDITCTL_REG, DITEN);
 957
 958	/* Set S/PDIF channel status bits */
 959	cs_bytes[0] = IEC958_AES0_CON_NOT_COPYRIGHT;
 960	cs_bytes[1] = IEC958_AES1_CON_PCM_CODER;
 961
 962	switch (rate) {
 963	case 22050:
 964		cs_bytes[3] |= IEC958_AES3_CON_FS_22050;
 965		break;
 966	case 24000:
 967		cs_bytes[3] |= IEC958_AES3_CON_FS_24000;
 968		break;
 969	case 32000:
 970		cs_bytes[3] |= IEC958_AES3_CON_FS_32000;
 971		break;
 972	case 44100:
 973		cs_bytes[3] |= IEC958_AES3_CON_FS_44100;
 974		break;
 975	case 48000:
 976		cs_bytes[3] |= IEC958_AES3_CON_FS_48000;
 977		break;
 978	case 88200:
 979		cs_bytes[3] |= IEC958_AES3_CON_FS_88200;
 980		break;
 981	case 96000:
 982		cs_bytes[3] |= IEC958_AES3_CON_FS_96000;
 983		break;
 984	case 176400:
 985		cs_bytes[3] |= IEC958_AES3_CON_FS_176400;
 986		break;
 987	case 192000:
 988		cs_bytes[3] |= IEC958_AES3_CON_FS_192000;
 989		break;
 990	default:
 991		printk(KERN_WARNING "unsupported sampling rate: %d\n", rate);
 992		return -EINVAL;
 993	}
 994
 995	mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRA_REG, cs_value);
 996	mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRB_REG, cs_value);
 997
 998	return 0;
 999}
1000
1001static int davinci_mcasp_calc_clk_div(struct davinci_mcasp *mcasp,
1002				      unsigned int bclk_freq,
1003				      int *error_ppm)
1004{
1005	int div = mcasp->sysclk_freq / bclk_freq;
1006	int rem = mcasp->sysclk_freq % bclk_freq;
1007
1008	if (rem != 0) {
1009		if (div == 0 ||
1010		    ((mcasp->sysclk_freq / div) - bclk_freq) >
1011		    (bclk_freq - (mcasp->sysclk_freq / (div+1)))) {
1012			div++;
1013			rem = rem - bclk_freq;
1014		}
1015	}
1016	if (error_ppm)
1017		*error_ppm =
1018			(div*1000000 + (int)div64_long(1000000LL*rem,
1019						       (int)bclk_freq))
1020			/div - 1000000;
1021
1022	return div;
1023}
1024
1025static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
1026					struct snd_pcm_hw_params *params,
1027					struct snd_soc_dai *cpu_dai)
1028{
1029	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
 
 
 
 
1030	int word_length;
 
 
 
1031	int channels = params_channels(params);
1032	int period_size = params_period_size(params);
1033	int ret;
1034
1035	ret = davinci_mcasp_set_dai_fmt(cpu_dai, mcasp->dai_fmt);
1036	if (ret)
1037		return ret;
1038
1039	/*
1040	 * If mcasp is BCLK master, and a BCLK divider was not provided by
1041	 * the machine driver, we need to calculate the ratio.
1042	 */
1043	if (mcasp->bclk_master && mcasp->bclk_div == 0 && mcasp->sysclk_freq) {
1044		int slots = mcasp->tdm_slots;
1045		int rate = params_rate(params);
1046		int sbits = params_width(params);
1047		int ppm, div;
1048
1049		if (mcasp->slot_width)
1050			sbits = mcasp->slot_width;
1051
1052		div = davinci_mcasp_calc_clk_div(mcasp, rate*sbits*slots,
1053						 &ppm);
1054		if (ppm)
1055			dev_info(mcasp->dev, "Sample-rate is off by %d PPM\n",
1056				 ppm);
1057
1058		__davinci_mcasp_set_clkdiv(cpu_dai, 1, div, 0);
1059	}
1060
1061	ret = mcasp_common_hw_param(mcasp, substream->stream,
1062				    period_size * channels, channels);
1063	if (ret)
1064		return ret;
1065
1066	if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
1067		ret = mcasp_dit_hw_param(mcasp, params_rate(params));
1068	else
1069		ret = mcasp_i2s_hw_param(mcasp, substream->stream,
1070					 channels);
1071
1072	if (ret)
1073		return ret;
1074
1075	switch (params_format(params)) {
1076	case SNDRV_PCM_FORMAT_U8:
1077	case SNDRV_PCM_FORMAT_S8:
 
1078		word_length = 8;
1079		break;
1080
1081	case SNDRV_PCM_FORMAT_U16_LE:
1082	case SNDRV_PCM_FORMAT_S16_LE:
 
1083		word_length = 16;
1084		break;
1085
1086	case SNDRV_PCM_FORMAT_U24_3LE:
1087	case SNDRV_PCM_FORMAT_S24_3LE:
 
1088		word_length = 24;
1089		break;
1090
1091	case SNDRV_PCM_FORMAT_U24_LE:
1092	case SNDRV_PCM_FORMAT_S24_LE:
1093		word_length = 24;
1094		break;
1095
1096	case SNDRV_PCM_FORMAT_U32_LE:
1097	case SNDRV_PCM_FORMAT_S32_LE:
 
1098		word_length = 32;
1099		break;
1100
1101	default:
1102		printk(KERN_WARNING "davinci-mcasp: unsupported PCM format");
1103		return -EINVAL;
1104	}
1105
1106	davinci_config_channel_size(mcasp, word_length);
 
 
 
 
 
 
 
 
 
 
 
 
 
1107
1108	if (mcasp->op_mode == DAVINCI_MCASP_IIS_MODE)
1109		mcasp->channels = channels;
1110
1111	return 0;
1112}
1113
1114static int davinci_mcasp_trigger(struct snd_pcm_substream *substream,
1115				     int cmd, struct snd_soc_dai *cpu_dai)
1116{
1117	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
1118	int ret = 0;
1119
1120	switch (cmd) {
1121	case SNDRV_PCM_TRIGGER_RESUME:
1122	case SNDRV_PCM_TRIGGER_START:
1123	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1124		davinci_mcasp_start(mcasp, substream->stream);
1125		break;
1126	case SNDRV_PCM_TRIGGER_SUSPEND:
1127	case SNDRV_PCM_TRIGGER_STOP:
1128	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1129		davinci_mcasp_stop(mcasp, substream->stream);
1130		break;
1131
1132	default:
1133		ret = -EINVAL;
1134	}
1135
1136	return ret;
1137}
1138
1139static const unsigned int davinci_mcasp_dai_rates[] = {
1140	8000, 11025, 16000, 22050, 32000, 44100, 48000, 64000,
1141	88200, 96000, 176400, 192000,
1142};
1143
1144#define DAVINCI_MAX_RATE_ERROR_PPM 1000
1145
1146static int davinci_mcasp_hw_rule_rate(struct snd_pcm_hw_params *params,
1147				      struct snd_pcm_hw_rule *rule)
1148{
1149	struct davinci_mcasp_ruledata *rd = rule->private;
1150	struct snd_interval *ri =
1151		hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
1152	int sbits = params_width(params);
1153	int slots = rd->mcasp->tdm_slots;
1154	struct snd_interval range;
1155	int i;
1156
1157	if (rd->mcasp->slot_width)
1158		sbits = rd->mcasp->slot_width;
1159
1160	snd_interval_any(&range);
1161	range.empty = 1;
1162
1163	for (i = 0; i < ARRAY_SIZE(davinci_mcasp_dai_rates); i++) {
1164		if (snd_interval_test(ri, davinci_mcasp_dai_rates[i])) {
1165			uint bclk_freq = sbits*slots*
1166				davinci_mcasp_dai_rates[i];
1167			int ppm;
1168
1169			davinci_mcasp_calc_clk_div(rd->mcasp, bclk_freq, &ppm);
1170			if (abs(ppm) < DAVINCI_MAX_RATE_ERROR_PPM) {
1171				if (range.empty) {
1172					range.min = davinci_mcasp_dai_rates[i];
1173					range.empty = 0;
1174				}
1175				range.max = davinci_mcasp_dai_rates[i];
1176			}
1177		}
1178	}
1179
1180	dev_dbg(rd->mcasp->dev,
1181		"Frequencies %d-%d -> %d-%d for %d sbits and %d tdm slots\n",
1182		ri->min, ri->max, range.min, range.max, sbits, slots);
1183
1184	return snd_interval_refine(hw_param_interval(params, rule->var),
1185				   &range);
1186}
1187
1188static int davinci_mcasp_hw_rule_format(struct snd_pcm_hw_params *params,
1189					struct snd_pcm_hw_rule *rule)
1190{
1191	struct davinci_mcasp_ruledata *rd = rule->private;
1192	struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
1193	struct snd_mask nfmt;
1194	int rate = params_rate(params);
1195	int slots = rd->mcasp->tdm_slots;
1196	int i, count = 0;
1197
1198	snd_mask_none(&nfmt);
1199
1200	for (i = 0; i < SNDRV_PCM_FORMAT_LAST; i++) {
1201		if (snd_mask_test(fmt, i)) {
1202			uint sbits = snd_pcm_format_width(i);
1203			int ppm;
1204
1205			if (rd->mcasp->slot_width)
1206				sbits = rd->mcasp->slot_width;
1207
1208			davinci_mcasp_calc_clk_div(rd->mcasp, sbits*slots*rate,
1209						   &ppm);
1210			if (abs(ppm) < DAVINCI_MAX_RATE_ERROR_PPM) {
1211				snd_mask_set(&nfmt, i);
1212				count++;
1213			}
1214		}
1215	}
1216	dev_dbg(rd->mcasp->dev,
1217		"%d possible sample format for %d Hz and %d tdm slots\n",
1218		count, rate, slots);
1219
1220	return snd_mask_refine(fmt, &nfmt);
1221}
1222
1223static int davinci_mcasp_startup(struct snd_pcm_substream *substream,
1224				 struct snd_soc_dai *cpu_dai)
1225{
1226	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
1227	struct davinci_mcasp_ruledata *ruledata =
1228					&mcasp->ruledata[substream->stream];
1229	u32 max_channels = 0;
1230	int i, dir;
1231	int tdm_slots = mcasp->tdm_slots;
1232
1233	if (mcasp->tdm_mask[substream->stream])
1234		tdm_slots = hweight32(mcasp->tdm_mask[substream->stream]);
1235
1236	mcasp->substreams[substream->stream] = substream;
1237
1238	if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
1239		return 0;
1240
1241	/*
1242	 * Limit the maximum allowed channels for the first stream:
1243	 * number of serializers for the direction * tdm slots per serializer
1244	 */
1245	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1246		dir = TX_MODE;
1247	else
1248		dir = RX_MODE;
1249
1250	for (i = 0; i < mcasp->num_serializer; i++) {
1251		if (mcasp->serial_dir[i] == dir)
1252			max_channels++;
1253	}
1254	ruledata->serializers = max_channels;
1255	max_channels *= tdm_slots;
1256	/*
1257	 * If the already active stream has less channels than the calculated
1258	 * limnit based on the seirializers * tdm_slots, we need to use that as
1259	 * a constraint for the second stream.
1260	 * Otherwise (first stream or less allowed channels) we use the
1261	 * calculated constraint.
1262	 */
1263	if (mcasp->channels && mcasp->channels < max_channels)
1264		max_channels = mcasp->channels;
1265	/*
1266	 * But we can always allow channels upto the amount of
1267	 * the available tdm_slots.
1268	 */
1269	if (max_channels < tdm_slots)
1270		max_channels = tdm_slots;
1271
1272	snd_pcm_hw_constraint_minmax(substream->runtime,
1273				     SNDRV_PCM_HW_PARAM_CHANNELS,
1274				     2, max_channels);
1275
1276	snd_pcm_hw_constraint_list(substream->runtime,
1277				   0, SNDRV_PCM_HW_PARAM_CHANNELS,
1278				   &mcasp->chconstr[substream->stream]);
1279
1280	if (mcasp->slot_width)
1281		snd_pcm_hw_constraint_minmax(substream->runtime,
1282					     SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
1283					     8, mcasp->slot_width);
1284
1285	/*
1286	 * If we rely on implicit BCLK divider setting we should
1287	 * set constraints based on what we can provide.
1288	 */
1289	if (mcasp->bclk_master && mcasp->bclk_div == 0 && mcasp->sysclk_freq) {
1290		int ret;
1291
1292		ruledata->mcasp = mcasp;
1293
1294		ret = snd_pcm_hw_rule_add(substream->runtime, 0,
1295					  SNDRV_PCM_HW_PARAM_RATE,
1296					  davinci_mcasp_hw_rule_rate,
1297					  ruledata,
1298					  SNDRV_PCM_HW_PARAM_FORMAT, -1);
1299		if (ret)
1300			return ret;
1301		ret = snd_pcm_hw_rule_add(substream->runtime, 0,
1302					  SNDRV_PCM_HW_PARAM_FORMAT,
1303					  davinci_mcasp_hw_rule_format,
1304					  ruledata,
1305					  SNDRV_PCM_HW_PARAM_RATE, -1);
1306		if (ret)
1307			return ret;
1308	}
1309
1310	return 0;
1311}
1312
1313static void davinci_mcasp_shutdown(struct snd_pcm_substream *substream,
1314				   struct snd_soc_dai *cpu_dai)
1315{
1316	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
1317
1318	mcasp->substreams[substream->stream] = NULL;
1319
1320	if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
1321		return;
1322
1323	if (!cpu_dai->active)
1324		mcasp->channels = 0;
1325}
1326
1327static const struct snd_soc_dai_ops davinci_mcasp_dai_ops = {
1328	.startup	= davinci_mcasp_startup,
1329	.shutdown	= davinci_mcasp_shutdown,
1330	.trigger	= davinci_mcasp_trigger,
1331	.hw_params	= davinci_mcasp_hw_params,
1332	.set_fmt	= davinci_mcasp_set_dai_fmt,
1333	.set_clkdiv	= davinci_mcasp_set_clkdiv,
1334	.set_sysclk	= davinci_mcasp_set_sysclk,
1335	.set_tdm_slot	= davinci_mcasp_set_tdm_slot,
1336};
1337
1338static int davinci_mcasp_dai_probe(struct snd_soc_dai *dai)
1339{
1340	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
1341
1342	dai->playback_dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
1343	dai->capture_dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
1344
1345	return 0;
1346}
1347
1348#ifdef CONFIG_PM_SLEEP
1349static int davinci_mcasp_suspend(struct snd_soc_dai *dai)
1350{
1351	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
1352	struct davinci_mcasp_context *context = &mcasp->context;
1353	u32 reg;
1354	int i;
1355
1356	context->pm_state = pm_runtime_active(mcasp->dev);
1357	if (!context->pm_state)
1358		pm_runtime_get_sync(mcasp->dev);
1359
1360	for (i = 0; i < ARRAY_SIZE(context_regs); i++)
1361		context->config_regs[i] = mcasp_get_reg(mcasp, context_regs[i]);
1362
1363	if (mcasp->txnumevt) {
1364		reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
1365		context->afifo_regs[0] = mcasp_get_reg(mcasp, reg);
1366	}
1367	if (mcasp->rxnumevt) {
1368		reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
1369		context->afifo_regs[1] = mcasp_get_reg(mcasp, reg);
1370	}
1371
1372	for (i = 0; i < mcasp->num_serializer; i++)
1373		context->xrsr_regs[i] = mcasp_get_reg(mcasp,
1374						DAVINCI_MCASP_XRSRCTL_REG(i));
1375
1376	pm_runtime_put_sync(mcasp->dev);
1377
1378	return 0;
1379}
1380
1381static int davinci_mcasp_resume(struct snd_soc_dai *dai)
1382{
1383	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
1384	struct davinci_mcasp_context *context = &mcasp->context;
1385	u32 reg;
1386	int i;
1387
1388	pm_runtime_get_sync(mcasp->dev);
1389
1390	for (i = 0; i < ARRAY_SIZE(context_regs); i++)
1391		mcasp_set_reg(mcasp, context_regs[i], context->config_regs[i]);
1392
1393	if (mcasp->txnumevt) {
1394		reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
1395		mcasp_set_reg(mcasp, reg, context->afifo_regs[0]);
1396	}
1397	if (mcasp->rxnumevt) {
1398		reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
1399		mcasp_set_reg(mcasp, reg, context->afifo_regs[1]);
1400	}
1401
1402	for (i = 0; i < mcasp->num_serializer; i++)
1403		mcasp_set_reg(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
1404			      context->xrsr_regs[i]);
1405
1406	if (!context->pm_state)
1407		pm_runtime_put_sync(mcasp->dev);
 
 
 
 
 
1408
1409	return 0;
1410}
1411#else
1412#define davinci_mcasp_suspend NULL
1413#define davinci_mcasp_resume NULL
1414#endif
1415
1416#define DAVINCI_MCASP_RATES	SNDRV_PCM_RATE_8000_192000
1417
1418#define DAVINCI_MCASP_PCM_FMTS (SNDRV_PCM_FMTBIT_S8 | \
1419				SNDRV_PCM_FMTBIT_U8 | \
1420				SNDRV_PCM_FMTBIT_S16_LE | \
1421				SNDRV_PCM_FMTBIT_U16_LE | \
1422				SNDRV_PCM_FMTBIT_S24_LE | \
1423				SNDRV_PCM_FMTBIT_U24_LE | \
1424				SNDRV_PCM_FMTBIT_S24_3LE | \
1425				SNDRV_PCM_FMTBIT_U24_3LE | \
1426				SNDRV_PCM_FMTBIT_S32_LE | \
1427				SNDRV_PCM_FMTBIT_U32_LE)
1428
1429static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
1430	{
1431		.name		= "davinci-mcasp.0",
1432		.probe		= davinci_mcasp_dai_probe,
1433		.suspend	= davinci_mcasp_suspend,
1434		.resume		= davinci_mcasp_resume,
1435		.playback	= {
1436			.channels_min	= 2,
1437			.channels_max	= 32 * 16,
1438			.rates 		= DAVINCI_MCASP_RATES,
1439			.formats	= DAVINCI_MCASP_PCM_FMTS,
1440		},
1441		.capture 	= {
1442			.channels_min 	= 2,
1443			.channels_max	= 32 * 16,
1444			.rates 		= DAVINCI_MCASP_RATES,
1445			.formats	= DAVINCI_MCASP_PCM_FMTS,
1446		},
1447		.ops 		= &davinci_mcasp_dai_ops,
1448
1449		.symmetric_samplebits	= 1,
1450		.symmetric_rates	= 1,
1451	},
1452	{
1453		.name		= "davinci-mcasp.1",
1454		.probe		= davinci_mcasp_dai_probe,
1455		.playback 	= {
1456			.channels_min	= 1,
1457			.channels_max	= 384,
1458			.rates		= DAVINCI_MCASP_RATES,
1459			.formats	= DAVINCI_MCASP_PCM_FMTS,
1460		},
1461		.ops 		= &davinci_mcasp_dai_ops,
1462	},
1463
1464};
1465
1466static const struct snd_soc_component_driver davinci_mcasp_component = {
1467	.name		= "davinci-mcasp",
1468};
1469
1470/* Some HW specific values and defaults. The rest is filled in from DT. */
1471static struct davinci_mcasp_pdata dm646x_mcasp_pdata = {
1472	.tx_dma_offset = 0x400,
1473	.rx_dma_offset = 0x400,
 
1474	.version = MCASP_VERSION_1,
1475};
1476
1477static struct davinci_mcasp_pdata da830_mcasp_pdata = {
1478	.tx_dma_offset = 0x2000,
1479	.rx_dma_offset = 0x2000,
 
1480	.version = MCASP_VERSION_2,
1481};
1482
1483static struct davinci_mcasp_pdata am33xx_mcasp_pdata = {
1484	.tx_dma_offset = 0,
1485	.rx_dma_offset = 0,
 
1486	.version = MCASP_VERSION_3,
1487};
1488
1489static struct davinci_mcasp_pdata dra7_mcasp_pdata = {
1490	.tx_dma_offset = 0x200,
1491	.rx_dma_offset = 0x284,
 
1492	.version = MCASP_VERSION_4,
1493};
1494
1495static const struct of_device_id mcasp_dt_ids[] = {
1496	{
1497		.compatible = "ti,dm646x-mcasp-audio",
1498		.data = &dm646x_mcasp_pdata,
1499	},
1500	{
1501		.compatible = "ti,da830-mcasp-audio",
1502		.data = &da830_mcasp_pdata,
1503	},
1504	{
1505		.compatible = "ti,am33xx-mcasp-audio",
1506		.data = &am33xx_mcasp_pdata,
1507	},
1508	{
1509		.compatible = "ti,dra7-mcasp-audio",
1510		.data = &dra7_mcasp_pdata,
1511	},
1512	{ /* sentinel */ }
1513};
1514MODULE_DEVICE_TABLE(of, mcasp_dt_ids);
1515
1516static int mcasp_reparent_fck(struct platform_device *pdev)
1517{
1518	struct device_node *node = pdev->dev.of_node;
1519	struct clk *gfclk, *parent_clk;
1520	const char *parent_name;
1521	int ret;
1522
1523	if (!node)
1524		return 0;
1525
1526	parent_name = of_get_property(node, "fck_parent", NULL);
1527	if (!parent_name)
1528		return 0;
1529
1530	dev_warn(&pdev->dev, "Update the bindings to use assigned-clocks!\n");
1531
1532	gfclk = clk_get(&pdev->dev, "fck");
1533	if (IS_ERR(gfclk)) {
1534		dev_err(&pdev->dev, "failed to get fck\n");
1535		return PTR_ERR(gfclk);
1536	}
1537
1538	parent_clk = clk_get(NULL, parent_name);
1539	if (IS_ERR(parent_clk)) {
1540		dev_err(&pdev->dev, "failed to get parent clock\n");
1541		ret = PTR_ERR(parent_clk);
1542		goto err1;
1543	}
1544
1545	ret = clk_set_parent(gfclk, parent_clk);
1546	if (ret) {
1547		dev_err(&pdev->dev, "failed to reparent fck\n");
1548		goto err2;
1549	}
1550
1551err2:
1552	clk_put(parent_clk);
1553err1:
1554	clk_put(gfclk);
1555	return ret;
1556}
1557
1558static struct davinci_mcasp_pdata *davinci_mcasp_set_pdata_from_of(
1559						struct platform_device *pdev)
1560{
1561	struct device_node *np = pdev->dev.of_node;
1562	struct davinci_mcasp_pdata *pdata = NULL;
1563	const struct of_device_id *match =
1564			of_match_device(mcasp_dt_ids, &pdev->dev);
1565	struct of_phandle_args dma_spec;
1566
1567	const u32 *of_serial_dir32;
1568	u32 val;
1569	int i, ret = 0;
1570
1571	if (pdev->dev.platform_data) {
1572		pdata = pdev->dev.platform_data;
1573		return pdata;
1574	} else if (match) {
1575		pdata = (struct davinci_mcasp_pdata*) match->data;
1576	} else {
1577		/* control shouldn't reach here. something is wrong */
1578		ret = -EINVAL;
1579		goto nodata;
1580	}
1581
1582	ret = of_property_read_u32(np, "op-mode", &val);
1583	if (ret >= 0)
1584		pdata->op_mode = val;
1585
1586	ret = of_property_read_u32(np, "tdm-slots", &val);
1587	if (ret >= 0) {
1588		if (val < 2 || val > 32) {
1589			dev_err(&pdev->dev,
1590				"tdm-slots must be in rage [2-32]\n");
1591			ret = -EINVAL;
1592			goto nodata;
1593		}
1594
1595		pdata->tdm_slots = val;
1596	}
1597
1598	of_serial_dir32 = of_get_property(np, "serial-dir", &val);
1599	val /= sizeof(u32);
1600	if (of_serial_dir32) {
1601		u8 *of_serial_dir = devm_kzalloc(&pdev->dev,
1602						 (sizeof(*of_serial_dir) * val),
1603						 GFP_KERNEL);
1604		if (!of_serial_dir) {
1605			ret = -ENOMEM;
1606			goto nodata;
1607		}
1608
1609		for (i = 0; i < val; i++)
1610			of_serial_dir[i] = be32_to_cpup(&of_serial_dir32[i]);
1611
1612		pdata->num_serializer = val;
1613		pdata->serial_dir = of_serial_dir;
1614	}
1615
1616	ret = of_property_match_string(np, "dma-names", "tx");
1617	if (ret < 0)
1618		goto nodata;
1619
1620	ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
1621					 &dma_spec);
1622	if (ret < 0)
1623		goto nodata;
1624
1625	pdata->tx_dma_channel = dma_spec.args[0];
1626
1627	/* RX is not valid in DIT mode */
1628	if (pdata->op_mode != DAVINCI_MCASP_DIT_MODE) {
1629		ret = of_property_match_string(np, "dma-names", "rx");
1630		if (ret < 0)
1631			goto nodata;
1632
1633		ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
1634						 &dma_spec);
1635		if (ret < 0)
1636			goto nodata;
1637
1638		pdata->rx_dma_channel = dma_spec.args[0];
1639	}
1640
1641	ret = of_property_read_u32(np, "tx-num-evt", &val);
1642	if (ret >= 0)
1643		pdata->txnumevt = val;
1644
1645	ret = of_property_read_u32(np, "rx-num-evt", &val);
1646	if (ret >= 0)
1647		pdata->rxnumevt = val;
1648
1649	ret = of_property_read_u32(np, "sram-size-playback", &val);
1650	if (ret >= 0)
1651		pdata->sram_size_playback = val;
1652
1653	ret = of_property_read_u32(np, "sram-size-capture", &val);
1654	if (ret >= 0)
1655		pdata->sram_size_capture = val;
1656
1657	return  pdata;
1658
1659nodata:
1660	if (ret < 0) {
1661		dev_err(&pdev->dev, "Error populating platform data, err %d\n",
1662			ret);
1663		pdata = NULL;
1664	}
1665	return  pdata;
1666}
1667
1668enum {
1669	PCM_EDMA,
1670	PCM_SDMA,
1671};
1672static const char *sdma_prefix = "ti,omap";
1673
1674static int davinci_mcasp_get_dma_type(struct davinci_mcasp *mcasp)
1675{
1676	struct dma_chan *chan;
1677	const char *tmp;
1678	int ret = PCM_EDMA;
1679
1680	if (!mcasp->dev->of_node)
1681		return PCM_EDMA;
1682
1683	tmp = mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK].filter_data;
1684	chan = dma_request_slave_channel_reason(mcasp->dev, tmp);
1685	if (IS_ERR(chan)) {
1686		if (PTR_ERR(chan) != -EPROBE_DEFER)
1687			dev_err(mcasp->dev,
1688				"Can't verify DMA configuration (%ld)\n",
1689				PTR_ERR(chan));
1690		return PTR_ERR(chan);
1691	}
1692	BUG_ON(!chan->device || !chan->device->dev);
1693
1694	if (chan->device->dev->of_node)
1695		ret = of_property_read_string(chan->device->dev->of_node,
1696					      "compatible", &tmp);
1697	else
1698		dev_dbg(mcasp->dev, "DMA controller has no of-node\n");
1699
1700	dma_release_channel(chan);
1701	if (ret)
1702		return ret;
1703
1704	dev_dbg(mcasp->dev, "DMA controller compatible = \"%s\"\n", tmp);
1705	if (!strncmp(tmp, sdma_prefix, strlen(sdma_prefix)))
1706		return PCM_SDMA;
1707
1708	return PCM_EDMA;
1709}
1710
1711static int davinci_mcasp_probe(struct platform_device *pdev)
1712{
 
1713	struct snd_dmaengine_dai_dma_data *dma_data;
1714	struct resource *mem, *res, *dat;
1715	struct davinci_mcasp_pdata *pdata;
1716	struct davinci_mcasp *mcasp;
1717	char *irq_name;
1718	int *dma;
1719	int irq;
1720	int ret;
1721
1722	if (!pdev->dev.platform_data && !pdev->dev.of_node) {
1723		dev_err(&pdev->dev, "No platform data supplied\n");
1724		return -EINVAL;
1725	}
1726
1727	mcasp = devm_kzalloc(&pdev->dev, sizeof(struct davinci_mcasp),
1728			   GFP_KERNEL);
1729	if (!mcasp)
1730		return	-ENOMEM;
1731
1732	pdata = davinci_mcasp_set_pdata_from_of(pdev);
1733	if (!pdata) {
1734		dev_err(&pdev->dev, "no platform data\n");
1735		return -EINVAL;
1736	}
1737
1738	mem = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
1739	if (!mem) {
1740		dev_warn(mcasp->dev,
1741			 "\"mpu\" mem resource not found, using index 0\n");
1742		mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1743		if (!mem) {
1744			dev_err(&pdev->dev, "no mem resource?\n");
1745			return -ENODEV;
1746		}
1747	}
1748
1749	mcasp->base = devm_ioremap_resource(&pdev->dev, mem);
1750	if (IS_ERR(mcasp->base))
1751		return PTR_ERR(mcasp->base);
 
 
 
1752
1753	pm_runtime_enable(&pdev->dev);
1754
1755	mcasp->op_mode = pdata->op_mode;
1756	/* sanity check for tdm slots parameter */
1757	if (mcasp->op_mode == DAVINCI_MCASP_IIS_MODE) {
1758		if (pdata->tdm_slots < 2) {
1759			dev_err(&pdev->dev, "invalid tdm slots: %d\n",
1760				pdata->tdm_slots);
1761			mcasp->tdm_slots = 2;
1762		} else if (pdata->tdm_slots > 32) {
1763			dev_err(&pdev->dev, "invalid tdm slots: %d\n",
1764				pdata->tdm_slots);
1765			mcasp->tdm_slots = 32;
1766		} else {
1767			mcasp->tdm_slots = pdata->tdm_slots;
1768		}
1769	}
1770
 
 
1771	mcasp->num_serializer = pdata->num_serializer;
1772#ifdef CONFIG_PM_SLEEP
1773	mcasp->context.xrsr_regs = devm_kzalloc(&pdev->dev,
1774					sizeof(u32) * mcasp->num_serializer,
1775					GFP_KERNEL);
1776#endif
1777	mcasp->serial_dir = pdata->serial_dir;
1778	mcasp->version = pdata->version;
1779	mcasp->txnumevt = pdata->txnumevt;
1780	mcasp->rxnumevt = pdata->rxnumevt;
1781
1782	mcasp->dev = &pdev->dev;
1783
1784	irq = platform_get_irq_byname(pdev, "common");
1785	if (irq >= 0) {
1786		irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_common",
1787					  dev_name(&pdev->dev));
1788		ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
1789						davinci_mcasp_common_irq_handler,
1790						IRQF_ONESHOT | IRQF_SHARED,
1791						irq_name, mcasp);
1792		if (ret) {
1793			dev_err(&pdev->dev, "common IRQ request failed\n");
1794			goto err;
1795		}
1796
1797		mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK] = XUNDRN;
1798		mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE] = ROVRN;
1799	}
1800
1801	irq = platform_get_irq_byname(pdev, "rx");
1802	if (irq >= 0) {
1803		irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_rx",
1804					  dev_name(&pdev->dev));
1805		ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
1806						davinci_mcasp_rx_irq_handler,
1807						IRQF_ONESHOT, irq_name, mcasp);
1808		if (ret) {
1809			dev_err(&pdev->dev, "RX IRQ request failed\n");
1810			goto err;
1811		}
1812
1813		mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE] = ROVRN;
1814	}
1815
1816	irq = platform_get_irq_byname(pdev, "tx");
1817	if (irq >= 0) {
1818		irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_tx",
1819					  dev_name(&pdev->dev));
1820		ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
1821						davinci_mcasp_tx_irq_handler,
1822						IRQF_ONESHOT, irq_name, mcasp);
1823		if (ret) {
1824			dev_err(&pdev->dev, "TX IRQ request failed\n");
1825			goto err;
1826		}
1827
1828		mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK] = XUNDRN;
1829	}
1830
1831	dat = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat");
1832	if (dat)
1833		mcasp->dat_port = true;
1834
 
1835	dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
 
 
 
 
1836	if (dat)
1837		dma_data->addr = dat->start;
1838	else
1839		dma_data->addr = mem->start + pdata->tx_dma_offset;
 
 
 
1840
1841	dma = &mcasp->dma_request[SNDRV_PCM_STREAM_PLAYBACK];
1842	res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
1843	if (res)
1844		*dma = res->start;
1845	else
1846		*dma = pdata->tx_dma_channel;
1847
1848	/* dmaengine filter data for DT and non-DT boot */
1849	if (pdev->dev.of_node)
1850		dma_data->filter_data = "tx";
1851	else
1852		dma_data->filter_data = dma;
1853
1854	/* RX is not valid in DIT mode */
1855	if (mcasp->op_mode != DAVINCI_MCASP_DIT_MODE) {
1856		dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
1857		if (dat)
1858			dma_data->addr = dat->start;
1859		else
1860			dma_data->addr = mem->start + pdata->rx_dma_offset;
1861
1862		dma = &mcasp->dma_request[SNDRV_PCM_STREAM_CAPTURE];
1863		res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
1864		if (res)
1865			*dma = res->start;
1866		else
1867			*dma = pdata->rx_dma_channel;
1868
1869		/* dmaengine filter data for DT and non-DT boot */
1870		if (pdev->dev.of_node)
1871			dma_data->filter_data = "rx";
1872		else
1873			dma_data->filter_data = dma;
1874	}
1875
1876	if (mcasp->version < MCASP_VERSION_3) {
1877		mcasp->fifo_base = DAVINCI_MCASP_V2_AFIFO_BASE;
1878		/* dma_params->dma_addr is pointing to the data port address */
1879		mcasp->dat_port = true;
1880	} else {
1881		mcasp->fifo_base = DAVINCI_MCASP_V3_AFIFO_BASE;
1882	}
1883
1884	/* Allocate memory for long enough list for all possible
1885	 * scenarios. Maximum number tdm slots is 32 and there cannot
1886	 * be more serializers than given in the configuration.  The
1887	 * serializer directions could be taken into account, but it
1888	 * would make code much more complex and save only couple of
1889	 * bytes.
1890	 */
1891	mcasp->chconstr[SNDRV_PCM_STREAM_PLAYBACK].list =
1892		devm_kzalloc(mcasp->dev, sizeof(unsigned int) *
1893			     (32 + mcasp->num_serializer - 2),
1894			     GFP_KERNEL);
1895
1896	mcasp->chconstr[SNDRV_PCM_STREAM_CAPTURE].list =
1897		devm_kzalloc(mcasp->dev, sizeof(unsigned int) *
1898			     (32 + mcasp->num_serializer - 2),
1899			     GFP_KERNEL);
1900
1901	if (!mcasp->chconstr[SNDRV_PCM_STREAM_PLAYBACK].list ||
1902	    !mcasp->chconstr[SNDRV_PCM_STREAM_CAPTURE].list)
1903		return -ENOMEM;
1904
1905	ret = davinci_mcasp_set_ch_constraints(mcasp);
1906	if (ret)
1907		goto err;
 
 
1908
1909	dev_set_drvdata(&pdev->dev, mcasp);
1910
1911	mcasp_reparent_fck(pdev);
1912
1913	ret = devm_snd_soc_register_component(&pdev->dev,
1914					&davinci_mcasp_component,
1915					&davinci_mcasp_dai[pdata->op_mode], 1);
1916
1917	if (ret != 0)
1918		goto err;
1919
1920	ret = davinci_mcasp_get_dma_type(mcasp);
1921	switch (ret) {
1922	case PCM_EDMA:
1923#if IS_BUILTIN(CONFIG_SND_EDMA_SOC) || \
1924	(IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
1925	 IS_MODULE(CONFIG_SND_EDMA_SOC))
1926		ret = edma_pcm_platform_register(&pdev->dev);
1927#else
1928		dev_err(&pdev->dev, "Missing SND_EDMA_SOC\n");
1929		ret = -EINVAL;
1930		goto err;
1931#endif
1932		break;
1933	case PCM_SDMA:
1934#if IS_BUILTIN(CONFIG_SND_OMAP_SOC) || \
1935	(IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
1936	 IS_MODULE(CONFIG_SND_OMAP_SOC))
1937		ret = omap_pcm_platform_register(&pdev->dev);
1938#else
1939		dev_err(&pdev->dev, "Missing SND_SDMA_SOC\n");
1940		ret = -EINVAL;
1941		goto err;
1942#endif
1943		break;
1944	default:
1945		dev_err(&pdev->dev, "No DMA controller found (%d)\n", ret);
1946	case -EPROBE_DEFER:
1947		goto err;
1948		break;
1949	}
1950
1951	if (ret) {
1952		dev_err(&pdev->dev, "register PCM failed: %d\n", ret);
1953		goto err;
 
 
 
1954	}
1955
1956	return 0;
1957
1958err:
 
 
 
1959	pm_runtime_disable(&pdev->dev);
1960	return ret;
1961}
1962
1963static int davinci_mcasp_remove(struct platform_device *pdev)
1964{
 
 
 
 
 
 
 
1965	pm_runtime_disable(&pdev->dev);
1966
1967	return 0;
1968}
1969
1970static struct platform_driver davinci_mcasp_driver = {
1971	.probe		= davinci_mcasp_probe,
1972	.remove		= davinci_mcasp_remove,
1973	.driver		= {
1974		.name	= "davinci-mcasp",
 
1975		.of_match_table = mcasp_dt_ids,
1976	},
1977};
1978
1979module_platform_driver(davinci_mcasp_driver);
1980
1981MODULE_AUTHOR("Steve Chen");
1982MODULE_DESCRIPTION("TI DAVINCI McASP SoC Interface");
1983MODULE_LICENSE("GPL");
v3.15
   1/*
   2 * ALSA SoC McASP Audio Layer for TI DAVINCI processor
   3 *
   4 * Multi-channel Audio Serial Port Driver
   5 *
   6 * Author: Nirmal Pandey <n-pandey@ti.com>,
   7 *         Suresh Rajashekara <suresh.r@ti.com>
   8 *         Steve Chen <schen@.mvista.com>
   9 *
  10 * Copyright:   (C) 2009 MontaVista Software, Inc., <source@mvista.com>
  11 * Copyright:   (C) 2009  Texas Instruments, India
  12 *
  13 * This program is free software; you can redistribute it and/or modify
  14 * it under the terms of the GNU General Public License version 2 as
  15 * published by the Free Software Foundation.
  16 */
  17
  18#include <linux/init.h>
  19#include <linux/module.h>
  20#include <linux/device.h>
  21#include <linux/slab.h>
  22#include <linux/delay.h>
  23#include <linux/io.h>
  24#include <linux/clk.h>
  25#include <linux/pm_runtime.h>
  26#include <linux/of.h>
  27#include <linux/of_platform.h>
  28#include <linux/of_device.h>
 
 
  29
 
  30#include <sound/core.h>
  31#include <sound/pcm.h>
  32#include <sound/pcm_params.h>
  33#include <sound/initval.h>
  34#include <sound/soc.h>
  35#include <sound/dmaengine_pcm.h>
 
  36
  37#include "davinci-pcm.h"
  38#include "davinci-mcasp.h"
  39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  40struct davinci_mcasp_context {
  41	u32	txfmtctl;
  42	u32	rxfmtctl;
  43	u32	txfmt;
  44	u32	rxfmt;
  45	u32	aclkxctl;
  46	u32	aclkrctl;
  47	u32	pdir;
 
 
  48};
  49
  50struct davinci_mcasp {
  51	struct davinci_pcm_dma_params dma_params[2];
  52	struct snd_dmaengine_dai_dma_data dma_data[2];
  53	void __iomem *base;
  54	u32 fifo_base;
  55	struct device *dev;
 
 
  56
  57	/* McASP specific data */
  58	int	tdm_slots;
 
 
  59	u8	op_mode;
  60	u8	num_serializer;
  61	u8	*serial_dir;
  62	u8	version;
  63	u16	bclk_lrclk_ratio;
  64	int	streams;
 
 
  65
  66	int	sysclk_freq;
  67	bool	bclk_master;
  68
  69	/* McASP FIFO related */
  70	u8	txnumevt;
  71	u8	rxnumevt;
  72
  73	bool	dat_port;
  74
 
 
 
  75#ifdef CONFIG_PM_SLEEP
  76	struct davinci_mcasp_context context;
  77#endif
 
 
 
  78};
  79
  80static inline void mcasp_set_bits(struct davinci_mcasp *mcasp, u32 offset,
  81				  u32 val)
  82{
  83	void __iomem *reg = mcasp->base + offset;
  84	__raw_writel(__raw_readl(reg) | val, reg);
  85}
  86
  87static inline void mcasp_clr_bits(struct davinci_mcasp *mcasp, u32 offset,
  88				  u32 val)
  89{
  90	void __iomem *reg = mcasp->base + offset;
  91	__raw_writel((__raw_readl(reg) & ~(val)), reg);
  92}
  93
  94static inline void mcasp_mod_bits(struct davinci_mcasp *mcasp, u32 offset,
  95				  u32 val, u32 mask)
  96{
  97	void __iomem *reg = mcasp->base + offset;
  98	__raw_writel((__raw_readl(reg) & ~mask) | val, reg);
  99}
 100
 101static inline void mcasp_set_reg(struct davinci_mcasp *mcasp, u32 offset,
 102				 u32 val)
 103{
 104	__raw_writel(val, mcasp->base + offset);
 105}
 106
 107static inline u32 mcasp_get_reg(struct davinci_mcasp *mcasp, u32 offset)
 108{
 109	return (u32)__raw_readl(mcasp->base + offset);
 110}
 111
 112static void mcasp_set_ctl_reg(struct davinci_mcasp *mcasp, u32 ctl_reg, u32 val)
 113{
 114	int i = 0;
 115
 116	mcasp_set_bits(mcasp, ctl_reg, val);
 117
 118	/* programming GBLCTL needs to read back from GBLCTL and verfiy */
 119	/* loop count is to avoid the lock-up */
 120	for (i = 0; i < 1000; i++) {
 121		if ((mcasp_get_reg(mcasp, ctl_reg) & val) == val)
 122			break;
 123	}
 124
 125	if (i == 1000 && ((mcasp_get_reg(mcasp, ctl_reg) & val) != val))
 126		printk(KERN_ERR "GBLCTL write error\n");
 127}
 128
 129static bool mcasp_is_synchronous(struct davinci_mcasp *mcasp)
 130{
 131	u32 rxfmctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMCTL_REG);
 132	u32 aclkxctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKXCTL_REG);
 133
 134	return !(aclkxctl & TX_ASYNC) && rxfmctl & AFSRE;
 135}
 136
 137static void mcasp_start_rx(struct davinci_mcasp *mcasp)
 138{
 
 
 
 
 
 
 
 
 139	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXHCLKRST);
 140	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXCLKRST);
 141
 142	/*
 143	 * When ASYNC == 0 the transmit and receive sections operate
 144	 * synchronously from the transmit clock and frame sync. We need to make
 145	 * sure that the TX signlas are enabled when starting reception.
 146	 */
 147	if (mcasp_is_synchronous(mcasp)) {
 148		mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXHCLKRST);
 149		mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXCLKRST);
 150	}
 151
 
 152	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXSERCLR);
 153	mcasp_set_reg(mcasp, DAVINCI_MCASP_RXBUF_REG, 0);
 154
 155	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXSMRST);
 
 156	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXFSRST);
 157	mcasp_set_reg(mcasp, DAVINCI_MCASP_RXBUF_REG, 0);
 158
 159	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXSMRST);
 160	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXFSRST);
 161
 162	if (mcasp_is_synchronous(mcasp))
 163		mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXFSRST);
 
 
 
 
 164}
 165
 166static void mcasp_start_tx(struct davinci_mcasp *mcasp)
 167{
 168	u8 offset = 0, i;
 169	u32 cnt;
 170
 
 
 
 
 
 
 
 
 171	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXHCLKRST);
 172	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXCLKRST);
 
 173	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXSERCLR);
 174	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXBUF_REG, 0);
 175
 
 
 
 
 
 
 
 176	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXSMRST);
 
 177	mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXFSRST);
 178	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXBUF_REG, 0);
 179	for (i = 0; i < mcasp->num_serializer; i++) {
 180		if (mcasp->serial_dir[i] == TX_MODE) {
 181			offset = i;
 182			break;
 183		}
 184	}
 185
 186	/* wait for TX ready */
 187	cnt = 0;
 188	while (!(mcasp_get_reg(mcasp, DAVINCI_MCASP_XRSRCTL_REG(offset)) &
 189		 TXSTATE) && (cnt < 100000))
 190		cnt++;
 191
 192	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXBUF_REG, 0);
 
 
 193}
 194
 195static void davinci_mcasp_start(struct davinci_mcasp *mcasp, int stream)
 196{
 197	u32 reg;
 198
 199	mcasp->streams++;
 200
 201	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
 202		if (mcasp->txnumevt) {	/* enable FIFO */
 203			reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
 204			mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
 205			mcasp_set_bits(mcasp, reg, FIFO_ENABLE);
 206		}
 207		mcasp_start_tx(mcasp);
 208	} else {
 209		if (mcasp->rxnumevt) {	/* enable FIFO */
 210			reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
 211			mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
 212			mcasp_set_bits(mcasp, reg, FIFO_ENABLE);
 213		}
 214		mcasp_start_rx(mcasp);
 215	}
 216}
 217
 218static void mcasp_stop_rx(struct davinci_mcasp *mcasp)
 219{
 
 
 
 
 220	/*
 221	 * In synchronous mode stop the TX clocks if no other stream is
 222	 * running
 223	 */
 224	if (mcasp_is_synchronous(mcasp) && !mcasp->streams)
 225		mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, 0);
 226
 227	mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, 0);
 228	mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, 0xFFFFFFFF);
 
 
 
 
 
 
 229}
 230
 231static void mcasp_stop_tx(struct davinci_mcasp *mcasp)
 232{
 233	u32 val = 0;
 234
 
 
 
 
 235	/*
 236	 * In synchronous mode keep TX clocks running if the capture stream is
 237	 * still running.
 238	 */
 239	if (mcasp_is_synchronous(mcasp) && mcasp->streams)
 240		val =  TXHCLKRST | TXCLKRST | TXFSRST;
 241
 242	mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, val);
 243	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, 0xFFFFFFFF);
 
 
 
 
 
 
 244}
 245
 246static void davinci_mcasp_stop(struct davinci_mcasp *mcasp, int stream)
 247{
 248	u32 reg;
 249
 250	mcasp->streams--;
 
 
 
 
 251
 252	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
 253		if (mcasp->txnumevt) {	/* disable FIFO */
 254			reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
 255			mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 256		}
 257		mcasp_stop_tx(mcasp);
 258	} else {
 259		if (mcasp->rxnumevt) {	/* disable FIFO */
 260			reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
 261			mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 262		}
 263		mcasp_stop_rx(mcasp);
 264	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 265}
 266
 267static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
 268					 unsigned int fmt)
 269{
 270	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
 271	int ret = 0;
 
 
 
 
 
 
 272
 273	pm_runtime_get_sync(mcasp->dev);
 274	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
 
 
 
 
 
 
 275	case SND_SOC_DAIFMT_DSP_B:
 276	case SND_SOC_DAIFMT_AC97:
 277		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
 278		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
 
 
 279		break;
 280	default:
 
 
 
 
 
 
 
 
 
 281		/* configure a full-word SYNC pulse (LRCLK) */
 282		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
 283		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
 284
 285		/* make 1st data bit occur one ACLK cycle after the frame sync */
 286		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, FSXDLY(1));
 287		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, FSRDLY(1));
 288		break;
 
 
 
 289	}
 290
 
 
 
 
 
 291	switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
 292	case SND_SOC_DAIFMT_CBS_CFS:
 293		/* codec is clock and frame slave */
 294		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
 295		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
 296
 297		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
 298		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
 299
 300		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, ACLKX | ACLKR);
 301		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AFSX | AFSR);
 302		mcasp->bclk_master = 1;
 303		break;
 
 
 
 
 
 
 
 
 
 
 
 
 304	case SND_SOC_DAIFMT_CBM_CFS:
 305		/* codec is clock master and frame slave */
 306		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
 307		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
 308
 309		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
 310		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
 311
 312		mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, ACLKX | ACLKR);
 313		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AFSX | AFSR);
 314		mcasp->bclk_master = 0;
 315		break;
 316	case SND_SOC_DAIFMT_CBM_CFM:
 317		/* codec is clock and frame master */
 318		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
 319		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
 320
 321		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
 322		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
 323
 324		mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG,
 325			       ACLKX | AHCLKX | AFSX | ACLKR | AHCLKR | AFSR);
 326		mcasp->bclk_master = 0;
 327		break;
 328
 329	default:
 330		ret = -EINVAL;
 331		goto out;
 332	}
 333
 334	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
 335	case SND_SOC_DAIFMT_IB_NF:
 336		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
 337		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
 338
 339		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
 340		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
 341		break;
 342
 343	case SND_SOC_DAIFMT_NB_IF:
 344		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
 345		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
 346
 347		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
 348		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
 349		break;
 350
 351	case SND_SOC_DAIFMT_IB_IF:
 352		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
 353		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
 354
 355		mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
 356		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
 357		break;
 358
 359	case SND_SOC_DAIFMT_NB_NF:
 360		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
 361		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
 362
 363		mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
 364		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
 365		break;
 366
 367	default:
 368		ret = -EINVAL;
 369		break;
 
 
 
 
 
 
 
 
 
 
 
 370	}
 
 
 371out:
 372	pm_runtime_put_sync(mcasp->dev);
 373	return ret;
 374}
 375
 376static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id, int div)
 
 377{
 378	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
 379
 
 380	switch (div_id) {
 381	case 0:		/* MCLK divider */
 382		mcasp_mod_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG,
 383			       AHCLKXDIV(div - 1), AHCLKXDIV_MASK);
 384		mcasp_mod_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG,
 385			       AHCLKRDIV(div - 1), AHCLKRDIV_MASK);
 386		break;
 387
 388	case 1:		/* BCLK divider */
 389		mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG,
 390			       ACLKXDIV(div - 1), ACLKXDIV_MASK);
 391		mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG,
 392			       ACLKRDIV(div - 1), ACLKRDIV_MASK);
 
 
 393		break;
 394
 395	case 2:		/* BCLK/LRCLK ratio */
 396		mcasp->bclk_lrclk_ratio = div;
 
 
 
 
 
 
 
 
 
 
 
 
 
 397		break;
 398
 399	default:
 400		return -EINVAL;
 401	}
 402
 
 403	return 0;
 404}
 405
 
 
 
 
 
 
 406static int davinci_mcasp_set_sysclk(struct snd_soc_dai *dai, int clk_id,
 407				    unsigned int freq, int dir)
 408{
 409	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
 410
 
 411	if (dir == SND_SOC_CLOCK_OUT) {
 412		mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
 413		mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
 414		mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AHCLKX);
 415	} else {
 416		mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
 417		mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
 418		mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AHCLKX);
 419	}
 420
 421	mcasp->sysclk_freq = freq;
 422
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 423	return 0;
 424}
 425
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 426static int davinci_config_channel_size(struct davinci_mcasp *mcasp,
 427				       int word_length)
 428{
 429	u32 fmt;
 430	u32 tx_rotate = (word_length / 4) & 0x7;
 431	u32 rx_rotate = (32 - word_length) / 4;
 432	u32 mask = (1ULL << word_length) - 1;
 
 
 
 
 
 
 
 
 
 
 
 433
 434	/*
 435	 * if s BCLK-to-LRCLK ratio has been configured via the set_clkdiv()
 436	 * callback, take it into account here. That allows us to for example
 437	 * send 32 bits per channel to the codec, while only 16 of them carry
 438	 * audio payload.
 439	 * The clock ratio is given for a full period of data (for I2S format
 440	 * both left and right channels), so it has to be divided by number of
 441	 * tdm-slots (for I2S - divided by 2).
 442	 */
 443	if (mcasp->bclk_lrclk_ratio)
 444		word_length = mcasp->bclk_lrclk_ratio / mcasp->tdm_slots;
 
 
 
 
 
 
 
 445
 446	/* mapping of the XSSZ bit-field as described in the datasheet */
 447	fmt = (word_length >> 1) - 1;
 448
 449	if (mcasp->op_mode != DAVINCI_MCASP_DIT_MODE) {
 450		mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, RXSSZ(fmt),
 451			       RXSSZ(0x0F));
 452		mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXSSZ(fmt),
 453			       TXSSZ(0x0F));
 454		mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(tx_rotate),
 455			       TXROT(7));
 456		mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, RXROT(rx_rotate),
 457			       RXROT(7));
 458		mcasp_set_reg(mcasp, DAVINCI_MCASP_RXMASK_REG, mask);
 459	}
 460
 461	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXMASK_REG, mask);
 462
 463	return 0;
 464}
 465
 466static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
 467				    int channels)
 468{
 
 469	int i;
 470	u8 tx_ser = 0;
 471	u8 rx_ser = 0;
 472	u8 ser;
 473	u8 slots = mcasp->tdm_slots;
 474	u8 max_active_serializers = (channels + slots - 1) / slots;
 
 475	u32 reg;
 476	/* Default configuration */
 477	if (mcasp->version != MCASP_VERSION_4)
 478		mcasp_set_bits(mcasp, DAVINCI_MCASP_PWREMUMGT_REG, MCASP_SOFT);
 479
 480	/* All PINS as McASP */
 481	mcasp_set_reg(mcasp, DAVINCI_MCASP_PFUNC_REG, 0x00000000);
 482
 483	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
 484		mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, 0xFFFFFFFF);
 485		mcasp_clr_bits(mcasp, DAVINCI_MCASP_XEVTCTL_REG, TXDATADMADIS);
 486	} else {
 487		mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, 0xFFFFFFFF);
 488		mcasp_clr_bits(mcasp, DAVINCI_MCASP_REVTCTL_REG, RXDATADMADIS);
 489	}
 490
 491	for (i = 0; i < mcasp->num_serializer; i++) {
 492		mcasp_set_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
 493			       mcasp->serial_dir[i]);
 494		if (mcasp->serial_dir[i] == TX_MODE &&
 495					tx_ser < max_active_serializers) {
 496			mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AXR(i));
 
 
 497			tx_ser++;
 498		} else if (mcasp->serial_dir[i] == RX_MODE &&
 499					rx_ser < max_active_serializers) {
 500			mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AXR(i));
 501			rx_ser++;
 502		} else {
 503			mcasp_mod_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
 504				       SRMOD_INACTIVE, SRMOD_MASK);
 505		}
 506	}
 507
 508	if (stream == SNDRV_PCM_STREAM_PLAYBACK)
 509		ser = tx_ser;
 510	else
 511		ser = rx_ser;
 
 
 
 
 
 512
 513	if (ser < max_active_serializers) {
 514		dev_warn(mcasp->dev, "stream has more channels (%d) than are "
 515			"enabled in mcasp (%d)\n", channels, ser * slots);
 
 516		return -EINVAL;
 517	}
 518
 519	if (mcasp->txnumevt && stream == SNDRV_PCM_STREAM_PLAYBACK) {
 520		if (mcasp->txnumevt * tx_ser > 64)
 521			mcasp->txnumevt = 1;
 
 
 
 
 
 
 
 
 
 
 
 
 
 522
 523		reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
 524		mcasp_mod_bits(mcasp, reg, tx_ser, NUMDMA_MASK);
 525		mcasp_mod_bits(mcasp, reg, ((mcasp->txnumevt * tx_ser) << 8),
 526			       NUMEVT_MASK);
 
 527	}
 528
 529	if (mcasp->rxnumevt && stream == SNDRV_PCM_STREAM_CAPTURE) {
 530		if (mcasp->rxnumevt * rx_ser > 64)
 531			mcasp->rxnumevt = 1;
 
 
 
 532
 533		reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
 534		mcasp_mod_bits(mcasp, reg, rx_ser, NUMDMA_MASK);
 535		mcasp_mod_bits(mcasp, reg, ((mcasp->rxnumevt * rx_ser) << 8),
 536			       NUMEVT_MASK);
 537	}
 
 
 
 
 
 
 
 538
 539	return 0;
 540}
 541
 542static int mcasp_i2s_hw_param(struct davinci_mcasp *mcasp, int stream)
 
 543{
 544	int i, active_slots;
 
 
 545	u32 mask = 0;
 546	u32 busel = 0;
 547
 548	if ((mcasp->tdm_slots < 2) || (mcasp->tdm_slots > 32)) {
 549		dev_err(mcasp->dev, "tdm slot %d not supported\n",
 550			mcasp->tdm_slots);
 551		return -EINVAL;
 552	}
 553
 554	active_slots = (mcasp->tdm_slots > 31) ? 32 : mcasp->tdm_slots;
 555	for (i = 0; i < active_slots; i++)
 556		mask |= (1 << i);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 557
 
 
 
 558	mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, TX_ASYNC);
 559
 560	if (!mcasp->dat_port)
 561		busel = TXSEL;
 562
 563	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXTDM_REG, mask);
 564	mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, busel | TXORD);
 565	mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG,
 566		       FSXMOD(mcasp->tdm_slots), FSXMOD(0x1FF));
 567
 568	mcasp_set_reg(mcasp, DAVINCI_MCASP_RXTDM_REG, mask);
 569	mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, busel | RXORD);
 570	mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG,
 571		       FSRMOD(mcasp->tdm_slots), FSRMOD(0x1FF));
 
 
 
 
 
 
 
 
 
 
 572
 573	return 0;
 574}
 575
 576/* S/PDIF */
 577static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp)
 
 578{
 
 
 
 579	/* Set the TX format : 24 bit right rotation, 32 bit slot, Pad 0
 580	   and LSB first */
 581	mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(6) | TXSSZ(15));
 582
 583	/* Set TX frame synch : DIT Mode, 1 bit width, internal, rising edge */
 584	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE | FSXMOD(0x180));
 585
 586	/* Set the TX tdm : for all the slots */
 587	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXTDM_REG, 0xFFFFFFFF);
 588
 589	/* Set the TX clock controls : div = 1 and internal */
 590	mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE | TX_ASYNC);
 591
 592	mcasp_clr_bits(mcasp, DAVINCI_MCASP_XEVTCTL_REG, TXDATADMADIS);
 593
 594	/* Only 44100 and 48000 are valid, both have the same setting */
 595	mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXDIV(3));
 596
 597	/* Enable the DIT */
 598	mcasp_set_bits(mcasp, DAVINCI_MCASP_TXDITCTL_REG, DITEN);
 599
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 600	return 0;
 601}
 602
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 603static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
 604					struct snd_pcm_hw_params *params,
 605					struct snd_soc_dai *cpu_dai)
 606{
 607	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
 608	struct davinci_pcm_dma_params *dma_params =
 609					&mcasp->dma_params[substream->stream];
 610	struct snd_dmaengine_dai_dma_data *dma_data =
 611					&mcasp->dma_data[substream->stream];
 612	int word_length;
 613	u8 fifo_level;
 614	u8 slots = mcasp->tdm_slots;
 615	u8 active_serializers;
 616	int channels = params_channels(params);
 
 617	int ret;
 618
 619	/* If mcasp is BCLK master we need to set BCLK divider */
 620	if (mcasp->bclk_master) {
 621		unsigned int bclk_freq = snd_soc_params_to_bclk(params);
 622		if (mcasp->sysclk_freq % bclk_freq != 0) {
 623			dev_err(mcasp->dev, "Can't produce requred BCLK\n");
 624			return -EINVAL;
 625		}
 626		davinci_mcasp_set_clkdiv(
 627			cpu_dai, 1, mcasp->sysclk_freq / bclk_freq);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 628	}
 629
 630	ret = mcasp_common_hw_param(mcasp, substream->stream, channels);
 
 631	if (ret)
 632		return ret;
 633
 634	if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
 635		ret = mcasp_dit_hw_param(mcasp);
 636	else
 637		ret = mcasp_i2s_hw_param(mcasp, substream->stream);
 
 638
 639	if (ret)
 640		return ret;
 641
 642	switch (params_format(params)) {
 643	case SNDRV_PCM_FORMAT_U8:
 644	case SNDRV_PCM_FORMAT_S8:
 645		dma_params->data_type = 1;
 646		word_length = 8;
 647		break;
 648
 649	case SNDRV_PCM_FORMAT_U16_LE:
 650	case SNDRV_PCM_FORMAT_S16_LE:
 651		dma_params->data_type = 2;
 652		word_length = 16;
 653		break;
 654
 655	case SNDRV_PCM_FORMAT_U24_3LE:
 656	case SNDRV_PCM_FORMAT_S24_3LE:
 657		dma_params->data_type = 3;
 658		word_length = 24;
 659		break;
 660
 661	case SNDRV_PCM_FORMAT_U24_LE:
 662	case SNDRV_PCM_FORMAT_S24_LE:
 
 
 
 663	case SNDRV_PCM_FORMAT_U32_LE:
 664	case SNDRV_PCM_FORMAT_S32_LE:
 665		dma_params->data_type = 4;
 666		word_length = 32;
 667		break;
 668
 669	default:
 670		printk(KERN_WARNING "davinci-mcasp: unsupported PCM format");
 671		return -EINVAL;
 672	}
 673
 674	/* Calculate FIFO level */
 675	active_serializers = (channels + slots - 1) / slots;
 676	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
 677		fifo_level = mcasp->txnumevt * active_serializers;
 678	else
 679		fifo_level = mcasp->rxnumevt * active_serializers;
 680
 681	if (mcasp->version == MCASP_VERSION_2 && !fifo_level)
 682		dma_params->acnt = 4;
 683	else
 684		dma_params->acnt = dma_params->data_type;
 685
 686	dma_params->fifo_level = fifo_level;
 687	dma_data->maxburst = fifo_level;
 688
 689	davinci_config_channel_size(mcasp, word_length);
 
 690
 691	return 0;
 692}
 693
 694static int davinci_mcasp_trigger(struct snd_pcm_substream *substream,
 695				     int cmd, struct snd_soc_dai *cpu_dai)
 696{
 697	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
 698	int ret = 0;
 699
 700	switch (cmd) {
 701	case SNDRV_PCM_TRIGGER_RESUME:
 702	case SNDRV_PCM_TRIGGER_START:
 703	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
 704		davinci_mcasp_start(mcasp, substream->stream);
 705		break;
 706	case SNDRV_PCM_TRIGGER_SUSPEND:
 707	case SNDRV_PCM_TRIGGER_STOP:
 708	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
 709		davinci_mcasp_stop(mcasp, substream->stream);
 710		break;
 711
 712	default:
 713		ret = -EINVAL;
 714	}
 715
 716	return ret;
 717}
 718
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 719static int davinci_mcasp_startup(struct snd_pcm_substream *substream,
 720				 struct snd_soc_dai *dai)
 721{
 722	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
 
 
 
 
 
 
 
 
 
 
 
 
 
 723
 724	if (mcasp->version == MCASP_VERSION_4)
 725		snd_soc_dai_set_dma_data(dai, substream,
 726					&mcasp->dma_data[substream->stream]);
 
 
 
 727	else
 728		snd_soc_dai_set_dma_data(dai, substream, mcasp->dma_params);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 729
 730	return 0;
 731}
 732
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 733static const struct snd_soc_dai_ops davinci_mcasp_dai_ops = {
 734	.startup	= davinci_mcasp_startup,
 
 735	.trigger	= davinci_mcasp_trigger,
 736	.hw_params	= davinci_mcasp_hw_params,
 737	.set_fmt	= davinci_mcasp_set_dai_fmt,
 738	.set_clkdiv	= davinci_mcasp_set_clkdiv,
 739	.set_sysclk	= davinci_mcasp_set_sysclk,
 
 740};
 741
 
 
 
 
 
 
 
 
 
 
 742#ifdef CONFIG_PM_SLEEP
 743static int davinci_mcasp_suspend(struct snd_soc_dai *dai)
 744{
 745	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
 746	struct davinci_mcasp_context *context = &mcasp->context;
 
 
 747
 748	context->txfmtctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_TXFMCTL_REG);
 749	context->rxfmtctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMCTL_REG);
 750	context->txfmt = mcasp_get_reg(mcasp, DAVINCI_MCASP_TXFMT_REG);
 751	context->rxfmt = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMT_REG);
 752	context->aclkxctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKXCTL_REG);
 753	context->aclkrctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKRCTL_REG);
 754	context->pdir = mcasp_get_reg(mcasp, DAVINCI_MCASP_PDIR_REG);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 755
 756	return 0;
 757}
 758
 759static int davinci_mcasp_resume(struct snd_soc_dai *dai)
 760{
 761	struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
 762	struct davinci_mcasp_context *context = &mcasp->context;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 763
 764	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXFMCTL_REG, context->txfmtctl);
 765	mcasp_set_reg(mcasp, DAVINCI_MCASP_RXFMCTL_REG, context->rxfmtctl);
 766	mcasp_set_reg(mcasp, DAVINCI_MCASP_TXFMT_REG, context->txfmt);
 767	mcasp_set_reg(mcasp, DAVINCI_MCASP_RXFMT_REG, context->rxfmt);
 768	mcasp_set_reg(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, context->aclkxctl);
 769	mcasp_set_reg(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, context->aclkrctl);
 770	mcasp_set_reg(mcasp, DAVINCI_MCASP_PDIR_REG, context->pdir);
 771
 772	return 0;
 773}
 774#else
 775#define davinci_mcasp_suspend NULL
 776#define davinci_mcasp_resume NULL
 777#endif
 778
 779#define DAVINCI_MCASP_RATES	SNDRV_PCM_RATE_8000_192000
 780
 781#define DAVINCI_MCASP_PCM_FMTS (SNDRV_PCM_FMTBIT_S8 | \
 782				SNDRV_PCM_FMTBIT_U8 | \
 783				SNDRV_PCM_FMTBIT_S16_LE | \
 784				SNDRV_PCM_FMTBIT_U16_LE | \
 785				SNDRV_PCM_FMTBIT_S24_LE | \
 786				SNDRV_PCM_FMTBIT_U24_LE | \
 787				SNDRV_PCM_FMTBIT_S24_3LE | \
 788				SNDRV_PCM_FMTBIT_U24_3LE | \
 789				SNDRV_PCM_FMTBIT_S32_LE | \
 790				SNDRV_PCM_FMTBIT_U32_LE)
 791
 792static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
 793	{
 794		.name		= "davinci-mcasp.0",
 
 795		.suspend	= davinci_mcasp_suspend,
 796		.resume		= davinci_mcasp_resume,
 797		.playback	= {
 798			.channels_min	= 2,
 799			.channels_max	= 32 * 16,
 800			.rates 		= DAVINCI_MCASP_RATES,
 801			.formats	= DAVINCI_MCASP_PCM_FMTS,
 802		},
 803		.capture 	= {
 804			.channels_min 	= 2,
 805			.channels_max	= 32 * 16,
 806			.rates 		= DAVINCI_MCASP_RATES,
 807			.formats	= DAVINCI_MCASP_PCM_FMTS,
 808		},
 809		.ops 		= &davinci_mcasp_dai_ops,
 810
 
 
 811	},
 812	{
 813		.name		= "davinci-mcasp.1",
 
 814		.playback 	= {
 815			.channels_min	= 1,
 816			.channels_max	= 384,
 817			.rates		= DAVINCI_MCASP_RATES,
 818			.formats	= DAVINCI_MCASP_PCM_FMTS,
 819		},
 820		.ops 		= &davinci_mcasp_dai_ops,
 821	},
 822
 823};
 824
 825static const struct snd_soc_component_driver davinci_mcasp_component = {
 826	.name		= "davinci-mcasp",
 827};
 828
 829/* Some HW specific values and defaults. The rest is filled in from DT. */
 830static struct davinci_mcasp_pdata dm646x_mcasp_pdata = {
 831	.tx_dma_offset = 0x400,
 832	.rx_dma_offset = 0x400,
 833	.asp_chan_q = EVENTQ_0,
 834	.version = MCASP_VERSION_1,
 835};
 836
 837static struct davinci_mcasp_pdata da830_mcasp_pdata = {
 838	.tx_dma_offset = 0x2000,
 839	.rx_dma_offset = 0x2000,
 840	.asp_chan_q = EVENTQ_0,
 841	.version = MCASP_VERSION_2,
 842};
 843
 844static struct davinci_mcasp_pdata am33xx_mcasp_pdata = {
 845	.tx_dma_offset = 0,
 846	.rx_dma_offset = 0,
 847	.asp_chan_q = EVENTQ_0,
 848	.version = MCASP_VERSION_3,
 849};
 850
 851static struct davinci_mcasp_pdata dra7_mcasp_pdata = {
 852	.tx_dma_offset = 0x200,
 853	.rx_dma_offset = 0x284,
 854	.asp_chan_q = EVENTQ_0,
 855	.version = MCASP_VERSION_4,
 856};
 857
 858static const struct of_device_id mcasp_dt_ids[] = {
 859	{
 860		.compatible = "ti,dm646x-mcasp-audio",
 861		.data = &dm646x_mcasp_pdata,
 862	},
 863	{
 864		.compatible = "ti,da830-mcasp-audio",
 865		.data = &da830_mcasp_pdata,
 866	},
 867	{
 868		.compatible = "ti,am33xx-mcasp-audio",
 869		.data = &am33xx_mcasp_pdata,
 870	},
 871	{
 872		.compatible = "ti,dra7-mcasp-audio",
 873		.data = &dra7_mcasp_pdata,
 874	},
 875	{ /* sentinel */ }
 876};
 877MODULE_DEVICE_TABLE(of, mcasp_dt_ids);
 878
 879static int mcasp_reparent_fck(struct platform_device *pdev)
 880{
 881	struct device_node *node = pdev->dev.of_node;
 882	struct clk *gfclk, *parent_clk;
 883	const char *parent_name;
 884	int ret;
 885
 886	if (!node)
 887		return 0;
 888
 889	parent_name = of_get_property(node, "fck_parent", NULL);
 890	if (!parent_name)
 891		return 0;
 892
 
 
 893	gfclk = clk_get(&pdev->dev, "fck");
 894	if (IS_ERR(gfclk)) {
 895		dev_err(&pdev->dev, "failed to get fck\n");
 896		return PTR_ERR(gfclk);
 897	}
 898
 899	parent_clk = clk_get(NULL, parent_name);
 900	if (IS_ERR(parent_clk)) {
 901		dev_err(&pdev->dev, "failed to get parent clock\n");
 902		ret = PTR_ERR(parent_clk);
 903		goto err1;
 904	}
 905
 906	ret = clk_set_parent(gfclk, parent_clk);
 907	if (ret) {
 908		dev_err(&pdev->dev, "failed to reparent fck\n");
 909		goto err2;
 910	}
 911
 912err2:
 913	clk_put(parent_clk);
 914err1:
 915	clk_put(gfclk);
 916	return ret;
 917}
 918
 919static struct davinci_mcasp_pdata *davinci_mcasp_set_pdata_from_of(
 920						struct platform_device *pdev)
 921{
 922	struct device_node *np = pdev->dev.of_node;
 923	struct davinci_mcasp_pdata *pdata = NULL;
 924	const struct of_device_id *match =
 925			of_match_device(mcasp_dt_ids, &pdev->dev);
 926	struct of_phandle_args dma_spec;
 927
 928	const u32 *of_serial_dir32;
 929	u32 val;
 930	int i, ret = 0;
 931
 932	if (pdev->dev.platform_data) {
 933		pdata = pdev->dev.platform_data;
 934		return pdata;
 935	} else if (match) {
 936		pdata = (struct davinci_mcasp_pdata*) match->data;
 937	} else {
 938		/* control shouldn't reach here. something is wrong */
 939		ret = -EINVAL;
 940		goto nodata;
 941	}
 942
 943	ret = of_property_read_u32(np, "op-mode", &val);
 944	if (ret >= 0)
 945		pdata->op_mode = val;
 946
 947	ret = of_property_read_u32(np, "tdm-slots", &val);
 948	if (ret >= 0) {
 949		if (val < 2 || val > 32) {
 950			dev_err(&pdev->dev,
 951				"tdm-slots must be in rage [2-32]\n");
 952			ret = -EINVAL;
 953			goto nodata;
 954		}
 955
 956		pdata->tdm_slots = val;
 957	}
 958
 959	of_serial_dir32 = of_get_property(np, "serial-dir", &val);
 960	val /= sizeof(u32);
 961	if (of_serial_dir32) {
 962		u8 *of_serial_dir = devm_kzalloc(&pdev->dev,
 963						 (sizeof(*of_serial_dir) * val),
 964						 GFP_KERNEL);
 965		if (!of_serial_dir) {
 966			ret = -ENOMEM;
 967			goto nodata;
 968		}
 969
 970		for (i = 0; i < val; i++)
 971			of_serial_dir[i] = be32_to_cpup(&of_serial_dir32[i]);
 972
 973		pdata->num_serializer = val;
 974		pdata->serial_dir = of_serial_dir;
 975	}
 976
 977	ret = of_property_match_string(np, "dma-names", "tx");
 978	if (ret < 0)
 979		goto nodata;
 980
 981	ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
 982					 &dma_spec);
 983	if (ret < 0)
 984		goto nodata;
 985
 986	pdata->tx_dma_channel = dma_spec.args[0];
 987
 988	ret = of_property_match_string(np, "dma-names", "rx");
 989	if (ret < 0)
 990		goto nodata;
 
 
 991
 992	ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
 993					 &dma_spec);
 994	if (ret < 0)
 995		goto nodata;
 996
 997	pdata->rx_dma_channel = dma_spec.args[0];
 
 998
 999	ret = of_property_read_u32(np, "tx-num-evt", &val);
1000	if (ret >= 0)
1001		pdata->txnumevt = val;
1002
1003	ret = of_property_read_u32(np, "rx-num-evt", &val);
1004	if (ret >= 0)
1005		pdata->rxnumevt = val;
1006
1007	ret = of_property_read_u32(np, "sram-size-playback", &val);
1008	if (ret >= 0)
1009		pdata->sram_size_playback = val;
1010
1011	ret = of_property_read_u32(np, "sram-size-capture", &val);
1012	if (ret >= 0)
1013		pdata->sram_size_capture = val;
1014
1015	return  pdata;
1016
1017nodata:
1018	if (ret < 0) {
1019		dev_err(&pdev->dev, "Error populating platform data, err %d\n",
1020			ret);
1021		pdata = NULL;
1022	}
1023	return  pdata;
1024}
1025
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1026static int davinci_mcasp_probe(struct platform_device *pdev)
1027{
1028	struct davinci_pcm_dma_params *dma_params;
1029	struct snd_dmaengine_dai_dma_data *dma_data;
1030	struct resource *mem, *ioarea, *res, *dat;
1031	struct davinci_mcasp_pdata *pdata;
1032	struct davinci_mcasp *mcasp;
 
 
 
1033	int ret;
1034
1035	if (!pdev->dev.platform_data && !pdev->dev.of_node) {
1036		dev_err(&pdev->dev, "No platform data supplied\n");
1037		return -EINVAL;
1038	}
1039
1040	mcasp = devm_kzalloc(&pdev->dev, sizeof(struct davinci_mcasp),
1041			   GFP_KERNEL);
1042	if (!mcasp)
1043		return	-ENOMEM;
1044
1045	pdata = davinci_mcasp_set_pdata_from_of(pdev);
1046	if (!pdata) {
1047		dev_err(&pdev->dev, "no platform data\n");
1048		return -EINVAL;
1049	}
1050
1051	mem = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
1052	if (!mem) {
1053		dev_warn(mcasp->dev,
1054			 "\"mpu\" mem resource not found, using index 0\n");
1055		mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1056		if (!mem) {
1057			dev_err(&pdev->dev, "no mem resource?\n");
1058			return -ENODEV;
1059		}
1060	}
1061
1062	ioarea = devm_request_mem_region(&pdev->dev, mem->start,
1063			resource_size(mem), pdev->name);
1064	if (!ioarea) {
1065		dev_err(&pdev->dev, "Audio region already claimed\n");
1066		return -EBUSY;
1067	}
1068
1069	pm_runtime_enable(&pdev->dev);
1070
1071	ret = pm_runtime_get_sync(&pdev->dev);
1072	if (IS_ERR_VALUE(ret)) {
1073		dev_err(&pdev->dev, "pm_runtime_get_sync() failed\n");
1074		return ret;
1075	}
1076
1077	mcasp->base = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
1078	if (!mcasp->base) {
1079		dev_err(&pdev->dev, "ioremap failed\n");
1080		ret = -ENOMEM;
1081		goto err_release_clk;
 
 
 
1082	}
1083
1084	mcasp->op_mode = pdata->op_mode;
1085	mcasp->tdm_slots = pdata->tdm_slots;
1086	mcasp->num_serializer = pdata->num_serializer;
 
 
 
 
 
1087	mcasp->serial_dir = pdata->serial_dir;
1088	mcasp->version = pdata->version;
1089	mcasp->txnumevt = pdata->txnumevt;
1090	mcasp->rxnumevt = pdata->rxnumevt;
1091
1092	mcasp->dev = &pdev->dev;
1093
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1094	dat = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat");
1095	if (dat)
1096		mcasp->dat_port = true;
1097
1098	dma_params = &mcasp->dma_params[SNDRV_PCM_STREAM_PLAYBACK];
1099	dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
1100	dma_params->asp_chan_q = pdata->asp_chan_q;
1101	dma_params->ram_chan_q = pdata->ram_chan_q;
1102	dma_params->sram_pool = pdata->sram_pool;
1103	dma_params->sram_size = pdata->sram_size_playback;
1104	if (dat)
1105		dma_params->dma_addr = dat->start;
1106	else
1107		dma_params->dma_addr = mem->start + pdata->tx_dma_offset;
1108
1109	/* Unconditional dmaengine stuff */
1110	dma_data->addr = dma_params->dma_addr;
1111
 
1112	res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
1113	if (res)
1114		dma_params->channel = res->start;
1115	else
1116		dma_params->channel = pdata->tx_dma_channel;
1117
1118	/* dmaengine filter data for DT and non-DT boot */
1119	if (pdev->dev.of_node)
1120		dma_data->filter_data = "tx";
1121	else
1122		dma_data->filter_data = &dma_params->channel;
1123
1124	dma_params = &mcasp->dma_params[SNDRV_PCM_STREAM_CAPTURE];
1125	dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
1126	dma_params->asp_chan_q = pdata->asp_chan_q;
1127	dma_params->ram_chan_q = pdata->ram_chan_q;
1128	dma_params->sram_pool = pdata->sram_pool;
1129	dma_params->sram_size = pdata->sram_size_capture;
1130	if (dat)
1131		dma_params->dma_addr = dat->start;
1132	else
1133		dma_params->dma_addr = mem->start + pdata->rx_dma_offset;
1134
1135	/* Unconditional dmaengine stuff */
1136	dma_data->addr = dma_params->dma_addr;
 
 
 
 
 
 
 
 
1137
1138	if (mcasp->version < MCASP_VERSION_3) {
1139		mcasp->fifo_base = DAVINCI_MCASP_V2_AFIFO_BASE;
1140		/* dma_params->dma_addr is pointing to the data port address */
1141		mcasp->dat_port = true;
1142	} else {
1143		mcasp->fifo_base = DAVINCI_MCASP_V3_AFIFO_BASE;
1144	}
1145
1146	res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
1147	if (res)
1148		dma_params->channel = res->start;
1149	else
1150		dma_params->channel = pdata->rx_dma_channel;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1151
1152	/* dmaengine filter data for DT and non-DT boot */
1153	if (pdev->dev.of_node)
1154		dma_data->filter_data = "rx";
1155	else
1156		dma_data->filter_data = &dma_params->channel;
1157
1158	dev_set_drvdata(&pdev->dev, mcasp);
1159
1160	mcasp_reparent_fck(pdev);
1161
1162	ret = snd_soc_register_component(&pdev->dev, &davinci_mcasp_component,
1163					 &davinci_mcasp_dai[pdata->op_mode], 1);
 
1164
1165	if (ret != 0)
1166		goto err_release_clk;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1167
1168	if (mcasp->version != MCASP_VERSION_4) {
1169		ret = davinci_soc_platform_register(&pdev->dev);
1170		if (ret) {
1171			dev_err(&pdev->dev, "register PCM failed: %d\n", ret);
1172			goto err_unregister_component;
1173		}
1174	}
1175
1176	return 0;
1177
1178err_unregister_component:
1179	snd_soc_unregister_component(&pdev->dev);
1180err_release_clk:
1181	pm_runtime_put_sync(&pdev->dev);
1182	pm_runtime_disable(&pdev->dev);
1183	return ret;
1184}
1185
1186static int davinci_mcasp_remove(struct platform_device *pdev)
1187{
1188	struct davinci_mcasp *mcasp = dev_get_drvdata(&pdev->dev);
1189
1190	snd_soc_unregister_component(&pdev->dev);
1191	if (mcasp->version != MCASP_VERSION_4)
1192		davinci_soc_platform_unregister(&pdev->dev);
1193
1194	pm_runtime_put_sync(&pdev->dev);
1195	pm_runtime_disable(&pdev->dev);
1196
1197	return 0;
1198}
1199
1200static struct platform_driver davinci_mcasp_driver = {
1201	.probe		= davinci_mcasp_probe,
1202	.remove		= davinci_mcasp_remove,
1203	.driver		= {
1204		.name	= "davinci-mcasp",
1205		.owner	= THIS_MODULE,
1206		.of_match_table = mcasp_dt_ids,
1207	},
1208};
1209
1210module_platform_driver(davinci_mcasp_driver);
1211
1212MODULE_AUTHOR("Steve Chen");
1213MODULE_DESCRIPTION("TI DAVINCI McASP SoC Interface");
1214MODULE_LICENSE("GPL");