summaryrefslogtreecommitdiff
path: root/drivers/spi
diff options
context:
space:
mode:
authorAndrew Boie <andrew.p.boie@intel.com>2016-01-08 00:46:14 -0800
committerAnas Nashif <anas.nashif@intel.com>2016-02-05 20:25:17 -0500
commitd9cfbd5a6102cd0be5869b9f98a5a067b7a60e14 (patch)
treeacc1ebea5edc7f321cd5edc5c2ec178a1aa479d1 /drivers/spi
parent4a2ce3c0c94b44ea2ccf5d6a76caf28025320f57 (diff)
interrupts: new static IRQ API
The interrupt API has been redesigned: - irq_connect() for dynamic interrupts renamed to irq_connect_dynamic(). It will be used in situations where the new static irq_connect() won't work, i.e. the value of arguments can't be computed at build time - a new API for static interrupts replaces irq_connect(). it is used exactly the same way as its dynamic counterpart. The old static irq macros will be removed - Separate stub assembly files are no longer needed as the stubs are now generated inline with irq_connect() ReST documentation updated for the changed API. Some detail about the IDT in ROM added, and an oblique reference to the internal-only _irq_handler_set() API removed; we don't talk about internal APIs in the official documentation. Change-Id: I280519993da0e0fe671eb537a876f67de33d3cd4 Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/Makefile2
-rw-r--r--drivers/spi/dw_spi.c45
-rw-r--r--drivers/spi/dw_spi_priv.h2
-rw-r--r--drivers/spi/intel_spi.c32
-rw-r--r--drivers/spi/intel_spi_priv.h2
-rw-r--r--drivers/spi/spi_static_irq_stubs.S40
6 files changed, 27 insertions, 96 deletions
diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
index 5abbe7781..07ae38b62 100644
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
@@ -1,4 +1,2 @@
-
-obj-$(CONFIG_SPI) = spi_static_irq_stubs.o
obj-$(CONFIG_SPI_INTEL) += intel_spi.o
obj-$(CONFIG_SPI_DW) += dw_spi.o
diff --git a/drivers/spi/dw_spi.c b/drivers/spi/dw_spi.c
index 172644ec3..2a4b32127 100644
--- a/drivers/spi/dw_spi.c
+++ b/drivers/spi/dw_spi.c
@@ -459,8 +459,13 @@ int spi_dw_init(struct device *dev)
#endif /* CONFIG_IOAPIC */
#ifdef CONFIG_SPI_DW_PORT_0
-
-void spi_config_0_irq(struct device *dev);
+void spi_config_0_irq(void)
+{
+ irq_connect(CONFIG_SPI_DW_PORT_0_IRQ, CONFIG_SPI_DW_PORT_0_PRI,
+ spi_dw_isr, SYS_GET_DEVICE(spi_dw_port_0),
+ SPI_DW_IRQ_FLAGS);
+ irq_enable(CONFIG_SPI_DW_PORT_0_IRQ);
+}
struct spi_dw_data spi_dw_data_port_0;
@@ -479,24 +484,16 @@ DECLARE_DEVICE_INIT_CONFIG(spi_dw_port_0, CONFIG_SPI_DW_PORT_0_DRV_NAME,
SYS_DEFINE_DEVICE(spi_dw_port_0, &spi_dw_data_port_0, SECONDARY,
CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);
-struct device *spi_dw_isr_port_0 = SYS_GET_DEVICE(spi_dw_port_0);
-
-IRQ_CONNECT_STATIC(spi_dw_irq_port_0, CONFIG_SPI_DW_PORT_0_IRQ,
- CONFIG_SPI_DW_PORT_0_PRI, spi_dw_isr, 0,
- SPI_DW_IRQ_FLAGS);
-
-void spi_config_0_irq(struct device *dev)
-{
- struct spi_dw_config *config = dev->config->config_info;
-
- IRQ_CONFIG(spi_dw_irq_port_0, config->irq);
- irq_enable(config->irq);
-}
-
#endif /* CONFIG_SPI_DW_PORT_0 */
#ifdef CONFIG_SPI_DW_PORT_1
-void spi_config_1_irq(struct device *dev);
+void spi_config_1_irq(void)
+{
+ irq_connect(CONFIG_SPI_DW_PORT_1_IRQ, CONFIG_SPI_DW_PORT_1_PRI,
+ spi_dw_isr, SYS_GET_DEVICE(spi_dw_port_1),
+ SPI_DW_IRQ_FLAGS);
+ irq_enable(CONFIG_SPI_DW_PORT_1_IRQ);
+}
struct spi_dw_data spi_dw_data_port_1;
@@ -515,18 +512,4 @@ DECLARE_DEVICE_INIT_CONFIG(spi_dw_port_1, CONFIG_SPI_DW_PORT_1_DRV_NAME,
SYS_DEFINE_DEVICE(spi_dw_port_1, &spi_dw_data_port_1, SECONDARY,
CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);
-struct device *spi_dw_isr_port_1 = SYS_GET_DEVICE(spi_dw_port_1);
-
-IRQ_CONNECT_STATIC(spi_dw_irq_port_1, CONFIG_SPI_DW_PORT_1_IRQ,
- CONFIG_SPI_DW_PORT_1_PRI, spi_dw_isr, 0,
- SPI_DW_IRQ_FLAGS);
-
-void spi_config_1_irq(struct device *dev)
-{
- struct spi_dw_config *config = dev->config->config_info;
-
- IRQ_CONFIG(spi_dw_irq_port_1, config->irq);
- irq_enable(config->irq);
-}
-
#endif /* CONFIG_SPI_DW_PORT_1 */
diff --git a/drivers/spi/dw_spi_priv.h b/drivers/spi/dw_spi_priv.h
index a81bcb60b..83c5a29a2 100644
--- a/drivers/spi/dw_spi_priv.h
+++ b/drivers/spi/dw_spi_priv.h
@@ -21,7 +21,7 @@
#include <spi.h>
-typedef void (*spi_dw_config_t)(struct device *dev);
+typedef void (*spi_dw_config_t)(void);
/* Private structures */
struct spi_dw_config {
diff --git a/drivers/spi/intel_spi.c b/drivers/spi/intel_spi.c
index 765c6dd7f..12eacc80c 100644
--- a/drivers/spi/intel_spi.c
+++ b/drivers/spi/intel_spi.c
@@ -420,7 +420,7 @@ int spi_intel_init(struct device *dev)
return DEV_NOT_CONFIG;
}
- info->config_func(dev);
+ info->config_func();
_spi_config_cs(dev);
@@ -448,7 +448,7 @@ int spi_intel_init(struct device *dev)
/* system bindings */
#ifdef CONFIG_SPI_INTEL_PORT_0
-void spi_config_0_irq(struct device *dev);
+void spi_config_0_irq(void);
struct spi_intel_data spi_intel_data_port_0;
@@ -476,23 +476,18 @@ DECLARE_DEVICE_INIT_CONFIG(spi_intel_port_0, CONFIG_SPI_INTEL_PORT_0_DRV_NAME,
/* SPI may use GPIO pin for CS, thus it needs to be initialized after GPIO */
SYS_DEFINE_DEVICE(spi_intel_port_0, &spi_intel_data_port_0, SECONDARY,
CONFIG_SPI_INTEL_INIT_PRIORITY);
-struct device *spi_intel_isr_port_0 = SYS_GET_DEVICE(spi_intel_port_0);
-IRQ_CONNECT_STATIC(spi_intel_irq_port_0, CONFIG_SPI_INTEL_PORT_0_IRQ,
- CONFIG_SPI_INTEL_PORT_0_PRI, spi_intel_isr, 0,
- SPI_INTEL_IRQ_FLAGS);
-
-void spi_config_0_irq(struct device *dev)
+void spi_config_0_irq(void)
{
- struct spi_intel_config *config = dev->config->config_info;
-
- IRQ_CONFIG(spi_intel_irq_port_0, config->irq);
+ irq_connect(CONFIG_SPI_INTEL_PORT_0_IRQ, CONFIG_SPI_INTEL_PORT_0_PRI,
+ spi_intel_isr, SYS_GET_DEVICE(spi_intel_port_0),
+ SPI_INTEL_IRQ_FLAGS);
}
#endif /* CONFIG_SPI_INTEL_PORT_0 */
#ifdef CONFIG_SPI_INTEL_PORT_1
-void spi_config_1_irq(struct device *dev);
+void spi_config_1_irq(void);
struct spi_intel_data spi_intel_data_port_1;
@@ -520,17 +515,12 @@ DECLARE_DEVICE_INIT_CONFIG(spi_intel_port_1, CONFIG_SPI_INTEL_PORT_1_DRV_NAME,
/* SPI may use GPIO pin for CS, thus it needs to be initialized after GPIO */
SYS_DEFINE_DEVICE(spi_intel_port_1, &spi_intel_data_port_1, SECONDARY,
CONFIG_SPI_INTEL_INIT_PRIORITY);
-struct device *spi_intel_isr_port_1 = SYS_GET_DEVICE(spi_intel_port_1);
-IRQ_CONNECT_STATIC(spi_intel_irq_port_1, CONFIG_SPI_INTEL_PORT_1_IRQ,
- CONFIG_SPI_INTEL_PORT_1_PRI, spi_intel_isr, 0,
- SPI_INTEL_IRQ_FLAGS);
-
-void spi_config_1_irq(struct device *dev)
+void spi_config_1_irq(void);
{
- struct spi_intel_config *config = dev->config->config_info;
-
- IRQ_CONFIG(spi_intel_irq_port_1, config->irq);
+ irq_connect(CONFIG_SPI_INTEL_PORT_1_IRQ, CONFIG_SPI_INTEL_PORT_1_PRI,
+ spi_intel_isr, SYS_GET_DEVICE(spi_intel_port_1),
+ SPI_INTEL_IRQ_FLAGS);
}
#endif /* CONFIG_SPI_INTEL_PORT_1 */
diff --git a/drivers/spi/intel_spi_priv.h b/drivers/spi/intel_spi_priv.h
index 9b9fcf547..a0e1b8bb7 100644
--- a/drivers/spi/intel_spi_priv.h
+++ b/drivers/spi/intel_spi_priv.h
@@ -24,7 +24,7 @@
#include <pci/pci_mgr.h>
#endif /* CONFIG_PCI */
-typedef void (*spi_intel_config_t)(struct device *dev);
+typedef void (*spi_intel_config_t)(void);
struct spi_intel_config {
uint32_t regs;
diff --git a/drivers/spi/spi_static_irq_stubs.S b/drivers/spi/spi_static_irq_stubs.S
deleted file mode 100644
index 33f6c7afb..000000000
--- a/drivers/spi/spi_static_irq_stubs.S
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2012-2015, Wind River Systems, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#define _ASMLANGUAGE
-
-#ifdef CONFIG_X86
-#include <arch/x86/asm.h>
-#include <drivers/ioapic.h>
-#endif
-
-#if defined(CONFIG_SPI_INTEL_PORT_0)
- ioapic_mkstub spi_intel_irq_port_0 spi_intel_isr spi_intel_isr_port_0
-#endif /* CONFIG_SPI_INTEL_PORT_0 */
-#if defined(CONFIG_SPI_INTEL_PORT_1)
- ioapic_mkstub spi_intel_irq_port_1 spi_intel_isr spi_intel_isr_port_1
-#endif /* CONFIG_SPI_INTEL_PORT_1 */
-
-#if defined(CONFIG_SPI_DW_PORT_0)
-#ifdef CONFIG_IOAPIC
- ioapic_mkstub spi_dw_irq_port_0 spi_dw_isr spi_dw_isr_port_0
-#endif
-#endif
-#if defined(CONFIG_SPI_DW_PORT_1)
-#ifdef CONFIG_IOAPIC
- ioapic_mkstub spi_dw_irq_port_1 spi_dw_isr spi_dw_isr_port_1
-#endif
-#endif
-