Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d38e45aa authored by Vinod Koul's avatar Vinod Koul
Browse files

Merge branch 'topic/hsu' into for-linus

parents 11bfedff 71d0bc65
Loading
Loading
Loading
Loading
+4 −5
Original line number Original line Diff line number Diff line
@@ -200,10 +200,9 @@ EXPORT_SYMBOL_GPL(hsu_dma_get_status);
 *      is not a normal timeout interrupt, ie. hsu_dma_get_status() returned 0.
 *      is not a normal timeout interrupt, ie. hsu_dma_get_status() returned 0.
 *
 *
 *      Return:
 *      Return:
 *      IRQ_NONE for invalid channel number, IRQ_HANDLED otherwise.
 *      0 for invalid channel number, 1 otherwise.
 */
 */
irqreturn_t hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr,
int hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr, u32 status)
			   u32 status)
{
{
	struct hsu_dma_chan *hsuc;
	struct hsu_dma_chan *hsuc;
	struct hsu_dma_desc *desc;
	struct hsu_dma_desc *desc;
@@ -211,7 +210,7 @@ irqreturn_t hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr,


	/* Sanity check */
	/* Sanity check */
	if (nr >= chip->hsu->nr_channels)
	if (nr >= chip->hsu->nr_channels)
		return IRQ_NONE;
		return 0;


	hsuc = &chip->hsu->chan[nr];
	hsuc = &chip->hsu->chan[nr];


@@ -230,7 +229,7 @@ irqreturn_t hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr,
	}
	}
	spin_unlock_irqrestore(&hsuc->vchan.lock, flags);
	spin_unlock_irqrestore(&hsuc->vchan.lock, flags);


	return IRQ_HANDLED;
	return 1;
}
}
EXPORT_SYMBOL_GPL(hsu_dma_do_irq);
EXPORT_SYMBOL_GPL(hsu_dma_do_irq);


+3 −3
Original line number Original line Diff line number Diff line
@@ -29,7 +29,7 @@ static irqreturn_t hsu_pci_irq(int irq, void *dev)
	u32 dmaisr;
	u32 dmaisr;
	u32 status;
	u32 status;
	unsigned short i;
	unsigned short i;
	irqreturn_t ret = IRQ_NONE;
	int ret = 0;
	int err;
	int err;


	dmaisr = readl(chip->regs + HSU_PCI_DMAISR);
	dmaisr = readl(chip->regs + HSU_PCI_DMAISR);
@@ -37,14 +37,14 @@ static irqreturn_t hsu_pci_irq(int irq, void *dev)
		if (dmaisr & 0x1) {
		if (dmaisr & 0x1) {
			err = hsu_dma_get_status(chip, i, &status);
			err = hsu_dma_get_status(chip, i, &status);
			if (err > 0)
			if (err > 0)
				ret |= IRQ_HANDLED;
				ret |= 1;
			else if (err == 0)
			else if (err == 0)
				ret |= hsu_dma_do_irq(chip, i, status);
				ret |= hsu_dma_do_irq(chip, i, status);
		}
		}
		dmaisr >>= 1;
		dmaisr >>= 1;
	}
	}


	return ret;
	return IRQ_RETVAL(ret);
}
}


static int hsu_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
static int hsu_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+4 −4
Original line number Original line Diff line number Diff line
@@ -99,27 +99,27 @@ static int dnv_handle_irq(struct uart_port *p)
	struct uart_8250_port *up = up_to_u8250p(p);
	struct uart_8250_port *up = up_to_u8250p(p);
	unsigned int fisr = serial_port_in(p, INTEL_MID_UART_DNV_FISR);
	unsigned int fisr = serial_port_in(p, INTEL_MID_UART_DNV_FISR);
	u32 status;
	u32 status;
	int ret = IRQ_NONE;
	int ret = 0;
	int err;
	int err;


	if (fisr & BIT(2)) {
	if (fisr & BIT(2)) {
		err = hsu_dma_get_status(&mid->dma_chip, 1, &status);
		err = hsu_dma_get_status(&mid->dma_chip, 1, &status);
		if (err > 0) {
		if (err > 0) {
			serial8250_rx_dma_flush(up);
			serial8250_rx_dma_flush(up);
			ret |= IRQ_HANDLED;
			ret |= 1;
		} else if (err == 0)
		} else if (err == 0)
			ret |= hsu_dma_do_irq(&mid->dma_chip, 1, status);
			ret |= hsu_dma_do_irq(&mid->dma_chip, 1, status);
	}
	}
	if (fisr & BIT(1)) {
	if (fisr & BIT(1)) {
		err = hsu_dma_get_status(&mid->dma_chip, 0, &status);
		err = hsu_dma_get_status(&mid->dma_chip, 0, &status);
		if (err > 0)
		if (err > 0)
			ret |= IRQ_HANDLED;
			ret |= 1;
		else if (err == 0)
		else if (err == 0)
			ret |= hsu_dma_do_irq(&mid->dma_chip, 0, status);
			ret |= hsu_dma_do_irq(&mid->dma_chip, 0, status);
	}
	}
	if (fisr & BIT(0))
	if (fisr & BIT(0))
		ret |= serial8250_handle_irq(p, serial_port_in(p, UART_IIR));
		ret |= serial8250_handle_irq(p, serial_port_in(p, UART_IIR));
	return ret;
	return IRQ_RETVAL(ret);
}
}


#define DNV_DMA_CHAN_OFFSET 0x80
#define DNV_DMA_CHAN_OFFSET 0x80
+4 −5
Original line number Original line Diff line number Diff line
@@ -41,8 +41,7 @@ struct hsu_dma_chip {
/* Export to the internal users */
/* Export to the internal users */
int hsu_dma_get_status(struct hsu_dma_chip *chip, unsigned short nr,
int hsu_dma_get_status(struct hsu_dma_chip *chip, unsigned short nr,
		       u32 *status);
		       u32 *status);
irqreturn_t hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr,
int hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr, u32 status);
			   u32 status);


/* Export to the platform drivers */
/* Export to the platform drivers */
int hsu_dma_probe(struct hsu_dma_chip *chip);
int hsu_dma_probe(struct hsu_dma_chip *chip);
@@ -53,10 +52,10 @@ static inline int hsu_dma_get_status(struct hsu_dma_chip *chip,
{
{
	return 0;
	return 0;
}
}
static inline irqreturn_t hsu_dma_do_irq(struct hsu_dma_chip *chip,
static inline int hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr,
					 unsigned short nr, u32 status)
				 u32 status)
{
{
	return IRQ_NONE;
	return 0;
}
}
static inline int hsu_dma_probe(struct hsu_dma_chip *chip) { return -ENODEV; }
static inline int hsu_dma_probe(struct hsu_dma_chip *chip) { return -ENODEV; }
static inline int hsu_dma_remove(struct hsu_dma_chip *chip) { return 0; }
static inline int hsu_dma_remove(struct hsu_dma_chip *chip) { return 0; }