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