X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=hw%2Fes1370.c;h=d607a94852fbd7fe4c54235fa364868985e4afc4;hb=cd346349b45ef056f138a184f660b8c34c3213cc;hp=fc7ac0a96e3440f2ab4264212e13d3c57a7138d2;hpb=c0fe3827ea18f7d29550f2ff2495cec2fe7a3d94;p=qemu diff --git a/hw/es1370.c b/hw/es1370.c index fc7ac0a..d607a94 100644 --- a/hw/es1370.c +++ b/hw/es1370.c @@ -249,7 +249,7 @@ static void print_sctl (uint32_t val) #endif #ifndef SILENT_ES1370 -#define lwarn(...) AUD_log ("es1370: warning:", __VA_ARGS__) +#define lwarn(...) AUD_log ("es1370: warning", __VA_ARGS__) #else #define lwarn(...) #endif @@ -324,7 +324,7 @@ static void es1370_update_status (ES1370State *s, uint32_t new_status) else { s->status = new_status & ~STAT_INTR; } - pci_set_irq (s->pci_dev, 0, !!level); + qemu_set_irq(s->pci_dev->irq[0], !!level); } static void es1370_reset (ES1370State *s) @@ -350,7 +350,7 @@ static void es1370_reset (ES1370State *s) s->dac_voice[i] = NULL; } } - pci_set_irq (s->pci_dev, 0, 0); + qemu_irq_lower(s->pci_dev->irq[0]); } static void es1370_maybe_lower_irq (ES1370State *s, uint32_t sctl) @@ -423,6 +423,7 @@ static void es1370_update_voices (ES1370State *s, uint32_t ctl, uint32_t sctl) as.freq = new_freq; as.nchannels = 1 << (new_fmt & 1); as.fmt = (new_fmt & 2) ? AUD_FMT_S16 : AUD_FMT_U8; + as.endianness = 0; if (i == ADC_CHANNEL) { s->adc_voice = @@ -477,9 +478,10 @@ static inline uint32_t es1370_fixup (ES1370State *s, uint32_t addr) IO_WRITE_PROTO (es1370_writeb) { ES1370State *s = opaque; - addr = es1370_fixup (s, addr); uint32_t shift, mask; + addr = es1370_fixup (s, addr); + switch (addr) { case ES1370_REG_CONTROL: case ES1370_REG_CONTROL + 1: @@ -590,6 +592,13 @@ IO_WRITE_PROTO (es1370_writel) ldebug ("chan %d frame address %#x\n", d - &s->chan[0], val); break; + case ES1370_REG_PHANTOM_FRAMECNT: + lwarn ("writing to phantom frame count %#x\n", val); + break; + case ES1370_REG_PHANTOM_FRAMEADR: + lwarn ("writing to phantom frame address %#x\n", val); + break; + case ES1370_REG_ADC_FRAMECNT: d++; case ES1370_REG_DAC2_FRAMECNT: @@ -659,6 +668,22 @@ IO_READ_PROTO (es1370_readw) val = d->scount >> 16; break; + case ES1370_REG_ADC_FRAMECNT: + d++; + case ES1370_REG_DAC2_FRAMECNT: + d++; + case ES1370_REG_DAC1_FRAMECNT: + val = d->frame_cnt & 0xffff; + break; + + case ES1370_REG_ADC_FRAMECNT + 2: + d++; + case ES1370_REG_DAC2_FRAMECNT + 2: + d++; + case ES1370_REG_DAC1_FRAMECNT + 2: + val = d->frame_cnt >> 16; + break; + default: val = ~0; lwarn ("readw %#x -> %#x\n", addr, val); @@ -736,6 +761,15 @@ IO_READ_PROTO (es1370_readl) val = d->frame_addr; break; + case ES1370_REG_PHANTOM_FRAMECNT: + val = ~0U; + lwarn ("reading from phantom frame count\n"); + break; + case ES1370_REG_PHANTOM_FRAMEADR: + val = ~0U; + lwarn ("reading from phantom frame address\n"); + break; + default: val = ~0U; lwarn ("readl %#x -> %#x\n", addr, val); @@ -812,7 +846,7 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel, if (s->sctl & loop_sel) { /* Bah, how stupid is that having a 0 represent true value? i just spent few hours on this shit */ - lwarn ("whoops non looping mode\n"); + AUD_log ("es1370: warning", "non looping mode\n"); } else { d->frame_cnt = size; @@ -983,7 +1017,7 @@ int es1370_init (PCIBus *bus, AudioState *audio) -1, NULL, NULL); if (!d) { - fprintf (stderr, "Failed to register PCI device for ES1370\n"); + AUD_log (NULL, "Failed to register PCI device for ES1370\n"); return -1; }