1 /* 2 * i2sbus driver -- pcm routines 3 * 4 * Copyright 2006 Johannes Berg <johannes@sipsolutions.net> 5 * 6 * GPL v2, can be found in COPYING. 7 */ 8 9 #include <asm/io.h> 10 #include <linux/delay.h> 11 #include <linux/slab.h> 12 #include <sound/core.h> 13 #include <asm/macio.h> 14 #include <linux/pci.h> 15 #include <linux/module.h> 16 #include "../soundbus.h" 17 #include "i2sbus.h" 18 19 static inline void get_pcm_info(struct i2sbus_dev *i2sdev, int in, 20 struct pcm_info **pi, struct pcm_info **other) 21 { 22 if (in) { 23 if (pi) 24 *pi = &i2sdev->in; 25 if (other) 26 *other = &i2sdev->out; 27 } else { 28 if (pi) 29 *pi = &i2sdev->out; 30 if (other) 31 *other = &i2sdev->in; 32 } 33 } 34 35 static int clock_and_divisors(int mclk, int sclk, int rate, int *out) 36 { 37 /* sclk must be derived from mclk! */ 38 if (mclk % sclk) 39 return -1; 40 /* derive sclk register value */ 41 if (i2s_sf_sclkdiv(mclk / sclk, out)) 42 return -1; 43 44 if (I2S_CLOCK_SPEED_18MHz % (rate * mclk) == 0) { 45 if (!i2s_sf_mclkdiv(I2S_CLOCK_SPEED_18MHz / (rate * mclk), out)) { 46 *out |= I2S_SF_CLOCK_SOURCE_18MHz; 47 return 0; 48 } 49 } 50 if (I2S_CLOCK_SPEED_45MHz % (rate * mclk) == 0) { 51 if (!i2s_sf_mclkdiv(I2S_CLOCK_SPEED_45MHz / (rate * mclk), out)) { 52 *out |= I2S_SF_CLOCK_SOURCE_45MHz; 53 return 0; 54 } 55 } 56 if (I2S_CLOCK_SPEED_49MHz % (rate * mclk) == 0) { 57 if (!i2s_sf_mclkdiv(I2S_CLOCK_SPEED_49MHz / (rate * mclk), out)) { 58 *out |= I2S_SF_CLOCK_SOURCE_49MHz; 59 return 0; 60 } 61 } 62 return -1; 63 } 64 65 #define CHECK_RATE(rate) \ 66 do { if (rates & SNDRV_PCM_RATE_ ##rate) { \ 67 int dummy; \ 68 if (clock_and_divisors(sysclock_factor, \ 69 bus_factor, rate, &dummy)) \ 70 rates &= ~SNDRV_PCM_RATE_ ##rate; \ 71 } } while (0) 72 73 static int i2sbus_pcm_open(struct i2sbus_dev *i2sdev, int in) 74 { 75 struct pcm_info *pi, *other; 76 struct soundbus_dev *sdev; 77 int masks_inited = 0, err; 78 struct codec_info_item *cii, *rev; 79 struct snd_pcm_hardware *hw; 80 u64 formats = 0; 81 unsigned int rates = 0; 82 struct transfer_info v; 83 int result = 0; 84 int bus_factor = 0, sysclock_factor = 0; 85 int found_this; 86 87 mutex_lock(&i2sdev->lock); 88 89 get_pcm_info(i2sdev, in, &pi, &other); 90 91 hw = &pi->substream->runtime->hw; 92 sdev = &i2sdev->sound; 93 94 if (pi->active) { 95 /* alsa messed up */ 96 result = -EBUSY; 97 goto out_unlock; 98 } 99 100 /* we now need to assign the hw */ 101 list_for_each_entry(cii, &sdev->codec_list, list) { 102 struct transfer_info *ti = cii->codec->transfers; 103 bus_factor = cii->codec->bus_factor; 104 sysclock_factor = cii->codec->sysclock_factor; 105 while (ti->formats && ti->rates) { 106 v = *ti; 107 if (ti->transfer_in == in 108 && cii->codec->usable(cii, ti, &v)) { 109 if (masks_inited) { 110 formats &= v.formats; 111 rates &= v.rates; 112 } else { 113 formats = v.formats; 114 rates = v.rates; 115 masks_inited = 1; 116 } 117 } 118 ti++; 119 } 120 } 121 if (!masks_inited || !bus_factor || !sysclock_factor) { 122 result = -ENODEV; 123 goto out_unlock; 124 } 125 /* bus dependent stuff */ 126 hw->info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID | 127 SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_RESUME | 128 SNDRV_PCM_INFO_JOINT_DUPLEX; 129 130 CHECK_RATE(5512); 131 CHECK_RATE(8000); 132 CHECK_RATE(11025); 133 CHECK_RATE(16000); 134 CHECK_RATE(22050); 135 CHECK_RATE(32000); 136 CHECK_RATE(44100); 137 CHECK_RATE(48000); 138 CHECK_RATE(64000); 139 CHECK_RATE(88200); 140 CHECK_RATE(96000); 141 CHECK_RATE(176400); 142 CHECK_RATE(192000); 143 hw->rates = rates; 144 145 /* well. the codec might want 24 bits only, and we'll 146 * ever only transfer 24 bits, but they are top-aligned! 147 * So for alsa, we claim that we're doing full 32 bit 148 * while in reality we'll ignore the lower 8 bits of 149 * that when doing playback (they're transferred as 0 150 * as far as I know, no codecs we have are 32-bit capable 151 * so I can't really test) and when doing recording we'll 152 * always have those lower 8 bits recorded as 0 */ 153 if (formats & SNDRV_PCM_FMTBIT_S24_BE) 154 formats |= SNDRV_PCM_FMTBIT_S32_BE; 155 if (formats & SNDRV_PCM_FMTBIT_U24_BE) 156 formats |= SNDRV_PCM_FMTBIT_U32_BE; 157 /* now mask off what we can support. I suppose we could 158 * also support S24_3LE and some similar formats, but I 159 * doubt there's a codec that would be able to use that, 160 * so we don't support it here. */ 161 hw->formats = formats & (SNDRV_PCM_FMTBIT_S16_BE | 162 SNDRV_PCM_FMTBIT_U16_BE | 163 SNDRV_PCM_FMTBIT_S32_BE | 164 SNDRV_PCM_FMTBIT_U32_BE); 165 166 /* we need to set the highest and lowest rate possible. 167 * These are the highest and lowest rates alsa can 168 * support properly in its bitfield. 169 * Below, we'll use that to restrict to the rate 170 * currently in use (if any). */ 171 hw->rate_min = 5512; 172 hw->rate_max = 192000; 173 /* if the other stream is active, then we can only 174 * support what it is currently using. 175 * FIXME: I lied. This comment is wrong. We can support 176 * anything that works with the same serial format, ie. 177 * when recording 24 bit sound we can well play 16 bit 178 * sound at the same time iff using the same transfer mode. 179 */ 180 if (other->active) { 181 /* FIXME: is this guaranteed by the alsa api? */ 182 hw->formats &= pcm_format_to_bits(i2sdev->format); 183 /* see above, restrict rates to the one we already have */ 184 hw->rate_min = i2sdev->rate; 185 hw->rate_max = i2sdev->rate; 186 } 187 188 hw->channels_min = 2; 189 hw->channels_max = 2; 190 /* these are somewhat arbitrary */ 191 hw->buffer_bytes_max = 131072; 192 hw->period_bytes_min = 256; 193 hw->period_bytes_max = 16384; 194 hw->periods_min = 3; 195 hw->periods_max = MAX_DBDMA_COMMANDS; 196 err = snd_pcm_hw_constraint_integer(pi->substream->runtime, 197 SNDRV_PCM_HW_PARAM_PERIODS); 198 if (err < 0) { 199 result = err; 200 goto out_unlock; 201 } 202 list_for_each_entry(cii, &sdev->codec_list, list) { 203 if (cii->codec->open) { 204 err = cii->codec->open(cii, pi->substream); 205 if (err) { 206 result = err; 207 /* unwind */ 208 found_this = 0; 209 list_for_each_entry_reverse(rev, 210 &sdev->codec_list, list) { 211 if (found_this && rev->codec->close) { 212 rev->codec->close(rev, 213 pi->substream); 214 } 215 if (rev == cii) 216 found_this = 1; 217 } 218 goto out_unlock; 219 } 220 } 221 } 222 223 out_unlock: 224 mutex_unlock(&i2sdev->lock); 225 return result; 226 } 227 228 #undef CHECK_RATE 229 230 static int i2sbus_pcm_close(struct i2sbus_dev *i2sdev, int in) 231 { 232 struct codec_info_item *cii; 233 struct pcm_info *pi; 234 int err = 0, tmp; 235 236 mutex_lock(&i2sdev->lock); 237 238 get_pcm_info(i2sdev, in, &pi, NULL); 239 240 list_for_each_entry(cii, &i2sdev->sound.codec_list, list) { 241 if (cii->codec->close) { 242 tmp = cii->codec->close(cii, pi->substream); 243 if (tmp) 244 err = tmp; 245 } 246 } 247 248 pi->substream = NULL; 249 pi->active = 0; 250 mutex_unlock(&i2sdev->lock); 251 return err; 252 } 253 254 static void i2sbus_wait_for_stop(struct i2sbus_dev *i2sdev, 255 struct pcm_info *pi) 256 { 257 unsigned long flags; 258 struct completion done; 259 long timeout; 260 261 spin_lock_irqsave(&i2sdev->low_lock, flags); 262 if (pi->dbdma_ring.stopping) { 263 init_completion(&done); 264 pi->stop_completion = &done; 265 spin_unlock_irqrestore(&i2sdev->low_lock, flags); 266 timeout = wait_for_completion_timeout(&done, HZ); 267 spin_lock_irqsave(&i2sdev->low_lock, flags); 268 pi->stop_completion = NULL; 269 if (timeout == 0) { 270 /* timeout expired, stop dbdma forcefully */ 271 printk(KERN_ERR "i2sbus_wait_for_stop: timed out\n"); 272 /* make sure RUN, PAUSE and S0 bits are cleared */ 273 out_le32(&pi->dbdma->control, (RUN | PAUSE | 1) << 16); 274 pi->dbdma_ring.stopping = 0; 275 timeout = 10; 276 while (in_le32(&pi->dbdma->status) & ACTIVE) { 277 if (--timeout <= 0) 278 break; 279 udelay(1); 280 } 281 } 282 } 283 spin_unlock_irqrestore(&i2sdev->low_lock, flags); 284 } 285 286 #ifdef CONFIG_PM 287 void i2sbus_wait_for_stop_both(struct i2sbus_dev *i2sdev) 288 { 289 struct pcm_info *pi; 290 291 get_pcm_info(i2sdev, 0, &pi, NULL); 292 i2sbus_wait_for_stop(i2sdev, pi); 293 get_pcm_info(i2sdev, 1, &pi, NULL); 294 i2sbus_wait_for_stop(i2sdev, pi); 295 } 296 #endif 297 298 static int i2sbus_hw_params(struct snd_pcm_substream *substream, 299 struct snd_pcm_hw_params *params) 300 { 301 return snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(params)); 302 } 303 304 static inline int i2sbus_hw_free(struct snd_pcm_substream *substream, int in) 305 { 306 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream); 307 struct pcm_info *pi; 308 309 get_pcm_info(i2sdev, in, &pi, NULL); 310 if (pi->dbdma_ring.stopping) 311 i2sbus_wait_for_stop(i2sdev, pi); 312 snd_pcm_lib_free_pages(substream); 313 return 0; 314 } 315 316 static int i2sbus_playback_hw_free(struct snd_pcm_substream *substream) 317 { 318 return i2sbus_hw_free(substream, 0); 319 } 320 321 static int i2sbus_record_hw_free(struct snd_pcm_substream *substream) 322 { 323 return i2sbus_hw_free(substream, 1); 324 } 325 326 static int i2sbus_pcm_prepare(struct i2sbus_dev *i2sdev, int in) 327 { 328 /* whee. Hard work now. The user has selected a bitrate 329 * and bit format, so now we have to program our 330 * I2S controller appropriately. */ 331 struct snd_pcm_runtime *runtime; 332 struct dbdma_cmd *command; 333 int i, periodsize, nperiods; 334 dma_addr_t offset; 335 struct bus_info bi; 336 struct codec_info_item *cii; 337 int sfr = 0; /* serial format register */ 338 int dws = 0; /* data word sizes reg */ 339 int input_16bit; 340 struct pcm_info *pi, *other; 341 int cnt; 342 int result = 0; 343 unsigned int cmd, stopaddr; 344 345 mutex_lock(&i2sdev->lock); 346 347 get_pcm_info(i2sdev, in, &pi, &other); 348 349 if (pi->dbdma_ring.running) { 350 result = -EBUSY; 351 goto out_unlock; 352 } 353 if (pi->dbdma_ring.stopping) 354 i2sbus_wait_for_stop(i2sdev, pi); 355 356 if (!pi->substream || !pi->substream->runtime) { 357 result = -EINVAL; 358 goto out_unlock; 359 } 360 361 runtime = pi->substream->runtime; 362 pi->active = 1; 363 if (other->active && 364 ((i2sdev->format != runtime->format) 365 || (i2sdev->rate != runtime->rate))) { 366 result = -EINVAL; 367 goto out_unlock; 368 } 369 370 i2sdev->format = runtime->format; 371 i2sdev->rate = runtime->rate; 372 373 periodsize = snd_pcm_lib_period_bytes(pi->substream); 374 nperiods = pi->substream->runtime->periods; 375 pi->current_period = 0; 376 377 /* generate dbdma command ring first */ 378 command = pi->dbdma_ring.cmds; 379 memset(command, 0, (nperiods + 2) * sizeof(struct dbdma_cmd)); 380 381 /* commands to DMA to/from the ring */ 382 /* 383 * For input, we need to do a graceful stop; if we abort 384 * the DMA, we end up with leftover bytes that corrupt 385 * the next recording. To do this we set the S0 status 386 * bit and wait for the DMA controller to stop. Each 387 * command has a branch condition to 388 * make it branch to a stop command if S0 is set. 389 * On input we also need to wait for the S7 bit to be 390 * set before turning off the DMA controller. 391 * In fact we do the graceful stop for output as well. 392 */ 393 offset = runtime->dma_addr; 394 cmd = (in? INPUT_MORE: OUTPUT_MORE) | BR_IFSET | INTR_ALWAYS; 395 stopaddr = pi->dbdma_ring.bus_cmd_start + 396 (nperiods + 1) * sizeof(struct dbdma_cmd); 397 for (i = 0; i < nperiods; i++, command++, offset += periodsize) { 398 command->command = cpu_to_le16(cmd); 399 command->cmd_dep = cpu_to_le32(stopaddr); 400 command->phy_addr = cpu_to_le32(offset); 401 command->req_count = cpu_to_le16(periodsize); 402 } 403 404 /* branch back to beginning of ring */ 405 command->command = cpu_to_le16(DBDMA_NOP | BR_ALWAYS); 406 command->cmd_dep = cpu_to_le32(pi->dbdma_ring.bus_cmd_start); 407 command++; 408 409 /* set stop command */ 410 command->command = cpu_to_le16(DBDMA_STOP); 411 412 /* ok, let's set the serial format and stuff */ 413 switch (runtime->format) { 414 /* 16 bit formats */ 415 case SNDRV_PCM_FORMAT_S16_BE: 416 case SNDRV_PCM_FORMAT_U16_BE: 417 /* FIXME: if we add different bus factors we need to 418 * do more here!! */ 419 bi.bus_factor = 0; 420 list_for_each_entry(cii, &i2sdev->sound.codec_list, list) { 421 bi.bus_factor = cii->codec->bus_factor; 422 break; 423 } 424 if (!bi.bus_factor) { 425 result = -ENODEV; 426 goto out_unlock; 427 } 428 input_16bit = 1; 429 break; 430 case SNDRV_PCM_FORMAT_S32_BE: 431 case SNDRV_PCM_FORMAT_U32_BE: 432 /* force 64x bus speed, otherwise the data cannot be 433 * transferred quickly enough! */ 434 bi.bus_factor = 64; 435 input_16bit = 0; 436 break; 437 default: 438 result = -EINVAL; 439 goto out_unlock; 440 } 441 /* we assume all sysclocks are the same! */ 442 list_for_each_entry(cii, &i2sdev->sound.codec_list, list) { 443 bi.sysclock_factor = cii->codec->sysclock_factor; 444 break; 445 } 446 447 if (clock_and_divisors(bi.sysclock_factor, 448 bi.bus_factor, 449 runtime->rate, 450 &sfr) < 0) { 451 result = -EINVAL; 452 goto out_unlock; 453 } 454 switch (bi.bus_factor) { 455 case 32: 456 sfr |= I2S_SF_SERIAL_FORMAT_I2S_32X; 457 break; 458 case 64: 459 sfr |= I2S_SF_SERIAL_FORMAT_I2S_64X; 460 break; 461 } 462 /* FIXME: THIS ASSUMES MASTER ALL THE TIME */ 463 sfr |= I2S_SF_SCLK_MASTER; 464 465 list_for_each_entry(cii, &i2sdev->sound.codec_list, list) { 466 int err = 0; 467 if (cii->codec->prepare) 468 err = cii->codec->prepare(cii, &bi, pi->substream); 469 if (err) { 470 result = err; 471 goto out_unlock; 472 } 473 } 474 /* codecs are fine with it, so set our clocks */ 475 if (input_16bit) 476 dws = (2 << I2S_DWS_NUM_CHANNELS_IN_SHIFT) | 477 (2 << I2S_DWS_NUM_CHANNELS_OUT_SHIFT) | 478 I2S_DWS_DATA_IN_16BIT | I2S_DWS_DATA_OUT_16BIT; 479 else 480 dws = (2 << I2S_DWS_NUM_CHANNELS_IN_SHIFT) | 481 (2 << I2S_DWS_NUM_CHANNELS_OUT_SHIFT) | 482 I2S_DWS_DATA_IN_24BIT | I2S_DWS_DATA_OUT_24BIT; 483 484 /* early exit if already programmed correctly */ 485 /* not locking these is fine since we touch them only in this function */ 486 if (in_le32(&i2sdev->intfregs->serial_format) == sfr 487 && in_le32(&i2sdev->intfregs->data_word_sizes) == dws) 488 goto out_unlock; 489 490 /* let's notify the codecs about clocks going away. 491 * For now we only do mastering on the i2s cell... */ 492 list_for_each_entry(cii, &i2sdev->sound.codec_list, list) 493 if (cii->codec->switch_clock) 494 cii->codec->switch_clock(cii, CLOCK_SWITCH_PREPARE_SLAVE); 495 496 i2sbus_control_enable(i2sdev->control, i2sdev); 497 i2sbus_control_cell(i2sdev->control, i2sdev, 1); 498 499 out_le32(&i2sdev->intfregs->intr_ctl, I2S_PENDING_CLOCKS_STOPPED); 500 501 i2sbus_control_clock(i2sdev->control, i2sdev, 0); 502 503 msleep(1); 504 505 /* wait for clock stopped. This can apparently take a while... */ 506 cnt = 100; 507 while (cnt-- && 508 !(in_le32(&i2sdev->intfregs->intr_ctl) & I2S_PENDING_CLOCKS_STOPPED)) { 509 msleep(5); 510 } 511 out_le32(&i2sdev->intfregs->intr_ctl, I2S_PENDING_CLOCKS_STOPPED); 512 513 /* not locking these is fine since we touch them only in this function */ 514 out_le32(&i2sdev->intfregs->serial_format, sfr); 515 out_le32(&i2sdev->intfregs->data_word_sizes, dws); 516 517 i2sbus_control_enable(i2sdev->control, i2sdev); 518 i2sbus_control_cell(i2sdev->control, i2sdev, 1); 519 i2sbus_control_clock(i2sdev->control, i2sdev, 1); 520 msleep(1); 521 522 list_for_each_entry(cii, &i2sdev->sound.codec_list, list) 523 if (cii->codec->switch_clock) 524 cii->codec->switch_clock(cii, CLOCK_SWITCH_SLAVE); 525 526 out_unlock: 527 mutex_unlock(&i2sdev->lock); 528 return result; 529 } 530 531 #ifdef CONFIG_PM 532 void i2sbus_pcm_prepare_both(struct i2sbus_dev *i2sdev) 533 { 534 i2sbus_pcm_prepare(i2sdev, 0); 535 i2sbus_pcm_prepare(i2sdev, 1); 536 } 537 #endif 538 539 static int i2sbus_pcm_trigger(struct i2sbus_dev *i2sdev, int in, int cmd) 540 { 541 struct codec_info_item *cii; 542 struct pcm_info *pi; 543 int result = 0; 544 unsigned long flags; 545 546 spin_lock_irqsave(&i2sdev->low_lock, flags); 547 548 get_pcm_info(i2sdev, in, &pi, NULL); 549 550 switch (cmd) { 551 case SNDRV_PCM_TRIGGER_START: 552 case SNDRV_PCM_TRIGGER_RESUME: 553 if (pi->dbdma_ring.running) { 554 result = -EALREADY; 555 goto out_unlock; 556 } 557 list_for_each_entry(cii, &i2sdev->sound.codec_list, list) 558 if (cii->codec->start) 559 cii->codec->start(cii, pi->substream); 560 pi->dbdma_ring.running = 1; 561 562 if (pi->dbdma_ring.stopping) { 563 /* Clear the S0 bit, then see if we stopped yet */ 564 out_le32(&pi->dbdma->control, 1 << 16); 565 if (in_le32(&pi->dbdma->status) & ACTIVE) { 566 /* possible race here? */ 567 udelay(10); 568 if (in_le32(&pi->dbdma->status) & ACTIVE) { 569 pi->dbdma_ring.stopping = 0; 570 goto out_unlock; /* keep running */ 571 } 572 } 573 } 574 575 /* make sure RUN, PAUSE and S0 bits are cleared */ 576 out_le32(&pi->dbdma->control, (RUN | PAUSE | 1) << 16); 577 578 /* set branch condition select register */ 579 out_le32(&pi->dbdma->br_sel, (1 << 16) | 1); 580 581 /* write dma command buffer address to the dbdma chip */ 582 out_le32(&pi->dbdma->cmdptr, pi->dbdma_ring.bus_cmd_start); 583 584 /* initialize the frame count and current period */ 585 pi->current_period = 0; 586 pi->frame_count = in_le32(&i2sdev->intfregs->frame_count); 587 588 /* set the DMA controller running */ 589 out_le32(&pi->dbdma->control, (RUN << 16) | RUN); 590 591 /* off you go! */ 592 break; 593 594 case SNDRV_PCM_TRIGGER_STOP: 595 case SNDRV_PCM_TRIGGER_SUSPEND: 596 if (!pi->dbdma_ring.running) { 597 result = -EALREADY; 598 goto out_unlock; 599 } 600 pi->dbdma_ring.running = 0; 601 602 /* Set the S0 bit to make the DMA branch to the stop cmd */ 603 out_le32(&pi->dbdma->control, (1 << 16) | 1); 604 pi->dbdma_ring.stopping = 1; 605 606 list_for_each_entry(cii, &i2sdev->sound.codec_list, list) 607 if (cii->codec->stop) 608 cii->codec->stop(cii, pi->substream); 609 break; 610 default: 611 result = -EINVAL; 612 goto out_unlock; 613 } 614 615 out_unlock: 616 spin_unlock_irqrestore(&i2sdev->low_lock, flags); 617 return result; 618 } 619 620 static snd_pcm_uframes_t i2sbus_pcm_pointer(struct i2sbus_dev *i2sdev, int in) 621 { 622 struct pcm_info *pi; 623 u32 fc; 624 625 get_pcm_info(i2sdev, in, &pi, NULL); 626 627 fc = in_le32(&i2sdev->intfregs->frame_count); 628 fc = fc - pi->frame_count; 629 630 if (fc >= pi->substream->runtime->buffer_size) 631 fc %= pi->substream->runtime->buffer_size; 632 return fc; 633 } 634 635 static inline void handle_interrupt(struct i2sbus_dev *i2sdev, int in) 636 { 637 struct pcm_info *pi; 638 u32 fc, nframes; 639 u32 status; 640 int timeout, i; 641 int dma_stopped = 0; 642 struct snd_pcm_runtime *runtime; 643 644 spin_lock(&i2sdev->low_lock); 645 get_pcm_info(i2sdev, in, &pi, NULL); 646 if (!pi->dbdma_ring.running && !pi->dbdma_ring.stopping) 647 goto out_unlock; 648 649 i = pi->current_period; 650 runtime = pi->substream->runtime; 651 while (pi->dbdma_ring.cmds[i].xfer_status) { 652 if (le16_to_cpu(pi->dbdma_ring.cmds[i].xfer_status) & BT) 653 /* 654 * BT is the branch taken bit. If it took a branch 655 * it is because we set the S0 bit to make it 656 * branch to the stop command. 657 */ 658 dma_stopped = 1; 659 pi->dbdma_ring.cmds[i].xfer_status = 0; 660 661 if (++i >= runtime->periods) { 662 i = 0; 663 pi->frame_count += runtime->buffer_size; 664 } 665 pi->current_period = i; 666 667 /* 668 * Check the frame count. The DMA tends to get a bit 669 * ahead of the frame counter, which confuses the core. 670 */ 671 fc = in_le32(&i2sdev->intfregs->frame_count); 672 nframes = i * runtime->period_size; 673 if (fc < pi->frame_count + nframes) 674 pi->frame_count = fc - nframes; 675 } 676 677 if (dma_stopped) { 678 timeout = 1000; 679 for (;;) { 680 status = in_le32(&pi->dbdma->status); 681 if (!(status & ACTIVE) && (!in || (status & 0x80))) 682 break; 683 if (--timeout <= 0) { 684 printk(KERN_ERR "i2sbus: timed out " 685 "waiting for DMA to stop!\n"); 686 break; 687 } 688 udelay(1); 689 } 690 691 /* Turn off DMA controller, clear S0 bit */ 692 out_le32(&pi->dbdma->control, (RUN | PAUSE | 1) << 16); 693 694 pi->dbdma_ring.stopping = 0; 695 if (pi->stop_completion) 696 complete(pi->stop_completion); 697 } 698 699 if (!pi->dbdma_ring.running) 700 goto out_unlock; 701 spin_unlock(&i2sdev->low_lock); 702 /* may call _trigger again, hence needs to be unlocked */ 703 snd_pcm_period_elapsed(pi->substream); 704 return; 705 706 out_unlock: 707 spin_unlock(&i2sdev->low_lock); 708 } 709 710 irqreturn_t i2sbus_tx_intr(int irq, void *devid) 711 { 712 handle_interrupt((struct i2sbus_dev *)devid, 0); 713 return IRQ_HANDLED; 714 } 715 716 irqreturn_t i2sbus_rx_intr(int irq, void *devid) 717 { 718 handle_interrupt((struct i2sbus_dev *)devid, 1); 719 return IRQ_HANDLED; 720 } 721 722 static int i2sbus_playback_open(struct snd_pcm_substream *substream) 723 { 724 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream); 725 726 if (!i2sdev) 727 return -EINVAL; 728 i2sdev->out.substream = substream; 729 return i2sbus_pcm_open(i2sdev, 0); 730 } 731 732 static int i2sbus_playback_close(struct snd_pcm_substream *substream) 733 { 734 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream); 735 int err; 736 737 if (!i2sdev) 738 return -EINVAL; 739 if (i2sdev->out.substream != substream) 740 return -EINVAL; 741 err = i2sbus_pcm_close(i2sdev, 0); 742 if (!err) 743 i2sdev->out.substream = NULL; 744 return err; 745 } 746 747 static int i2sbus_playback_prepare(struct snd_pcm_substream *substream) 748 { 749 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream); 750 751 if (!i2sdev) 752 return -EINVAL; 753 if (i2sdev->out.substream != substream) 754 return -EINVAL; 755 return i2sbus_pcm_prepare(i2sdev, 0); 756 } 757 758 static int i2sbus_playback_trigger(struct snd_pcm_substream *substream, int cmd) 759 { 760 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream); 761 762 if (!i2sdev) 763 return -EINVAL; 764 if (i2sdev->out.substream != substream) 765 return -EINVAL; 766 return i2sbus_pcm_trigger(i2sdev, 0, cmd); 767 } 768 769 static snd_pcm_uframes_t i2sbus_playback_pointer(struct snd_pcm_substream 770 *substream) 771 { 772 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream); 773 774 if (!i2sdev) 775 return -EINVAL; 776 if (i2sdev->out.substream != substream) 777 return 0; 778 return i2sbus_pcm_pointer(i2sdev, 0); 779 } 780 781 static struct snd_pcm_ops i2sbus_playback_ops = { 782 .open = i2sbus_playback_open, 783 .close = i2sbus_playback_close, 784 .ioctl = snd_pcm_lib_ioctl, 785 .hw_params = i2sbus_hw_params, 786 .hw_free = i2sbus_playback_hw_free, 787 .prepare = i2sbus_playback_prepare, 788 .trigger = i2sbus_playback_trigger, 789 .pointer = i2sbus_playback_pointer, 790 }; 791 792 static int i2sbus_record_open(struct snd_pcm_substream *substream) 793 { 794 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream); 795 796 if (!i2sdev) 797 return -EINVAL; 798 i2sdev->in.substream = substream; 799 return i2sbus_pcm_open(i2sdev, 1); 800 } 801 802 static int i2sbus_record_close(struct snd_pcm_substream *substream) 803 { 804 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream); 805 int err; 806 807 if (!i2sdev) 808 return -EINVAL; 809 if (i2sdev->in.substream != substream) 810 return -EINVAL; 811 err = i2sbus_pcm_close(i2sdev, 1); 812 if (!err) 813 i2sdev->in.substream = NULL; 814 return err; 815 } 816 817 static int i2sbus_record_prepare(struct snd_pcm_substream *substream) 818 { 819 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream); 820 821 if (!i2sdev) 822 return -EINVAL; 823 if (i2sdev->in.substream != substream) 824 return -EINVAL; 825 return i2sbus_pcm_prepare(i2sdev, 1); 826 } 827 828 static int i2sbus_record_trigger(struct snd_pcm_substream *substream, int cmd) 829 { 830 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream); 831 832 if (!i2sdev) 833 return -EINVAL; 834 if (i2sdev->in.substream != substream) 835 return -EINVAL; 836 return i2sbus_pcm_trigger(i2sdev, 1, cmd); 837 } 838 839 static snd_pcm_uframes_t i2sbus_record_pointer(struct snd_pcm_substream 840 *substream) 841 { 842 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream); 843 844 if (!i2sdev) 845 return -EINVAL; 846 if (i2sdev->in.substream != substream) 847 return 0; 848 return i2sbus_pcm_pointer(i2sdev, 1); 849 } 850 851 static struct snd_pcm_ops i2sbus_record_ops = { 852 .open = i2sbus_record_open, 853 .close = i2sbus_record_close, 854 .ioctl = snd_pcm_lib_ioctl, 855 .hw_params = i2sbus_hw_params, 856 .hw_free = i2sbus_record_hw_free, 857 .prepare = i2sbus_record_prepare, 858 .trigger = i2sbus_record_trigger, 859 .pointer = i2sbus_record_pointer, 860 }; 861 862 static void i2sbus_private_free(struct snd_pcm *pcm) 863 { 864 struct i2sbus_dev *i2sdev = snd_pcm_chip(pcm); 865 struct codec_info_item *p, *tmp; 866 867 i2sdev->sound.pcm = NULL; 868 i2sdev->out.created = 0; 869 i2sdev->in.created = 0; 870 list_for_each_entry_safe(p, tmp, &i2sdev->sound.codec_list, list) { 871 printk(KERN_ERR "i2sbus: a codec didn't unregister!\n"); 872 list_del(&p->list); 873 module_put(p->codec->owner); 874 kfree(p); 875 } 876 soundbus_dev_put(&i2sdev->sound); 877 module_put(THIS_MODULE); 878 } 879 880 int 881 i2sbus_attach_codec(struct soundbus_dev *dev, struct snd_card *card, 882 struct codec_info *ci, void *data) 883 { 884 int err, in = 0, out = 0; 885 struct transfer_info *tmp; 886 struct i2sbus_dev *i2sdev = soundbus_dev_to_i2sbus_dev(dev); 887 struct codec_info_item *cii; 888 889 if (!dev->pcmname || dev->pcmid == -1) { 890 printk(KERN_ERR "i2sbus: pcm name and id must be set!\n"); 891 return -EINVAL; 892 } 893 894 list_for_each_entry(cii, &dev->codec_list, list) { 895 if (cii->codec_data == data) 896 return -EALREADY; 897 } 898 899 if (!ci->transfers || !ci->transfers->formats 900 || !ci->transfers->rates || !ci->usable) 901 return -EINVAL; 902 903 /* we currently code the i2s transfer on the clock, and support only 904 * 32 and 64 */ 905 if (ci->bus_factor != 32 && ci->bus_factor != 64) 906 return -EINVAL; 907 908 /* If you want to fix this, you need to keep track of what transport infos 909 * are to be used, which codecs they belong to, and then fix all the 910 * sysclock/busclock stuff above to depend on which is usable */ 911 list_for_each_entry(cii, &dev->codec_list, list) { 912 if (cii->codec->sysclock_factor != ci->sysclock_factor) { 913 printk(KERN_DEBUG 914 "cannot yet handle multiple different sysclocks!\n"); 915 return -EINVAL; 916 } 917 if (cii->codec->bus_factor != ci->bus_factor) { 918 printk(KERN_DEBUG 919 "cannot yet handle multiple different bus clocks!\n"); 920 return -EINVAL; 921 } 922 } 923 924 tmp = ci->transfers; 925 while (tmp->formats && tmp->rates) { 926 if (tmp->transfer_in) 927 in = 1; 928 else 929 out = 1; 930 tmp++; 931 } 932 933 cii = kzalloc(sizeof(struct codec_info_item), GFP_KERNEL); 934 if (!cii) { 935 printk(KERN_DEBUG "i2sbus: failed to allocate cii\n"); 936 return -ENOMEM; 937 } 938 939 /* use the private data to point to the codec info */ 940 cii->sdev = soundbus_dev_get(dev); 941 cii->codec = ci; 942 cii->codec_data = data; 943 944 if (!cii->sdev) { 945 printk(KERN_DEBUG 946 "i2sbus: failed to get soundbus dev reference\n"); 947 err = -ENODEV; 948 goto out_free_cii; 949 } 950 951 if (!try_module_get(THIS_MODULE)) { 952 printk(KERN_DEBUG "i2sbus: failed to get module reference!\n"); 953 err = -EBUSY; 954 goto out_put_sdev; 955 } 956 957 if (!try_module_get(ci->owner)) { 958 printk(KERN_DEBUG 959 "i2sbus: failed to get module reference to codec owner!\n"); 960 err = -EBUSY; 961 goto out_put_this_module; 962 } 963 964 if (!dev->pcm) { 965 err = snd_pcm_new(card, dev->pcmname, dev->pcmid, 0, 0, 966 &dev->pcm); 967 if (err) { 968 printk(KERN_DEBUG "i2sbus: failed to create pcm\n"); 969 goto out_put_ci_module; 970 } 971 dev->pcm->dev = &dev->ofdev.dev; 972 } 973 974 /* ALSA yet again sucks. 975 * If it is ever fixed, remove this line. See below. */ 976 out = in = 1; 977 978 if (!i2sdev->out.created && out) { 979 if (dev->pcm->card != card) { 980 /* eh? */ 981 printk(KERN_ERR 982 "Can't attach same bus to different cards!\n"); 983 err = -EINVAL; 984 goto out_put_ci_module; 985 } 986 err = snd_pcm_new_stream(dev->pcm, SNDRV_PCM_STREAM_PLAYBACK, 1); 987 if (err) 988 goto out_put_ci_module; 989 snd_pcm_set_ops(dev->pcm, SNDRV_PCM_STREAM_PLAYBACK, 990 &i2sbus_playback_ops); 991 i2sdev->out.created = 1; 992 } 993 994 if (!i2sdev->in.created && in) { 995 if (dev->pcm->card != card) { 996 printk(KERN_ERR 997 "Can't attach same bus to different cards!\n"); 998 err = -EINVAL; 999 goto out_put_ci_module; 1000 } 1001 err = snd_pcm_new_stream(dev->pcm, SNDRV_PCM_STREAM_CAPTURE, 1); 1002 if (err) 1003 goto out_put_ci_module; 1004 snd_pcm_set_ops(dev->pcm, SNDRV_PCM_STREAM_CAPTURE, 1005 &i2sbus_record_ops); 1006 i2sdev->in.created = 1; 1007 } 1008 1009 /* so we have to register the pcm after adding any substream 1010 * to it because alsa doesn't create the devices for the 1011 * substreams when we add them later. 1012 * Therefore, force in and out on both busses (above) and 1013 * register the pcm now instead of just after creating it. 1014 */ 1015 err = snd_device_register(card, dev->pcm); 1016 if (err) { 1017 printk(KERN_ERR "i2sbus: error registering new pcm\n"); 1018 goto out_put_ci_module; 1019 } 1020 /* no errors any more, so let's add this to our list */ 1021 list_add(&cii->list, &dev->codec_list); 1022 1023 dev->pcm->private_data = i2sdev; 1024 dev->pcm->private_free = i2sbus_private_free; 1025 1026 /* well, we really should support scatter/gather DMA */ 1027 snd_pcm_lib_preallocate_pages_for_all( 1028 dev->pcm, SNDRV_DMA_TYPE_DEV, 1029 snd_dma_pci_data(macio_get_pci_dev(i2sdev->macio)), 1030 64 * 1024, 64 * 1024); 1031 1032 return 0; 1033 out_put_ci_module: 1034 module_put(ci->owner); 1035 out_put_this_module: 1036 module_put(THIS_MODULE); 1037 out_put_sdev: 1038 soundbus_dev_put(dev); 1039 out_free_cii: 1040 kfree(cii); 1041 return err; 1042 } 1043 1044 void i2sbus_detach_codec(struct soundbus_dev *dev, void *data) 1045 { 1046 struct codec_info_item *cii = NULL, *i; 1047 1048 list_for_each_entry(i, &dev->codec_list, list) { 1049 if (i->codec_data == data) { 1050 cii = i; 1051 break; 1052 } 1053 } 1054 if (cii) { 1055 list_del(&cii->list); 1056 module_put(cii->codec->owner); 1057 kfree(cii); 1058 } 1059 /* no more codecs, but still a pcm? */ 1060 if (list_empty(&dev->codec_list) && dev->pcm) { 1061 /* the actual cleanup is done by the callback above! */ 1062 snd_device_free(dev->pcm->card, dev->pcm); 1063 } 1064 } 1065