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