RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Ответить на сообщение
Имя:
e-mail:
FIDO:
Home page:
сохранить данные о вас
Тема:
> Попробуй поправить обработчик прерываний в alsa/pci/ens1370.c > > /* > * Interrupt handler > */ > > static void snd_audiopci_interrupt(int irq, void *dev_id, struct pt_regs *regs) > { > ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, dev_id, return); > unsigned int status, sctrl; > > #ifdef TARGET_OS2 > int fOurIrq = 0; > #endif > if (ensoniq == NULL) > return; > > status = inl(ES_REG(ensoniq, STATUS)); > if (!(status & ES_INTR)) > return; > > #ifdef TARGET_OS2 > if(status & (0x8|0x4|0x2|0x1)) fOurIrq = TRUE; > #endif > > spin_lock(&ensoniq->reg_lock); > sctrl = ensoniq->sctrl; > if (status & ES_DAC1) > sctrl &= ~ES_P1_INT_EN; > if (status & ES_DAC2) > sctrl &= ~ES_P2_INT_EN; > if (status & ES_ADC) > sctrl &= ~ES_R1_INT_EN; > outl(sctrl, ES_REG(ensoniq, SERIAL)); > outl(ensoniq->sctrl, ES_REG(ensoniq, SERIAL)); > spin_unlock(&ensoniq->reg_lock); > > if (status & ES_UART) { > snd_ensoniq_midi_interrupt(ensoniq); > } > if (status & ES_DAC2) { > snd_pcm_period_elapsed(ensoniq->playback2_substream); > } > if (status & ES_ADC) { > snd_pcm_period_elapsed(ensoniq->capture_substream); > } > if (status & ES_DAC1) { > snd_pcm_period_elapsed(ensoniq->playback1_substream); > } > > Это, насколько я понимаю, важно > #ifdef TARGET_OS2 > if (fOurIrq) { > eoi_irq(irq); > } > #endif //TARGET_OS2 > > } > > и еще попробуй следующее: > в alsa/core/pcm_lib.c в функции snd_interval_refine сделай также > > /* r <- v */ > int snd_interval_refine(snd_interval_t *i, const snd_interval_t *v) > { > int changed = 0; > assert(!snd_interval_empty(i)); > if (i->min < v->min) { > i->min = v->min; > i->openmin = v->openmin; > changed = 1; > } else if (i->min == v->min && !i->openmin && v->openmin) { > i->openmin = 1; > changed = 1; > } > if (i->max > v->max) { > i->max = v->max; > i->openmax = v->openmax; > changed = 1; > } else if (i->max == v->max && !i->openmax && v->openmax) { > i->openmax = 1; > changed = 1; > } > if (!i->integer && v->integer) { > i->integer = 1; > changed = 1; > } > if (i->integer) { > if (i->openmin) { > // i->min++; > i->openmin = 0; > } > if (i->openmax) { > // i->max--; > i->openmax = 0; > } > } else if (!i->openmin && !i->openmax && i->min == i->max) > i->integer = 1; > if (snd_interval_checkempty(i)) { > snd_interval_none(i); > return -EINVAL; > } > return changed; > } > > без этих изменений у меня карточка( CT5880 ) тоже не пела. > >
_, _, _, _, _ _, _,_
(_ | / \ |\ | / \ |_/
, ) | , \ / | \| \ / | \
~ ~~~ ~ ~ ~ ~ ~ ~
Programmed by
Dmitri Maximovich
,
Dmitry I. Platonoff
,
Eugen Kuleshov
.
25.09.99 (c) 1999,
RU/2
. All rights reserved.
Rewritten by
Dmitry Ban
. All rights ignored.