Revision b651fc6f

b/hw/mainstone.c
149 149
    /* MMC/SD host */
150 150
    pxa2xx_mmci_handlers(cpu->mmc, NULL, qdev_get_gpio_in(mst_irq, MMC_IRQ));
151 151

  
152
    pxa2xx_pcmcia_set_irq_cb(cpu->pcmcia[0],
153
            qdev_get_gpio_in(mst_irq, S0_IRQ),
154
            qdev_get_gpio_in(mst_irq, S0_CD_IRQ));
155
    pxa2xx_pcmcia_set_irq_cb(cpu->pcmcia[1],
156
            qdev_get_gpio_in(mst_irq, S1_IRQ),
157
            qdev_get_gpio_in(mst_irq, S1_CD_IRQ));
158

  
152 159
    smc91c111_init(&nd_table[0], MST_ETH_PHYS,
153 160
                    qdev_get_gpio_in(mst_irq, ETHERNET_IRQ));
154 161

  
b/hw/mst_fpga.c
26 26
#define MST_PCMCIA0		0xe0
27 27
#define MST_PCMCIA1		0xe4
28 28

  
29
#define MST_PCMCIAx_READY	(1 << 10)
30
#define MST_PCMCIAx_nCD		(1 << 5)
31

  
32
#define MST_PCMCIA_CD0_IRQ	9
33
#define MST_PCMCIA_CD1_IRQ	13
34

  
29 35
typedef struct mst_irq_state{
30 36
	SysBusDevice busdev;
31 37

  
......
57 63
	else
58 64
		s->prev_level &= ~(1u << irq);
59 65

  
66
	switch(irq) {
67
	case MST_PCMCIA_CD0_IRQ:
68
		if (level)
69
			s->pcmcia0 &= ~MST_PCMCIAx_nCD;
70
		else
71
			s->pcmcia0 |=  MST_PCMCIAx_nCD;
72
		break;
73
	case MST_PCMCIA_CD1_IRQ:
74
		if (level)
75
			s->pcmcia1 &= ~MST_PCMCIAx_nCD;
76
		else
77
			s->pcmcia1 |=  MST_PCMCIAx_nCD;
78
		break;
79
	}
80

  
60 81
	if ((s->intmskena & (1u << irq)) && level)
61 82
		s->intsetclr |= 1u << irq;
62 83

  
......
141 162
		s->intsetclr = (value & 0xFEEFF);
142 163
		qemu_set_irq(s->parent, s->intsetclr & s->intmskena);
143 164
		break;
165
		/* For PCMCIAx allow the to change only power and reset */
144 166
	case MST_PCMCIA0:
145
		s->pcmcia0 = value;
167
		s->pcmcia0 = (value & 0x1f) | (s->pcmcia0 & ~0x1f);
146 168
		break;
147 169
	case MST_PCMCIA1:
148
		s->pcmcia1 = value;
170
		s->pcmcia1 = (value & 0x1f) | (s->pcmcia1 & ~0x1f);
149 171
		break;
150 172
	default:
151 173
		printf("Mainstone - mst_fpga_writeb: Bad register offset "
......
180 202

  
181 203
	s = FROM_SYSBUS(mst_irq_state, dev);
182 204

  
205
	s->pcmcia0 = MST_PCMCIAx_READY | MST_PCMCIAx_nCD;
206
	s->pcmcia1 = MST_PCMCIAx_READY | MST_PCMCIAx_nCD;
207

  
183 208
	sysbus_init_irq(dev, &s->parent);
184 209

  
185 210
	/* alloc the external 16 irqs */

Also available in: Unified diff