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 #include <sound/core.h> 31 #include <sound/initval.h> 32 #include "hda_controller.h" 33 34 #define CREATE_TRACE_POINTS 35 #include "hda_intel_trace.h" 36 37 /* DSP lock helpers */ 38 #ifdef CONFIG_SND_HDA_DSP_LOADER 39 #define dsp_lock_init(dev) mutex_init(&(dev)->dsp_mutex) 40 #define dsp_lock(dev) mutex_lock(&(dev)->dsp_mutex) 41 #define dsp_unlock(dev) mutex_unlock(&(dev)->dsp_mutex) 42 #define dsp_is_locked(dev) ((dev)->locked) 43 #else 44 #define dsp_lock_init(dev) do {} while (0) 45 #define dsp_lock(dev) do {} while (0) 46 #define dsp_unlock(dev) do {} while (0) 47 #define dsp_is_locked(dev) 0 48 #endif 49 50 /* 51 * AZX stream operations. 52 */ 53 54 /* start a stream */ 55 static void azx_stream_start(struct azx *chip, struct azx_dev *azx_dev) 56 { 57 /* 58 * Before stream start, initialize parameter 59 */ 60 azx_dev->insufficient = 1; 61 62 /* enable SIE */ 63 azx_writel(chip, INTCTL, 64 azx_readl(chip, INTCTL) | (1 << azx_dev->index)); 65 /* set DMA start and interrupt mask */ 66 azx_sd_writeb(chip, azx_dev, SD_CTL, 67 azx_sd_readb(chip, azx_dev, SD_CTL) | 68 SD_CTL_DMA_START | SD_INT_MASK); 69 } 70 71 /* stop DMA */ 72 static void azx_stream_clear(struct azx *chip, struct azx_dev *azx_dev) 73 { 74 azx_sd_writeb(chip, azx_dev, SD_CTL, 75 azx_sd_readb(chip, azx_dev, SD_CTL) & 76 ~(SD_CTL_DMA_START | SD_INT_MASK)); 77 azx_sd_writeb(chip, azx_dev, SD_STS, SD_INT_MASK); /* to be sure */ 78 } 79 80 /* stop a stream */ 81 void azx_stream_stop(struct azx *chip, struct azx_dev *azx_dev) 82 { 83 azx_stream_clear(chip, azx_dev); 84 /* disable SIE */ 85 azx_writel(chip, INTCTL, 86 azx_readl(chip, INTCTL) & ~(1 << azx_dev->index)); 87 } 88 EXPORT_SYMBOL_GPL(azx_stream_stop); 89 90 /* reset stream */ 91 static void azx_stream_reset(struct azx *chip, struct azx_dev *azx_dev) 92 { 93 unsigned char val; 94 int timeout; 95 96 azx_stream_clear(chip, azx_dev); 97 98 azx_sd_writeb(chip, azx_dev, SD_CTL, 99 azx_sd_readb(chip, azx_dev, SD_CTL) | 100 SD_CTL_STREAM_RESET); 101 udelay(3); 102 timeout = 300; 103 while (!((val = azx_sd_readb(chip, azx_dev, SD_CTL)) & 104 SD_CTL_STREAM_RESET) && --timeout) 105 ; 106 val &= ~SD_CTL_STREAM_RESET; 107 azx_sd_writeb(chip, azx_dev, SD_CTL, val); 108 udelay(3); 109 110 timeout = 300; 111 /* waiting for hardware to report that the stream is out of reset */ 112 while (((val = azx_sd_readb(chip, azx_dev, SD_CTL)) & 113 SD_CTL_STREAM_RESET) && --timeout) 114 ; 115 116 /* reset first position - may not be synced with hw at this time */ 117 *azx_dev->posbuf = 0; 118 } 119 120 /* 121 * set up the SD for streaming 122 */ 123 static int azx_setup_controller(struct azx *chip, struct azx_dev *azx_dev) 124 { 125 unsigned int val; 126 /* make sure the run bit is zero for SD */ 127 azx_stream_clear(chip, azx_dev); 128 /* program the stream_tag */ 129 val = azx_sd_readl(chip, azx_dev, SD_CTL); 130 val = (val & ~SD_CTL_STREAM_TAG_MASK) | 131 (azx_dev->stream_tag << SD_CTL_STREAM_TAG_SHIFT); 132 if (!azx_snoop(chip)) 133 val |= SD_CTL_TRAFFIC_PRIO; 134 azx_sd_writel(chip, azx_dev, SD_CTL, val); 135 136 /* program the length of samples in cyclic buffer */ 137 azx_sd_writel(chip, azx_dev, SD_CBL, azx_dev->bufsize); 138 139 /* program the stream format */ 140 /* this value needs to be the same as the one programmed */ 141 azx_sd_writew(chip, azx_dev, SD_FORMAT, azx_dev->format_val); 142 143 /* program the stream LVI (last valid index) of the BDL */ 144 azx_sd_writew(chip, azx_dev, SD_LVI, azx_dev->frags - 1); 145 146 /* program the BDL address */ 147 /* lower BDL address */ 148 azx_sd_writel(chip, azx_dev, SD_BDLPL, (u32)azx_dev->bdl.addr); 149 /* upper BDL address */ 150 azx_sd_writel(chip, azx_dev, SD_BDLPU, 151 upper_32_bits(azx_dev->bdl.addr)); 152 153 /* enable the position buffer */ 154 if (chip->get_position[0] != azx_get_pos_lpib || 155 chip->get_position[1] != azx_get_pos_lpib) { 156 if (!(azx_readl(chip, DPLBASE) & AZX_DPLBASE_ENABLE)) 157 azx_writel(chip, DPLBASE, 158 (u32)chip->posbuf.addr | AZX_DPLBASE_ENABLE); 159 } 160 161 /* set the interrupt enable bits in the descriptor control register */ 162 azx_sd_writel(chip, azx_dev, SD_CTL, 163 azx_sd_readl(chip, azx_dev, SD_CTL) | SD_INT_MASK); 164 165 return 0; 166 } 167 168 /* assign a stream for the PCM */ 169 static inline struct azx_dev * 170 azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream) 171 { 172 int dev, i, nums; 173 struct azx_dev *res = NULL; 174 /* make a non-zero unique key for the substream */ 175 int key = (substream->pcm->device << 16) | (substream->number << 2) | 176 (substream->stream + 1); 177 178 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { 179 dev = chip->playback_index_offset; 180 nums = chip->playback_streams; 181 } else { 182 dev = chip->capture_index_offset; 183 nums = chip->capture_streams; 184 } 185 for (i = 0; i < nums; i++, dev++) { 186 struct azx_dev *azx_dev = &chip->azx_dev[dev]; 187 dsp_lock(azx_dev); 188 if (!azx_dev->opened && !dsp_is_locked(azx_dev)) { 189 if (azx_dev->assigned_key == key) { 190 azx_dev->opened = 1; 191 azx_dev->assigned_key = key; 192 dsp_unlock(azx_dev); 193 return azx_dev; 194 } 195 if (!res || 196 (chip->driver_caps & AZX_DCAPS_REVERSE_ASSIGN)) 197 res = azx_dev; 198 } 199 dsp_unlock(azx_dev); 200 } 201 if (res) { 202 dsp_lock(res); 203 res->opened = 1; 204 res->assigned_key = key; 205 dsp_unlock(res); 206 } 207 return res; 208 } 209 210 /* release the assigned stream */ 211 static inline void azx_release_device(struct azx_dev *azx_dev) 212 { 213 azx_dev->opened = 0; 214 } 215 216 static cycle_t azx_cc_read(const struct cyclecounter *cc) 217 { 218 struct azx_dev *azx_dev = container_of(cc, struct azx_dev, azx_cc); 219 struct snd_pcm_substream *substream = azx_dev->substream; 220 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 221 struct azx *chip = apcm->chip; 222 223 return azx_readl(chip, WALLCLK); 224 } 225 226 static void azx_timecounter_init(struct snd_pcm_substream *substream, 227 bool force, cycle_t last) 228 { 229 struct azx_dev *azx_dev = get_azx_dev(substream); 230 struct timecounter *tc = &azx_dev->azx_tc; 231 struct cyclecounter *cc = &azx_dev->azx_cc; 232 u64 nsec; 233 234 cc->read = azx_cc_read; 235 cc->mask = CLOCKSOURCE_MASK(32); 236 237 /* 238 * Converting from 24 MHz to ns means applying a 125/3 factor. 239 * To avoid any saturation issues in intermediate operations, 240 * the 125 factor is applied first. The division is applied 241 * last after reading the timecounter value. 242 * Applying the 1/3 factor as part of the multiplication 243 * requires at least 20 bits for a decent precision, however 244 * overflows occur after about 4 hours or less, not a option. 245 */ 246 247 cc->mult = 125; /* saturation after 195 years */ 248 cc->shift = 0; 249 250 nsec = 0; /* audio time is elapsed time since trigger */ 251 timecounter_init(tc, cc, nsec); 252 if (force) 253 /* 254 * force timecounter to use predefined value, 255 * used for synchronized starts 256 */ 257 tc->cycle_last = last; 258 } 259 260 static inline struct hda_pcm_stream * 261 to_hda_pcm_stream(struct snd_pcm_substream *substream) 262 { 263 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 264 return &apcm->info->stream[substream->stream]; 265 } 266 267 static u64 azx_adjust_codec_delay(struct snd_pcm_substream *substream, 268 u64 nsec) 269 { 270 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 271 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream); 272 u64 codec_frames, codec_nsecs; 273 274 if (!hinfo->ops.get_delay) 275 return nsec; 276 277 codec_frames = hinfo->ops.get_delay(hinfo, apcm->codec, substream); 278 codec_nsecs = div_u64(codec_frames * 1000000000LL, 279 substream->runtime->rate); 280 281 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) 282 return nsec + codec_nsecs; 283 284 return (nsec > codec_nsecs) ? nsec - codec_nsecs : 0; 285 } 286 287 /* 288 * set up a BDL entry 289 */ 290 static int setup_bdle(struct azx *chip, 291 struct snd_dma_buffer *dmab, 292 struct azx_dev *azx_dev, u32 **bdlp, 293 int ofs, int size, int with_ioc) 294 { 295 u32 *bdl = *bdlp; 296 297 while (size > 0) { 298 dma_addr_t addr; 299 int chunk; 300 301 if (azx_dev->frags >= AZX_MAX_BDL_ENTRIES) 302 return -EINVAL; 303 304 addr = snd_sgbuf_get_addr(dmab, ofs); 305 /* program the address field of the BDL entry */ 306 bdl[0] = cpu_to_le32((u32)addr); 307 bdl[1] = cpu_to_le32(upper_32_bits(addr)); 308 /* program the size field of the BDL entry */ 309 chunk = snd_sgbuf_get_chunk_size(dmab, ofs, size); 310 /* one BDLE cannot cross 4K boundary on CTHDA chips */ 311 if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY) { 312 u32 remain = 0x1000 - (ofs & 0xfff); 313 if (chunk > remain) 314 chunk = remain; 315 } 316 bdl[2] = cpu_to_le32(chunk); 317 /* program the IOC to enable interrupt 318 * only when the whole fragment is processed 319 */ 320 size -= chunk; 321 bdl[3] = (size || !with_ioc) ? 0 : cpu_to_le32(0x01); 322 bdl += 4; 323 azx_dev->frags++; 324 ofs += chunk; 325 } 326 *bdlp = bdl; 327 return ofs; 328 } 329 330 /* 331 * set up BDL entries 332 */ 333 static int azx_setup_periods(struct azx *chip, 334 struct snd_pcm_substream *substream, 335 struct azx_dev *azx_dev) 336 { 337 u32 *bdl; 338 int i, ofs, periods, period_bytes; 339 int pos_adj = 0; 340 341 /* reset BDL address */ 342 azx_sd_writel(chip, azx_dev, SD_BDLPL, 0); 343 azx_sd_writel(chip, azx_dev, SD_BDLPU, 0); 344 345 period_bytes = azx_dev->period_bytes; 346 periods = azx_dev->bufsize / period_bytes; 347 348 /* program the initial BDL entries */ 349 bdl = (u32 *)azx_dev->bdl.area; 350 ofs = 0; 351 azx_dev->frags = 0; 352 353 if (chip->bdl_pos_adj) 354 pos_adj = chip->bdl_pos_adj[chip->dev_index]; 355 if (!azx_dev->no_period_wakeup && pos_adj > 0) { 356 struct snd_pcm_runtime *runtime = substream->runtime; 357 int pos_align = pos_adj; 358 pos_adj = (pos_adj * runtime->rate + 47999) / 48000; 359 if (!pos_adj) 360 pos_adj = pos_align; 361 else 362 pos_adj = ((pos_adj + pos_align - 1) / pos_align) * 363 pos_align; 364 pos_adj = frames_to_bytes(runtime, pos_adj); 365 if (pos_adj >= period_bytes) { 366 dev_warn(chip->card->dev,"Too big adjustment %d\n", 367 pos_adj); 368 pos_adj = 0; 369 } else { 370 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream), 371 azx_dev, 372 &bdl, ofs, pos_adj, true); 373 if (ofs < 0) 374 goto error; 375 } 376 } else 377 pos_adj = 0; 378 379 for (i = 0; i < periods; i++) { 380 if (i == periods - 1 && pos_adj) 381 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream), 382 azx_dev, &bdl, ofs, 383 period_bytes - pos_adj, 0); 384 else 385 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream), 386 azx_dev, &bdl, ofs, 387 period_bytes, 388 !azx_dev->no_period_wakeup); 389 if (ofs < 0) 390 goto error; 391 } 392 return 0; 393 394 error: 395 dev_err(chip->card->dev, "Too many BDL entries: buffer=%d, period=%d\n", 396 azx_dev->bufsize, period_bytes); 397 return -EINVAL; 398 } 399 400 /* 401 * PCM ops 402 */ 403 404 static int azx_pcm_close(struct snd_pcm_substream *substream) 405 { 406 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 407 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream); 408 struct azx *chip = apcm->chip; 409 struct azx_dev *azx_dev = get_azx_dev(substream); 410 unsigned long flags; 411 412 mutex_lock(&chip->open_mutex); 413 spin_lock_irqsave(&chip->reg_lock, flags); 414 azx_dev->substream = NULL; 415 azx_dev->running = 0; 416 spin_unlock_irqrestore(&chip->reg_lock, flags); 417 azx_release_device(azx_dev); 418 if (hinfo->ops.close) 419 hinfo->ops.close(hinfo, apcm->codec, substream); 420 snd_hda_power_down(apcm->codec); 421 mutex_unlock(&chip->open_mutex); 422 snd_hda_codec_pcm_put(apcm->info); 423 return 0; 424 } 425 426 static int azx_pcm_hw_params(struct snd_pcm_substream *substream, 427 struct snd_pcm_hw_params *hw_params) 428 { 429 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 430 struct azx *chip = apcm->chip; 431 int ret; 432 433 dsp_lock(get_azx_dev(substream)); 434 if (dsp_is_locked(get_azx_dev(substream))) { 435 ret = -EBUSY; 436 goto unlock; 437 } 438 439 ret = chip->ops->substream_alloc_pages(chip, substream, 440 params_buffer_bytes(hw_params)); 441 unlock: 442 dsp_unlock(get_azx_dev(substream)); 443 return ret; 444 } 445 446 static int azx_pcm_hw_free(struct snd_pcm_substream *substream) 447 { 448 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 449 struct azx_dev *azx_dev = get_azx_dev(substream); 450 struct azx *chip = apcm->chip; 451 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream); 452 int err; 453 454 /* reset BDL address */ 455 dsp_lock(azx_dev); 456 if (!dsp_is_locked(azx_dev)) { 457 azx_sd_writel(chip, azx_dev, SD_BDLPL, 0); 458 azx_sd_writel(chip, azx_dev, SD_BDLPU, 0); 459 azx_sd_writel(chip, azx_dev, SD_CTL, 0); 460 azx_dev->bufsize = 0; 461 azx_dev->period_bytes = 0; 462 azx_dev->format_val = 0; 463 } 464 465 snd_hda_codec_cleanup(apcm->codec, hinfo, substream); 466 467 err = chip->ops->substream_free_pages(chip, substream); 468 azx_dev->prepared = 0; 469 dsp_unlock(azx_dev); 470 return err; 471 } 472 473 static int azx_pcm_prepare(struct snd_pcm_substream *substream) 474 { 475 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 476 struct azx *chip = apcm->chip; 477 struct azx_dev *azx_dev = get_azx_dev(substream); 478 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream); 479 struct snd_pcm_runtime *runtime = substream->runtime; 480 unsigned int bufsize, period_bytes, format_val, stream_tag; 481 int err; 482 struct hda_spdif_out *spdif = 483 snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid); 484 unsigned short ctls = spdif ? spdif->ctls : 0; 485 486 dsp_lock(azx_dev); 487 if (dsp_is_locked(azx_dev)) { 488 err = -EBUSY; 489 goto unlock; 490 } 491 492 azx_stream_reset(chip, azx_dev); 493 format_val = snd_hda_calc_stream_format(apcm->codec, 494 runtime->rate, 495 runtime->channels, 496 runtime->format, 497 hinfo->maxbps, 498 ctls); 499 if (!format_val) { 500 dev_err(chip->card->dev, 501 "invalid format_val, rate=%d, ch=%d, format=%d\n", 502 runtime->rate, runtime->channels, runtime->format); 503 err = -EINVAL; 504 goto unlock; 505 } 506 507 bufsize = snd_pcm_lib_buffer_bytes(substream); 508 period_bytes = snd_pcm_lib_period_bytes(substream); 509 510 dev_dbg(chip->card->dev, "azx_pcm_prepare: bufsize=0x%x, format=0x%x\n", 511 bufsize, format_val); 512 513 if (bufsize != azx_dev->bufsize || 514 period_bytes != azx_dev->period_bytes || 515 format_val != azx_dev->format_val || 516 runtime->no_period_wakeup != azx_dev->no_period_wakeup) { 517 azx_dev->bufsize = bufsize; 518 azx_dev->period_bytes = period_bytes; 519 azx_dev->format_val = format_val; 520 azx_dev->no_period_wakeup = runtime->no_period_wakeup; 521 err = azx_setup_periods(chip, substream, azx_dev); 522 if (err < 0) 523 goto unlock; 524 } 525 526 /* when LPIB delay correction gives a small negative value, 527 * we ignore it; currently set the threshold statically to 528 * 64 frames 529 */ 530 if (runtime->period_size > 64) 531 azx_dev->delay_negative_threshold = -frames_to_bytes(runtime, 64); 532 else 533 azx_dev->delay_negative_threshold = 0; 534 535 /* wallclk has 24Mhz clock source */ 536 azx_dev->period_wallclk = (((runtime->period_size * 24000) / 537 runtime->rate) * 1000); 538 azx_setup_controller(chip, azx_dev); 539 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 540 azx_dev->fifo_size = 541 azx_sd_readw(chip, azx_dev, SD_FIFOSIZE) + 1; 542 else 543 azx_dev->fifo_size = 0; 544 545 stream_tag = azx_dev->stream_tag; 546 /* CA-IBG chips need the playback stream starting from 1 */ 547 if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) && 548 stream_tag > chip->capture_streams) 549 stream_tag -= chip->capture_streams; 550 err = snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag, 551 azx_dev->format_val, substream); 552 553 unlock: 554 if (!err) 555 azx_dev->prepared = 1; 556 dsp_unlock(azx_dev); 557 return err; 558 } 559 560 static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd) 561 { 562 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 563 struct azx *chip = apcm->chip; 564 struct azx_dev *azx_dev; 565 struct snd_pcm_substream *s; 566 int rstart = 0, start, nsync = 0, sbits = 0; 567 int nwait, timeout; 568 569 azx_dev = get_azx_dev(substream); 570 trace_azx_pcm_trigger(chip, azx_dev, cmd); 571 572 if (dsp_is_locked(azx_dev) || !azx_dev->prepared) 573 return -EPIPE; 574 575 switch (cmd) { 576 case SNDRV_PCM_TRIGGER_START: 577 rstart = 1; 578 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 579 case SNDRV_PCM_TRIGGER_RESUME: 580 start = 1; 581 break; 582 case SNDRV_PCM_TRIGGER_PAUSE_PUSH: 583 case SNDRV_PCM_TRIGGER_SUSPEND: 584 case SNDRV_PCM_TRIGGER_STOP: 585 start = 0; 586 break; 587 default: 588 return -EINVAL; 589 } 590 591 snd_pcm_group_for_each_entry(s, substream) { 592 if (s->pcm->card != substream->pcm->card) 593 continue; 594 azx_dev = get_azx_dev(s); 595 sbits |= 1 << azx_dev->index; 596 nsync++; 597 snd_pcm_trigger_done(s, substream); 598 } 599 600 spin_lock(&chip->reg_lock); 601 602 /* first, set SYNC bits of corresponding streams */ 603 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC) 604 azx_writel(chip, OLD_SSYNC, 605 azx_readl(chip, OLD_SSYNC) | sbits); 606 else 607 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) | sbits); 608 609 snd_pcm_group_for_each_entry(s, substream) { 610 if (s->pcm->card != substream->pcm->card) 611 continue; 612 azx_dev = get_azx_dev(s); 613 if (start) { 614 azx_dev->start_wallclk = azx_readl(chip, WALLCLK); 615 if (!rstart) 616 azx_dev->start_wallclk -= 617 azx_dev->period_wallclk; 618 azx_stream_start(chip, azx_dev); 619 } else { 620 azx_stream_stop(chip, azx_dev); 621 } 622 azx_dev->running = start; 623 } 624 spin_unlock(&chip->reg_lock); 625 if (start) { 626 /* wait until all FIFOs get ready */ 627 for (timeout = 5000; timeout; timeout--) { 628 nwait = 0; 629 snd_pcm_group_for_each_entry(s, substream) { 630 if (s->pcm->card != substream->pcm->card) 631 continue; 632 azx_dev = get_azx_dev(s); 633 if (!(azx_sd_readb(chip, azx_dev, SD_STS) & 634 SD_STS_FIFO_READY)) 635 nwait++; 636 } 637 if (!nwait) 638 break; 639 cpu_relax(); 640 } 641 } else { 642 /* wait until all RUN bits are cleared */ 643 for (timeout = 5000; timeout; timeout--) { 644 nwait = 0; 645 snd_pcm_group_for_each_entry(s, substream) { 646 if (s->pcm->card != substream->pcm->card) 647 continue; 648 azx_dev = get_azx_dev(s); 649 if (azx_sd_readb(chip, azx_dev, SD_CTL) & 650 SD_CTL_DMA_START) 651 nwait++; 652 } 653 if (!nwait) 654 break; 655 cpu_relax(); 656 } 657 } 658 spin_lock(&chip->reg_lock); 659 /* reset SYNC bits */ 660 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC) 661 azx_writel(chip, OLD_SSYNC, 662 azx_readl(chip, OLD_SSYNC) & ~sbits); 663 else 664 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) & ~sbits); 665 if (start) { 666 azx_timecounter_init(substream, 0, 0); 667 snd_pcm_gettime(substream->runtime, &substream->runtime->trigger_tstamp); 668 substream->runtime->trigger_tstamp_latched = true; 669 670 if (nsync > 1) { 671 cycle_t cycle_last; 672 673 /* same start cycle for master and group */ 674 azx_dev = get_azx_dev(substream); 675 cycle_last = azx_dev->azx_tc.cycle_last; 676 677 snd_pcm_group_for_each_entry(s, substream) { 678 if (s->pcm->card != substream->pcm->card) 679 continue; 680 azx_timecounter_init(s, 1, cycle_last); 681 } 682 } 683 } 684 spin_unlock(&chip->reg_lock); 685 return 0; 686 } 687 688 unsigned int azx_get_pos_lpib(struct azx *chip, struct azx_dev *azx_dev) 689 { 690 return azx_sd_readl(chip, azx_dev, SD_LPIB); 691 } 692 EXPORT_SYMBOL_GPL(azx_get_pos_lpib); 693 694 unsigned int azx_get_pos_posbuf(struct azx *chip, struct azx_dev *azx_dev) 695 { 696 return le32_to_cpu(*azx_dev->posbuf); 697 } 698 EXPORT_SYMBOL_GPL(azx_get_pos_posbuf); 699 700 unsigned int azx_get_position(struct azx *chip, 701 struct azx_dev *azx_dev) 702 { 703 struct snd_pcm_substream *substream = azx_dev->substream; 704 unsigned int pos; 705 int stream = substream->stream; 706 int delay = 0; 707 708 if (chip->get_position[stream]) 709 pos = chip->get_position[stream](chip, azx_dev); 710 else /* use the position buffer as default */ 711 pos = azx_get_pos_posbuf(chip, azx_dev); 712 713 if (pos >= azx_dev->bufsize) 714 pos = 0; 715 716 if (substream->runtime) { 717 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 718 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream); 719 720 if (chip->get_delay[stream]) 721 delay += chip->get_delay[stream](chip, azx_dev, pos); 722 if (hinfo->ops.get_delay) 723 delay += hinfo->ops.get_delay(hinfo, apcm->codec, 724 substream); 725 substream->runtime->delay = delay; 726 } 727 728 trace_azx_get_position(chip, azx_dev, pos, delay); 729 return pos; 730 } 731 EXPORT_SYMBOL_GPL(azx_get_position); 732 733 static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream) 734 { 735 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 736 struct azx *chip = apcm->chip; 737 struct azx_dev *azx_dev = get_azx_dev(substream); 738 return bytes_to_frames(substream->runtime, 739 azx_get_position(chip, azx_dev)); 740 } 741 742 static int azx_get_time_info(struct snd_pcm_substream *substream, 743 struct timespec *system_ts, struct timespec *audio_ts, 744 struct snd_pcm_audio_tstamp_config *audio_tstamp_config, 745 struct snd_pcm_audio_tstamp_report *audio_tstamp_report) 746 { 747 struct azx_dev *azx_dev = get_azx_dev(substream); 748 u64 nsec; 749 750 if ((substream->runtime->hw.info & SNDRV_PCM_INFO_HAS_LINK_ATIME) && 751 (audio_tstamp_config->type_requested == SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK)) { 752 753 snd_pcm_gettime(substream->runtime, system_ts); 754 755 nsec = timecounter_read(&azx_dev->azx_tc); 756 nsec = div_u64(nsec, 3); /* can be optimized */ 757 if (audio_tstamp_config->report_delay) 758 nsec = azx_adjust_codec_delay(substream, nsec); 759 760 *audio_ts = ns_to_timespec(nsec); 761 762 audio_tstamp_report->actual_type = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK; 763 audio_tstamp_report->accuracy_report = 1; /* rest of structure is valid */ 764 audio_tstamp_report->accuracy = 42; /* 24 MHz WallClock == 42ns resolution */ 765 766 } else 767 audio_tstamp_report->actual_type = SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT; 768 769 return 0; 770 } 771 772 static struct snd_pcm_hardware azx_pcm_hw = { 773 .info = (SNDRV_PCM_INFO_MMAP | 774 SNDRV_PCM_INFO_INTERLEAVED | 775 SNDRV_PCM_INFO_BLOCK_TRANSFER | 776 SNDRV_PCM_INFO_MMAP_VALID | 777 /* No full-resume yet implemented */ 778 /* SNDRV_PCM_INFO_RESUME |*/ 779 SNDRV_PCM_INFO_PAUSE | 780 SNDRV_PCM_INFO_SYNC_START | 781 SNDRV_PCM_INFO_HAS_WALL_CLOCK | /* legacy */ 782 SNDRV_PCM_INFO_HAS_LINK_ATIME | 783 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP), 784 .formats = SNDRV_PCM_FMTBIT_S16_LE, 785 .rates = SNDRV_PCM_RATE_48000, 786 .rate_min = 48000, 787 .rate_max = 48000, 788 .channels_min = 2, 789 .channels_max = 2, 790 .buffer_bytes_max = AZX_MAX_BUF_SIZE, 791 .period_bytes_min = 128, 792 .period_bytes_max = AZX_MAX_BUF_SIZE / 2, 793 .periods_min = 2, 794 .periods_max = AZX_MAX_FRAG, 795 .fifo_size = 0, 796 }; 797 798 static int azx_pcm_open(struct snd_pcm_substream *substream) 799 { 800 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 801 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream); 802 struct azx *chip = apcm->chip; 803 struct azx_dev *azx_dev; 804 struct snd_pcm_runtime *runtime = substream->runtime; 805 unsigned long flags; 806 int err; 807 int buff_step; 808 809 snd_hda_codec_pcm_get(apcm->info); 810 mutex_lock(&chip->open_mutex); 811 azx_dev = azx_assign_device(chip, substream); 812 if (azx_dev == NULL) { 813 err = -EBUSY; 814 goto unlock; 815 } 816 runtime->hw = azx_pcm_hw; 817 runtime->hw.channels_min = hinfo->channels_min; 818 runtime->hw.channels_max = hinfo->channels_max; 819 runtime->hw.formats = hinfo->formats; 820 runtime->hw.rates = hinfo->rates; 821 snd_pcm_limit_hw_rates(runtime); 822 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); 823 824 /* avoid wrap-around with wall-clock */ 825 snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME, 826 20, 827 178000000); 828 829 if (chip->align_buffer_size) 830 /* constrain buffer sizes to be multiple of 128 831 bytes. This is more efficient in terms of memory 832 access but isn't required by the HDA spec and 833 prevents users from specifying exact period/buffer 834 sizes. For example for 44.1kHz, a period size set 835 to 20ms will be rounded to 19.59ms. */ 836 buff_step = 128; 837 else 838 /* Don't enforce steps on buffer sizes, still need to 839 be multiple of 4 bytes (HDA spec). Tested on Intel 840 HDA controllers, may not work on all devices where 841 option needs to be disabled */ 842 buff_step = 4; 843 844 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES, 845 buff_step); 846 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 847 buff_step); 848 snd_hda_power_up(apcm->codec); 849 if (hinfo->ops.open) 850 err = hinfo->ops.open(hinfo, apcm->codec, substream); 851 else 852 err = -ENODEV; 853 if (err < 0) { 854 azx_release_device(azx_dev); 855 goto powerdown; 856 } 857 snd_pcm_limit_hw_rates(runtime); 858 /* sanity check */ 859 if (snd_BUG_ON(!runtime->hw.channels_min) || 860 snd_BUG_ON(!runtime->hw.channels_max) || 861 snd_BUG_ON(!runtime->hw.formats) || 862 snd_BUG_ON(!runtime->hw.rates)) { 863 azx_release_device(azx_dev); 864 if (hinfo->ops.close) 865 hinfo->ops.close(hinfo, apcm->codec, substream); 866 err = -EINVAL; 867 goto powerdown; 868 } 869 870 /* disable LINK_ATIME timestamps for capture streams 871 until we figure out how to handle digital inputs */ 872 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { 873 runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK; /* legacy */ 874 runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_LINK_ATIME; 875 } 876 877 spin_lock_irqsave(&chip->reg_lock, flags); 878 azx_dev->substream = substream; 879 azx_dev->running = 0; 880 spin_unlock_irqrestore(&chip->reg_lock, flags); 881 882 runtime->private_data = azx_dev; 883 snd_pcm_set_sync(substream); 884 mutex_unlock(&chip->open_mutex); 885 return 0; 886 887 powerdown: 888 snd_hda_power_down(apcm->codec); 889 unlock: 890 mutex_unlock(&chip->open_mutex); 891 snd_hda_codec_pcm_put(apcm->info); 892 return err; 893 } 894 895 static int azx_pcm_mmap(struct snd_pcm_substream *substream, 896 struct vm_area_struct *area) 897 { 898 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 899 struct azx *chip = apcm->chip; 900 if (chip->ops->pcm_mmap_prepare) 901 chip->ops->pcm_mmap_prepare(substream, area); 902 return snd_pcm_lib_default_mmap(substream, area); 903 } 904 905 static struct snd_pcm_ops azx_pcm_ops = { 906 .open = azx_pcm_open, 907 .close = azx_pcm_close, 908 .ioctl = snd_pcm_lib_ioctl, 909 .hw_params = azx_pcm_hw_params, 910 .hw_free = azx_pcm_hw_free, 911 .prepare = azx_pcm_prepare, 912 .trigger = azx_pcm_trigger, 913 .pointer = azx_pcm_pointer, 914 .get_time_info = azx_get_time_info, 915 .mmap = azx_pcm_mmap, 916 .page = snd_pcm_sgbuf_ops_page, 917 }; 918 919 static void azx_pcm_free(struct snd_pcm *pcm) 920 { 921 struct azx_pcm *apcm = pcm->private_data; 922 if (apcm) { 923 list_del(&apcm->list); 924 apcm->info->pcm = NULL; 925 kfree(apcm); 926 } 927 } 928 929 #define MAX_PREALLOC_SIZE (32 * 1024 * 1024) 930 931 static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec, 932 struct hda_pcm *cpcm) 933 { 934 struct azx *chip = bus->private_data; 935 struct snd_pcm *pcm; 936 struct azx_pcm *apcm; 937 int pcm_dev = cpcm->device; 938 unsigned int size; 939 int s, err; 940 941 list_for_each_entry(apcm, &chip->pcm_list, list) { 942 if (apcm->pcm->device == pcm_dev) { 943 dev_err(chip->card->dev, "PCM %d already exists\n", 944 pcm_dev); 945 return -EBUSY; 946 } 947 } 948 err = snd_pcm_new(chip->card, cpcm->name, pcm_dev, 949 cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams, 950 cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams, 951 &pcm); 952 if (err < 0) 953 return err; 954 strlcpy(pcm->name, cpcm->name, sizeof(pcm->name)); 955 apcm = kzalloc(sizeof(*apcm), GFP_KERNEL); 956 if (apcm == NULL) 957 return -ENOMEM; 958 apcm->chip = chip; 959 apcm->pcm = pcm; 960 apcm->codec = codec; 961 apcm->info = cpcm; 962 pcm->private_data = apcm; 963 pcm->private_free = azx_pcm_free; 964 if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM) 965 pcm->dev_class = SNDRV_PCM_CLASS_MODEM; 966 list_add_tail(&apcm->list, &chip->pcm_list); 967 cpcm->pcm = pcm; 968 for (s = 0; s < 2; s++) { 969 if (cpcm->stream[s].substreams) 970 snd_pcm_set_ops(pcm, s, &azx_pcm_ops); 971 } 972 /* buffer pre-allocation */ 973 size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024; 974 if (size > MAX_PREALLOC_SIZE) 975 size = MAX_PREALLOC_SIZE; 976 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG, 977 chip->card->dev, 978 size, MAX_PREALLOC_SIZE); 979 return 0; 980 } 981 982 /* 983 * CORB / RIRB interface 984 */ 985 static int azx_alloc_cmd_io(struct azx *chip) 986 { 987 /* single page (at least 4096 bytes) must suffice for both ringbuffes */ 988 return chip->ops->dma_alloc_pages(chip, SNDRV_DMA_TYPE_DEV, 989 PAGE_SIZE, &chip->rb); 990 } 991 992 static void azx_init_cmd_io(struct azx *chip) 993 { 994 int timeout; 995 996 spin_lock_irq(&chip->reg_lock); 997 /* CORB set up */ 998 chip->corb.addr = chip->rb.addr; 999 chip->corb.buf = (u32 *)chip->rb.area; 1000 azx_writel(chip, CORBLBASE, (u32)chip->corb.addr); 1001 azx_writel(chip, CORBUBASE, upper_32_bits(chip->corb.addr)); 1002 1003 /* set the corb size to 256 entries (ULI requires explicitly) */ 1004 azx_writeb(chip, CORBSIZE, 0x02); 1005 /* set the corb write pointer to 0 */ 1006 azx_writew(chip, CORBWP, 0); 1007 1008 /* reset the corb hw read pointer */ 1009 azx_writew(chip, CORBRP, AZX_CORBRP_RST); 1010 if (!(chip->driver_caps & AZX_DCAPS_CORBRP_SELF_CLEAR)) { 1011 for (timeout = 1000; timeout > 0; timeout--) { 1012 if ((azx_readw(chip, CORBRP) & AZX_CORBRP_RST) == AZX_CORBRP_RST) 1013 break; 1014 udelay(1); 1015 } 1016 if (timeout <= 0) 1017 dev_err(chip->card->dev, "CORB reset timeout#1, CORBRP = %d\n", 1018 azx_readw(chip, CORBRP)); 1019 1020 azx_writew(chip, CORBRP, 0); 1021 for (timeout = 1000; timeout > 0; timeout--) { 1022 if (azx_readw(chip, CORBRP) == 0) 1023 break; 1024 udelay(1); 1025 } 1026 if (timeout <= 0) 1027 dev_err(chip->card->dev, "CORB reset timeout#2, CORBRP = %d\n", 1028 azx_readw(chip, CORBRP)); 1029 } 1030 1031 /* enable corb dma */ 1032 azx_writeb(chip, CORBCTL, AZX_CORBCTL_RUN); 1033 1034 /* RIRB set up */ 1035 chip->rirb.addr = chip->rb.addr + 2048; 1036 chip->rirb.buf = (u32 *)(chip->rb.area + 2048); 1037 chip->rirb.wp = chip->rirb.rp = 0; 1038 memset(chip->rirb.cmds, 0, sizeof(chip->rirb.cmds)); 1039 azx_writel(chip, RIRBLBASE, (u32)chip->rirb.addr); 1040 azx_writel(chip, RIRBUBASE, upper_32_bits(chip->rirb.addr)); 1041 1042 /* set the rirb size to 256 entries (ULI requires explicitly) */ 1043 azx_writeb(chip, RIRBSIZE, 0x02); 1044 /* reset the rirb hw write pointer */ 1045 azx_writew(chip, RIRBWP, AZX_RIRBWP_RST); 1046 /* set N=1, get RIRB response interrupt for new entry */ 1047 if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) 1048 azx_writew(chip, RINTCNT, 0xc0); 1049 else 1050 azx_writew(chip, RINTCNT, 1); 1051 /* enable rirb dma and response irq */ 1052 azx_writeb(chip, RIRBCTL, AZX_RBCTL_DMA_EN | AZX_RBCTL_IRQ_EN); 1053 spin_unlock_irq(&chip->reg_lock); 1054 } 1055 1056 static void azx_free_cmd_io(struct azx *chip) 1057 { 1058 spin_lock_irq(&chip->reg_lock); 1059 /* disable ringbuffer DMAs */ 1060 azx_writeb(chip, RIRBCTL, 0); 1061 azx_writeb(chip, CORBCTL, 0); 1062 spin_unlock_irq(&chip->reg_lock); 1063 } 1064 1065 static unsigned int azx_command_addr(u32 cmd) 1066 { 1067 unsigned int addr = cmd >> 28; 1068 1069 if (addr >= AZX_MAX_CODECS) { 1070 snd_BUG(); 1071 addr = 0; 1072 } 1073 1074 return addr; 1075 } 1076 1077 /* send a command */ 1078 static int azx_corb_send_cmd(struct hda_bus *bus, u32 val) 1079 { 1080 struct azx *chip = bus->private_data; 1081 unsigned int addr = azx_command_addr(val); 1082 unsigned int wp, rp; 1083 1084 spin_lock_irq(&chip->reg_lock); 1085 1086 /* add command to corb */ 1087 wp = azx_readw(chip, CORBWP); 1088 if (wp == 0xffff) { 1089 /* something wrong, controller likely turned to D3 */ 1090 spin_unlock_irq(&chip->reg_lock); 1091 return -EIO; 1092 } 1093 wp++; 1094 wp %= AZX_MAX_CORB_ENTRIES; 1095 1096 rp = azx_readw(chip, CORBRP); 1097 if (wp == rp) { 1098 /* oops, it's full */ 1099 spin_unlock_irq(&chip->reg_lock); 1100 return -EAGAIN; 1101 } 1102 1103 chip->rirb.cmds[addr]++; 1104 chip->corb.buf[wp] = cpu_to_le32(val); 1105 azx_writew(chip, CORBWP, wp); 1106 1107 spin_unlock_irq(&chip->reg_lock); 1108 1109 return 0; 1110 } 1111 1112 #define AZX_RIRB_EX_UNSOL_EV (1<<4) 1113 1114 /* retrieve RIRB entry - called from interrupt handler */ 1115 static void azx_update_rirb(struct azx *chip) 1116 { 1117 unsigned int rp, wp; 1118 unsigned int addr; 1119 u32 res, res_ex; 1120 1121 wp = azx_readw(chip, RIRBWP); 1122 if (wp == 0xffff) { 1123 /* something wrong, controller likely turned to D3 */ 1124 return; 1125 } 1126 1127 if (wp == chip->rirb.wp) 1128 return; 1129 chip->rirb.wp = wp; 1130 1131 while (chip->rirb.rp != wp) { 1132 chip->rirb.rp++; 1133 chip->rirb.rp %= AZX_MAX_RIRB_ENTRIES; 1134 1135 rp = chip->rirb.rp << 1; /* an RIRB entry is 8-bytes */ 1136 res_ex = le32_to_cpu(chip->rirb.buf[rp + 1]); 1137 res = le32_to_cpu(chip->rirb.buf[rp]); 1138 addr = res_ex & 0xf; 1139 if ((addr >= AZX_MAX_CODECS) || !(chip->codec_mask & (1 << addr))) { 1140 dev_err(chip->card->dev, "spurious response %#x:%#x, rp = %d, wp = %d", 1141 res, res_ex, 1142 chip->rirb.rp, wp); 1143 snd_BUG(); 1144 } else if (res_ex & AZX_RIRB_EX_UNSOL_EV) 1145 snd_hda_queue_unsol_event(chip->bus, res, res_ex); 1146 else if (chip->rirb.cmds[addr]) { 1147 chip->rirb.res[addr] = res; 1148 smp_wmb(); 1149 chip->rirb.cmds[addr]--; 1150 } else if (printk_ratelimit()) { 1151 dev_err(chip->card->dev, "spurious response %#x:%#x, last cmd=%#08x\n", 1152 res, res_ex, 1153 chip->last_cmd[addr]); 1154 } 1155 } 1156 } 1157 1158 /* receive a response */ 1159 static unsigned int azx_rirb_get_response(struct hda_bus *bus, 1160 unsigned int addr) 1161 { 1162 struct azx *chip = bus->private_data; 1163 unsigned long timeout; 1164 unsigned long loopcounter; 1165 int do_poll = 0; 1166 1167 again: 1168 timeout = jiffies + msecs_to_jiffies(1000); 1169 1170 for (loopcounter = 0;; loopcounter++) { 1171 if (chip->polling_mode || do_poll) { 1172 spin_lock_irq(&chip->reg_lock); 1173 azx_update_rirb(chip); 1174 spin_unlock_irq(&chip->reg_lock); 1175 } 1176 if (!chip->rirb.cmds[addr]) { 1177 smp_rmb(); 1178 bus->rirb_error = 0; 1179 1180 if (!do_poll) 1181 chip->poll_count = 0; 1182 return chip->rirb.res[addr]; /* the last value */ 1183 } 1184 if (time_after(jiffies, timeout)) 1185 break; 1186 if (bus->needs_damn_long_delay || loopcounter > 3000) 1187 msleep(2); /* temporary workaround */ 1188 else { 1189 udelay(10); 1190 cond_resched(); 1191 } 1192 } 1193 1194 if (bus->no_response_fallback) 1195 return -1; 1196 1197 if (!chip->polling_mode && chip->poll_count < 2) { 1198 dev_dbg(chip->card->dev, 1199 "azx_get_response timeout, polling the codec once: last cmd=0x%08x\n", 1200 chip->last_cmd[addr]); 1201 do_poll = 1; 1202 chip->poll_count++; 1203 goto again; 1204 } 1205 1206 1207 if (!chip->polling_mode) { 1208 dev_warn(chip->card->dev, 1209 "azx_get_response timeout, switching to polling mode: last cmd=0x%08x\n", 1210 chip->last_cmd[addr]); 1211 chip->polling_mode = 1; 1212 goto again; 1213 } 1214 1215 if (chip->msi) { 1216 dev_warn(chip->card->dev, 1217 "No response from codec, disabling MSI: last cmd=0x%08x\n", 1218 chip->last_cmd[addr]); 1219 if (chip->ops->disable_msi_reset_irq(chip) && 1220 chip->ops->disable_msi_reset_irq(chip) < 0) { 1221 bus->rirb_error = 1; 1222 return -1; 1223 } 1224 goto again; 1225 } 1226 1227 if (chip->probing) { 1228 /* If this critical timeout happens during the codec probing 1229 * phase, this is likely an access to a non-existing codec 1230 * slot. Better to return an error and reset the system. 1231 */ 1232 return -1; 1233 } 1234 1235 /* a fatal communication error; need either to reset or to fallback 1236 * to the single_cmd mode 1237 */ 1238 bus->rirb_error = 1; 1239 if (bus->allow_bus_reset && !bus->response_reset && !bus->in_reset) { 1240 bus->response_reset = 1; 1241 return -1; /* give a chance to retry */ 1242 } 1243 1244 dev_err(chip->card->dev, 1245 "azx_get_response timeout, switching to single_cmd mode: last cmd=0x%08x\n", 1246 chip->last_cmd[addr]); 1247 chip->single_cmd = 1; 1248 bus->response_reset = 0; 1249 /* release CORB/RIRB */ 1250 azx_free_cmd_io(chip); 1251 /* disable unsolicited responses */ 1252 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~AZX_GCTL_UNSOL); 1253 return -1; 1254 } 1255 1256 /* 1257 * Use the single immediate command instead of CORB/RIRB for simplicity 1258 * 1259 * Note: according to Intel, this is not preferred use. The command was 1260 * intended for the BIOS only, and may get confused with unsolicited 1261 * responses. So, we shouldn't use it for normal operation from the 1262 * driver. 1263 * I left the codes, however, for debugging/testing purposes. 1264 */ 1265 1266 /* receive a response */ 1267 static int azx_single_wait_for_response(struct azx *chip, unsigned int addr) 1268 { 1269 int timeout = 50; 1270 1271 while (timeout--) { 1272 /* check IRV busy bit */ 1273 if (azx_readw(chip, IRS) & AZX_IRS_VALID) { 1274 /* reuse rirb.res as the response return value */ 1275 chip->rirb.res[addr] = azx_readl(chip, IR); 1276 return 0; 1277 } 1278 udelay(1); 1279 } 1280 if (printk_ratelimit()) 1281 dev_dbg(chip->card->dev, "get_response timeout: IRS=0x%x\n", 1282 azx_readw(chip, IRS)); 1283 chip->rirb.res[addr] = -1; 1284 return -EIO; 1285 } 1286 1287 /* send a command */ 1288 static int azx_single_send_cmd(struct hda_bus *bus, u32 val) 1289 { 1290 struct azx *chip = bus->private_data; 1291 unsigned int addr = azx_command_addr(val); 1292 int timeout = 50; 1293 1294 bus->rirb_error = 0; 1295 while (timeout--) { 1296 /* check ICB busy bit */ 1297 if (!((azx_readw(chip, IRS) & AZX_IRS_BUSY))) { 1298 /* Clear IRV valid bit */ 1299 azx_writew(chip, IRS, azx_readw(chip, IRS) | 1300 AZX_IRS_VALID); 1301 azx_writel(chip, IC, val); 1302 azx_writew(chip, IRS, azx_readw(chip, IRS) | 1303 AZX_IRS_BUSY); 1304 return azx_single_wait_for_response(chip, addr); 1305 } 1306 udelay(1); 1307 } 1308 if (printk_ratelimit()) 1309 dev_dbg(chip->card->dev, 1310 "send_cmd timeout: IRS=0x%x, val=0x%x\n", 1311 azx_readw(chip, IRS), val); 1312 return -EIO; 1313 } 1314 1315 /* receive a response */ 1316 static unsigned int azx_single_get_response(struct hda_bus *bus, 1317 unsigned int addr) 1318 { 1319 struct azx *chip = bus->private_data; 1320 return chip->rirb.res[addr]; 1321 } 1322 1323 /* 1324 * The below are the main callbacks from hda_codec. 1325 * 1326 * They are just the skeleton to call sub-callbacks according to the 1327 * current setting of chip->single_cmd. 1328 */ 1329 1330 /* send a command */ 1331 static int azx_send_cmd(struct hda_bus *bus, unsigned int val) 1332 { 1333 struct azx *chip = bus->private_data; 1334 1335 if (chip->disabled) 1336 return 0; 1337 chip->last_cmd[azx_command_addr(val)] = val; 1338 if (chip->single_cmd) 1339 return azx_single_send_cmd(bus, val); 1340 else 1341 return azx_corb_send_cmd(bus, val); 1342 } 1343 1344 /* get a response */ 1345 static unsigned int azx_get_response(struct hda_bus *bus, 1346 unsigned int addr) 1347 { 1348 struct azx *chip = bus->private_data; 1349 if (chip->disabled) 1350 return 0; 1351 if (chip->single_cmd) 1352 return azx_single_get_response(bus, addr); 1353 else 1354 return azx_rirb_get_response(bus, addr); 1355 } 1356 1357 #ifdef CONFIG_SND_HDA_DSP_LOADER 1358 /* 1359 * DSP loading code (e.g. for CA0132) 1360 */ 1361 1362 /* use the first stream for loading DSP */ 1363 static struct azx_dev * 1364 azx_get_dsp_loader_dev(struct azx *chip) 1365 { 1366 return &chip->azx_dev[chip->playback_index_offset]; 1367 } 1368 1369 static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format, 1370 unsigned int byte_size, 1371 struct snd_dma_buffer *bufp) 1372 { 1373 u32 *bdl; 1374 struct azx *chip = bus->private_data; 1375 struct azx_dev *azx_dev; 1376 int err; 1377 1378 azx_dev = azx_get_dsp_loader_dev(chip); 1379 1380 dsp_lock(azx_dev); 1381 spin_lock_irq(&chip->reg_lock); 1382 if (azx_dev->running || azx_dev->locked) { 1383 spin_unlock_irq(&chip->reg_lock); 1384 err = -EBUSY; 1385 goto unlock; 1386 } 1387 azx_dev->prepared = 0; 1388 chip->saved_azx_dev = *azx_dev; 1389 azx_dev->locked = 1; 1390 spin_unlock_irq(&chip->reg_lock); 1391 1392 err = chip->ops->dma_alloc_pages(chip, SNDRV_DMA_TYPE_DEV_SG, 1393 byte_size, bufp); 1394 if (err < 0) 1395 goto err_alloc; 1396 1397 azx_dev->bufsize = byte_size; 1398 azx_dev->period_bytes = byte_size; 1399 azx_dev->format_val = format; 1400 1401 azx_stream_reset(chip, azx_dev); 1402 1403 /* reset BDL address */ 1404 azx_sd_writel(chip, azx_dev, SD_BDLPL, 0); 1405 azx_sd_writel(chip, azx_dev, SD_BDLPU, 0); 1406 1407 azx_dev->frags = 0; 1408 bdl = (u32 *)azx_dev->bdl.area; 1409 err = setup_bdle(chip, bufp, azx_dev, &bdl, 0, byte_size, 0); 1410 if (err < 0) 1411 goto error; 1412 1413 azx_setup_controller(chip, azx_dev); 1414 dsp_unlock(azx_dev); 1415 return azx_dev->stream_tag; 1416 1417 error: 1418 chip->ops->dma_free_pages(chip, bufp); 1419 err_alloc: 1420 spin_lock_irq(&chip->reg_lock); 1421 if (azx_dev->opened) 1422 *azx_dev = chip->saved_azx_dev; 1423 azx_dev->locked = 0; 1424 spin_unlock_irq(&chip->reg_lock); 1425 unlock: 1426 dsp_unlock(azx_dev); 1427 return err; 1428 } 1429 1430 static void azx_load_dsp_trigger(struct hda_bus *bus, bool start) 1431 { 1432 struct azx *chip = bus->private_data; 1433 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip); 1434 1435 if (start) 1436 azx_stream_start(chip, azx_dev); 1437 else 1438 azx_stream_stop(chip, azx_dev); 1439 azx_dev->running = start; 1440 } 1441 1442 static void azx_load_dsp_cleanup(struct hda_bus *bus, 1443 struct snd_dma_buffer *dmab) 1444 { 1445 struct azx *chip = bus->private_data; 1446 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip); 1447 1448 if (!dmab->area || !azx_dev->locked) 1449 return; 1450 1451 dsp_lock(azx_dev); 1452 /* reset BDL address */ 1453 azx_sd_writel(chip, azx_dev, SD_BDLPL, 0); 1454 azx_sd_writel(chip, azx_dev, SD_BDLPU, 0); 1455 azx_sd_writel(chip, azx_dev, SD_CTL, 0); 1456 azx_dev->bufsize = 0; 1457 azx_dev->period_bytes = 0; 1458 azx_dev->format_val = 0; 1459 1460 chip->ops->dma_free_pages(chip, dmab); 1461 dmab->area = NULL; 1462 1463 spin_lock_irq(&chip->reg_lock); 1464 if (azx_dev->opened) 1465 *azx_dev = chip->saved_azx_dev; 1466 azx_dev->locked = 0; 1467 spin_unlock_irq(&chip->reg_lock); 1468 dsp_unlock(azx_dev); 1469 } 1470 #endif /* CONFIG_SND_HDA_DSP_LOADER */ 1471 1472 int azx_alloc_stream_pages(struct azx *chip) 1473 { 1474 int i, err; 1475 1476 for (i = 0; i < chip->num_streams; i++) { 1477 dsp_lock_init(&chip->azx_dev[i]); 1478 /* allocate memory for the BDL for each stream */ 1479 err = chip->ops->dma_alloc_pages(chip, SNDRV_DMA_TYPE_DEV, 1480 BDL_SIZE, 1481 &chip->azx_dev[i].bdl); 1482 if (err < 0) 1483 return -ENOMEM; 1484 } 1485 /* allocate memory for the position buffer */ 1486 err = chip->ops->dma_alloc_pages(chip, SNDRV_DMA_TYPE_DEV, 1487 chip->num_streams * 8, &chip->posbuf); 1488 if (err < 0) 1489 return -ENOMEM; 1490 1491 /* allocate CORB/RIRB */ 1492 err = azx_alloc_cmd_io(chip); 1493 if (err < 0) 1494 return err; 1495 return 0; 1496 } 1497 EXPORT_SYMBOL_GPL(azx_alloc_stream_pages); 1498 1499 void azx_free_stream_pages(struct azx *chip) 1500 { 1501 int i; 1502 if (chip->azx_dev) { 1503 for (i = 0; i < chip->num_streams; i++) 1504 if (chip->azx_dev[i].bdl.area) 1505 chip->ops->dma_free_pages( 1506 chip, &chip->azx_dev[i].bdl); 1507 } 1508 if (chip->rb.area) 1509 chip->ops->dma_free_pages(chip, &chip->rb); 1510 if (chip->posbuf.area) 1511 chip->ops->dma_free_pages(chip, &chip->posbuf); 1512 } 1513 EXPORT_SYMBOL_GPL(azx_free_stream_pages); 1514 1515 /* 1516 * Lowlevel interface 1517 */ 1518 1519 /* enter link reset */ 1520 void azx_enter_link_reset(struct azx *chip) 1521 { 1522 unsigned long timeout; 1523 1524 /* reset controller */ 1525 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~AZX_GCTL_RESET); 1526 1527 timeout = jiffies + msecs_to_jiffies(100); 1528 while ((azx_readb(chip, GCTL) & AZX_GCTL_RESET) && 1529 time_before(jiffies, timeout)) 1530 usleep_range(500, 1000); 1531 } 1532 EXPORT_SYMBOL_GPL(azx_enter_link_reset); 1533 1534 /* exit link reset */ 1535 static void azx_exit_link_reset(struct azx *chip) 1536 { 1537 unsigned long timeout; 1538 1539 azx_writeb(chip, GCTL, azx_readb(chip, GCTL) | AZX_GCTL_RESET); 1540 1541 timeout = jiffies + msecs_to_jiffies(100); 1542 while (!azx_readb(chip, GCTL) && 1543 time_before(jiffies, timeout)) 1544 usleep_range(500, 1000); 1545 } 1546 1547 /* reset codec link */ 1548 static int azx_reset(struct azx *chip, bool full_reset) 1549 { 1550 if (!full_reset) 1551 goto __skip; 1552 1553 /* clear STATESTS */ 1554 azx_writew(chip, STATESTS, STATESTS_INT_MASK); 1555 1556 /* reset controller */ 1557 azx_enter_link_reset(chip); 1558 1559 /* delay for >= 100us for codec PLL to settle per spec 1560 * Rev 0.9 section 5.5.1 1561 */ 1562 usleep_range(500, 1000); 1563 1564 /* Bring controller out of reset */ 1565 azx_exit_link_reset(chip); 1566 1567 /* Brent Chartrand said to wait >= 540us for codecs to initialize */ 1568 usleep_range(1000, 1200); 1569 1570 __skip: 1571 /* check to see if controller is ready */ 1572 if (!azx_readb(chip, GCTL)) { 1573 dev_dbg(chip->card->dev, "azx_reset: controller not ready!\n"); 1574 return -EBUSY; 1575 } 1576 1577 /* Accept unsolicited responses */ 1578 if (!chip->single_cmd) 1579 azx_writel(chip, GCTL, azx_readl(chip, GCTL) | 1580 AZX_GCTL_UNSOL); 1581 1582 /* detect codecs */ 1583 if (!chip->codec_mask) { 1584 chip->codec_mask = azx_readw(chip, STATESTS); 1585 dev_dbg(chip->card->dev, "codec_mask = 0x%x\n", 1586 chip->codec_mask); 1587 } 1588 1589 return 0; 1590 } 1591 1592 /* enable interrupts */ 1593 static void azx_int_enable(struct azx *chip) 1594 { 1595 /* enable controller CIE and GIE */ 1596 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) | 1597 AZX_INT_CTRL_EN | AZX_INT_GLOBAL_EN); 1598 } 1599 1600 /* disable interrupts */ 1601 static void azx_int_disable(struct azx *chip) 1602 { 1603 int i; 1604 1605 /* disable interrupts in stream descriptor */ 1606 for (i = 0; i < chip->num_streams; i++) { 1607 struct azx_dev *azx_dev = &chip->azx_dev[i]; 1608 azx_sd_writeb(chip, azx_dev, SD_CTL, 1609 azx_sd_readb(chip, azx_dev, SD_CTL) & 1610 ~SD_INT_MASK); 1611 } 1612 1613 /* disable SIE for all streams */ 1614 azx_writeb(chip, INTCTL, 0); 1615 1616 /* disable controller CIE and GIE */ 1617 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) & 1618 ~(AZX_INT_CTRL_EN | AZX_INT_GLOBAL_EN)); 1619 } 1620 1621 /* clear interrupts */ 1622 static void azx_int_clear(struct azx *chip) 1623 { 1624 int i; 1625 1626 /* clear stream status */ 1627 for (i = 0; i < chip->num_streams; i++) { 1628 struct azx_dev *azx_dev = &chip->azx_dev[i]; 1629 azx_sd_writeb(chip, azx_dev, SD_STS, SD_INT_MASK); 1630 } 1631 1632 /* clear STATESTS */ 1633 azx_writew(chip, STATESTS, STATESTS_INT_MASK); 1634 1635 /* clear rirb status */ 1636 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK); 1637 1638 /* clear int status */ 1639 azx_writel(chip, INTSTS, AZX_INT_CTRL_EN | AZX_INT_ALL_STREAM); 1640 } 1641 1642 /* 1643 * reset and start the controller registers 1644 */ 1645 void azx_init_chip(struct azx *chip, bool full_reset) 1646 { 1647 if (chip->initialized) 1648 return; 1649 1650 /* reset controller */ 1651 azx_reset(chip, full_reset); 1652 1653 /* initialize interrupts */ 1654 azx_int_clear(chip); 1655 azx_int_enable(chip); 1656 1657 /* initialize the codec command I/O */ 1658 if (!chip->single_cmd) 1659 azx_init_cmd_io(chip); 1660 1661 /* program the position buffer */ 1662 azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr); 1663 azx_writel(chip, DPUBASE, upper_32_bits(chip->posbuf.addr)); 1664 1665 chip->initialized = 1; 1666 } 1667 EXPORT_SYMBOL_GPL(azx_init_chip); 1668 1669 void azx_stop_chip(struct azx *chip) 1670 { 1671 if (!chip->initialized) 1672 return; 1673 1674 /* disable interrupts */ 1675 azx_int_disable(chip); 1676 azx_int_clear(chip); 1677 1678 /* disable CORB/RIRB */ 1679 azx_free_cmd_io(chip); 1680 1681 /* disable position buffer */ 1682 azx_writel(chip, DPLBASE, 0); 1683 azx_writel(chip, DPUBASE, 0); 1684 1685 chip->initialized = 0; 1686 } 1687 EXPORT_SYMBOL_GPL(azx_stop_chip); 1688 1689 /* 1690 * interrupt handler 1691 */ 1692 irqreturn_t azx_interrupt(int irq, void *dev_id) 1693 { 1694 struct azx *chip = dev_id; 1695 struct azx_dev *azx_dev; 1696 u32 status; 1697 u8 sd_status; 1698 int i; 1699 1700 #ifdef CONFIG_PM 1701 if (azx_has_pm_runtime(chip)) 1702 if (!pm_runtime_active(chip->card->dev)) 1703 return IRQ_NONE; 1704 #endif 1705 1706 spin_lock(&chip->reg_lock); 1707 1708 if (chip->disabled) { 1709 spin_unlock(&chip->reg_lock); 1710 return IRQ_NONE; 1711 } 1712 1713 status = azx_readl(chip, INTSTS); 1714 if (status == 0 || status == 0xffffffff) { 1715 spin_unlock(&chip->reg_lock); 1716 return IRQ_NONE; 1717 } 1718 1719 for (i = 0; i < chip->num_streams; i++) { 1720 azx_dev = &chip->azx_dev[i]; 1721 if (status & azx_dev->sd_int_sta_mask) { 1722 sd_status = azx_sd_readb(chip, azx_dev, SD_STS); 1723 azx_sd_writeb(chip, azx_dev, SD_STS, SD_INT_MASK); 1724 if (!azx_dev->substream || !azx_dev->running || 1725 !(sd_status & SD_INT_COMPLETE)) 1726 continue; 1727 /* check whether this IRQ is really acceptable */ 1728 if (!chip->ops->position_check || 1729 chip->ops->position_check(chip, azx_dev)) { 1730 spin_unlock(&chip->reg_lock); 1731 snd_pcm_period_elapsed(azx_dev->substream); 1732 spin_lock(&chip->reg_lock); 1733 } 1734 } 1735 } 1736 1737 /* clear rirb int */ 1738 status = azx_readb(chip, RIRBSTS); 1739 if (status & RIRB_INT_MASK) { 1740 if (status & RIRB_INT_RESPONSE) { 1741 if (chip->driver_caps & AZX_DCAPS_RIRB_PRE_DELAY) 1742 udelay(80); 1743 azx_update_rirb(chip); 1744 } 1745 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK); 1746 } 1747 1748 spin_unlock(&chip->reg_lock); 1749 1750 return IRQ_HANDLED; 1751 } 1752 EXPORT_SYMBOL_GPL(azx_interrupt); 1753 1754 /* 1755 * Codec initerface 1756 */ 1757 1758 /* 1759 * Probe the given codec address 1760 */ 1761 static int probe_codec(struct azx *chip, int addr) 1762 { 1763 unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) | 1764 (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID; 1765 unsigned int res; 1766 1767 mutex_lock(&chip->bus->core.cmd_mutex); 1768 chip->probing = 1; 1769 azx_send_cmd(chip->bus, cmd); 1770 res = azx_get_response(chip->bus, addr); 1771 chip->probing = 0; 1772 mutex_unlock(&chip->bus->core.cmd_mutex); 1773 if (res == -1) 1774 return -EIO; 1775 dev_dbg(chip->card->dev, "codec #%d probed OK\n", addr); 1776 return 0; 1777 } 1778 1779 static void azx_bus_reset(struct hda_bus *bus) 1780 { 1781 struct azx *chip = bus->private_data; 1782 1783 bus->in_reset = 1; 1784 azx_stop_chip(chip); 1785 azx_init_chip(chip, true); 1786 if (chip->initialized) 1787 snd_hda_bus_reset(chip->bus); 1788 bus->in_reset = 0; 1789 } 1790 1791 static int get_jackpoll_interval(struct azx *chip) 1792 { 1793 int i; 1794 unsigned int j; 1795 1796 if (!chip->jackpoll_ms) 1797 return 0; 1798 1799 i = chip->jackpoll_ms[chip->dev_index]; 1800 if (i == 0) 1801 return 0; 1802 if (i < 50 || i > 60000) 1803 j = 0; 1804 else 1805 j = msecs_to_jiffies(i); 1806 if (j == 0) 1807 dev_warn(chip->card->dev, 1808 "jackpoll_ms value out of range: %d\n", i); 1809 return j; 1810 } 1811 1812 static struct hda_bus_ops bus_ops = { 1813 .command = azx_send_cmd, 1814 .get_response = azx_get_response, 1815 .attach_pcm = azx_attach_pcm_stream, 1816 .bus_reset = azx_bus_reset, 1817 #ifdef CONFIG_SND_HDA_DSP_LOADER 1818 .load_dsp_prepare = azx_load_dsp_prepare, 1819 .load_dsp_trigger = azx_load_dsp_trigger, 1820 .load_dsp_cleanup = azx_load_dsp_cleanup, 1821 #endif 1822 }; 1823 1824 /* HD-audio bus initialization */ 1825 int azx_bus_create(struct azx *chip, const char *model) 1826 { 1827 struct hda_bus *bus; 1828 int err; 1829 1830 err = snd_hda_bus_new(chip->card, &bus); 1831 if (err < 0) 1832 return err; 1833 1834 chip->bus = bus; 1835 bus->private_data = chip; 1836 bus->pci = chip->pci; 1837 bus->modelname = model; 1838 bus->ops = bus_ops; 1839 1840 if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) { 1841 dev_dbg(chip->card->dev, "Enable delay in RIRB handling\n"); 1842 bus->needs_damn_long_delay = 1; 1843 } 1844 1845 /* AMD chipsets often cause the communication stalls upon certain 1846 * sequence like the pin-detection. It seems that forcing the synced 1847 * access works around the stall. Grrr... 1848 */ 1849 if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) { 1850 dev_dbg(chip->card->dev, "Enable sync_write for stable communication\n"); 1851 bus->core.sync_write = 1; 1852 bus->allow_bus_reset = 1; 1853 } 1854 1855 return 0; 1856 } 1857 EXPORT_SYMBOL_GPL(azx_bus_create); 1858 1859 /* Probe codecs */ 1860 int azx_probe_codecs(struct azx *chip, unsigned int max_slots) 1861 { 1862 struct hda_bus *bus = chip->bus; 1863 int c, codecs, err; 1864 1865 codecs = 0; 1866 if (!max_slots) 1867 max_slots = AZX_DEFAULT_CODECS; 1868 1869 /* First try to probe all given codec slots */ 1870 for (c = 0; c < max_slots; c++) { 1871 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) { 1872 if (probe_codec(chip, c) < 0) { 1873 /* Some BIOSen give you wrong codec addresses 1874 * that don't exist 1875 */ 1876 dev_warn(chip->card->dev, 1877 "Codec #%d probe error; disabling it...\n", c); 1878 chip->codec_mask &= ~(1 << c); 1879 /* More badly, accessing to a non-existing 1880 * codec often screws up the controller chip, 1881 * and disturbs the further communications. 1882 * Thus if an error occurs during probing, 1883 * better to reset the controller chip to 1884 * get back to the sanity state. 1885 */ 1886 azx_stop_chip(chip); 1887 azx_init_chip(chip, true); 1888 } 1889 } 1890 } 1891 1892 /* Then create codec instances */ 1893 for (c = 0; c < max_slots; c++) { 1894 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) { 1895 struct hda_codec *codec; 1896 err = snd_hda_codec_new(bus, bus->card, c, &codec); 1897 if (err < 0) 1898 continue; 1899 codec->jackpoll_interval = get_jackpoll_interval(chip); 1900 codec->beep_mode = chip->beep_mode; 1901 codecs++; 1902 } 1903 } 1904 if (!codecs) { 1905 dev_err(chip->card->dev, "no codecs initialized\n"); 1906 return -ENXIO; 1907 } 1908 return 0; 1909 } 1910 EXPORT_SYMBOL_GPL(azx_probe_codecs); 1911 1912 /* configure each codec instance */ 1913 int azx_codec_configure(struct azx *chip) 1914 { 1915 struct hda_codec *codec; 1916 list_for_each_codec(codec, chip->bus) { 1917 snd_hda_codec_configure(codec); 1918 } 1919 return 0; 1920 } 1921 EXPORT_SYMBOL_GPL(azx_codec_configure); 1922 1923 1924 static bool is_input_stream(struct azx *chip, unsigned char index) 1925 { 1926 return (index >= chip->capture_index_offset && 1927 index < chip->capture_index_offset + chip->capture_streams); 1928 } 1929 1930 /* initialize SD streams */ 1931 int azx_init_stream(struct azx *chip) 1932 { 1933 int i; 1934 int in_stream_tag = 0; 1935 int out_stream_tag = 0; 1936 1937 /* initialize each stream (aka device) 1938 * assign the starting bdl address to each stream (device) 1939 * and initialize 1940 */ 1941 for (i = 0; i < chip->num_streams; i++) { 1942 struct azx_dev *azx_dev = &chip->azx_dev[i]; 1943 azx_dev->posbuf = (u32 __iomem *)(chip->posbuf.area + i * 8); 1944 /* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */ 1945 azx_dev->sd_addr = chip->remap_addr + (0x20 * i + 0x80); 1946 /* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */ 1947 azx_dev->sd_int_sta_mask = 1 << i; 1948 azx_dev->index = i; 1949 1950 /* stream tag must be unique throughout 1951 * the stream direction group, 1952 * valid values 1...15 1953 * use separate stream tag if the flag 1954 * AZX_DCAPS_SEPARATE_STREAM_TAG is used 1955 */ 1956 if (chip->driver_caps & AZX_DCAPS_SEPARATE_STREAM_TAG) 1957 azx_dev->stream_tag = 1958 is_input_stream(chip, i) ? 1959 ++in_stream_tag : 1960 ++out_stream_tag; 1961 else 1962 azx_dev->stream_tag = i + 1; 1963 } 1964 1965 return 0; 1966 } 1967 EXPORT_SYMBOL_GPL(azx_init_stream); 1968 1969 MODULE_LICENSE("GPL"); 1970 MODULE_DESCRIPTION("Common HDA driver functions"); 1971