linux/sound/soc/ti/davinci-mcasp.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * ALSA SoC McASP Audio Layer for TI DAVINCI processor
   4 *
   5 * Multi-channel Audio Serial Port Driver
   6 *
   7 * Author: Nirmal Pandey <n-pandey@ti.com>,
   8 *         Suresh Rajashekara <suresh.r@ti.com>
   9 *         Steve Chen <schen@.mvista.com>
  10 *
  11 * Copyright:   (C) 2009 MontaVista Software, Inc., <source@mvista.com>
  12 * Copyright:   (C) 2009  Texas Instruments, India
  13 */
  14
  15#include <linux/init.h>
  16#include <linux/module.h>
  17#include <linux/device.h>
  18#include <linux/slab.h>
  19#include <linux/delay.h>
  20#include <linux/io.h>
  21#include <linux/clk.h>
  22#include <linux/pm_runtime.h>
  23#include <linux/of.h>
  24#include <linux/of_platform.h>
  25#include <linux/of_device.h>
  26#include <linux/platform_data/davinci_asp.h>
  27#include <linux/math64.h>
  28#include <linux/bitmap.h>
  29#include <linux/gpio/driver.h>
  30
  31#include <sound/asoundef.h>
  32#include <sound/core.h>
  33#include <sound/pcm.h>
  34#include <sound/pcm_params.h>
  35#include <sound/initval.h>
  36#include <sound/soc.h>
  37#include <sound/dmaengine_pcm.h>
  38
  39#include "edma-pcm.h"
  40#include "sdma-pcm.h"
  41#include "udma-pcm.h"
  42#include "davinci-mcasp.h"
  43
  44#define MCASP_MAX_AFIFO_DEPTH   64
  45
  46#ifdef CONFIG_PM
  47static u32 context_regs[] = {
  48        DAVINCI_MCASP_TXFMCTL_REG,
  49        DAVINCI_MCASP_RXFMCTL_REG,
  50        DAVINCI_MCASP_TXFMT_REG,
  51        DAVINCI_MCASP_RXFMT_REG,
  52        DAVINCI_MCASP_ACLKXCTL_REG,
  53        DAVINCI_MCASP_ACLKRCTL_REG,
  54        DAVINCI_MCASP_AHCLKXCTL_REG,
  55        DAVINCI_MCASP_AHCLKRCTL_REG,
  56        DAVINCI_MCASP_PDIR_REG,
  57        DAVINCI_MCASP_PFUNC_REG,
  58        DAVINCI_MCASP_RXMASK_REG,
  59        DAVINCI_MCASP_TXMASK_REG,
  60        DAVINCI_MCASP_RXTDM_REG,
  61        DAVINCI_MCASP_TXTDM_REG,
  62};
  63
  64struct davinci_mcasp_context {
  65        u32     config_regs[ARRAY_SIZE(context_regs)];
  66        u32     afifo_regs[2]; /* for read/write fifo control registers */
  67        u32     *xrsr_regs; /* for serializer configuration */
  68        bool    pm_state;
  69};
  70#endif
  71
  72struct davinci_mcasp_ruledata {
  73        struct davinci_mcasp *mcasp;
  74        int serializers;
  75};
  76
  77struct davinci_mcasp {
  78        struct snd_dmaengine_dai_dma_data dma_data[2];
  79        struct davinci_mcasp_pdata *pdata;
  80        void __iomem *base;
  81        u32 fifo_base;
  82        struct device *dev;
  83        struct snd_pcm_substream *substreams[2];
  84        unsigned int dai_fmt;
  85
  86        /* Audio can not be enabled due to missing parameter(s) */
  87        bool    missing_audio_param;
  88
  89        /* McASP specific data */
  90        int     tdm_slots;
  91        u32     tdm_mask[2];
  92        int     slot_width;
  93        u8      op_mode;
  94        u8      dismod;
  95        u8      num_serializer;
  96        u8      *serial_dir;
  97        u8      version;
  98        u8      bclk_div;
  99        int     streams;
 100        u32     irq_request[2];
 101
 102        int     sysclk_freq;
 103        bool    bclk_master;
 104        u32     auxclk_fs_ratio;
 105
 106        unsigned long pdir; /* Pin direction bitfield */
 107
 108        /* McASP FIFO related */
 109        u8      txnumevt;
 110        u8      rxnumevt;
 111
 112        bool    dat_port;
 113
 114        /* Used for comstraint setting on the second stream */
 115        u32     channels;
 116        int     max_format_width;
 117        u8      active_serializers[2];
 118
 119#ifdef CONFIG_GPIOLIB
 120        struct gpio_chip gpio_chip;
 121#endif
 122
 123#ifdef CONFIG_PM
 124        struct davinci_mcasp_context context;
 125#endif
 126
 127        struct davinci_mcasp_ruledata ruledata[2];
 128        struct snd_pcm_hw_constraint_list chconstr[2];
 129};
 130
 131static inline void mcasp_set_bits(struct davinci_mcasp *mcasp, u32 offset,
 132                                  u32 val)
 133{
 134        void __iomem *reg = mcasp->base + offset;
 135        __raw_writel(__raw_readl(reg) | val, reg);
 136}
 137
 138static inline void mcasp_clr_bits(struct davinci_mcasp *mcasp, u32 offset,
 139                                  u32 val)
 140{
 141        void __iomem *reg = mcasp->base + offset;
 142        __raw_writel((__raw_readl(reg) & ~(val)), reg);
 143}
 144
 145static inline void mcasp_mod_bits(struct davinci_mcasp *mcasp, u32 offset,
 146                                  u32 val, u32 mask)
 147{
 148        void __iomem *reg = mcasp->base + offset;
 149        __raw_writel((__raw_readl(reg) & ~mask) | val, reg);
 150}
 151
 152static inline void mcasp_set_reg(struct davinci_mcasp *mcasp, u32 offset,
 153                                 u32 val)
 154{
 155        __raw_writel(val, mcasp->base + offset);
 156}
 157
 158static inline u32 mcasp_get_reg(struct davinci_mcasp *mcasp, u32 offset)
 159{
 160        return (u32)__raw_readl(mcasp->base + offset);
 161}
 162
 163static void mcasp_set_ctl_reg(struct davinci_mcasp *mcasp, u32 ctl_reg, u32 val)
 164{
 165        int i = 0;
 166
 167        mcasp_set_bits(mcasp, ctl_reg, val);
 168
 169        /* programming GBLCTL needs to read back from GBLCTL and verfiy */
 170        /* loop count is to avoid the lock-up */
 171        for (i = 0; i < 1000; i++) {
 172                if ((mcasp_get_reg(mcasp, ctl_reg) & val) == val)
 173                        break;
 174        }
 175
 176        if (i == 1000 && ((mcasp_get_reg(mcasp, ctl_reg) & val) != val))
 177                printk(KERN_ERR "GBLCTL write error\n");
 178}
 179
 180static bool mcasp_is_synchronous(struct davinci_mcasp *mcasp)
 181{
 182        u32 rxfmctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMCTL_REG);
 183        u32 aclkxctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKXCTL_REG);
 184
 185        return !(aclkxctl & TX_ASYNC) && rxfmctl & AFSRE;
 186}
 187
 188static inline void mcasp_set_clk_pdir(struct davinci_mcasp *mcasp, bool enable)
 189{
 190        u32 bit = PIN_BIT_AMUTE;
 191
 192        for_each_set_bit_from(bit, &mcasp->pdir, PIN_BIT_AFSR + 1) {
 193                if (enable)
 194                        mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, BIT(bit));
 195                else
 196                        mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, BIT(bit));
 197        }
 198}
 199
 200static inline void mcasp_set_axr_pdir(struct davinci_mcasp *mcasp, bool enable)
 201{
 202        u32 bit;
 203
 204        for_each_set_bit(bit, &mcasp->pdir, PIN_BIT_AMUTE) {
 205                if (enable)
 206                        mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, BIT(bit));
 207                else
 208                        mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, BIT(bit));
 209        }
 210}
 211
 212static void mcasp_start_rx(struct davinci_mcasp *mcasp)
 213{
 214        if (mcasp->rxnumevt) {  /* enable FIFO */
 215                u32 reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
 216
 217                mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
 218                mcasp_set_bits(mcasp, reg, FIFO_ENABLE);
 219        }
 220
 221        /* Start clocks */
 222        mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXHCLKRST);
 223        mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXCLKRST);
 224        /*
 225         * When ASYNC == 0 the transmit and receive sections operate
 226         * synchronously from the transmit clock and frame sync. We need to make
 227         * sure that the TX signlas are enabled when starting reception.
 228         */
 229        if (mcasp_is_synchronous(mcasp)) {
 230                mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXHCLKRST);
 231                mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXCLKRST);
 232                mcasp_set_clk_pdir(mcasp, true);
 233        }
 234
 235        /* Activate serializer(s) */
 236        mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, 0xFFFFFFFF);
 237        mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXSERCLR);
 238        /* Release RX state machine */
 239        mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXSMRST);
 240        /* Release Frame Sync generator */
 241        mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXFSRST);
 242        if (mcasp_is_synchronous(mcasp))
 243                mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXFSRST);
 244
 245        /* enable receive IRQs */
 246        mcasp_set_bits(mcasp, DAVINCI_MCASP_EVTCTLR_REG,
 247                       mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE]);
 248}
 249
 250static void mcasp_start_tx(struct davinci_mcasp *mcasp)
 251{
 252        u32 cnt;
 253
 254        if (mcasp->txnumevt) {  /* enable FIFO */
 255                u32 reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
 256
 257                mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
 258                mcasp_set_bits(mcasp, reg, FIFO_ENABLE);
 259        }
 260
 261        /* Start clocks */
 262        mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXHCLKRST);
 263        mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXCLKRST);
 264        mcasp_set_clk_pdir(mcasp, true);
 265
 266        /* Activate serializer(s) */
 267        mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, 0xFFFFFFFF);
 268        mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXSERCLR);
 269
 270        /* wait for XDATA to be cleared */
 271        cnt = 0;
 272        while ((mcasp_get_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG) & XRDATA) &&
 273               (cnt < 100000))
 274                cnt++;
 275
 276        mcasp_set_axr_pdir(mcasp, true);
 277
 278        /* Release TX state machine */
 279        mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXSMRST);
 280        /* Release Frame Sync generator */
 281        mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXFSRST);
 282
 283        /* enable transmit IRQs */
 284        mcasp_set_bits(mcasp, DAVINCI_MCASP_EVTCTLX_REG,
 285                       mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK]);
 286}
 287
 288static void davinci_mcasp_start(struct davinci_mcasp *mcasp, int stream)
 289{
 290        mcasp->streams++;
 291
 292        if (stream == SNDRV_PCM_STREAM_PLAYBACK)
 293                mcasp_start_tx(mcasp);
 294        else
 295                mcasp_start_rx(mcasp);
 296}
 297
 298static void mcasp_stop_rx(struct davinci_mcasp *mcasp)
 299{
 300        /* disable IRQ sources */
 301        mcasp_clr_bits(mcasp, DAVINCI_MCASP_EVTCTLR_REG,
 302                       mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE]);
 303
 304        /*
 305         * In synchronous mode stop the TX clocks if no other stream is
 306         * running
 307         */
 308        if (mcasp_is_synchronous(mcasp) && !mcasp->streams) {
 309                mcasp_set_clk_pdir(mcasp, false);
 310                mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, 0);
 311        }
 312
 313        mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, 0);
 314        mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, 0xFFFFFFFF);
 315
 316        if (mcasp->rxnumevt) {  /* disable FIFO */
 317                u32 reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
 318
 319                mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
 320        }
 321}
 322
 323static void mcasp_stop_tx(struct davinci_mcasp *mcasp)
 324{
 325        u32 val = 0;
 326
 327        /* disable IRQ sources */
 328        mcasp_clr_bits(mcasp, DAVINCI_MCASP_EVTCTLX_REG,
 329                       mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK]);
 330
 331        /*
 332         * In synchronous mode keep TX clocks running if the capture stream is
 333         * still running.
 334         */
 335        if (mcasp_is_synchronous(mcasp) && mcasp->streams)
 336                val =  TXHCLKRST | TXCLKRST | TXFSRST;
 337        else
 338                mcasp_set_clk_pdir(mcasp, false);
 339
 340
 341        mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, val);
 342        mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, 0xFFFFFFFF);
 343
 344        if (mcasp->txnumevt) {  /* disable FIFO */
 345                u32 reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
 346
 347                mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
 348        }
 349
 350        mcasp_set_axr_pdir(mcasp, false);
 351}
 352
 353static void davinci_mcasp_stop(struct davinci_mcasp *mcasp, int stream)
 354{
 355        mcasp->streams--;
 356
 357        if (stream == SNDRV_PCM_STREAM_PLAYBACK)
 358                mcasp_stop_tx(mcasp);
 359        else
 360                mcasp_stop_rx(mcasp);
 361}
 362
 363static irqreturn_t davinci_mcasp_tx_irq_handler(int irq, void *data)
 364{
 365        struct davinci_mcasp *mcasp = (struct davinci_mcasp *)data;
 366        struct snd_pcm_substream *substream;
 367        u32 irq_mask = mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK];
 368        u32 handled_mask = 0;
 369        u32 stat;
 370
 371        stat = mcasp_get_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG);
 372        if (stat & XUNDRN & irq_mask) {
 373                dev_warn(mcasp->dev, "Transmit buffer underflow\n");
 374                handled_mask |= XUNDRN;
 375
 376                substream = mcasp->substreams[SNDRV_PCM_STREAM_PLAYBACK];
 377                if (substream)
 378                        snd_pcm_stop_xrun(substream);
 379        }
 380
 381        if (!handled_mask)
 382                dev_warn(mcasp->dev, "unhandled tx event. txstat: 0x%08x\n",
 383                         stat);
 384
 385        if (stat & XRERR)
 386                handled_mask |= XRERR;
 387
 388        /* Ack the handled event only */
 389        mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, handled_mask);
 390
 391        return IRQ_RETVAL(handled_mask);
 392}
 393
 394static irqreturn_t davinci_mcasp_rx_irq_handler(int irq, void *data)
 395{
 396        struct davinci_mcasp *mcasp = (struct davinci_mcasp *)data;
 397        struct snd_pcm_substream *substream;
 398        u32 irq_mask = mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE];
 399        u32 handled_mask = 0;
 400        u32 stat;
 401
 402        stat = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG);
 403        if (stat & ROVRN & irq_mask) {
 404                dev_warn(mcasp->dev, "Receive buffer overflow\n");
 405                handled_mask |= ROVRN;
 406
 407                substream = mcasp->substreams[SNDRV_PCM_STREAM_CAPTURE];
 408                if (substream)
 409                        snd_pcm_stop_xrun(substream);
 410        }
 411
 412        if (!handled_mask)
 413                dev_warn(mcasp->dev, "unhandled rx event. rxstat: 0x%08x\n",
 414                         stat);
 415
 416        if (stat & XRERR)
 417                handled_mask |= XRERR;
 418
 419        /* Ack the handled event only */
 420        mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, handled_mask);
 421
 422        return IRQ_RETVAL(handled_mask);
 423}
 424
 425static irqreturn_t davinci_mcasp_common_irq_handler(int irq, void *data)
 426{
 427        struct davinci_mcasp *mcasp = (struct davinci_mcasp *)data;
 428        irqreturn_t ret = IRQ_NONE;
 429
 430        if (mcasp->substreams[SNDRV_PCM_STREAM_PLAYBACK])
 431                ret = davinci_mcasp_tx_irq_handler(irq, data);
 432
 433        if (mcasp->substreams[SNDRV_PCM_STREAM_CAPTURE])
 434                ret |= davinci_mcasp_rx_irq_handler(irq, data);
 435
 436        return ret;
 437}
 438
 439static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
 440                                         unsigned int fmt)
 441{
 442        struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
 443        int ret = 0;
 444        u32 data_delay;
 445        bool fs_pol_rising;
 446        bool inv_fs = false;
 447
 448        if (!fmt)
 449                return 0;
 450
 451        pm_runtime_get_sync(mcasp->dev);
 452        switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
 453        case SND_SOC_DAIFMT_DSP_A:
 454                mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
 455                mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
 456                /* 1st data bit occur one ACLK cycle after the frame sync */
 457                data_delay = 1;
 458                break;
 459        case SND_SOC_DAIFMT_DSP_B:
 460        case SND_SOC_DAIFMT_AC97:
 461                mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
 462                mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
 463                /* No delay after FS */
 464                data_delay = 0;
 465                break;
 466        case SND_SOC_DAIFMT_I2S:
 467                /* configure a full-word SYNC pulse (LRCLK) */
 468                mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
 469                mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
 470                /* 1st data bit occur one ACLK cycle after the frame sync */
 471                data_delay = 1;
 472                /* FS need to be inverted */
 473                inv_fs = true;
 474                break;
 475        case SND_SOC_DAIFMT_RIGHT_J:
 476        case SND_SOC_DAIFMT_LEFT_J:
 477                /* configure a full-word SYNC pulse (LRCLK) */
 478                mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
 479                mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
 480                /* No delay after FS */
 481                data_delay = 0;
 482                break;
 483        default:
 484                ret = -EINVAL;
 485                goto out;
 486        }
 487
 488        mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, FSXDLY(data_delay),
 489                       FSXDLY(3));
 490        mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, FSRDLY(data_delay),
 491                       FSRDLY(3));
 492
 493        switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
 494        case SND_SOC_DAIFMT_CBS_CFS:
 495                /* codec is clock and frame slave */
 496                mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
 497                mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
 498
 499                mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
 500                mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
 501
 502                /* BCLK */
 503                set_bit(PIN_BIT_ACLKX, &mcasp->pdir);
 504                set_bit(PIN_BIT_ACLKR, &mcasp->pdir);
 505                /* Frame Sync */
 506                set_bit(PIN_BIT_AFSX, &mcasp->pdir);
 507                set_bit(PIN_BIT_AFSR, &mcasp->pdir);
 508
 509                mcasp->bclk_master = 1;
 510                break;
 511        case SND_SOC_DAIFMT_CBS_CFM:
 512                /* codec is clock slave and frame master */
 513                mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
 514                mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
 515
 516                mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
 517                mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
 518
 519                /* BCLK */
 520                set_bit(PIN_BIT_ACLKX, &mcasp->pdir);
 521                set_bit(PIN_BIT_ACLKR, &mcasp->pdir);
 522                /* Frame Sync */
 523                clear_bit(PIN_BIT_AFSX, &mcasp->pdir);
 524                clear_bit(PIN_BIT_AFSR, &mcasp->pdir);
 525
 526                mcasp->bclk_master = 1;
 527                break;
 528        case SND_SOC_DAIFMT_CBM_CFS:
 529                /* codec is clock master and frame slave */
 530                mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
 531                mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
 532
 533                mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
 534                mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
 535
 536                /* BCLK */
 537                clear_bit(PIN_BIT_ACLKX, &mcasp->pdir);
 538                clear_bit(PIN_BIT_ACLKR, &mcasp->pdir);
 539                /* Frame Sync */
 540                set_bit(PIN_BIT_AFSX, &mcasp->pdir);
 541                set_bit(PIN_BIT_AFSR, &mcasp->pdir);
 542
 543                mcasp->bclk_master = 0;
 544                break;
 545        case SND_SOC_DAIFMT_CBM_CFM:
 546                /* codec is clock and frame master */
 547                mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
 548                mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
 549
 550                mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
 551                mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
 552
 553                /* BCLK */
 554                clear_bit(PIN_BIT_ACLKX, &mcasp->pdir);
 555                clear_bit(PIN_BIT_ACLKR, &mcasp->pdir);
 556                /* Frame Sync */
 557                clear_bit(PIN_BIT_AFSX, &mcasp->pdir);
 558                clear_bit(PIN_BIT_AFSR, &mcasp->pdir);
 559
 560                mcasp->bclk_master = 0;
 561                break;
 562        default:
 563                ret = -EINVAL;
 564                goto out;
 565        }
 566
 567        switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
 568        case SND_SOC_DAIFMT_IB_NF:
 569                mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
 570                mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
 571                fs_pol_rising = true;
 572                break;
 573        case SND_SOC_DAIFMT_NB_IF:
 574                mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
 575                mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
 576                fs_pol_rising = false;
 577                break;
 578        case SND_SOC_DAIFMT_IB_IF:
 579                mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
 580                mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
 581                fs_pol_rising = false;
 582                break;
 583        case SND_SOC_DAIFMT_NB_NF:
 584                mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
 585                mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
 586                fs_pol_rising = true;
 587                break;
 588        default:
 589                ret = -EINVAL;
 590                goto out;
 591        }
 592
 593        if (inv_fs)
 594                fs_pol_rising = !fs_pol_rising;
 595
 596        if (fs_pol_rising) {
 597                mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
 598                mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
 599        } else {
 600                mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
 601                mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
 602        }
 603
 604        mcasp->dai_fmt = fmt;
 605out:
 606        pm_runtime_put(mcasp->dev);
 607        return ret;
 608}
 609
 610static int __davinci_mcasp_set_clkdiv(struct davinci_mcasp *mcasp, int div_id,
 611                                      int div, bool explicit)
 612{
 613        pm_runtime_get_sync(mcasp->dev);
 614        switch (div_id) {
 615        case MCASP_CLKDIV_AUXCLK:                       /* MCLK divider */
 616                mcasp_mod_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG,
 617                               AHCLKXDIV(div - 1), AHCLKXDIV_MASK);
 618                mcasp_mod_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG,
 619                               AHCLKRDIV(div - 1), AHCLKRDIV_MASK);
 620                break;
 621
 622        case MCASP_CLKDIV_BCLK:                 /* BCLK divider */
 623                mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG,
 624                               ACLKXDIV(div - 1), ACLKXDIV_MASK);
 625                mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG,
 626                               ACLKRDIV(div - 1), ACLKRDIV_MASK);
 627                if (explicit)
 628                        mcasp->bclk_div = div;
 629                break;
 630
 631        case MCASP_CLKDIV_BCLK_FS_RATIO:
 632                /*
 633                 * BCLK/LRCLK ratio descries how many bit-clock cycles
 634                 * fit into one frame. The clock ratio is given for a
 635                 * full period of data (for I2S format both left and
 636                 * right channels), so it has to be divided by number
 637                 * of tdm-slots (for I2S - divided by 2).
 638                 * Instead of storing this ratio, we calculate a new
 639                 * tdm_slot width by dividing the ratio by the
 640                 * number of configured tdm slots.
 641                 */
 642                mcasp->slot_width = div / mcasp->tdm_slots;
 643                if (div % mcasp->tdm_slots)
 644                        dev_warn(mcasp->dev,
 645                                 "%s(): BCLK/LRCLK %d is not divisible by %d tdm slots",
 646                                 __func__, div, mcasp->tdm_slots);
 647                break;
 648
 649        default:
 650                return -EINVAL;
 651        }
 652
 653        pm_runtime_put(mcasp->dev);
 654        return 0;
 655}
 656
 657static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id,
 658                                    int div)
 659{
 660        struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
 661
 662        return __davinci_mcasp_set_clkdiv(mcasp, div_id, div, 1);
 663}
 664
 665static int davinci_mcasp_set_sysclk(struct snd_soc_dai *dai, int clk_id,
 666                                    unsigned int freq, int dir)
 667{
 668        struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
 669
 670        pm_runtime_get_sync(mcasp->dev);
 671
 672        if (dir == SND_SOC_CLOCK_IN) {
 673                switch (clk_id) {
 674                case MCASP_CLK_HCLK_AHCLK:
 675                        mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG,
 676                                       AHCLKXE);
 677                        mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG,
 678                                       AHCLKRE);
 679                        clear_bit(PIN_BIT_AHCLKX, &mcasp->pdir);
 680                        break;
 681                case MCASP_CLK_HCLK_AUXCLK:
 682                        mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG,
 683                                       AHCLKXE);
 684                        mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG,
 685                                       AHCLKRE);
 686                        set_bit(PIN_BIT_AHCLKX, &mcasp->pdir);
 687                        break;
 688                default:
 689                        dev_err(mcasp->dev, "Invalid clk id: %d\n", clk_id);
 690                        goto out;
 691                }
 692        } else {
 693                /* Select AUXCLK as HCLK */
 694                mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
 695                mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
 696                set_bit(PIN_BIT_AHCLKX, &mcasp->pdir);
 697        }
 698        /*
 699         * When AHCLK X/R is selected to be output it means that the HCLK is
 700         * the same clock - coming via AUXCLK.
 701         */
 702        mcasp->sysclk_freq = freq;
 703out:
 704        pm_runtime_put(mcasp->dev);
 705        return 0;
 706}
 707
 708/* All serializers must have equal number of channels */
 709static int davinci_mcasp_ch_constraint(struct davinci_mcasp *mcasp, int stream,
 710                                       int serializers)
 711{
 712        struct snd_pcm_hw_constraint_list *cl = &mcasp->chconstr[stream];
 713        unsigned int *list = (unsigned int *) cl->list;
 714        int slots = mcasp->tdm_slots;
 715        int i, count = 0;
 716
 717        if (mcasp->tdm_mask[stream])
 718                slots = hweight32(mcasp->tdm_mask[stream]);
 719
 720        for (i = 1; i <= slots; i++)
 721                list[count++] = i;
 722
 723        for (i = 2; i <= serializers; i++)
 724                list[count++] = i*slots;
 725
 726        cl->count = count;
 727
 728        return 0;
 729}
 730
 731static int davinci_mcasp_set_ch_constraints(struct davinci_mcasp *mcasp)
 732{
 733        int rx_serializers = 0, tx_serializers = 0, ret, i;
 734
 735        for (i = 0; i < mcasp->num_serializer; i++)
 736                if (mcasp->serial_dir[i] == TX_MODE)
 737                        tx_serializers++;
 738                else if (mcasp->serial_dir[i] == RX_MODE)
 739                        rx_serializers++;
 740
 741        ret = davinci_mcasp_ch_constraint(mcasp, SNDRV_PCM_STREAM_PLAYBACK,
 742                                          tx_serializers);
 743        if (ret)
 744                return ret;
 745
 746        ret = davinci_mcasp_ch_constraint(mcasp, SNDRV_PCM_STREAM_CAPTURE,
 747                                          rx_serializers);
 748
 749        return ret;
 750}
 751
 752
 753static int davinci_mcasp_set_tdm_slot(struct snd_soc_dai *dai,
 754                                      unsigned int tx_mask,
 755                                      unsigned int rx_mask,
 756                                      int slots, int slot_width)
 757{
 758        struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
 759
 760        dev_dbg(mcasp->dev,
 761                 "%s() tx_mask 0x%08x rx_mask 0x%08x slots %d width %d\n",
 762                 __func__, tx_mask, rx_mask, slots, slot_width);
 763
 764        if (tx_mask >= (1<<slots) || rx_mask >= (1<<slots)) {
 765                dev_err(mcasp->dev,
 766                        "Bad tdm mask tx: 0x%08x rx: 0x%08x slots %d\n",
 767                        tx_mask, rx_mask, slots);
 768                return -EINVAL;
 769        }
 770
 771        if (slot_width &&
 772            (slot_width < 8 || slot_width > 32 || slot_width % 4 != 0)) {
 773                dev_err(mcasp->dev, "%s: Unsupported slot_width %d\n",
 774                        __func__, slot_width);
 775                return -EINVAL;
 776        }
 777
 778        mcasp->tdm_slots = slots;
 779        mcasp->tdm_mask[SNDRV_PCM_STREAM_PLAYBACK] = tx_mask;
 780        mcasp->tdm_mask[SNDRV_PCM_STREAM_CAPTURE] = rx_mask;
 781        mcasp->slot_width = slot_width;
 782
 783        return davinci_mcasp_set_ch_constraints(mcasp);
 784}
 785
 786static int davinci_config_channel_size(struct davinci_mcasp *mcasp,
 787                                       int sample_width)
 788{
 789        u32 fmt;
 790        u32 tx_rotate, rx_rotate, slot_width;
 791        u32 mask = (1ULL << sample_width) - 1;
 792
 793        if (mcasp->slot_width)
 794                slot_width = mcasp->slot_width;
 795        else if (mcasp->max_format_width)
 796                slot_width = mcasp->max_format_width;
 797        else
 798                slot_width = sample_width;
 799        /*
 800         * TX rotation:
 801         * right aligned formats: rotate w/ slot_width
 802         * left aligned formats: rotate w/ sample_width
 803         *
 804         * RX rotation:
 805         * right aligned formats: no rotation needed
 806         * left aligned formats: rotate w/ (slot_width - sample_width)
 807         */
 808        if ((mcasp->dai_fmt & SND_SOC_DAIFMT_FORMAT_MASK) ==
 809            SND_SOC_DAIFMT_RIGHT_J) {
 810                tx_rotate = (slot_width / 4) & 0x7;
 811                rx_rotate = 0;
 812        } else {
 813                tx_rotate = (sample_width / 4) & 0x7;
 814                rx_rotate = (slot_width - sample_width) / 4;
 815        }
 816
 817        /* mapping of the XSSZ bit-field as described in the datasheet */
 818        fmt = (slot_width >> 1) - 1;
 819
 820        if (mcasp->op_mode != DAVINCI_MCASP_DIT_MODE) {
 821                mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, RXSSZ(fmt),
 822                               RXSSZ(0x0F));
 823                mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXSSZ(fmt),
 824                               TXSSZ(0x0F));
 825                mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(tx_rotate),
 826                               TXROT(7));
 827                mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, RXROT(rx_rotate),
 828                               RXROT(7));
 829                mcasp_set_reg(mcasp, DAVINCI_MCASP_RXMASK_REG, mask);
 830        }
 831
 832        mcasp_set_reg(mcasp, DAVINCI_MCASP_TXMASK_REG, mask);
 833
 834        return 0;
 835}
 836
 837static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
 838                                 int period_words, int channels)
 839{
 840        struct snd_dmaengine_dai_dma_data *dma_data = &mcasp->dma_data[stream];
 841        int i;
 842        u8 tx_ser = 0;
 843        u8 rx_ser = 0;
 844        u8 slots = mcasp->tdm_slots;
 845        u8 max_active_serializers = (channels + slots - 1) / slots;
 846        u8 max_rx_serializers, max_tx_serializers;
 847        int active_serializers, numevt;
 848        u32 reg;
 849        /* Default configuration */
 850        if (mcasp->version < MCASP_VERSION_3)
 851                mcasp_set_bits(mcasp, DAVINCI_MCASP_PWREMUMGT_REG, MCASP_SOFT);
 852
 853        if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
 854                mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, 0xFFFFFFFF);
 855                mcasp_clr_bits(mcasp, DAVINCI_MCASP_XEVTCTL_REG, TXDATADMADIS);
 856                max_tx_serializers = max_active_serializers;
 857                max_rx_serializers =
 858                        mcasp->active_serializers[SNDRV_PCM_STREAM_CAPTURE];
 859        } else {
 860                mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, 0xFFFFFFFF);
 861                mcasp_clr_bits(mcasp, DAVINCI_MCASP_REVTCTL_REG, RXDATADMADIS);
 862                max_tx_serializers =
 863                        mcasp->active_serializers[SNDRV_PCM_STREAM_PLAYBACK];
 864                max_rx_serializers = max_active_serializers;
 865        }
 866
 867        for (i = 0; i < mcasp->num_serializer; i++) {
 868                mcasp_set_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
 869                               mcasp->serial_dir[i]);
 870                if (mcasp->serial_dir[i] == TX_MODE &&
 871                                        tx_ser < max_tx_serializers) {
 872                        mcasp_mod_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
 873                                       mcasp->dismod, DISMOD_MASK);
 874                        set_bit(PIN_BIT_AXR(i), &mcasp->pdir);
 875                        tx_ser++;
 876                } else if (mcasp->serial_dir[i] == RX_MODE &&
 877                                        rx_ser < max_rx_serializers) {
 878                        clear_bit(PIN_BIT_AXR(i), &mcasp->pdir);
 879                        rx_ser++;
 880                } else {
 881                        /* Inactive or unused pin, set it to inactive */
 882                        mcasp_mod_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
 883                                       SRMOD_INACTIVE, SRMOD_MASK);
 884                        /* If unused, set DISMOD for the pin */
 885                        if (mcasp->serial_dir[i] != INACTIVE_MODE)
 886                                mcasp_mod_bits(mcasp,
 887                                               DAVINCI_MCASP_XRSRCTL_REG(i),
 888                                               mcasp->dismod, DISMOD_MASK);
 889                        clear_bit(PIN_BIT_AXR(i), &mcasp->pdir);
 890                }
 891        }
 892
 893        if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
 894                active_serializers = tx_ser;
 895                numevt = mcasp->txnumevt;
 896                reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
 897        } else {
 898                active_serializers = rx_ser;
 899                numevt = mcasp->rxnumevt;
 900                reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
 901        }
 902
 903        if (active_serializers < max_active_serializers) {
 904                dev_warn(mcasp->dev, "stream has more channels (%d) than are "
 905                         "enabled in mcasp (%d)\n", channels,
 906                         active_serializers * slots);
 907                return -EINVAL;
 908        }
 909
 910        /* AFIFO is not in use */
 911        if (!numevt) {
 912                /* Configure the burst size for platform drivers */
 913                if (active_serializers > 1) {
 914                        /*
 915                         * If more than one serializers are in use we have one
 916                         * DMA request to provide data for all serializers.
 917                         * For example if three serializers are enabled the DMA
 918                         * need to transfer three words per DMA request.
 919                         */
 920                        dma_data->maxburst = active_serializers;
 921                } else {
 922                        dma_data->maxburst = 0;
 923                }
 924
 925                goto out;
 926        }
 927
 928        if (period_words % active_serializers) {
 929                dev_err(mcasp->dev, "Invalid combination of period words and "
 930                        "active serializers: %d, %d\n", period_words,
 931                        active_serializers);
 932                return -EINVAL;
 933        }
 934
 935        /*
 936         * Calculate the optimal AFIFO depth for platform side:
 937         * The number of words for numevt need to be in steps of active
 938         * serializers.
 939         */
 940        numevt = (numevt / active_serializers) * active_serializers;
 941
 942        while (period_words % numevt && numevt > 0)
 943                numevt -= active_serializers;
 944        if (numevt <= 0)
 945                numevt = active_serializers;
 946
 947        mcasp_mod_bits(mcasp, reg, active_serializers, NUMDMA_MASK);
 948        mcasp_mod_bits(mcasp, reg, NUMEVT(numevt), NUMEVT_MASK);
 949
 950        /* Configure the burst size for platform drivers */
 951        if (numevt == 1)
 952                numevt = 0;
 953        dma_data->maxburst = numevt;
 954
 955out:
 956        mcasp->active_serializers[stream] = active_serializers;
 957
 958        return 0;
 959}
 960
 961static int mcasp_i2s_hw_param(struct davinci_mcasp *mcasp, int stream,
 962                              int channels)
 963{
 964        int i, active_slots;
 965        int total_slots;
 966        int active_serializers;
 967        u32 mask = 0;
 968        u32 busel = 0;
 969
 970        total_slots = mcasp->tdm_slots;
 971
 972        /*
 973         * If more than one serializer is needed, then use them with
 974         * all the specified tdm_slots. Otherwise, one serializer can
 975         * cope with the transaction using just as many slots as there
 976         * are channels in the stream.
 977         */
 978        if (mcasp->tdm_mask[stream]) {
 979                active_slots = hweight32(mcasp->tdm_mask[stream]);
 980                active_serializers = (channels + active_slots - 1) /
 981                        active_slots;
 982                if (active_serializers == 1)
 983                        active_slots = channels;
 984                for (i = 0; i < total_slots; i++) {
 985                        if ((1 << i) & mcasp->tdm_mask[stream]) {
 986                                mask |= (1 << i);
 987                                if (--active_slots <= 0)
 988                                        break;
 989                        }
 990                }
 991        } else {
 992                active_serializers = (channels + total_slots - 1) / total_slots;
 993                if (active_serializers == 1)
 994                        active_slots = channels;
 995                else
 996                        active_slots = total_slots;
 997
 998                for (i = 0; i < active_slots; i++)
 999                        mask |= (1 << i);
1000        }
1001
1002        mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, TX_ASYNC);
1003
1004        if (!mcasp->dat_port)
1005                busel = TXSEL;
1006
1007        if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
1008                mcasp_set_reg(mcasp, DAVINCI_MCASP_TXTDM_REG, mask);
1009                mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, busel | TXORD);
1010                mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG,
1011                               FSXMOD(total_slots), FSXMOD(0x1FF));
1012        } else if (stream == SNDRV_PCM_STREAM_CAPTURE) {
1013                mcasp_set_reg(mcasp, DAVINCI_MCASP_RXTDM_REG, mask);
1014                mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, busel | RXORD);
1015                mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG,
1016                               FSRMOD(total_slots), FSRMOD(0x1FF));
1017                /*
1018                 * If McASP is set to be TX/RX synchronous and the playback is
1019                 * not running already we need to configure the TX slots in
1020                 * order to have correct FSX on the bus
1021                 */
1022                if (mcasp_is_synchronous(mcasp) && !mcasp->channels)
1023                        mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG,
1024                                       FSXMOD(total_slots), FSXMOD(0x1FF));
1025        }
1026
1027        return 0;
1028}
1029
1030/* S/PDIF */
1031static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp,
1032                              unsigned int rate)
1033{
1034        u32 cs_value = 0;
1035        u8 *cs_bytes = (u8*) &cs_value;
1036
1037        /* Set the TX format : 24 bit right rotation, 32 bit slot, Pad 0
1038           and LSB first */
1039        mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(6) | TXSSZ(15));
1040
1041        /* Set TX frame synch : DIT Mode, 1 bit width, internal, rising edge */
1042        mcasp_set_reg(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE | FSXMOD(0x180));
1043
1044        /* Set the TX tdm : for all the slots */
1045        mcasp_set_reg(mcasp, DAVINCI_MCASP_TXTDM_REG, 0xFFFFFFFF);
1046
1047        /* Set the TX clock controls : div = 1 and internal */
1048        mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE | TX_ASYNC);
1049
1050        mcasp_clr_bits(mcasp, DAVINCI_MCASP_XEVTCTL_REG, TXDATADMADIS);
1051
1052        /* Only 44100 and 48000 are valid, both have the same setting */
1053        mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXDIV(3));
1054
1055        /* Enable the DIT */
1056        mcasp_set_bits(mcasp, DAVINCI_MCASP_TXDITCTL_REG, DITEN);
1057
1058        /* Set S/PDIF channel status bits */
1059        cs_bytes[0] = IEC958_AES0_CON_NOT_COPYRIGHT;
1060        cs_bytes[1] = IEC958_AES1_CON_PCM_CODER;
1061
1062        switch (rate) {
1063        case 22050:
1064                cs_bytes[3] |= IEC958_AES3_CON_FS_22050;
1065                break;
1066        case 24000:
1067                cs_bytes[3] |= IEC958_AES3_CON_FS_24000;
1068                break;
1069        case 32000:
1070                cs_bytes[3] |= IEC958_AES3_CON_FS_32000;
1071                break;
1072        case 44100:
1073                cs_bytes[3] |= IEC958_AES3_CON_FS_44100;
1074                break;
1075        case 48000:
1076                cs_bytes[3] |= IEC958_AES3_CON_FS_48000;
1077                break;
1078        case 88200:
1079                cs_bytes[3] |= IEC958_AES3_CON_FS_88200;
1080                break;
1081        case 96000:
1082                cs_bytes[3] |= IEC958_AES3_CON_FS_96000;
1083                break;
1084        case 176400:
1085                cs_bytes[3] |= IEC958_AES3_CON_FS_176400;
1086                break;
1087        case 192000:
1088                cs_bytes[3] |= IEC958_AES3_CON_FS_192000;
1089                break;
1090        default:
1091                printk(KERN_WARNING "unsupported sampling rate: %d\n", rate);
1092                return -EINVAL;
1093        }
1094
1095        mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRA_REG, cs_value);
1096        mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRB_REG, cs_value);
1097
1098        return 0;
1099}
1100
1101static int davinci_mcasp_calc_clk_div(struct davinci_mcasp *mcasp,
1102                                      unsigned int sysclk_freq,
1103                                      unsigned int bclk_freq, bool set)
1104{
1105        u32 reg = mcasp_get_reg(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG);
1106        int div = sysclk_freq / bclk_freq;
1107        int rem = sysclk_freq % bclk_freq;
1108        int error_ppm;
1109        int aux_div = 1;
1110
1111        if (div > (ACLKXDIV_MASK + 1)) {
1112                if (reg & AHCLKXE) {
1113                        aux_div = div / (ACLKXDIV_MASK + 1);
1114                        if (div % (ACLKXDIV_MASK + 1))
1115                                aux_div++;
1116
1117                        sysclk_freq /= aux_div;
1118                        div = sysclk_freq / bclk_freq;
1119                        rem = sysclk_freq % bclk_freq;
1120                } else if (set) {
1121                        dev_warn(mcasp->dev, "Too fast reference clock (%u)\n",
1122                                 sysclk_freq);
1123                }
1124        }
1125
1126        if (rem != 0) {
1127                if (div == 0 ||
1128                    ((sysclk_freq / div) - bclk_freq) >
1129                    (bclk_freq - (sysclk_freq / (div+1)))) {
1130                        div++;
1131                        rem = rem - bclk_freq;
1132                }
1133        }
1134        error_ppm = (div*1000000 + (int)div64_long(1000000LL*rem,
1135                     (int)bclk_freq)) / div - 1000000;
1136
1137        if (set) {
1138                if (error_ppm)
1139                        dev_info(mcasp->dev, "Sample-rate is off by %d PPM\n",
1140                                 error_ppm);
1141
1142                __davinci_mcasp_set_clkdiv(mcasp, MCASP_CLKDIV_BCLK, div, 0);
1143                if (reg & AHCLKXE)
1144                        __davinci_mcasp_set_clkdiv(mcasp, MCASP_CLKDIV_AUXCLK,
1145                                                   aux_div, 0);
1146        }
1147
1148        return error_ppm;
1149}
1150
1151static inline u32 davinci_mcasp_tx_delay(struct davinci_mcasp *mcasp)
1152{
1153        if (!mcasp->txnumevt)
1154                return 0;
1155
1156        return mcasp_get_reg(mcasp, mcasp->fifo_base + MCASP_WFIFOSTS_OFFSET);
1157}
1158
1159static inline u32 davinci_mcasp_rx_delay(struct davinci_mcasp *mcasp)
1160{
1161        if (!mcasp->rxnumevt)
1162                return 0;
1163
1164        return mcasp_get_reg(mcasp, mcasp->fifo_base + MCASP_RFIFOSTS_OFFSET);
1165}
1166
1167static snd_pcm_sframes_t davinci_mcasp_delay(
1168                        struct snd_pcm_substream *substream,
1169                        struct snd_soc_dai *cpu_dai)
1170{
1171        struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
1172        u32 fifo_use;
1173
1174        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1175                fifo_use = davinci_mcasp_tx_delay(mcasp);
1176        else
1177                fifo_use = davinci_mcasp_rx_delay(mcasp);
1178
1179        /*
1180         * Divide the used locations with the channel count to get the
1181         * FIFO usage in samples (don't care about partial samples in the
1182         * buffer).
1183         */
1184        return fifo_use / substream->runtime->channels;
1185}
1186
1187static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
1188                                        struct snd_pcm_hw_params *params,
1189                                        struct snd_soc_dai *cpu_dai)
1190{
1191        struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
1192        int word_length;
1193        int channels = params_channels(params);
1194        int period_size = params_period_size(params);
1195        int ret;
1196
1197        switch (params_format(params)) {
1198        case SNDRV_PCM_FORMAT_U8:
1199        case SNDRV_PCM_FORMAT_S8:
1200                word_length = 8;
1201                break;
1202
1203        case SNDRV_PCM_FORMAT_U16_LE:
1204        case SNDRV_PCM_FORMAT_S16_LE:
1205                word_length = 16;
1206                break;
1207
1208        case SNDRV_PCM_FORMAT_U24_3LE:
1209        case SNDRV_PCM_FORMAT_S24_3LE:
1210                word_length = 24;
1211                break;
1212
1213        case SNDRV_PCM_FORMAT_U24_LE:
1214        case SNDRV_PCM_FORMAT_S24_LE:
1215                word_length = 24;
1216                break;
1217
1218        case SNDRV_PCM_FORMAT_U32_LE:
1219        case SNDRV_PCM_FORMAT_S32_LE:
1220                word_length = 32;
1221                break;
1222
1223        default:
1224                printk(KERN_WARNING "davinci-mcasp: unsupported PCM format");
1225                return -EINVAL;
1226        }
1227
1228        ret = davinci_mcasp_set_dai_fmt(cpu_dai, mcasp->dai_fmt);
1229        if (ret)
1230                return ret;
1231
1232        /*
1233         * If mcasp is BCLK master, and a BCLK divider was not provided by
1234         * the machine driver, we need to calculate the ratio.
1235         */
1236        if (mcasp->bclk_master && mcasp->bclk_div == 0 && mcasp->sysclk_freq) {
1237                int slots = mcasp->tdm_slots;
1238                int rate = params_rate(params);
1239                int sbits = params_width(params);
1240
1241                if (mcasp->slot_width)
1242                        sbits = mcasp->slot_width;
1243
1244                davinci_mcasp_calc_clk_div(mcasp, mcasp->sysclk_freq,
1245                                           rate * sbits * slots, true);
1246        }
1247
1248        ret = mcasp_common_hw_param(mcasp, substream->stream,
1249                                    period_size * channels, channels);
1250        if (ret)
1251                return ret;
1252
1253        if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
1254                ret = mcasp_dit_hw_param(mcasp, params_rate(params));
1255        else
1256                ret = mcasp_i2s_hw_param(mcasp, substream->stream,
1257                                         channels);
1258
1259        if (ret)
1260                return ret;
1261
1262        davinci_config_channel_size(mcasp, word_length);
1263
1264        if (mcasp->op_mode == DAVINCI_MCASP_IIS_MODE) {
1265                mcasp->channels = channels;
1266                if (!mcasp->max_format_width)
1267                        mcasp->max_format_width = word_length;
1268        }
1269
1270        return 0;
1271}
1272
1273static int davinci_mcasp_trigger(struct snd_pcm_substream *substream,
1274                                     int cmd, struct snd_soc_dai *cpu_dai)
1275{
1276        struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
1277        int ret = 0;
1278
1279        switch (cmd) {
1280        case SNDRV_PCM_TRIGGER_RESUME:
1281        case SNDRV_PCM_TRIGGER_START:
1282        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1283                davinci_mcasp_start(mcasp, substream->stream);
1284                break;
1285        case SNDRV_PCM_TRIGGER_SUSPEND:
1286        case SNDRV_PCM_TRIGGER_STOP:
1287        case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1288                davinci_mcasp_stop(mcasp, substream->stream);
1289                break;
1290
1291        default:
1292                ret = -EINVAL;
1293        }
1294
1295        return ret;
1296}
1297
1298static int davinci_mcasp_hw_rule_slot_width(struct snd_pcm_hw_params *params,
1299                                            struct snd_pcm_hw_rule *rule)
1300{
1301        struct davinci_mcasp_ruledata *rd = rule->private;
1302        struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
1303        struct snd_mask nfmt;
1304        int i, slot_width;
1305
1306        snd_mask_none(&nfmt);
1307        slot_width = rd->mcasp->slot_width;
1308
1309        for (i = 0; i <= SNDRV_PCM_FORMAT_LAST; i++) {
1310                if (snd_mask_test(fmt, i)) {
1311                        if (snd_pcm_format_width(i) <= slot_width) {
1312                                snd_mask_set(&nfmt, i);
1313                        }
1314                }
1315        }
1316
1317        return snd_mask_refine(fmt, &nfmt);
1318}
1319
1320static int davinci_mcasp_hw_rule_format_width(struct snd_pcm_hw_params *params,
1321                                              struct snd_pcm_hw_rule *rule)
1322{
1323        struct davinci_mcasp_ruledata *rd = rule->private;
1324        struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
1325        struct snd_mask nfmt;
1326        int i, format_width;
1327
1328        snd_mask_none(&nfmt);
1329        format_width = rd->mcasp->max_format_width;
1330
1331        for (i = 0; i <= SNDRV_PCM_FORMAT_LAST; i++) {
1332                if (snd_mask_test(fmt, i)) {
1333                        if (snd_pcm_format_width(i) == format_width) {
1334                                snd_mask_set(&nfmt, i);
1335                        }
1336                }
1337        }
1338
1339        return snd_mask_refine(fmt, &nfmt);
1340}
1341
1342static const unsigned int davinci_mcasp_dai_rates[] = {
1343        8000, 11025, 16000, 22050, 32000, 44100, 48000, 64000,
1344        88200, 96000, 176400, 192000,
1345};
1346
1347#define DAVINCI_MAX_RATE_ERROR_PPM 1000
1348
1349static int davinci_mcasp_hw_rule_rate(struct snd_pcm_hw_params *params,
1350                                      struct snd_pcm_hw_rule *rule)
1351{
1352        struct davinci_mcasp_ruledata *rd = rule->private;
1353        struct snd_interval *ri =
1354                hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
1355        int sbits = params_width(params);
1356        int slots = rd->mcasp->tdm_slots;
1357        struct snd_interval range;
1358        int i;
1359
1360        if (rd->mcasp->slot_width)
1361                sbits = rd->mcasp->slot_width;
1362
1363        snd_interval_any(&range);
1364        range.empty = 1;
1365
1366        for (i = 0; i < ARRAY_SIZE(davinci_mcasp_dai_rates); i++) {
1367                if (snd_interval_test(ri, davinci_mcasp_dai_rates[i])) {
1368                        uint bclk_freq = sbits * slots *
1369                                         davinci_mcasp_dai_rates[i];
1370                        unsigned int sysclk_freq;
1371                        int ppm;
1372
1373                        if (rd->mcasp->auxclk_fs_ratio)
1374                                sysclk_freq =  davinci_mcasp_dai_rates[i] *
1375                                               rd->mcasp->auxclk_fs_ratio;
1376                        else
1377                                sysclk_freq = rd->mcasp->sysclk_freq;
1378
1379                        ppm = davinci_mcasp_calc_clk_div(rd->mcasp, sysclk_freq,
1380                                                         bclk_freq, false);
1381                        if (abs(ppm) < DAVINCI_MAX_RATE_ERROR_PPM) {
1382                                if (range.empty) {
1383                                        range.min = davinci_mcasp_dai_rates[i];
1384                                        range.empty = 0;
1385                                }
1386                                range.max = davinci_mcasp_dai_rates[i];
1387                        }
1388                }
1389        }
1390
1391        dev_dbg(rd->mcasp->dev,
1392                "Frequencies %d-%d -> %d-%d for %d sbits and %d tdm slots\n",
1393                ri->min, ri->max, range.min, range.max, sbits, slots);
1394
1395        return snd_interval_refine(hw_param_interval(params, rule->var),
1396                                   &range);
1397}
1398
1399static int davinci_mcasp_hw_rule_format(struct snd_pcm_hw_params *params,
1400                                        struct snd_pcm_hw_rule *rule)
1401{
1402        struct davinci_mcasp_ruledata *rd = rule->private;
1403        struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
1404        struct snd_mask nfmt;
1405        int rate = params_rate(params);
1406        int slots = rd->mcasp->tdm_slots;
1407        int i, count = 0;
1408
1409        snd_mask_none(&nfmt);
1410
1411        for (i = 0; i <= SNDRV_PCM_FORMAT_LAST; i++) {
1412                if (snd_mask_test(fmt, i)) {
1413                        uint sbits = snd_pcm_format_width(i);
1414                        unsigned int sysclk_freq;
1415                        int ppm;
1416
1417                        if (rd->mcasp->auxclk_fs_ratio)
1418                                sysclk_freq =  rate *
1419                                               rd->mcasp->auxclk_fs_ratio;
1420                        else
1421                                sysclk_freq = rd->mcasp->sysclk_freq;
1422
1423                        if (rd->mcasp->slot_width)
1424                                sbits = rd->mcasp->slot_width;
1425
1426                        ppm = davinci_mcasp_calc_clk_div(rd->mcasp, sysclk_freq,
1427                                                         sbits * slots * rate,
1428                                                         false);
1429                        if (abs(ppm) < DAVINCI_MAX_RATE_ERROR_PPM) {
1430                                snd_mask_set(&nfmt, i);
1431                                count++;
1432                        }
1433                }
1434        }
1435        dev_dbg(rd->mcasp->dev,
1436                "%d possible sample format for %d Hz and %d tdm slots\n",
1437                count, rate, slots);
1438
1439        return snd_mask_refine(fmt, &nfmt);
1440}
1441
1442static int davinci_mcasp_hw_rule_min_periodsize(
1443                struct snd_pcm_hw_params *params, struct snd_pcm_hw_rule *rule)
1444{
1445        struct snd_interval *period_size = hw_param_interval(params,
1446                                                SNDRV_PCM_HW_PARAM_PERIOD_SIZE);
1447        struct snd_interval frames;
1448
1449        snd_interval_any(&frames);
1450        frames.min = 64;
1451        frames.integer = 1;
1452
1453        return snd_interval_refine(period_size, &frames);
1454}
1455
1456static int davinci_mcasp_startup(struct snd_pcm_substream *substream,
1457                                 struct snd_soc_dai *cpu_dai)
1458{
1459        struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
1460        struct davinci_mcasp_ruledata *ruledata =
1461                                        &mcasp->ruledata[substream->stream];
1462        u32 max_channels = 0;
1463        int i, dir, ret;
1464        int tdm_slots = mcasp->tdm_slots;
1465
1466        /* Do not allow more then one stream per direction */
1467        if (mcasp->substreams[substream->stream])
1468                return -EBUSY;
1469
1470        mcasp->substreams[substream->stream] = substream;
1471
1472        if (mcasp->tdm_mask[substream->stream])
1473                tdm_slots = hweight32(mcasp->tdm_mask[substream->stream]);
1474
1475        if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
1476                return 0;
1477
1478        /*
1479         * Limit the maximum allowed channels for the first stream:
1480         * number of serializers for the direction * tdm slots per serializer
1481         */
1482        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1483                dir = TX_MODE;
1484        else
1485                dir = RX_MODE;
1486
1487        for (i = 0; i < mcasp->num_serializer; i++) {
1488                if (mcasp->serial_dir[i] == dir)
1489                        max_channels++;
1490        }
1491        ruledata->serializers = max_channels;
1492        ruledata->mcasp = mcasp;
1493        max_channels *= tdm_slots;
1494        /*
1495         * If the already active stream has less channels than the calculated
1496         * limit based on the seirializers * tdm_slots, and only one serializer
1497         * is in use we need to use that as a constraint for the second stream.
1498         * Otherwise (first stream or less allowed channels or more than one
1499         * serializer in use) we use the calculated constraint.
1500         */
1501        if (mcasp->channels && mcasp->channels < max_channels &&
1502            ruledata->serializers == 1)
1503                max_channels = mcasp->channels;
1504        /*
1505         * But we can always allow channels upto the amount of
1506         * the available tdm_slots.
1507         */
1508        if (max_channels < tdm_slots)
1509                max_channels = tdm_slots;
1510
1511        snd_pcm_hw_constraint_minmax(substream->runtime,
1512                                     SNDRV_PCM_HW_PARAM_CHANNELS,
1513                                     0, max_channels);
1514
1515        snd_pcm_hw_constraint_list(substream->runtime,
1516                                   0, SNDRV_PCM_HW_PARAM_CHANNELS,
1517                                   &mcasp->chconstr[substream->stream]);
1518
1519        if (mcasp->max_format_width) {
1520                /*
1521                 * Only allow formats which require same amount of bits on the
1522                 * bus as the currently running stream
1523                 */
1524                ret = snd_pcm_hw_rule_add(substream->runtime, 0,
1525                                          SNDRV_PCM_HW_PARAM_FORMAT,
1526                                          davinci_mcasp_hw_rule_format_width,
1527                                          ruledata,
1528                                          SNDRV_PCM_HW_PARAM_FORMAT, -1);
1529                if (ret)
1530                        return ret;
1531        }
1532        else if (mcasp->slot_width) {
1533                /* Only allow formats require <= slot_width bits on the bus */
1534                ret = snd_pcm_hw_rule_add(substream->runtime, 0,
1535                                          SNDRV_PCM_HW_PARAM_FORMAT,
1536                                          davinci_mcasp_hw_rule_slot_width,
1537                                          ruledata,
1538                                          SNDRV_PCM_HW_PARAM_FORMAT, -1);
1539                if (ret)
1540                        return ret;
1541        }
1542
1543        /*
1544         * If we rely on implicit BCLK divider setting we should
1545         * set constraints based on what we can provide.
1546         */
1547        if (mcasp->bclk_master && mcasp->bclk_div == 0 && mcasp->sysclk_freq) {
1548                ret = snd_pcm_hw_rule_add(substream->runtime, 0,
1549                                          SNDRV_PCM_HW_PARAM_RATE,
1550                                          davinci_mcasp_hw_rule_rate,
1551                                          ruledata,
1552                                          SNDRV_PCM_HW_PARAM_FORMAT, -1);
1553                if (ret)
1554                        return ret;
1555                ret = snd_pcm_hw_rule_add(substream->runtime, 0,
1556                                          SNDRV_PCM_HW_PARAM_FORMAT,
1557                                          davinci_mcasp_hw_rule_format,
1558                                          ruledata,
1559                                          SNDRV_PCM_HW_PARAM_RATE, -1);
1560                if (ret)
1561                        return ret;
1562        }
1563
1564        snd_pcm_hw_rule_add(substream->runtime, 0,
1565                            SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
1566                            davinci_mcasp_hw_rule_min_periodsize, NULL,
1567                            SNDRV_PCM_HW_PARAM_PERIOD_SIZE, -1);
1568
1569        return 0;
1570}
1571
1572static void davinci_mcasp_shutdown(struct snd_pcm_substream *substream,
1573                                   struct snd_soc_dai *cpu_dai)
1574{
1575        struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
1576
1577        mcasp->substreams[substream->stream] = NULL;
1578        mcasp->active_serializers[substream->stream] = 0;
1579
1580        if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
1581                return;
1582
1583        if (!snd_soc_dai_active(cpu_dai)) {
1584                mcasp->channels = 0;
1585                mcasp->max_format_width = 0;
1586        }
1587}
1588
1589static const struct snd_soc_dai_ops davinci_mcasp_dai_ops = {
1590        .startup        = davinci_mcasp_startup,
1591        .shutdown       = davinci_mcasp_shutdown,
1592        .trigger        = davinci_mcasp_trigger,
1593        .delay          = davinci_mcasp_delay,
1594        .hw_params      = davinci_mcasp_hw_params,
1595        .set_fmt        = davinci_mcasp_set_dai_fmt,
1596        .set_clkdiv     = davinci_mcasp_set_clkdiv,
1597        .set_sysclk     = davinci_mcasp_set_sysclk,
1598        .set_tdm_slot   = davinci_mcasp_set_tdm_slot,
1599};
1600
1601static int davinci_mcasp_dai_probe(struct snd_soc_dai *dai)
1602{
1603        struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
1604
1605        dai->playback_dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
1606        dai->capture_dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
1607
1608        return 0;
1609}
1610
1611#define DAVINCI_MCASP_RATES     SNDRV_PCM_RATE_8000_192000
1612
1613#define DAVINCI_MCASP_PCM_FMTS (SNDRV_PCM_FMTBIT_S8 | \
1614                                SNDRV_PCM_FMTBIT_U8 | \
1615                                SNDRV_PCM_FMTBIT_S16_LE | \
1616                                SNDRV_PCM_FMTBIT_U16_LE | \
1617                                SNDRV_PCM_FMTBIT_S24_LE | \
1618                                SNDRV_PCM_FMTBIT_U24_LE | \
1619                                SNDRV_PCM_FMTBIT_S24_3LE | \
1620                                SNDRV_PCM_FMTBIT_U24_3LE | \
1621                                SNDRV_PCM_FMTBIT_S32_LE | \
1622                                SNDRV_PCM_FMTBIT_U32_LE)
1623
1624static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
1625        {
1626                .name           = "davinci-mcasp.0",
1627                .probe          = davinci_mcasp_dai_probe,
1628                .playback       = {
1629                        .stream_name = "IIS Playback",
1630                        .channels_min   = 1,
1631                        .channels_max   = 32 * 16,
1632                        .rates          = DAVINCI_MCASP_RATES,
1633                        .formats        = DAVINCI_MCASP_PCM_FMTS,
1634                },
1635                .capture        = {
1636                        .stream_name = "IIS Capture",
1637                        .channels_min   = 1,
1638                        .channels_max   = 32 * 16,
1639                        .rates          = DAVINCI_MCASP_RATES,
1640                        .formats        = DAVINCI_MCASP_PCM_FMTS,
1641                },
1642                .ops            = &davinci_mcasp_dai_ops,
1643
1644                .symmetric_rate         = 1,
1645        },
1646        {
1647                .name           = "davinci-mcasp.1",
1648                .probe          = davinci_mcasp_dai_probe,
1649                .playback       = {
1650                        .stream_name = "DIT Playback",
1651                        .channels_min   = 1,
1652                        .channels_max   = 384,
1653                        .rates          = DAVINCI_MCASP_RATES,
1654                        .formats        = DAVINCI_MCASP_PCM_FMTS,
1655                },
1656                .ops            = &davinci_mcasp_dai_ops,
1657        },
1658
1659};
1660
1661static const struct snd_soc_component_driver davinci_mcasp_component = {
1662        .name           = "davinci-mcasp",
1663};
1664
1665/* Some HW specific values and defaults. The rest is filled in from DT. */
1666static struct davinci_mcasp_pdata dm646x_mcasp_pdata = {
1667        .tx_dma_offset = 0x400,
1668        .rx_dma_offset = 0x400,
1669        .version = MCASP_VERSION_1,
1670};
1671
1672static struct davinci_mcasp_pdata da830_mcasp_pdata = {
1673        .tx_dma_offset = 0x2000,
1674        .rx_dma_offset = 0x2000,
1675        .version = MCASP_VERSION_2,
1676};
1677
1678static struct davinci_mcasp_pdata am33xx_mcasp_pdata = {
1679        .tx_dma_offset = 0,
1680        .rx_dma_offset = 0,
1681        .version = MCASP_VERSION_3,
1682};
1683
1684static struct davinci_mcasp_pdata dra7_mcasp_pdata = {
1685        /* The CFG port offset will be calculated if it is needed */
1686        .tx_dma_offset = 0,
1687        .rx_dma_offset = 0,
1688        .version = MCASP_VERSION_4,
1689};
1690
1691static const struct of_device_id mcasp_dt_ids[] = {
1692        {
1693                .compatible = "ti,dm646x-mcasp-audio",
1694                .data = &dm646x_mcasp_pdata,
1695        },
1696        {
1697                .compatible = "ti,da830-mcasp-audio",
1698                .data = &da830_mcasp_pdata,
1699        },
1700        {
1701                .compatible = "ti,am33xx-mcasp-audio",
1702                .data = &am33xx_mcasp_pdata,
1703        },
1704        {
1705                .compatible = "ti,dra7-mcasp-audio",
1706                .data = &dra7_mcasp_pdata,
1707        },
1708        { /* sentinel */ }
1709};
1710MODULE_DEVICE_TABLE(of, mcasp_dt_ids);
1711
1712static int mcasp_reparent_fck(struct platform_device *pdev)
1713{
1714        struct device_node *node = pdev->dev.of_node;
1715        struct clk *gfclk, *parent_clk;
1716        const char *parent_name;
1717        int ret;
1718
1719        if (!node)
1720                return 0;
1721
1722        parent_name = of_get_property(node, "fck_parent", NULL);
1723        if (!parent_name)
1724                return 0;
1725
1726        dev_warn(&pdev->dev, "Update the bindings to use assigned-clocks!\n");
1727
1728        gfclk = clk_get(&pdev->dev, "fck");
1729        if (IS_ERR(gfclk)) {
1730                dev_err(&pdev->dev, "failed to get fck\n");
1731                return PTR_ERR(gfclk);
1732        }
1733
1734        parent_clk = clk_get(NULL, parent_name);
1735        if (IS_ERR(parent_clk)) {
1736                dev_err(&pdev->dev, "failed to get parent clock\n");
1737                ret = PTR_ERR(parent_clk);
1738                goto err1;
1739        }
1740
1741        ret = clk_set_parent(gfclk, parent_clk);
1742        if (ret) {
1743                dev_err(&pdev->dev, "failed to reparent fck\n");
1744                goto err2;
1745        }
1746
1747err2:
1748        clk_put(parent_clk);
1749err1:
1750        clk_put(gfclk);
1751        return ret;
1752}
1753
1754static bool davinci_mcasp_have_gpiochip(struct davinci_mcasp *mcasp)
1755{
1756#ifdef CONFIG_OF_GPIO
1757        if (mcasp->dev->of_node &&
1758            of_property_read_bool(mcasp->dev->of_node, "gpio-controller"))
1759                return true;
1760#endif
1761
1762        return false;
1763}
1764
1765static int davinci_mcasp_get_config(struct davinci_mcasp *mcasp,
1766                                    struct platform_device *pdev)
1767{
1768        const struct of_device_id *match = of_match_device(mcasp_dt_ids, &pdev->dev);
1769        struct device_node *np = pdev->dev.of_node;
1770        struct davinci_mcasp_pdata *pdata = NULL;
1771        const u32 *of_serial_dir32;
1772        u32 val;
1773        int i;
1774
1775        if (pdev->dev.platform_data) {
1776                pdata = pdev->dev.platform_data;
1777                pdata->dismod = DISMOD_LOW;
1778                goto out;
1779        } else if (match) {
1780                pdata = devm_kmemdup(&pdev->dev, match->data, sizeof(*pdata),
1781                                     GFP_KERNEL);
1782                if (!pdata)
1783                        return -ENOMEM;
1784        } else {
1785                dev_err(&pdev->dev, "No compatible match found\n");
1786                return -EINVAL;
1787        }
1788
1789        if (of_property_read_u32(np, "op-mode", &val) == 0) {
1790                pdata->op_mode = val;
1791        } else {
1792                mcasp->missing_audio_param = true;
1793                goto out;
1794        }
1795
1796        if (of_property_read_u32(np, "tdm-slots", &val) == 0) {
1797                if (val < 2 || val > 32) {
1798                        dev_err(&pdev->dev, "tdm-slots must be in rage [2-32]\n");
1799                        return -EINVAL;
1800                }
1801
1802                pdata->tdm_slots = val;
1803        } else if (pdata->op_mode == DAVINCI_MCASP_IIS_MODE) {
1804                mcasp->missing_audio_param = true;
1805                goto out;
1806        }
1807
1808        of_serial_dir32 = of_get_property(np, "serial-dir", &val);
1809        val /= sizeof(u32);
1810        if (of_serial_dir32) {
1811                u8 *of_serial_dir = devm_kzalloc(&pdev->dev,
1812                                                 (sizeof(*of_serial_dir) * val),
1813                                                 GFP_KERNEL);
1814                if (!of_serial_dir)
1815                        return -ENOMEM;
1816
1817                for (i = 0; i < val; i++)
1818                        of_serial_dir[i] = be32_to_cpup(&of_serial_dir32[i]);
1819
1820                pdata->num_serializer = val;
1821                pdata->serial_dir = of_serial_dir;
1822        } else {
1823                mcasp->missing_audio_param = true;
1824                goto out;
1825        }
1826
1827        if (of_property_read_u32(np, "tx-num-evt", &val) == 0)
1828                pdata->txnumevt = val;
1829
1830        if (of_property_read_u32(np, "rx-num-evt", &val) == 0)
1831                pdata->rxnumevt = val;
1832
1833        if (of_property_read_u32(np, "auxclk-fs-ratio", &val) == 0)
1834                mcasp->auxclk_fs_ratio = val;
1835
1836        if (of_property_read_u32(np, "dismod", &val) == 0) {
1837                if (val == 0 || val == 2 || val == 3) {
1838                        pdata->dismod = DISMOD_VAL(val);
1839                } else {
1840                        dev_warn(&pdev->dev, "Invalid dismod value: %u\n", val);
1841                        pdata->dismod = DISMOD_LOW;
1842                }
1843        } else {
1844                pdata->dismod = DISMOD_LOW;
1845        }
1846
1847out:
1848        mcasp->pdata = pdata;
1849
1850        if (mcasp->missing_audio_param) {
1851                if (davinci_mcasp_have_gpiochip(mcasp)) {
1852                        dev_dbg(&pdev->dev, "Missing DT parameter(s) for audio\n");
1853                        return 0;
1854                }
1855
1856                dev_err(&pdev->dev, "Insufficient DT parameter(s)\n");
1857                return -ENODEV;
1858        }
1859
1860        mcasp->op_mode = pdata->op_mode;
1861        /* sanity check for tdm slots parameter */
1862        if (mcasp->op_mode == DAVINCI_MCASP_IIS_MODE) {
1863                if (pdata->tdm_slots < 2) {
1864                        dev_warn(&pdev->dev, "invalid tdm slots: %d\n",
1865                                 pdata->tdm_slots);
1866                        mcasp->tdm_slots = 2;
1867                } else if (pdata->tdm_slots > 32) {
1868                        dev_warn(&pdev->dev, "invalid tdm slots: %d\n",
1869                                 pdata->tdm_slots);
1870                        mcasp->tdm_slots = 32;
1871                } else {
1872                        mcasp->tdm_slots = pdata->tdm_slots;
1873                }
1874        }
1875
1876        mcasp->num_serializer = pdata->num_serializer;
1877#ifdef CONFIG_PM
1878        mcasp->context.xrsr_regs = devm_kcalloc(&pdev->dev,
1879                                                mcasp->num_serializer, sizeof(u32),
1880                                                GFP_KERNEL);
1881        if (!mcasp->context.xrsr_regs)
1882                return -ENOMEM;
1883#endif
1884        mcasp->serial_dir = pdata->serial_dir;
1885        mcasp->version = pdata->version;
1886        mcasp->txnumevt = pdata->txnumevt;
1887        mcasp->rxnumevt = pdata->rxnumevt;
1888        mcasp->dismod = pdata->dismod;
1889
1890        return 0;
1891}
1892
1893enum {
1894        PCM_EDMA,
1895        PCM_SDMA,
1896        PCM_UDMA,
1897};
1898static const char *sdma_prefix = "ti,omap";
1899
1900static int davinci_mcasp_get_dma_type(struct davinci_mcasp *mcasp)
1901{
1902        struct dma_chan *chan;
1903        const char *tmp;
1904        int ret = PCM_EDMA;
1905
1906        if (!mcasp->dev->of_node)
1907                return PCM_EDMA;
1908
1909        tmp = mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK].filter_data;
1910        chan = dma_request_chan(mcasp->dev, tmp);
1911        if (IS_ERR(chan)) {
1912                if (PTR_ERR(chan) != -EPROBE_DEFER)
1913                        dev_err(mcasp->dev,
1914                                "Can't verify DMA configuration (%ld)\n",
1915                                PTR_ERR(chan));
1916                return PTR_ERR(chan);
1917        }
1918        if (WARN_ON(!chan->device || !chan->device->dev)) {
1919                dma_release_channel(chan);
1920                return -EINVAL;
1921        }
1922
1923        if (chan->device->dev->of_node)
1924                ret = of_property_read_string(chan->device->dev->of_node,
1925                                              "compatible", &tmp);
1926        else
1927                dev_dbg(mcasp->dev, "DMA controller has no of-node\n");
1928
1929        dma_release_channel(chan);
1930        if (ret)
1931                return ret;
1932
1933        dev_dbg(mcasp->dev, "DMA controller compatible = \"%s\"\n", tmp);
1934        if (!strncmp(tmp, sdma_prefix, strlen(sdma_prefix)))
1935                return PCM_SDMA;
1936        else if (strstr(tmp, "udmap"))
1937                return PCM_UDMA;
1938
1939        return PCM_EDMA;
1940}
1941
1942static u32 davinci_mcasp_txdma_offset(struct davinci_mcasp_pdata *pdata)
1943{
1944        int i;
1945        u32 offset = 0;
1946
1947        if (pdata->version != MCASP_VERSION_4)
1948                return pdata->tx_dma_offset;
1949
1950        for (i = 0; i < pdata->num_serializer; i++) {
1951                if (pdata->serial_dir[i] == TX_MODE) {
1952                        if (!offset) {
1953                                offset = DAVINCI_MCASP_TXBUF_REG(i);
1954                        } else {
1955                                pr_err("%s: Only one serializer allowed!\n",
1956                                       __func__);
1957                                break;
1958                        }
1959                }
1960        }
1961
1962        return offset;
1963}
1964
1965static u32 davinci_mcasp_rxdma_offset(struct davinci_mcasp_pdata *pdata)
1966{
1967        int i;
1968        u32 offset = 0;
1969
1970        if (pdata->version != MCASP_VERSION_4)
1971                return pdata->rx_dma_offset;
1972
1973        for (i = 0; i < pdata->num_serializer; i++) {
1974                if (pdata->serial_dir[i] == RX_MODE) {
1975                        if (!offset) {
1976                                offset = DAVINCI_MCASP_RXBUF_REG(i);
1977                        } else {
1978                                pr_err("%s: Only one serializer allowed!\n",
1979                                       __func__);
1980                                break;
1981                        }
1982                }
1983        }
1984
1985        return offset;
1986}
1987
1988#ifdef CONFIG_GPIOLIB
1989static int davinci_mcasp_gpio_request(struct gpio_chip *chip, unsigned offset)
1990{
1991        struct davinci_mcasp *mcasp = gpiochip_get_data(chip);
1992
1993        if (mcasp->num_serializer && offset < mcasp->num_serializer &&
1994            mcasp->serial_dir[offset] != INACTIVE_MODE) {
1995                dev_err(mcasp->dev, "AXR%u pin is  used for audio\n", offset);
1996                return -EBUSY;
1997        }
1998
1999        /* Do not change the PIN yet */
2000
2001        return pm_runtime_get_sync(mcasp->dev);
2002}
2003
2004static void davinci_mcasp_gpio_free(struct gpio_chip *chip, unsigned offset)
2005{
2006        struct davinci_mcasp *mcasp = gpiochip_get_data(chip);
2007
2008        /* Set the direction to input */
2009        mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, BIT(offset));
2010
2011        /* Set the pin as McASP pin */
2012        mcasp_clr_bits(mcasp, DAVINCI_MCASP_PFUNC_REG, BIT(offset));
2013
2014        pm_runtime_put_sync(mcasp->dev);
2015}
2016
2017static int davinci_mcasp_gpio_direction_out(struct gpio_chip *chip,
2018                                            unsigned offset, int value)
2019{
2020        struct davinci_mcasp *mcasp = gpiochip_get_data(chip);
2021        u32 val;
2022
2023        if (value)
2024                mcasp_set_bits(mcasp, DAVINCI_MCASP_PDOUT_REG, BIT(offset));
2025        else
2026                mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDOUT_REG, BIT(offset));
2027
2028        val = mcasp_get_reg(mcasp, DAVINCI_MCASP_PFUNC_REG);
2029        if (!(val & BIT(offset))) {
2030                /* Set the pin as GPIO pin */
2031                mcasp_set_bits(mcasp, DAVINCI_MCASP_PFUNC_REG, BIT(offset));
2032
2033                /* Set the direction to output */
2034                mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, BIT(offset));
2035        }
2036
2037        return 0;
2038}
2039
2040static void davinci_mcasp_gpio_set(struct gpio_chip *chip, unsigned offset,
2041                                  int value)
2042{
2043        struct davinci_mcasp *mcasp = gpiochip_get_data(chip);
2044
2045        if (value)
2046                mcasp_set_bits(mcasp, DAVINCI_MCASP_PDOUT_REG, BIT(offset));
2047        else
2048                mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDOUT_REG, BIT(offset));
2049}
2050
2051static int davinci_mcasp_gpio_direction_in(struct gpio_chip *chip,
2052                                           unsigned offset)
2053{
2054        struct davinci_mcasp *mcasp = gpiochip_get_data(chip);
2055        u32 val;
2056
2057        val = mcasp_get_reg(mcasp, DAVINCI_MCASP_PFUNC_REG);
2058        if (!(val & BIT(offset))) {
2059                /* Set the direction to input */
2060                mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, BIT(offset));
2061
2062                /* Set the pin as GPIO pin */
2063                mcasp_set_bits(mcasp, DAVINCI_MCASP_PFUNC_REG, BIT(offset));
2064        }
2065
2066        return 0;
2067}
2068
2069static int davinci_mcasp_gpio_get(struct gpio_chip *chip, unsigned offset)
2070{
2071        struct davinci_mcasp *mcasp = gpiochip_get_data(chip);
2072        u32 val;
2073
2074        val = mcasp_get_reg(mcasp, DAVINCI_MCASP_PDSET_REG);
2075        if (val & BIT(offset))
2076                return 1;
2077
2078        return 0;
2079}
2080
2081static int davinci_mcasp_gpio_get_direction(struct gpio_chip *chip,
2082                                            unsigned offset)
2083{
2084        struct davinci_mcasp *mcasp = gpiochip_get_data(chip);
2085        u32 val;
2086
2087        val = mcasp_get_reg(mcasp, DAVINCI_MCASP_PDIR_REG);
2088        if (val & BIT(offset))
2089                return 0;
2090
2091        return 1;
2092}
2093
2094static const struct gpio_chip davinci_mcasp_template_chip = {
2095        .owner                  = THIS_MODULE,
2096        .request                = davinci_mcasp_gpio_request,
2097        .free                   = davinci_mcasp_gpio_free,
2098        .direction_output       = davinci_mcasp_gpio_direction_out,
2099        .set                    = davinci_mcasp_gpio_set,
2100        .direction_input        = davinci_mcasp_gpio_direction_in,
2101        .get                    = davinci_mcasp_gpio_get,
2102        .get_direction          = davinci_mcasp_gpio_get_direction,
2103        .base                   = -1,
2104        .ngpio                  = 32,
2105};
2106
2107static int davinci_mcasp_init_gpiochip(struct davinci_mcasp *mcasp)
2108{
2109        if (!davinci_mcasp_have_gpiochip(mcasp))
2110                return 0;
2111
2112        mcasp->gpio_chip = davinci_mcasp_template_chip;
2113        mcasp->gpio_chip.label = dev_name(mcasp->dev);
2114        mcasp->gpio_chip.parent = mcasp->dev;
2115#ifdef CONFIG_OF_GPIO
2116        mcasp->gpio_chip.of_node = mcasp->dev->of_node;
2117#endif
2118
2119        return devm_gpiochip_add_data(mcasp->dev, &mcasp->gpio_chip, mcasp);
2120}
2121
2122#else /* CONFIG_GPIOLIB */
2123static inline int davinci_mcasp_init_gpiochip(struct davinci_mcasp *mcasp)
2124{
2125        return 0;
2126}
2127#endif /* CONFIG_GPIOLIB */
2128
2129static int davinci_mcasp_probe(struct platform_device *pdev)
2130{
2131        struct snd_dmaengine_dai_dma_data *dma_data;
2132        struct resource *mem, *dat;
2133        struct davinci_mcasp *mcasp;
2134        char *irq_name;
2135        int irq;
2136        int ret;
2137
2138        if (!pdev->dev.platform_data && !pdev->dev.of_node) {
2139                dev_err(&pdev->dev, "No platform data supplied\n");
2140                return -EINVAL;
2141        }
2142
2143        mcasp = devm_kzalloc(&pdev->dev, sizeof(struct davinci_mcasp),
2144                           GFP_KERNEL);
2145        if (!mcasp)
2146                return  -ENOMEM;
2147
2148        mem = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
2149        if (!mem) {
2150                dev_warn(&pdev->dev,
2151                         "\"mpu\" mem resource not found, using index 0\n");
2152                mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2153                if (!mem) {
2154                        dev_err(&pdev->dev, "no mem resource?\n");
2155                        return -ENODEV;
2156                }
2157        }
2158
2159        mcasp->base = devm_ioremap_resource(&pdev->dev, mem);
2160        if (IS_ERR(mcasp->base))
2161                return PTR_ERR(mcasp->base);
2162
2163        dev_set_drvdata(&pdev->dev, mcasp);
2164        pm_runtime_enable(&pdev->dev);
2165
2166        mcasp->dev = &pdev->dev;
2167        ret = davinci_mcasp_get_config(mcasp, pdev);
2168        if (ret)
2169                goto err;
2170
2171        /* All PINS as McASP */
2172        pm_runtime_get_sync(mcasp->dev);
2173        mcasp_set_reg(mcasp, DAVINCI_MCASP_PFUNC_REG, 0x00000000);
2174        pm_runtime_put(mcasp->dev);
2175
2176        /* Skip audio related setup code if the configuration is not adequat */
2177        if (mcasp->missing_audio_param)
2178                goto no_audio;
2179
2180        irq = platform_get_irq_byname_optional(pdev, "common");
2181        if (irq > 0) {
2182                irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_common",
2183                                          dev_name(&pdev->dev));
2184                if (!irq_name) {
2185                        ret = -ENOMEM;
2186                        goto err;
2187                }
2188                ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
2189                                                davinci_mcasp_common_irq_handler,
2190                                                IRQF_ONESHOT | IRQF_SHARED,
2191                                                irq_name, mcasp);
2192                if (ret) {
2193                        dev_err(&pdev->dev, "common IRQ request failed\n");
2194                        goto err;
2195                }
2196
2197                mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK] = XUNDRN;
2198                mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE] = ROVRN;
2199        }
2200
2201        irq = platform_get_irq_byname_optional(pdev, "rx");
2202        if (irq > 0) {
2203                irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_rx",
2204                                          dev_name(&pdev->dev));
2205                if (!irq_name) {
2206                        ret = -ENOMEM;
2207                        goto err;
2208                }
2209                ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
2210                                                davinci_mcasp_rx_irq_handler,
2211                                                IRQF_ONESHOT, irq_name, mcasp);
2212                if (ret) {
2213                        dev_err(&pdev->dev, "RX IRQ request failed\n");
2214                        goto err;
2215                }
2216
2217                mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE] = ROVRN;
2218        }
2219
2220        irq = platform_get_irq_byname_optional(pdev, "tx");
2221        if (irq > 0) {
2222                irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_tx",
2223                                          dev_name(&pdev->dev));
2224                if (!irq_name) {
2225                        ret = -ENOMEM;
2226                        goto err;
2227                }
2228                ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
2229                                                davinci_mcasp_tx_irq_handler,
2230                                                IRQF_ONESHOT, irq_name, mcasp);
2231                if (ret) {
2232                        dev_err(&pdev->dev, "TX IRQ request failed\n");
2233                        goto err;
2234                }
2235
2236                mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK] = XUNDRN;
2237        }
2238
2239        dat = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat");
2240        if (dat)
2241                mcasp->dat_port = true;
2242
2243        dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
2244        dma_data->filter_data = "tx";
2245        if (dat)
2246                dma_data->addr = dat->start;
2247        else
2248                dma_data->addr = mem->start + davinci_mcasp_txdma_offset(mcasp->pdata);
2249
2250
2251        /* RX is not valid in DIT mode */
2252        if (mcasp->op_mode != DAVINCI_MCASP_DIT_MODE) {
2253                dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
2254                dma_data->filter_data = "rx";
2255                if (dat)
2256                        dma_data->addr = dat->start;
2257                else
2258                        dma_data->addr =
2259                                mem->start + davinci_mcasp_rxdma_offset(mcasp->pdata);
2260        }
2261
2262        if (mcasp->version < MCASP_VERSION_3) {
2263                mcasp->fifo_base = DAVINCI_MCASP_V2_AFIFO_BASE;
2264                /* dma_params->dma_addr is pointing to the data port address */
2265                mcasp->dat_port = true;
2266        } else {
2267                mcasp->fifo_base = DAVINCI_MCASP_V3_AFIFO_BASE;
2268        }
2269
2270        /* Allocate memory for long enough list for all possible
2271         * scenarios. Maximum number tdm slots is 32 and there cannot
2272         * be more serializers than given in the configuration.  The
2273         * serializer directions could be taken into account, but it
2274         * would make code much more complex and save only couple of
2275         * bytes.
2276         */
2277        mcasp->chconstr[SNDRV_PCM_STREAM_PLAYBACK].list =
2278                devm_kcalloc(mcasp->dev,
2279                             32 + mcasp->num_serializer - 1,
2280                             sizeof(unsigned int),
2281                             GFP_KERNEL);
2282
2283        mcasp->chconstr[SNDRV_PCM_STREAM_CAPTURE].list =
2284                devm_kcalloc(mcasp->dev,
2285                             32 + mcasp->num_serializer - 1,
2286                             sizeof(unsigned int),
2287                             GFP_KERNEL);
2288
2289        if (!mcasp->chconstr[SNDRV_PCM_STREAM_PLAYBACK].list ||
2290            !mcasp->chconstr[SNDRV_PCM_STREAM_CAPTURE].list) {
2291                ret = -ENOMEM;
2292                goto err;
2293        }
2294
2295        ret = davinci_mcasp_set_ch_constraints(mcasp);
2296        if (ret)
2297                goto err;
2298
2299        mcasp_reparent_fck(pdev);
2300
2301        ret = devm_snd_soc_register_component(&pdev->dev, &davinci_mcasp_component,
2302                                              &davinci_mcasp_dai[mcasp->op_mode], 1);
2303
2304        if (ret != 0)
2305                goto err;
2306
2307        ret = davinci_mcasp_get_dma_type(mcasp);
2308        switch (ret) {
2309        case PCM_EDMA:
2310                ret = edma_pcm_platform_register(&pdev->dev);
2311                break;
2312        case PCM_SDMA:
2313                ret = sdma_pcm_platform_register(&pdev->dev, "tx", "rx");
2314                break;
2315        case PCM_UDMA:
2316                ret = udma_pcm_platform_register(&pdev->dev);
2317                break;
2318        default:
2319                dev_err(&pdev->dev, "No DMA controller found (%d)\n", ret);
2320                fallthrough;
2321        case -EPROBE_DEFER:
2322                goto err;
2323        }
2324
2325        if (ret) {
2326                dev_err(&pdev->dev, "register PCM failed: %d\n", ret);
2327                goto err;
2328        }
2329
2330no_audio:
2331        ret = davinci_mcasp_init_gpiochip(mcasp);
2332        if (ret) {
2333                dev_err(&pdev->dev, "gpiochip registration failed: %d\n", ret);
2334                goto err;
2335        }
2336
2337        return 0;
2338err:
2339        pm_runtime_disable(&pdev->dev);
2340        return ret;
2341}
2342
2343static int davinci_mcasp_remove(struct platform_device *pdev)
2344{
2345        pm_runtime_disable(&pdev->dev);
2346
2347        return 0;
2348}
2349
2350#ifdef CONFIG_PM
2351static int davinci_mcasp_runtime_suspend(struct device *dev)
2352{
2353        struct davinci_mcasp *mcasp = dev_get_drvdata(dev);
2354        struct davinci_mcasp_context *context = &mcasp->context;
2355        u32 reg;
2356        int i;
2357
2358        for (i = 0; i < ARRAY_SIZE(context_regs); i++)
2359                context->config_regs[i] = mcasp_get_reg(mcasp, context_regs[i]);
2360
2361        if (mcasp->txnumevt) {
2362                reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
2363                context->afifo_regs[0] = mcasp_get_reg(mcasp, reg);
2364        }
2365        if (mcasp->rxnumevt) {
2366                reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
2367                context->afifo_regs[1] = mcasp_get_reg(mcasp, reg);
2368        }
2369
2370        for (i = 0; i < mcasp->num_serializer; i++)
2371                context->xrsr_regs[i] = mcasp_get_reg(mcasp,
2372                                                DAVINCI_MCASP_XRSRCTL_REG(i));
2373
2374        return 0;
2375}
2376
2377static int davinci_mcasp_runtime_resume(struct device *dev)
2378{
2379        struct davinci_mcasp *mcasp = dev_get_drvdata(dev);
2380        struct davinci_mcasp_context *context = &mcasp->context;
2381        u32 reg;
2382        int i;
2383
2384        for (i = 0; i < ARRAY_SIZE(context_regs); i++)
2385                mcasp_set_reg(mcasp, context_regs[i], context->config_regs[i]);
2386
2387        if (mcasp->txnumevt) {
2388                reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
2389                mcasp_set_reg(mcasp, reg, context->afifo_regs[0]);
2390        }
2391        if (mcasp->rxnumevt) {
2392                reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
2393                mcasp_set_reg(mcasp, reg, context->afifo_regs[1]);
2394        }
2395
2396        for (i = 0; i < mcasp->num_serializer; i++)
2397                mcasp_set_reg(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
2398                              context->xrsr_regs[i]);
2399
2400        return 0;
2401}
2402
2403#endif
2404
2405static const struct dev_pm_ops davinci_mcasp_pm_ops = {
2406        SET_RUNTIME_PM_OPS(davinci_mcasp_runtime_suspend,
2407                           davinci_mcasp_runtime_resume,
2408                           NULL)
2409};
2410
2411static struct platform_driver davinci_mcasp_driver = {
2412        .probe          = davinci_mcasp_probe,
2413        .remove         = davinci_mcasp_remove,
2414        .driver         = {
2415                .name   = "davinci-mcasp",
2416                .pm     = &davinci_mcasp_pm_ops,
2417                .of_match_table = mcasp_dt_ids,
2418        },
2419};
2420
2421module_platform_driver(davinci_mcasp_driver);
2422
2423MODULE_AUTHOR("Steve Chen");
2424MODULE_DESCRIPTION("TI DAVINCI McASP SoC Interface");
2425MODULE_LICENSE("GPL");
2426