linux/sound/pci/hda/hda_controller.c
<<
>>
Prefs
   1/*
   2 *
   3 *  Implementation of primary alsa driver code base for Intel HD Audio.
   4 *
   5 *  Copyright(c) 2004 Intel Corporation. All rights reserved.
   6 *
   7 *  Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
   8 *                     PeiSen Hou <pshou@realtek.com.tw>
   9 *
  10 *  This program is free software; you can redistribute it and/or modify it
  11 *  under the terms of the GNU General Public License as published by the Free
  12 *  Software Foundation; either version 2 of the License, or (at your option)
  13 *  any later version.
  14 *
  15 *  This program is distributed in the hope that it will be useful, but WITHOUT
  16 *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  17 *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  18 *  more details.
  19 *
  20 *
  21 */
  22
  23#include <linux/clocksource.h>
  24#include <linux/delay.h>
  25#include <linux/interrupt.h>
  26#include <linux/kernel.h>
  27#include <linux/module.h>
  28#include <linux/pm_runtime.h>
  29#include <linux/slab.h>
  30
  31#ifdef CONFIG_X86
  32/* for art-tsc conversion */
  33#include <asm/tsc.h>
  34#endif
  35
  36#include <sound/core.h>
  37#include <sound/initval.h>
  38#include "hda_controller.h"
  39
  40#define CREATE_TRACE_POINTS
  41#include "hda_controller_trace.h"
  42
  43/* DSP lock helpers */
  44#define dsp_lock(dev)           snd_hdac_dsp_lock(azx_stream(dev))
  45#define dsp_unlock(dev)         snd_hdac_dsp_unlock(azx_stream(dev))
  46#define dsp_is_locked(dev)      snd_hdac_stream_is_locked(azx_stream(dev))
  47
  48/* assign a stream for the PCM */
  49static inline struct azx_dev *
  50azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
  51{
  52        struct hdac_stream *s;
  53
  54        s = snd_hdac_stream_assign(azx_bus(chip), substream);
  55        if (!s)
  56                return NULL;
  57        return stream_to_azx_dev(s);
  58}
  59
  60/* release the assigned stream */
  61static inline void azx_release_device(struct azx_dev *azx_dev)
  62{
  63        snd_hdac_stream_release(azx_stream(azx_dev));
  64}
  65
  66static inline struct hda_pcm_stream *
  67to_hda_pcm_stream(struct snd_pcm_substream *substream)
  68{
  69        struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
  70        return &apcm->info->stream[substream->stream];
  71}
  72
  73static u64 azx_adjust_codec_delay(struct snd_pcm_substream *substream,
  74                                u64 nsec)
  75{
  76        struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
  77        struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
  78        u64 codec_frames, codec_nsecs;
  79
  80        if (!hinfo->ops.get_delay)
  81                return nsec;
  82
  83        codec_frames = hinfo->ops.get_delay(hinfo, apcm->codec, substream);
  84        codec_nsecs = div_u64(codec_frames * 1000000000LL,
  85                              substream->runtime->rate);
  86
  87        if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
  88                return nsec + codec_nsecs;
  89
  90        return (nsec > codec_nsecs) ? nsec - codec_nsecs : 0;
  91}
  92
  93/*
  94 * PCM ops
  95 */
  96
  97static int azx_pcm_close(struct snd_pcm_substream *substream)
  98{
  99        struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
 100        struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
 101        struct azx *chip = apcm->chip;
 102        struct azx_dev *azx_dev = get_azx_dev(substream);
 103
 104        trace_azx_pcm_close(chip, azx_dev);
 105        mutex_lock(&chip->open_mutex);
 106        azx_release_device(azx_dev);
 107        if (hinfo->ops.close)
 108                hinfo->ops.close(hinfo, apcm->codec, substream);
 109        snd_hda_power_down(apcm->codec);
 110        mutex_unlock(&chip->open_mutex);
 111        snd_hda_codec_pcm_put(apcm->info);
 112        return 0;
 113}
 114
 115static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
 116                             struct snd_pcm_hw_params *hw_params)
 117{
 118        struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
 119        struct azx *chip = apcm->chip;
 120        struct azx_dev *azx_dev = get_azx_dev(substream);
 121        int ret;
 122
 123        trace_azx_pcm_hw_params(chip, azx_dev);
 124        dsp_lock(azx_dev);
 125        if (dsp_is_locked(azx_dev)) {
 126                ret = -EBUSY;
 127                goto unlock;
 128        }
 129
 130        azx_dev->core.bufsize = 0;
 131        azx_dev->core.period_bytes = 0;
 132        azx_dev->core.format_val = 0;
 133        ret = chip->ops->substream_alloc_pages(chip, substream,
 134                                          params_buffer_bytes(hw_params));
 135unlock:
 136        dsp_unlock(azx_dev);
 137        return ret;
 138}
 139
 140static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
 141{
 142        struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
 143        struct azx_dev *azx_dev = get_azx_dev(substream);
 144        struct azx *chip = apcm->chip;
 145        struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
 146        int err;
 147
 148        /* reset BDL address */
 149        dsp_lock(azx_dev);
 150        if (!dsp_is_locked(azx_dev))
 151                snd_hdac_stream_cleanup(azx_stream(azx_dev));
 152
 153        snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
 154
 155        err = chip->ops->substream_free_pages(chip, substream);
 156        azx_stream(azx_dev)->prepared = 0;
 157        dsp_unlock(azx_dev);
 158        return err;
 159}
 160
 161static int azx_pcm_prepare(struct snd_pcm_substream *substream)
 162{
 163        struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
 164        struct azx *chip = apcm->chip;
 165        struct azx_dev *azx_dev = get_azx_dev(substream);
 166        struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
 167        struct snd_pcm_runtime *runtime = substream->runtime;
 168        unsigned int format_val, stream_tag;
 169        int err;
 170        struct hda_spdif_out *spdif =
 171                snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid);
 172        unsigned short ctls = spdif ? spdif->ctls : 0;
 173
 174        trace_azx_pcm_prepare(chip, azx_dev);
 175        dsp_lock(azx_dev);
 176        if (dsp_is_locked(azx_dev)) {
 177                err = -EBUSY;
 178                goto unlock;
 179        }
 180
 181        snd_hdac_stream_reset(azx_stream(azx_dev));
 182        format_val = snd_hdac_calc_stream_format(runtime->rate,
 183                                                runtime->channels,
 184                                                runtime->format,
 185                                                hinfo->maxbps,
 186                                                ctls);
 187        if (!format_val) {
 188                dev_err(chip->card->dev,
 189                        "invalid format_val, rate=%d, ch=%d, format=%d\n",
 190                        runtime->rate, runtime->channels, runtime->format);
 191                err = -EINVAL;
 192                goto unlock;
 193        }
 194
 195        err = snd_hdac_stream_set_params(azx_stream(azx_dev), format_val);
 196        if (err < 0)
 197                goto unlock;
 198
 199        snd_hdac_stream_setup(azx_stream(azx_dev));
 200
 201        stream_tag = azx_dev->core.stream_tag;
 202        /* CA-IBG chips need the playback stream starting from 1 */
 203        if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) &&
 204            stream_tag > chip->capture_streams)
 205                stream_tag -= chip->capture_streams;
 206        err = snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag,
 207                                     azx_dev->core.format_val, substream);
 208
 209 unlock:
 210        if (!err)
 211                azx_stream(azx_dev)->prepared = 1;
 212        dsp_unlock(azx_dev);
 213        return err;
 214}
 215
 216static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
 217{
 218        struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
 219        struct azx *chip = apcm->chip;
 220        struct hdac_bus *bus = azx_bus(chip);
 221        struct azx_dev *azx_dev;
 222        struct snd_pcm_substream *s;
 223        struct hdac_stream *hstr;
 224        bool start;
 225        int sbits = 0;
 226        int sync_reg;
 227
 228        azx_dev = get_azx_dev(substream);
 229        trace_azx_pcm_trigger(chip, azx_dev, cmd);
 230
 231        hstr = azx_stream(azx_dev);
 232        if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
 233                sync_reg = AZX_REG_OLD_SSYNC;
 234        else
 235                sync_reg = AZX_REG_SSYNC;
 236
 237        if (dsp_is_locked(azx_dev) || !hstr->prepared)
 238                return -EPIPE;
 239
 240        switch (cmd) {
 241        case SNDRV_PCM_TRIGGER_START:
 242        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
 243        case SNDRV_PCM_TRIGGER_RESUME:
 244                start = true;
 245                break;
 246        case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
 247        case SNDRV_PCM_TRIGGER_SUSPEND:
 248        case SNDRV_PCM_TRIGGER_STOP:
 249                start = false;
 250                break;
 251        default:
 252                return -EINVAL;
 253        }
 254
 255        snd_pcm_group_for_each_entry(s, substream) {
 256                if (s->pcm->card != substream->pcm->card)
 257                        continue;
 258                azx_dev = get_azx_dev(s);
 259                sbits |= 1 << azx_dev->core.index;
 260                snd_pcm_trigger_done(s, substream);
 261        }
 262
 263        spin_lock(&bus->reg_lock);
 264
 265        /* first, set SYNC bits of corresponding streams */
 266        snd_hdac_stream_sync_trigger(hstr, true, sbits, sync_reg);
 267
 268        snd_pcm_group_for_each_entry(s, substream) {
 269                if (s->pcm->card != substream->pcm->card)
 270                        continue;
 271                azx_dev = get_azx_dev(s);
 272                if (start) {
 273                        azx_dev->insufficient = 1;
 274                        snd_hdac_stream_start(azx_stream(azx_dev), true);
 275                } else {
 276                        snd_hdac_stream_stop(azx_stream(azx_dev));
 277                }
 278        }
 279        spin_unlock(&bus->reg_lock);
 280
 281        snd_hdac_stream_sync(hstr, start, sbits);
 282
 283        spin_lock(&bus->reg_lock);
 284        /* reset SYNC bits */
 285        snd_hdac_stream_sync_trigger(hstr, false, sbits, sync_reg);
 286        if (start)
 287                snd_hdac_stream_timecounter_init(hstr, sbits);
 288        spin_unlock(&bus->reg_lock);
 289        return 0;
 290}
 291
 292unsigned int azx_get_pos_lpib(struct azx *chip, struct azx_dev *azx_dev)
 293{
 294        return snd_hdac_stream_get_pos_lpib(azx_stream(azx_dev));
 295}
 296EXPORT_SYMBOL_GPL(azx_get_pos_lpib);
 297
 298unsigned int azx_get_pos_posbuf(struct azx *chip, struct azx_dev *azx_dev)
 299{
 300        return snd_hdac_stream_get_pos_posbuf(azx_stream(azx_dev));
 301}
 302EXPORT_SYMBOL_GPL(azx_get_pos_posbuf);
 303
 304unsigned int azx_get_position(struct azx *chip,
 305                              struct azx_dev *azx_dev)
 306{
 307        struct snd_pcm_substream *substream = azx_dev->core.substream;
 308        unsigned int pos;
 309        int stream = substream->stream;
 310        int delay = 0;
 311
 312        if (chip->get_position[stream])
 313                pos = chip->get_position[stream](chip, azx_dev);
 314        else /* use the position buffer as default */
 315                pos = azx_get_pos_posbuf(chip, azx_dev);
 316
 317        if (pos >= azx_dev->core.bufsize)
 318                pos = 0;
 319
 320        if (substream->runtime) {
 321                struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
 322                struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
 323
 324                if (chip->get_delay[stream])
 325                        delay += chip->get_delay[stream](chip, azx_dev, pos);
 326                if (hinfo->ops.get_delay)
 327                        delay += hinfo->ops.get_delay(hinfo, apcm->codec,
 328                                                      substream);
 329                substream->runtime->delay = delay;
 330        }
 331
 332        trace_azx_get_position(chip, azx_dev, pos, delay);
 333        return pos;
 334}
 335EXPORT_SYMBOL_GPL(azx_get_position);
 336
 337static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
 338{
 339        struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
 340        struct azx *chip = apcm->chip;
 341        struct azx_dev *azx_dev = get_azx_dev(substream);
 342        return bytes_to_frames(substream->runtime,
 343                               azx_get_position(chip, azx_dev));
 344}
 345
 346/*
 347 * azx_scale64: Scale base by mult/div while not overflowing sanely
 348 *
 349 * Derived from scale64_check_overflow in kernel/time/timekeeping.c
 350 *
 351 * The tmestamps for a 48Khz stream can overflow after (2^64/10^9)/48K which
 352 * is about 384307 ie ~4.5 days.
 353 *
 354 * This scales the calculation so that overflow will happen but after 2^64 /
 355 * 48000 secs, which is pretty large!
 356 *
 357 * In caln below:
 358 *      base may overflow, but since there isn’t any additional division
 359 *      performed on base it’s OK
 360 *      rem can’t overflow because both are 32-bit values
 361 */
 362
 363#ifdef CONFIG_X86
 364static u64 azx_scale64(u64 base, u32 num, u32 den)
 365{
 366        u64 rem;
 367
 368        rem = do_div(base, den);
 369
 370        base *= num;
 371        rem *= num;
 372
 373        do_div(rem, den);
 374
 375        return base + rem;
 376}
 377
 378static int azx_get_sync_time(ktime_t *device,
 379                struct system_counterval_t *system, void *ctx)
 380{
 381        struct snd_pcm_substream *substream = ctx;
 382        struct azx_dev *azx_dev = get_azx_dev(substream);
 383        struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
 384        struct azx *chip = apcm->chip;
 385        struct snd_pcm_runtime *runtime;
 386        u64 ll_counter, ll_counter_l, ll_counter_h;
 387        u64 tsc_counter, tsc_counter_l, tsc_counter_h;
 388        u32 wallclk_ctr, wallclk_cycles;
 389        bool direction;
 390        u32 dma_select;
 391        u32 timeout = 200;
 392        u32 retry_count = 0;
 393
 394        runtime = substream->runtime;
 395
 396        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
 397                direction = 1;
 398        else
 399                direction = 0;
 400
 401        /* 0th stream tag is not used, so DMA ch 0 is for 1st stream tag */
 402        do {
 403                timeout = 100;
 404                dma_select = (direction << GTSCC_CDMAS_DMA_DIR_SHIFT) |
 405                                        (azx_dev->core.stream_tag - 1);
 406                snd_hdac_chip_writel(azx_bus(chip), GTSCC, dma_select);
 407
 408                /* Enable the capture */
 409                snd_hdac_chip_updatel(azx_bus(chip), GTSCC, 0, GTSCC_TSCCI_MASK);
 410
 411                while (timeout) {
 412                        if (snd_hdac_chip_readl(azx_bus(chip), GTSCC) &
 413                                                GTSCC_TSCCD_MASK)
 414                                break;
 415
 416                        timeout--;
 417                }
 418
 419                if (!timeout) {
 420                        dev_err(chip->card->dev, "GTSCC capture Timedout!\n");
 421                        return -EIO;
 422                }
 423
 424                /* Read wall clock counter */
 425                wallclk_ctr = snd_hdac_chip_readl(azx_bus(chip), WALFCC);
 426
 427                /* Read TSC counter */
 428                tsc_counter_l = snd_hdac_chip_readl(azx_bus(chip), TSCCL);
 429                tsc_counter_h = snd_hdac_chip_readl(azx_bus(chip), TSCCU);
 430
 431                /* Read Link counter */
 432                ll_counter_l = snd_hdac_chip_readl(azx_bus(chip), LLPCL);
 433                ll_counter_h = snd_hdac_chip_readl(azx_bus(chip), LLPCU);
 434
 435                /* Ack: registers read done */
 436                snd_hdac_chip_writel(azx_bus(chip), GTSCC, GTSCC_TSCCD_SHIFT);
 437
 438                tsc_counter = (tsc_counter_h << TSCCU_CCU_SHIFT) |
 439                                                tsc_counter_l;
 440
 441                ll_counter = (ll_counter_h << LLPC_CCU_SHIFT) | ll_counter_l;
 442                wallclk_cycles = wallclk_ctr & WALFCC_CIF_MASK;
 443
 444                /*
 445                 * An error occurs near frame "rollover". The clocks in
 446                 * frame value indicates whether this error may have
 447                 * occurred. Here we use the value of 10 i.e.,
 448                 * HDA_MAX_CYCLE_OFFSET
 449                 */
 450                if (wallclk_cycles < HDA_MAX_CYCLE_VALUE - HDA_MAX_CYCLE_OFFSET
 451                                        && wallclk_cycles > HDA_MAX_CYCLE_OFFSET)
 452                        break;
 453
 454                /*
 455                 * Sleep before we read again, else we may again get
 456                 * value near to MAX_CYCLE. Try to sleep for different
 457                 * amount of time so we dont hit the same number again
 458                 */
 459                udelay(retry_count++);
 460
 461        } while (retry_count != HDA_MAX_CYCLE_READ_RETRY);
 462
 463        if (retry_count == HDA_MAX_CYCLE_READ_RETRY) {
 464                dev_err_ratelimited(chip->card->dev,
 465                        "Error in WALFCC cycle count\n");
 466                return -EIO;
 467        }
 468
 469        *device = ns_to_ktime(azx_scale64(ll_counter,
 470                                NSEC_PER_SEC, runtime->rate));
 471        *device = ktime_add_ns(*device, (wallclk_cycles * NSEC_PER_SEC) /
 472                               ((HDA_MAX_CYCLE_VALUE + 1) * runtime->rate));
 473
 474        *system = convert_art_to_tsc(tsc_counter);
 475
 476        return 0;
 477}
 478
 479#else
 480static int azx_get_sync_time(ktime_t *device,
 481                struct system_counterval_t *system, void *ctx)
 482{
 483        return -ENXIO;
 484}
 485#endif
 486
 487static int azx_get_crosststamp(struct snd_pcm_substream *substream,
 488                              struct system_device_crosststamp *xtstamp)
 489{
 490        return get_device_system_crosststamp(azx_get_sync_time,
 491                                        substream, NULL, xtstamp);
 492}
 493
 494static inline bool is_link_time_supported(struct snd_pcm_runtime *runtime,
 495                                struct snd_pcm_audio_tstamp_config *ts)
 496{
 497        if (runtime->hw.info & SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME)
 498                if (ts->type_requested == SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED)
 499                        return true;
 500
 501        return false;
 502}
 503
 504static int azx_get_time_info(struct snd_pcm_substream *substream,
 505                        struct timespec *system_ts, struct timespec *audio_ts,
 506                        struct snd_pcm_audio_tstamp_config *audio_tstamp_config,
 507                        struct snd_pcm_audio_tstamp_report *audio_tstamp_report)
 508{
 509        struct azx_dev *azx_dev = get_azx_dev(substream);
 510        struct snd_pcm_runtime *runtime = substream->runtime;
 511        struct system_device_crosststamp xtstamp;
 512        int ret;
 513        u64 nsec;
 514
 515        if ((substream->runtime->hw.info & SNDRV_PCM_INFO_HAS_LINK_ATIME) &&
 516                (audio_tstamp_config->type_requested == SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK)) {
 517
 518                snd_pcm_gettime(substream->runtime, system_ts);
 519
 520                nsec = timecounter_read(&azx_dev->core.tc);
 521                nsec = div_u64(nsec, 3); /* can be optimized */
 522                if (audio_tstamp_config->report_delay)
 523                        nsec = azx_adjust_codec_delay(substream, nsec);
 524
 525                *audio_ts = ns_to_timespec(nsec);
 526
 527                audio_tstamp_report->actual_type = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK;
 528                audio_tstamp_report->accuracy_report = 1; /* rest of structure is valid */
 529                audio_tstamp_report->accuracy = 42; /* 24 MHz WallClock == 42ns resolution */
 530
 531        } else if (is_link_time_supported(runtime, audio_tstamp_config)) {
 532
 533                ret = azx_get_crosststamp(substream, &xtstamp);
 534                if (ret)
 535                        return ret;
 536
 537                switch (runtime->tstamp_type) {
 538                case SNDRV_PCM_TSTAMP_TYPE_MONOTONIC:
 539                        return -EINVAL;
 540
 541                case SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW:
 542                        *system_ts = ktime_to_timespec(xtstamp.sys_monoraw);
 543                        break;
 544
 545                default:
 546                        *system_ts = ktime_to_timespec(xtstamp.sys_realtime);
 547                        break;
 548
 549                }
 550
 551                *audio_ts = ktime_to_timespec(xtstamp.device);
 552
 553                audio_tstamp_report->actual_type =
 554                        SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED;
 555                audio_tstamp_report->accuracy_report = 1;
 556                /* 24 MHz WallClock == 42ns resolution */
 557                audio_tstamp_report->accuracy = 42;
 558
 559        } else {
 560                audio_tstamp_report->actual_type = SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT;
 561        }
 562
 563        return 0;
 564}
 565
 566static struct snd_pcm_hardware azx_pcm_hw = {
 567        .info =                 (SNDRV_PCM_INFO_MMAP |
 568                                 SNDRV_PCM_INFO_INTERLEAVED |
 569                                 SNDRV_PCM_INFO_BLOCK_TRANSFER |
 570                                 SNDRV_PCM_INFO_MMAP_VALID |
 571                                 /* No full-resume yet implemented */
 572                                 /* SNDRV_PCM_INFO_RESUME |*/
 573                                 SNDRV_PCM_INFO_PAUSE |
 574                                 SNDRV_PCM_INFO_SYNC_START |
 575                                 SNDRV_PCM_INFO_HAS_WALL_CLOCK | /* legacy */
 576                                 SNDRV_PCM_INFO_HAS_LINK_ATIME |
 577                                 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
 578        .formats =              SNDRV_PCM_FMTBIT_S16_LE,
 579        .rates =                SNDRV_PCM_RATE_48000,
 580        .rate_min =             48000,
 581        .rate_max =             48000,
 582        .channels_min =         2,
 583        .channels_max =         2,
 584        .buffer_bytes_max =     AZX_MAX_BUF_SIZE,
 585        .period_bytes_min =     128,
 586        .period_bytes_max =     AZX_MAX_BUF_SIZE / 2,
 587        .periods_min =          2,
 588        .periods_max =          AZX_MAX_FRAG,
 589        .fifo_size =            0,
 590};
 591
 592static int azx_pcm_open(struct snd_pcm_substream *substream)
 593{
 594        struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
 595        struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
 596        struct azx *chip = apcm->chip;
 597        struct azx_dev *azx_dev;
 598        struct snd_pcm_runtime *runtime = substream->runtime;
 599        int err;
 600        int buff_step;
 601
 602        snd_hda_codec_pcm_get(apcm->info);
 603        mutex_lock(&chip->open_mutex);
 604        azx_dev = azx_assign_device(chip, substream);
 605        trace_azx_pcm_open(chip, azx_dev);
 606        if (azx_dev == NULL) {
 607                err = -EBUSY;
 608                goto unlock;
 609        }
 610        runtime->private_data = azx_dev;
 611
 612        if (chip->gts_present)
 613                azx_pcm_hw.info = azx_pcm_hw.info |
 614                        SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME;
 615
 616        runtime->hw = azx_pcm_hw;
 617        runtime->hw.channels_min = hinfo->channels_min;
 618        runtime->hw.channels_max = hinfo->channels_max;
 619        runtime->hw.formats = hinfo->formats;
 620        runtime->hw.rates = hinfo->rates;
 621        snd_pcm_limit_hw_rates(runtime);
 622        snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
 623
 624        /* avoid wrap-around with wall-clock */
 625        snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME,
 626                                     20,
 627                                     178000000);
 628
 629        if (chip->align_buffer_size)
 630                /* constrain buffer sizes to be multiple of 128
 631                   bytes. This is more efficient in terms of memory
 632                   access but isn't required by the HDA spec and
 633                   prevents users from specifying exact period/buffer
 634                   sizes. For example for 44.1kHz, a period size set
 635                   to 20ms will be rounded to 19.59ms. */
 636                buff_step = 128;
 637        else
 638                /* Don't enforce steps on buffer sizes, still need to
 639                   be multiple of 4 bytes (HDA spec). Tested on Intel
 640                   HDA controllers, may not work on all devices where
 641                   option needs to be disabled */
 642                buff_step = 4;
 643
 644        snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
 645                                   buff_step);
 646        snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
 647                                   buff_step);
 648        snd_hda_power_up(apcm->codec);
 649        if (hinfo->ops.open)
 650                err = hinfo->ops.open(hinfo, apcm->codec, substream);
 651        else
 652                err = -ENODEV;
 653        if (err < 0) {
 654                azx_release_device(azx_dev);
 655                goto powerdown;
 656        }
 657        snd_pcm_limit_hw_rates(runtime);
 658        /* sanity check */
 659        if (snd_BUG_ON(!runtime->hw.channels_min) ||
 660            snd_BUG_ON(!runtime->hw.channels_max) ||
 661            snd_BUG_ON(!runtime->hw.formats) ||
 662            snd_BUG_ON(!runtime->hw.rates)) {
 663                azx_release_device(azx_dev);
 664                if (hinfo->ops.close)
 665                        hinfo->ops.close(hinfo, apcm->codec, substream);
 666                err = -EINVAL;
 667                goto powerdown;
 668        }
 669
 670        /* disable LINK_ATIME timestamps for capture streams
 671           until we figure out how to handle digital inputs */
 672        if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
 673                runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK; /* legacy */
 674                runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_LINK_ATIME;
 675        }
 676
 677        snd_pcm_set_sync(substream);
 678        mutex_unlock(&chip->open_mutex);
 679        return 0;
 680
 681 powerdown:
 682        snd_hda_power_down(apcm->codec);
 683 unlock:
 684        mutex_unlock(&chip->open_mutex);
 685        snd_hda_codec_pcm_put(apcm->info);
 686        return err;
 687}
 688
 689static int azx_pcm_mmap(struct snd_pcm_substream *substream,
 690                        struct vm_area_struct *area)
 691{
 692        struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
 693        struct azx *chip = apcm->chip;
 694        if (chip->ops->pcm_mmap_prepare)
 695                chip->ops->pcm_mmap_prepare(substream, area);
 696        return snd_pcm_lib_default_mmap(substream, area);
 697}
 698
 699static const struct snd_pcm_ops azx_pcm_ops = {
 700        .open = azx_pcm_open,
 701        .close = azx_pcm_close,
 702        .ioctl = snd_pcm_lib_ioctl,
 703        .hw_params = azx_pcm_hw_params,
 704        .hw_free = azx_pcm_hw_free,
 705        .prepare = azx_pcm_prepare,
 706        .trigger = azx_pcm_trigger,
 707        .pointer = azx_pcm_pointer,
 708        .get_time_info =  azx_get_time_info,
 709        .mmap = azx_pcm_mmap,
 710        .page = snd_pcm_sgbuf_ops_page,
 711};
 712
 713static void azx_pcm_free(struct snd_pcm *pcm)
 714{
 715        struct azx_pcm *apcm = pcm->private_data;
 716        if (apcm) {
 717                list_del(&apcm->list);
 718                apcm->info->pcm = NULL;
 719                kfree(apcm);
 720        }
 721}
 722
 723#define MAX_PREALLOC_SIZE       (32 * 1024 * 1024)
 724
 725int snd_hda_attach_pcm_stream(struct hda_bus *_bus, struct hda_codec *codec,
 726                              struct hda_pcm *cpcm)
 727{
 728        struct hdac_bus *bus = &_bus->core;
 729        struct azx *chip = bus_to_azx(bus);
 730        struct snd_pcm *pcm;
 731        struct azx_pcm *apcm;
 732        int pcm_dev = cpcm->device;
 733        unsigned int size;
 734        int s, err;
 735
 736        list_for_each_entry(apcm, &chip->pcm_list, list) {
 737                if (apcm->pcm->device == pcm_dev) {
 738                        dev_err(chip->card->dev, "PCM %d already exists\n",
 739                                pcm_dev);
 740                        return -EBUSY;
 741                }
 742        }
 743        err = snd_pcm_new(chip->card, cpcm->name, pcm_dev,
 744                          cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams,
 745                          cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams,
 746                          &pcm);
 747        if (err < 0)
 748                return err;
 749        strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
 750        apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
 751        if (apcm == NULL) {
 752                snd_device_free(chip->card, pcm);
 753                return -ENOMEM;
 754        }
 755        apcm->chip = chip;
 756        apcm->pcm = pcm;
 757        apcm->codec = codec;
 758        apcm->info = cpcm;
 759        pcm->private_data = apcm;
 760        pcm->private_free = azx_pcm_free;
 761        if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM)
 762                pcm->dev_class = SNDRV_PCM_CLASS_MODEM;
 763        list_add_tail(&apcm->list, &chip->pcm_list);
 764        cpcm->pcm = pcm;
 765        for (s = 0; s < 2; s++) {
 766                if (cpcm->stream[s].substreams)
 767                        snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
 768        }
 769        /* buffer pre-allocation */
 770        size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
 771        if (size > MAX_PREALLOC_SIZE)
 772                size = MAX_PREALLOC_SIZE;
 773        snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
 774                                              chip->card->dev,
 775                                              size, MAX_PREALLOC_SIZE);
 776        return 0;
 777}
 778
 779static unsigned int azx_command_addr(u32 cmd)
 780{
 781        unsigned int addr = cmd >> 28;
 782
 783        if (addr >= AZX_MAX_CODECS) {
 784                snd_BUG();
 785                addr = 0;
 786        }
 787
 788        return addr;
 789}
 790
 791/* receive a response */
 792static int azx_rirb_get_response(struct hdac_bus *bus, unsigned int addr,
 793                                 unsigned int *res)
 794{
 795        struct azx *chip = bus_to_azx(bus);
 796        struct hda_bus *hbus = &chip->bus;
 797        unsigned long timeout;
 798        unsigned long loopcounter;
 799        int do_poll = 0;
 800
 801 again:
 802        timeout = jiffies + msecs_to_jiffies(1000);
 803
 804        for (loopcounter = 0;; loopcounter++) {
 805                spin_lock_irq(&bus->reg_lock);
 806                if (chip->polling_mode || do_poll)
 807                        snd_hdac_bus_update_rirb(bus);
 808                if (!bus->rirb.cmds[addr]) {
 809                        if (!do_poll)
 810                                chip->poll_count = 0;
 811                        if (res)
 812                                *res = bus->rirb.res[addr]; /* the last value */
 813                        spin_unlock_irq(&bus->reg_lock);
 814                        return 0;
 815                }
 816                spin_unlock_irq(&bus->reg_lock);
 817                if (time_after(jiffies, timeout))
 818                        break;
 819                if (hbus->needs_damn_long_delay || loopcounter > 3000)
 820                        msleep(2); /* temporary workaround */
 821                else {
 822                        udelay(10);
 823                        cond_resched();
 824                }
 825        }
 826
 827        if (hbus->no_response_fallback)
 828                return -EIO;
 829
 830        if (!chip->polling_mode && chip->poll_count < 2) {
 831                dev_dbg(chip->card->dev,
 832                        "azx_get_response timeout, polling the codec once: last cmd=0x%08x\n",
 833                        bus->last_cmd[addr]);
 834                do_poll = 1;
 835                chip->poll_count++;
 836                goto again;
 837        }
 838
 839
 840        if (!chip->polling_mode) {
 841                dev_warn(chip->card->dev,
 842                         "azx_get_response timeout, switching to polling mode: last cmd=0x%08x\n",
 843                         bus->last_cmd[addr]);
 844                chip->polling_mode = 1;
 845                goto again;
 846        }
 847
 848        if (chip->msi) {
 849                dev_warn(chip->card->dev,
 850                         "No response from codec, disabling MSI: last cmd=0x%08x\n",
 851                         bus->last_cmd[addr]);
 852                if (chip->ops->disable_msi_reset_irq &&
 853                    chip->ops->disable_msi_reset_irq(chip) < 0)
 854                        return -EIO;
 855                goto again;
 856        }
 857
 858        if (chip->probing) {
 859                /* If this critical timeout happens during the codec probing
 860                 * phase, this is likely an access to a non-existing codec
 861                 * slot.  Better to return an error and reset the system.
 862                 */
 863                return -EIO;
 864        }
 865
 866        /* no fallback mechanism? */
 867        if (!chip->fallback_to_single_cmd)
 868                return -EIO;
 869
 870        /* a fatal communication error; need either to reset or to fallback
 871         * to the single_cmd mode
 872         */
 873        if (hbus->allow_bus_reset && !hbus->response_reset && !hbus->in_reset) {
 874                hbus->response_reset = 1;
 875                return -EAGAIN; /* give a chance to retry */
 876        }
 877
 878        dev_err(chip->card->dev,
 879                "azx_get_response timeout, switching to single_cmd mode: last cmd=0x%08x\n",
 880                bus->last_cmd[addr]);
 881        chip->single_cmd = 1;
 882        hbus->response_reset = 0;
 883        snd_hdac_bus_stop_cmd_io(bus);
 884        return -EIO;
 885}
 886
 887/*
 888 * Use the single immediate command instead of CORB/RIRB for simplicity
 889 *
 890 * Note: according to Intel, this is not preferred use.  The command was
 891 *       intended for the BIOS only, and may get confused with unsolicited
 892 *       responses.  So, we shouldn't use it for normal operation from the
 893 *       driver.
 894 *       I left the codes, however, for debugging/testing purposes.
 895 */
 896
 897/* receive a response */
 898static int azx_single_wait_for_response(struct azx *chip, unsigned int addr)
 899{
 900        int timeout = 50;
 901
 902        while (timeout--) {
 903                /* check IRV busy bit */
 904                if (azx_readw(chip, IRS) & AZX_IRS_VALID) {
 905                        /* reuse rirb.res as the response return value */
 906                        azx_bus(chip)->rirb.res[addr] = azx_readl(chip, IR);
 907                        return 0;
 908                }
 909                udelay(1);
 910        }
 911        if (printk_ratelimit())
 912                dev_dbg(chip->card->dev, "get_response timeout: IRS=0x%x\n",
 913                        azx_readw(chip, IRS));
 914        azx_bus(chip)->rirb.res[addr] = -1;
 915        return -EIO;
 916}
 917
 918/* send a command */
 919static int azx_single_send_cmd(struct hdac_bus *bus, u32 val)
 920{
 921        struct azx *chip = bus_to_azx(bus);
 922        unsigned int addr = azx_command_addr(val);
 923        int timeout = 50;
 924
 925        bus->last_cmd[azx_command_addr(val)] = val;
 926        while (timeout--) {
 927                /* check ICB busy bit */
 928                if (!((azx_readw(chip, IRS) & AZX_IRS_BUSY))) {
 929                        /* Clear IRV valid bit */
 930                        azx_writew(chip, IRS, azx_readw(chip, IRS) |
 931                                   AZX_IRS_VALID);
 932                        azx_writel(chip, IC, val);
 933                        azx_writew(chip, IRS, azx_readw(chip, IRS) |
 934                                   AZX_IRS_BUSY);
 935                        return azx_single_wait_for_response(chip, addr);
 936                }
 937                udelay(1);
 938        }
 939        if (printk_ratelimit())
 940                dev_dbg(chip->card->dev,
 941                        "send_cmd timeout: IRS=0x%x, val=0x%x\n",
 942                        azx_readw(chip, IRS), val);
 943        return -EIO;
 944}
 945
 946/* receive a response */
 947static int azx_single_get_response(struct hdac_bus *bus, unsigned int addr,
 948                                   unsigned int *res)
 949{
 950        if (res)
 951                *res = bus->rirb.res[addr];
 952        return 0;
 953}
 954
 955/*
 956 * The below are the main callbacks from hda_codec.
 957 *
 958 * They are just the skeleton to call sub-callbacks according to the
 959 * current setting of chip->single_cmd.
 960 */
 961
 962/* send a command */
 963static int azx_send_cmd(struct hdac_bus *bus, unsigned int val)
 964{
 965        struct azx *chip = bus_to_azx(bus);
 966
 967        if (chip->disabled)
 968                return 0;
 969        if (chip->single_cmd)
 970                return azx_single_send_cmd(bus, val);
 971        else
 972                return snd_hdac_bus_send_cmd(bus, val);
 973}
 974
 975/* get a response */
 976static int azx_get_response(struct hdac_bus *bus, unsigned int addr,
 977                            unsigned int *res)
 978{
 979        struct azx *chip = bus_to_azx(bus);
 980
 981        if (chip->disabled)
 982                return 0;
 983        if (chip->single_cmd)
 984                return azx_single_get_response(bus, addr, res);
 985        else
 986                return azx_rirb_get_response(bus, addr, res);
 987}
 988
 989static int azx_link_power(struct hdac_bus *bus, bool enable)
 990{
 991        struct azx *chip = bus_to_azx(bus);
 992
 993        if (chip->ops->link_power)
 994                return chip->ops->link_power(chip, enable);
 995        else
 996                return -EINVAL;
 997}
 998
 999static const struct hdac_bus_ops bus_core_ops = {
1000        .command = azx_send_cmd,
1001        .get_response = azx_get_response,
1002        .link_power = azx_link_power,
1003};
1004
1005#ifdef CONFIG_SND_HDA_DSP_LOADER
1006/*
1007 * DSP loading code (e.g. for CA0132)
1008 */
1009
1010/* use the first stream for loading DSP */
1011static struct azx_dev *
1012azx_get_dsp_loader_dev(struct azx *chip)
1013{
1014        struct hdac_bus *bus = azx_bus(chip);
1015        struct hdac_stream *s;
1016
1017        list_for_each_entry(s, &bus->stream_list, list)
1018                if (s->index == chip->playback_index_offset)
1019                        return stream_to_azx_dev(s);
1020
1021        return NULL;
1022}
1023
1024int snd_hda_codec_load_dsp_prepare(struct hda_codec *codec, unsigned int format,
1025                                   unsigned int byte_size,
1026                                   struct snd_dma_buffer *bufp)
1027{
1028        struct hdac_bus *bus = &codec->bus->core;
1029        struct azx *chip = bus_to_azx(bus);
1030        struct azx_dev *azx_dev;
1031        struct hdac_stream *hstr;
1032        bool saved = false;
1033        int err;
1034
1035        azx_dev = azx_get_dsp_loader_dev(chip);
1036        hstr = azx_stream(azx_dev);
1037        spin_lock_irq(&bus->reg_lock);
1038        if (hstr->opened) {
1039                chip->saved_azx_dev = *azx_dev;
1040                saved = true;
1041        }
1042        spin_unlock_irq(&bus->reg_lock);
1043
1044        err = snd_hdac_dsp_prepare(hstr, format, byte_size, bufp);
1045        if (err < 0) {
1046                spin_lock_irq(&bus->reg_lock);
1047                if (saved)
1048                        *azx_dev = chip->saved_azx_dev;
1049                spin_unlock_irq(&bus->reg_lock);
1050                return err;
1051        }
1052
1053        hstr->prepared = 0;
1054        return err;
1055}
1056EXPORT_SYMBOL_GPL(snd_hda_codec_load_dsp_prepare);
1057
1058void snd_hda_codec_load_dsp_trigger(struct hda_codec *codec, bool start)
1059{
1060        struct hdac_bus *bus = &codec->bus->core;
1061        struct azx *chip = bus_to_azx(bus);
1062        struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
1063
1064        snd_hdac_dsp_trigger(azx_stream(azx_dev), start);
1065}
1066EXPORT_SYMBOL_GPL(snd_hda_codec_load_dsp_trigger);
1067
1068void snd_hda_codec_load_dsp_cleanup(struct hda_codec *codec,
1069                                    struct snd_dma_buffer *dmab)
1070{
1071        struct hdac_bus *bus = &codec->bus->core;
1072        struct azx *chip = bus_to_azx(bus);
1073        struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
1074        struct hdac_stream *hstr = azx_stream(azx_dev);
1075
1076        if (!dmab->area || !hstr->locked)
1077                return;
1078
1079        snd_hdac_dsp_cleanup(hstr, dmab);
1080        spin_lock_irq(&bus->reg_lock);
1081        if (hstr->opened)
1082                *azx_dev = chip->saved_azx_dev;
1083        hstr->locked = false;
1084        spin_unlock_irq(&bus->reg_lock);
1085}
1086EXPORT_SYMBOL_GPL(snd_hda_codec_load_dsp_cleanup);
1087#endif /* CONFIG_SND_HDA_DSP_LOADER */
1088
1089/*
1090 * reset and start the controller registers
1091 */
1092void azx_init_chip(struct azx *chip, bool full_reset)
1093{
1094        if (snd_hdac_bus_init_chip(azx_bus(chip), full_reset)) {
1095                /* correct RINTCNT for CXT */
1096                if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
1097                        azx_writew(chip, RINTCNT, 0xc0);
1098        }
1099}
1100EXPORT_SYMBOL_GPL(azx_init_chip);
1101
1102void azx_stop_all_streams(struct azx *chip)
1103{
1104        struct hdac_bus *bus = azx_bus(chip);
1105        struct hdac_stream *s;
1106
1107        list_for_each_entry(s, &bus->stream_list, list)
1108                snd_hdac_stream_stop(s);
1109}
1110EXPORT_SYMBOL_GPL(azx_stop_all_streams);
1111
1112void azx_stop_chip(struct azx *chip)
1113{
1114        snd_hdac_bus_stop_chip(azx_bus(chip));
1115}
1116EXPORT_SYMBOL_GPL(azx_stop_chip);
1117
1118/*
1119 * interrupt handler
1120 */
1121static void stream_update(struct hdac_bus *bus, struct hdac_stream *s)
1122{
1123        struct azx *chip = bus_to_azx(bus);
1124        struct azx_dev *azx_dev = stream_to_azx_dev(s);
1125
1126        /* check whether this IRQ is really acceptable */
1127        if (!chip->ops->position_check ||
1128            chip->ops->position_check(chip, azx_dev)) {
1129                spin_unlock(&bus->reg_lock);
1130                snd_pcm_period_elapsed(azx_stream(azx_dev)->substream);
1131                spin_lock(&bus->reg_lock);
1132        }
1133}
1134
1135irqreturn_t azx_interrupt(int irq, void *dev_id)
1136{
1137        struct azx *chip = dev_id;
1138        struct hdac_bus *bus = azx_bus(chip);
1139        u32 status;
1140        bool active, handled = false;
1141        int repeat = 0; /* count for avoiding endless loop */
1142
1143#ifdef CONFIG_PM
1144        if (azx_has_pm_runtime(chip))
1145                if (!pm_runtime_active(chip->card->dev))
1146                        return IRQ_NONE;
1147#endif
1148
1149        spin_lock(&bus->reg_lock);
1150
1151        if (chip->disabled)
1152                goto unlock;
1153
1154        do {
1155                status = azx_readl(chip, INTSTS);
1156                if (status == 0 || status == 0xffffffff)
1157                        break;
1158
1159                handled = true;
1160                active = false;
1161                if (snd_hdac_bus_handle_stream_irq(bus, status, stream_update))
1162                        active = true;
1163
1164                /* clear rirb int */
1165                status = azx_readb(chip, RIRBSTS);
1166                if (status & RIRB_INT_MASK) {
1167                        active = true;
1168                        if (status & RIRB_INT_RESPONSE) {
1169                                if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
1170                                        udelay(80);
1171                                snd_hdac_bus_update_rirb(bus);
1172                        }
1173                        azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1174                }
1175        } while (active && ++repeat < 10);
1176
1177 unlock:
1178        spin_unlock(&bus->reg_lock);
1179
1180        return IRQ_RETVAL(handled);
1181}
1182EXPORT_SYMBOL_GPL(azx_interrupt);
1183
1184/*
1185 * Codec initerface
1186 */
1187
1188/*
1189 * Probe the given codec address
1190 */
1191static int probe_codec(struct azx *chip, int addr)
1192{
1193        unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
1194                (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
1195        struct hdac_bus *bus = azx_bus(chip);
1196        int err;
1197        unsigned int res = -1;
1198
1199        mutex_lock(&bus->cmd_mutex);
1200        chip->probing = 1;
1201        azx_send_cmd(bus, cmd);
1202        err = azx_get_response(bus, addr, &res);
1203        chip->probing = 0;
1204        mutex_unlock(&bus->cmd_mutex);
1205        if (err < 0 || res == -1)
1206                return -EIO;
1207        dev_dbg(chip->card->dev, "codec #%d probed OK\n", addr);
1208        return 0;
1209}
1210
1211void snd_hda_bus_reset(struct hda_bus *bus)
1212{
1213        struct azx *chip = bus_to_azx(&bus->core);
1214
1215        bus->in_reset = 1;
1216        azx_stop_chip(chip);
1217        azx_init_chip(chip, true);
1218        if (bus->core.chip_init)
1219                snd_hda_bus_reset_codecs(bus);
1220        bus->in_reset = 0;
1221}
1222
1223static int get_jackpoll_interval(struct azx *chip)
1224{
1225        int i;
1226        unsigned int j;
1227
1228        if (!chip->jackpoll_ms)
1229                return 0;
1230
1231        i = chip->jackpoll_ms[chip->dev_index];
1232        if (i == 0)
1233                return 0;
1234        if (i < 50 || i > 60000)
1235                j = 0;
1236        else
1237                j = msecs_to_jiffies(i);
1238        if (j == 0)
1239                dev_warn(chip->card->dev,
1240                         "jackpoll_ms value out of range: %d\n", i);
1241        return j;
1242}
1243
1244/* HD-audio bus initialization */
1245int azx_bus_init(struct azx *chip, const char *model,
1246                 const struct hdac_io_ops *io_ops)
1247{
1248        struct hda_bus *bus = &chip->bus;
1249        int err;
1250
1251        err = snd_hdac_bus_init(&bus->core, chip->card->dev, &bus_core_ops,
1252                                io_ops);
1253        if (err < 0)
1254                return err;
1255
1256        bus->card = chip->card;
1257        mutex_init(&bus->prepare_mutex);
1258        bus->pci = chip->pci;
1259        bus->modelname = model;
1260        bus->mixer_assigned = -1;
1261        bus->core.snoop = azx_snoop(chip);
1262        if (chip->get_position[0] != azx_get_pos_lpib ||
1263            chip->get_position[1] != azx_get_pos_lpib)
1264                bus->core.use_posbuf = true;
1265        bus->core.bdl_pos_adj = chip->bdl_pos_adj;
1266        if (chip->driver_caps & AZX_DCAPS_CORBRP_SELF_CLEAR)
1267                bus->core.corbrp_self_clear = true;
1268
1269        if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY)
1270                bus->core.align_bdle_4k = true;
1271
1272        /* AMD chipsets often cause the communication stalls upon certain
1273         * sequence like the pin-detection.  It seems that forcing the synced
1274         * access works around the stall.  Grrr...
1275         */
1276        if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) {
1277                dev_dbg(chip->card->dev, "Enable sync_write for stable communication\n");
1278                bus->core.sync_write = 1;
1279                bus->allow_bus_reset = 1;
1280        }
1281
1282        return 0;
1283}
1284EXPORT_SYMBOL_GPL(azx_bus_init);
1285
1286/* Probe codecs */
1287int azx_probe_codecs(struct azx *chip, unsigned int max_slots)
1288{
1289        struct hdac_bus *bus = azx_bus(chip);
1290        int c, codecs, err;
1291
1292        codecs = 0;
1293        if (!max_slots)
1294                max_slots = AZX_DEFAULT_CODECS;
1295
1296        /* First try to probe all given codec slots */
1297        for (c = 0; c < max_slots; c++) {
1298                if ((bus->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1299                        if (probe_codec(chip, c) < 0) {
1300                                /* Some BIOSen give you wrong codec addresses
1301                                 * that don't exist
1302                                 */
1303                                dev_warn(chip->card->dev,
1304                                         "Codec #%d probe error; disabling it...\n", c);
1305                                bus->codec_mask &= ~(1 << c);
1306                                /* More badly, accessing to a non-existing
1307                                 * codec often screws up the controller chip,
1308                                 * and disturbs the further communications.
1309                                 * Thus if an error occurs during probing,
1310                                 * better to reset the controller chip to
1311                                 * get back to the sanity state.
1312                                 */
1313                                azx_stop_chip(chip);
1314                                azx_init_chip(chip, true);
1315                        }
1316                }
1317        }
1318
1319        /* Then create codec instances */
1320        for (c = 0; c < max_slots; c++) {
1321                if ((bus->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1322                        struct hda_codec *codec;
1323                        err = snd_hda_codec_new(&chip->bus, chip->card, c, &codec);
1324                        if (err < 0)
1325                                continue;
1326                        codec->jackpoll_interval = get_jackpoll_interval(chip);
1327                        codec->beep_mode = chip->beep_mode;
1328                        codecs++;
1329                }
1330        }
1331        if (!codecs) {
1332                dev_err(chip->card->dev, "no codecs initialized\n");
1333                return -ENXIO;
1334        }
1335        return 0;
1336}
1337EXPORT_SYMBOL_GPL(azx_probe_codecs);
1338
1339/* configure each codec instance */
1340int azx_codec_configure(struct azx *chip)
1341{
1342        struct hda_codec *codec, *next;
1343
1344        /* use _safe version here since snd_hda_codec_configure() deregisters
1345         * the device upon error and deletes itself from the bus list.
1346         */
1347        list_for_each_codec_safe(codec, next, &chip->bus) {
1348                snd_hda_codec_configure(codec);
1349        }
1350
1351        if (!azx_bus(chip)->num_codecs)
1352                return -ENODEV;
1353        return 0;
1354}
1355EXPORT_SYMBOL_GPL(azx_codec_configure);
1356
1357static int stream_direction(struct azx *chip, unsigned char index)
1358{
1359        if (index >= chip->capture_index_offset &&
1360            index < chip->capture_index_offset + chip->capture_streams)
1361                return SNDRV_PCM_STREAM_CAPTURE;
1362        return SNDRV_PCM_STREAM_PLAYBACK;
1363}
1364
1365/* initialize SD streams */
1366int azx_init_streams(struct azx *chip)
1367{
1368        int i;
1369        int stream_tags[2] = { 0, 0 };
1370
1371        /* initialize each stream (aka device)
1372         * assign the starting bdl address to each stream (device)
1373         * and initialize
1374         */
1375        for (i = 0; i < chip->num_streams; i++) {
1376                struct azx_dev *azx_dev = kzalloc(sizeof(*azx_dev), GFP_KERNEL);
1377                int dir, tag;
1378
1379                if (!azx_dev)
1380                        return -ENOMEM;
1381
1382                dir = stream_direction(chip, i);
1383                /* stream tag must be unique throughout
1384                 * the stream direction group,
1385                 * valid values 1...15
1386                 * use separate stream tag if the flag
1387                 * AZX_DCAPS_SEPARATE_STREAM_TAG is used
1388                 */
1389                if (chip->driver_caps & AZX_DCAPS_SEPARATE_STREAM_TAG)
1390                        tag = ++stream_tags[dir];
1391                else
1392                        tag = i + 1;
1393                snd_hdac_stream_init(azx_bus(chip), azx_stream(azx_dev),
1394                                     i, dir, tag);
1395        }
1396
1397        return 0;
1398}
1399EXPORT_SYMBOL_GPL(azx_init_streams);
1400
1401void azx_free_streams(struct azx *chip)
1402{
1403        struct hdac_bus *bus = azx_bus(chip);
1404        struct hdac_stream *s;
1405
1406        while (!list_empty(&bus->stream_list)) {
1407                s = list_first_entry(&bus->stream_list, struct hdac_stream, list);
1408                list_del(&s->list);
1409                kfree(stream_to_azx_dev(s));
1410        }
1411}
1412EXPORT_SYMBOL_GPL(azx_free_streams);
1413