From d56daa1f7e4e9d6e9fc16e65864b671971708009 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Mon, 26 Dec 2011 15:30:51 +0000 Subject: i.MX31: Silly little change to enable/disable a SPI Unify spi_enable/disable_module into one spi_enable_module call for API consistency's sake with I2C driver. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31441 a1c6a512-1295-4272-9138-f99709370657 --- .../target/arm/imx31/gigabeat-s/lcd-gigabeat-s.c | 9 +--- firmware/target/arm/imx31/mc13783-imx31.c | 4 +- firmware/target/arm/imx31/spi-imx31.c | 59 +++++++++++----------- firmware/target/arm/imx31/spi-imx31.h | 7 +-- 4 files changed, 34 insertions(+), 45 deletions(-) (limited to 'firmware/target/arm/imx31') diff --git a/firmware/target/arm/imx31/gigabeat-s/lcd-gigabeat-s.c b/firmware/target/arm/imx31/gigabeat-s/lcd-gigabeat-s.c index f0a2764851..78d8ba16c3 100644 --- a/firmware/target/arm/imx31/gigabeat-s/lcd-gigabeat-s.c +++ b/firmware/target/arm/imx31/gigabeat-s/lcd-gigabeat-s.c @@ -116,14 +116,7 @@ static void lcd_write_reg(unsigned reg, unsigned val) static void lcd_enable_interface(bool enable) { - if (enable) - { - spi_enable_module(&lcd_spi_node); - } - else - { - spi_disable_module(&lcd_spi_node); - } + spi_enable_module(&lcd_spi_node, enable); } static void lcd_set_power(bool powered) diff --git a/firmware/target/arm/imx31/mc13783-imx31.c b/firmware/target/arm/imx31/mc13783-imx31.c index 268c33a549..94021ac049 100644 --- a/firmware/target/arm/imx31/mc13783-imx31.c +++ b/firmware/target/arm/imx31/mc13783-imx31.c @@ -139,7 +139,7 @@ void INIT_ATTR mc13783_init(void) semaphore_init(&mc13783_svc_wake, 1, 0); /* Enable the PMIC SPI module */ - spi_enable_module(&mc13783_spi); + spi_enable_module(&mc13783_spi, true); /* Mask any PMIC interrupts for now - modules will enable them as * required */ @@ -164,7 +164,7 @@ void mc13783_close(void) mc13783_thread_id = 0; semaphore_release(&mc13783_svc_wake); thread_wait(thread_id); - spi_disable_module(&mc13783_spi); + spi_enable_module(&mc13783_spi, false); } bool mc13783_enable_event(enum mc13783_event_ids id) diff --git a/firmware/target/arm/imx31/spi-imx31.c b/firmware/target/arm/imx31/spi-imx31.c index ea3d2f8d77..076ce7cd7b 100644 --- a/firmware/target/arm/imx31/spi-imx31.c +++ b/firmware/target/arm/imx31/spi-imx31.c @@ -55,7 +55,7 @@ static struct spi_module_desc const struct spi_node *last_node; /* Last node used for module */ void (* const handler)(void); /* Interrupt handler */ int rxcount; /* Independent copy of txcount */ - int8_t enab; /* Enable count */ + int8_t enable; /* Enable count */ int8_t byte_size; /* Size of transfers in bytes */ const int8_t cg; /* Clock-gating value */ const int8_t ints; /* AVIC vector number */ @@ -102,7 +102,7 @@ static bool spi_set_context(struct spi_module_desc *desc, const struct spi_node * const node = xfer->node; volatile unsigned long * const base = desc->base; - if (desc->enab == 0) + if (desc->enable == 0) return false; if (node == desc->last_node) @@ -354,43 +354,42 @@ void INIT_ATTR spi_init(void) } } -/* Enable the specified module for the node */ -void spi_enable_module(const struct spi_node *node) +/* Enable or disable the specified module for the node */ +void spi_enable_module(const struct spi_node *node, bool enable) { struct spi_module_desc * const desc = &spi_descs[node->num]; - if (++desc->enab == 1) + if (enable) { - /* Enable clock-gating register */ - ccm_module_clock_gating(desc->cg, CGM_ON_RUN_WAIT); - /* Reset */ - spi_reset(desc); - desc->last_node = NULL; - /* Enable interrupt at controller level */ - avic_enable_int(desc->ints, INT_TYPE_IRQ, INT_PRIO_DEFAULT, - desc->handler); + if (++desc->enable == 1) + { + /* Enable clock-gating register */ + ccm_module_clock_gating(desc->cg, CGM_ON_RUN_WAIT); + /* Reset */ + spi_reset(desc); + desc->last_node = NULL; + /* Enable interrupt at controller level */ + avic_enable_int(desc->ints, INT_TYPE_IRQ, INT_PRIO_DEFAULT, + desc->handler); + } } -} - -/* Disable the specified module for the node */ -void spi_disable_module(const struct spi_node *node) -{ - struct spi_module_desc * const desc = &spi_descs[node->num]; - - if (desc->enab > 0 && --desc->enab == 0) + else { - /* Last enable for this module */ - /* Wait for outstanding transactions */ - while (*(void ** volatile)&desc->head != NULL); + if (desc->enable > 0 && --desc->enable == 0) + { + /* Last enable for this module */ + /* Wait for outstanding transactions */ + while (*(void ** volatile)&desc->head != NULL); - /* Disable interrupt at controller level */ - avic_disable_int(desc->ints); + /* Disable interrupt at controller level */ + avic_disable_int(desc->ints); - /* Disable interface */ - desc->base[CONREG] &= ~CSPI_CONREG_EN; + /* Disable interface */ + desc->base[CONREG] &= ~CSPI_CONREG_EN; - /* Disable interface clock */ - ccm_module_clock_gating(desc->cg, CGM_OFF); + /* Disable interface clock */ + ccm_module_clock_gating(desc->cg, CGM_OFF); + } } } diff --git a/firmware/target/arm/imx31/spi-imx31.h b/firmware/target/arm/imx31/spi-imx31.h index 35b7d514cf..215093733b 100644 --- a/firmware/target/arm/imx31/spi-imx31.h +++ b/firmware/target/arm/imx31/spi-imx31.h @@ -74,11 +74,8 @@ struct spi_transfer_desc /* One-time init of SPI driver */ void spi_init(void); -/* Enable the specified module for the node */ -void spi_enable_module(const struct spi_node *node); - -/* Disabled the specified module for the node */ -void spi_disable_module(const struct spi_node *node); +/* Enable or disable the specified module for the node */ +void spi_enable_module(const struct spi_node *node, bool enable); /* Send and/or receive data on the specified node (asychronous) */ bool spi_transfer(struct spi_transfer_desc *xfer); -- cgit