Title: [6595] trunk: fix bug [#5207] - Define and get spi irq num from resource.
Revision
6595
Author
adamliyi
Date
2009-06-05 06:51:26 -0500 (Fri, 05 Jun 2009)

Log Message

fix bug [#5207] - Define and get spi irq num from resource.

Modified Paths

Diff

Modified: trunk/arch/blackfin/mach-bf537/boards/stamp.c (6594 => 6595)


--- trunk/arch/blackfin/mach-bf537/boards/stamp.c	2009-06-05 04:40:39 UTC (rev 6594)
+++ trunk/arch/blackfin/mach-bf537/boards/stamp.c	2009-06-05 11:51:26 UTC (rev 6595)
@@ -565,6 +565,7 @@
 static struct bfin5xx_spi_chip  mmc_spi_chip_info = {
 	.enable_dma = 0,
 	.bits_per_word = 8,
+	.pio_interrupt = 0,
 };
 #endif
 
@@ -849,6 +850,11 @@
 	[1] = {
 		.start = CH_SPI,
 		.end   = CH_SPI,
+		.flags = IORESOURCE_DMA,
+	},
+	[2] = {
+		.start = IRQ_SPI,
+		.end   = IRQ_SPI,
 		.flags = IORESOURCE_IRQ,
 	},
 };

Modified: trunk/drivers/spi/spi_bfin5xx.c (6594 => 6595)


--- trunk/drivers/spi/spi_bfin5xx.c	2009-06-05 04:40:39 UTC (rev 6594)
+++ trunk/drivers/spi/spi_bfin5xx.c	2009-06-05 11:51:26 UTC (rev 6595)
@@ -97,6 +97,7 @@
 	dma_addr_t tx_dma;
 
 	int irq_requested;
+	int spi_irq;
 
 	size_t rx_map_len;
 	size_t tx_map_len;
@@ -562,7 +563,7 @@
 		/* Move to next transfer */
 		msg->state = bfin_spi_next_transfer(drv_data);
 
-		disable_irq(IRQ_SPI);
+		disable_irq(drv_data->spi_irq);
 
 		/* Schedule transfer tasklet */
 		tasklet_schedule(&drv_data->pump_transfers);
@@ -946,7 +947,7 @@
 		}
 
 		/* once TDBR is empty, interrupt is triggered */
-		enable_irq(IRQ_SPI);
+		enable_irq(drv_data->spi_irq);
 		return;
 	}
 
@@ -1312,7 +1313,7 @@
 	}
 
 	if (chip->pio_interrupt && !drv_data->irq_requested) {
-		ret = request_irq(IRQ_SPI, bfin_spi_pio_irq_handler,
+		ret = request_irq(drv_data->spi_irq, bfin_spi_pio_irq_handler,
 			IRQF_DISABLED, "BFIN_SPI", drv_data);
 		if (ret) {
 			printk(KERN_NOTICE "Unable to register spi IRQ\n");
@@ -1320,7 +1321,7 @@
 		}
 		drv_data->irq_requested = 1;
 		/* we use write mode, spi irq has to be disabled here */
-		disable_irq(IRQ_SPI);
+		disable_irq(drv_data->spi_irq);
 	}
 
 	if (chip->chip_select_num == 0) {
@@ -1521,13 +1522,21 @@
 		goto out_error_ioremap;
 	}
 
-	drv_data->dma_channel = platform_get_irq(pdev, 0);
-	if (drv_data->dma_channel < 0) {
+	res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
+	if (res == NULL) {
 		dev_err(dev, "No DMA channel specified\n");
 		status = -ENOENT;
-		goto out_error_no_dma_ch;
+		goto out_error_free_io;
 	}
+	drv_data->dma_channel = res->start;
 
+	drv_data->spi_irq = platform_get_irq(pdev, 0);
+	if (drv_data->spi_irq < 0) {
+		dev_err(dev, "No spi pio irq specified\n");
+		status = -ENOENT;
+		goto out_error_free_io;
+	}
+
 	/* Initial and start queue */
 	status = bfin_spi_init_queue(drv_data);
 	if (status != 0) {
@@ -1568,7 +1577,7 @@
 
 out_error_queue_alloc:
 	bfin_spi_destroy_queue(drv_data);
-out_error_no_dma_ch:
+out_error_free_io:
 	iounmap((void *) drv_data->regs_base);
 out_error_ioremap:
 out_error_get_res:
@@ -1601,7 +1610,7 @@
 	}
 
 	if (drv_data->irq_requested) {
-		free_irq(IRQ_SPI, drv_data);
+		free_irq(drv_data->spi_irq, drv_data);
 		drv_data->irq_requested = 0;
 	}
 
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to