* [PATCH 01/12] omap: McBSP: Fix possible port lockout
2010-01-07 0:18 [PATCH 00/12] Omap fixes for 2.6.33-rc3 Tony Lindgren
@ 2010-01-07 0:18 ` Tony Lindgren
[not found] ` <4B4767DE.4070801@ru.mvista.com>
2010-01-07 0:18 ` [PATCH 02/12] omap: gpio: Simultaneously requested rising and falling edge Tony Lindgren
` (10 subsequent siblings)
11 siblings, 1 reply; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 0:18 UTC (permalink / raw)
To: linux-arm-kernel
From: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>
In its current form, the omap_mcbsp_request() function can return after
irq_request() failure without any cleanups, effectively locking out the port
forever with clocks left running. Fix it.
Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>
Acked-by: Jarkko Nikula <jhnikula@gmail.com>
Acked-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
arch/arm/plat-omap/mcbsp.c | 20 +++++++++++++++++---
1 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c
index 2cc1cc3..f757672 100644
--- a/arch/arm/plat-omap/mcbsp.c
+++ b/arch/arm/plat-omap/mcbsp.c
@@ -436,7 +436,7 @@ int omap_mcbsp_request(unsigned int id)
dev_err(mcbsp->dev, "Unable to request TX IRQ %d "
"for McBSP%d\n", mcbsp->tx_irq,
mcbsp->id);
- return err;
+ goto error;
}
init_completion(&mcbsp->rx_irq_completion);
@@ -446,12 +446,26 @@ int omap_mcbsp_request(unsigned int id)
dev_err(mcbsp->dev, "Unable to request RX IRQ %d "
"for McBSP%d\n", mcbsp->rx_irq,
mcbsp->id);
- free_irq(mcbsp->tx_irq, (void *)mcbsp);
- return err;
+ goto tx_irq;
}
}
return 0;
+tx_irq:
+ free_irq(mcbsp->tx_irq, (void *)mcbsp);
+error:
+ if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free)
+ mcbsp->pdata->ops->free(id);
+
+ /* Do procedure specific to omap34xx arch, if applicable */
+ omap34xx_mcbsp_free(mcbsp);
+
+ clk_disable(mcbsp->fclk);
+ clk_disable(mcbsp->iclk);
+
+ mcbsp->free = 1;
+
+ return err;
}
EXPORT_SYMBOL(omap_mcbsp_request);
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH 02/12] omap: gpio: Simultaneously requested rising and falling edge
2010-01-07 0:18 [PATCH 00/12] Omap fixes for 2.6.33-rc3 Tony Lindgren
2010-01-07 0:18 ` [PATCH 01/12] omap: McBSP: Fix possible port lockout Tony Lindgren
@ 2010-01-07 0:18 ` Tony Lindgren
2010-01-07 0:19 ` [PATCH 03/12] omap: &&/|| confusion in iommu_put() Tony Lindgren
` (9 subsequent siblings)
11 siblings, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 0:18 UTC (permalink / raw)
To: linux-arm-kernel
From: Cory Maccarrone <darkstar6262@gmail.com>
Some chips, namely any OMAP1 chips using METHOD_MPUIO,
OMAP15xx and OMAP7xx, cannot be setup to respond to on-chip GPIO
interrupts in both rising and falling edge directions -- they can
only respond to one direction or the other, depending on how the
ICR is configured.
Additionally, current code forces rising edge detection if both
flags are specified:
if (trigger & IRQ_TYPE_EDGE_RISING)
l |= 1 << gpio;
else if (trigger & IRQ_TYPE_EDGE_FALLING)
l &= ~(1 << gpio);
else
goto bad;
This change implements a toggle function that will modify the ICR
to flip the direction of interrupt for IRQs that are requested with
both rising and falling flags. The toggle function is not called
for chips and GPIOs it does not apply to through the use of a flip_mask
that's added on a per-bank basis. The mask is only set for those
GPIOs where a toggle is necessary. Edge detection starts out the
same as above with FALLING mode first.
The toggle happens on EACH interrupt; without it, we have the
following sequence of actions on GPIO transition:
ICR GPIO Result
0x1 0 -> 1 (rising) Interrupt
0x1 1 -> 0 (falling) No interrupt
(set ICR to 0x0 manually)
0x0 0 -> 1 (rising) No interrupt
0x0 1 -> 0 (falling) Interrupt
That is, with the ICR set to 1 for a gpio, only rising edge interrupts
are caught, and with it set to 0, only falling edge interrupts are
caught. If we add in the toggle, we get this:
ICR GPIO Result
0x1 0 -> 1 (rising) Interrupt (ICR set to 0x0)
0x0 1 -> 0 (falling) Interrupt (ICR set to 0x1)
0x1 0 -> 1 ...
so, both rising and falling are caught, per the request for both
(IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING).
Signed-off-by: Cory Maccarrone <darkstar6262@gmail.com>
Acked-by: Kevin Hilman <khilman@deeprootsystems.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
arch/arm/plat-omap/gpio.c | 61 ++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 60 insertions(+), 1 deletions(-)
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index 0484681..f8dfa8d 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -192,6 +192,7 @@ struct gpio_bank {
u32 saved_risingdetect;
#endif
u32 level_mask;
+ u32 toggle_mask;
spinlock_t lock;
struct gpio_chip chip;
struct clk *dbck;
@@ -749,6 +750,44 @@ static inline void set_24xx_gpio_triggering(struct gpio_bank *bank, int gpio,
}
#endif
+/*
+ * This only applies to chips that can't do both rising and falling edge
+ * detection at once. For all other chips, this function is a noop.
+ */
+static void _toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio)
+{
+ void __iomem *reg = bank->base;
+ u32 l = 0;
+
+ switch (bank->method) {
+#ifdef CONFIG_ARCH_OMAP1
+ case METHOD_MPUIO:
+ reg += OMAP_MPUIO_GPIO_INT_EDGE;
+ break;
+#endif
+#ifdef CONFIG_ARCH_OMAP15XX
+ case METHOD_GPIO_1510:
+ reg += OMAP1510_GPIO_INT_CONTROL;
+ break;
+#endif
+#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
+ case METHOD_GPIO_7XX:
+ reg += OMAP7XX_GPIO_INT_CONTROL;
+ break;
+#endif
+ default:
+ return;
+ }
+
+ l = __raw_readl(reg);
+ if ((l >> gpio) & 1)
+ l &= ~(1 << gpio);
+ else
+ l |= 1 << gpio;
+
+ __raw_writel(l, reg);
+}
+
static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
{
void __iomem *reg = bank->base;
@@ -759,6 +798,8 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
case METHOD_MPUIO:
reg += OMAP_MPUIO_GPIO_INT_EDGE;
l = __raw_readl(reg);
+ if (trigger & IRQ_TYPE_EDGE_BOTH)
+ bank->toggle_mask |= 1 << gpio;
if (trigger & IRQ_TYPE_EDGE_RISING)
l |= 1 << gpio;
else if (trigger & IRQ_TYPE_EDGE_FALLING)
@@ -771,6 +812,8 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
case METHOD_GPIO_1510:
reg += OMAP1510_GPIO_INT_CONTROL;
l = __raw_readl(reg);
+ if (trigger & IRQ_TYPE_EDGE_BOTH)
+ bank->toggle_mask |= 1 << gpio;
if (trigger & IRQ_TYPE_EDGE_RISING)
l |= 1 << gpio;
else if (trigger & IRQ_TYPE_EDGE_FALLING)
@@ -803,6 +846,8 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
case METHOD_GPIO_7XX:
reg += OMAP7XX_GPIO_INT_CONTROL;
l = __raw_readl(reg);
+ if (trigger & IRQ_TYPE_EDGE_BOTH)
+ bank->toggle_mask |= 1 << gpio;
if (trigger & IRQ_TYPE_EDGE_RISING)
l |= 1 << gpio;
else if (trigger & IRQ_TYPE_EDGE_FALLING)
@@ -1217,7 +1262,7 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
{
void __iomem *isr_reg = NULL;
u32 isr;
- unsigned int gpio_irq;
+ unsigned int gpio_irq, gpio_index;
struct gpio_bank *bank;
u32 retrigger = 0;
int unmasked = 0;
@@ -1284,9 +1329,23 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
gpio_irq = bank->virtual_irq_start;
for (; isr != 0; isr >>= 1, gpio_irq++) {
+ gpio_index = get_gpio_index(irq_to_gpio(gpio_irq));
+
if (!(isr & 1))
continue;
+#ifdef CONFIG_ARCH_OMAP1
+ /*
+ * Some chips can't respond to both rising and falling
+ * at the same time. If this irq was requested with
+ * both flags, we need to flip the ICR data for the IRQ
+ * to respond to the IRQ for the opposite direction.
+ * This will be indicated in the bank toggle_mask.
+ */
+ if (bank->toggle_mask & (1 << gpio_index))
+ _toggle_gpio_edge_triggering(bank, gpio_index);
+#endif
+
generic_handle_irq(gpio_irq);
}
}
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH 03/12] omap: &&/|| confusion in iommu_put()
2010-01-07 0:18 [PATCH 00/12] Omap fixes for 2.6.33-rc3 Tony Lindgren
2010-01-07 0:18 ` [PATCH 01/12] omap: McBSP: Fix possible port lockout Tony Lindgren
2010-01-07 0:18 ` [PATCH 02/12] omap: gpio: Simultaneously requested rising and falling edge Tony Lindgren
@ 2010-01-07 0:19 ` Tony Lindgren
2010-01-07 0:19 ` [PATCH 04/12] omap: Remove uninitialized warning for gpio.c Tony Lindgren
` (8 subsequent siblings)
11 siblings, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 0:19 UTC (permalink / raw)
To: linux-arm-kernel
From: Roel Kluin <roel.kluin@gmail.com>
obj can't be both NULL and be an error pointer.
Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
arch/arm/plat-omap/iommu.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/plat-omap/iommu.c b/arch/arm/plat-omap/iommu.c
index c0ff1e3..463d638 100644
--- a/arch/arm/plat-omap/iommu.c
+++ b/arch/arm/plat-omap/iommu.c
@@ -827,7 +827,7 @@ EXPORT_SYMBOL_GPL(iommu_get);
**/
void iommu_put(struct iommu *obj)
{
- if (!obj && IS_ERR(obj))
+ if (!obj || IS_ERR(obj))
return;
mutex_lock(&obj->iommu_lock);
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH 04/12] omap: Remove uninitialized warning for gpio.c
2010-01-07 0:18 [PATCH 00/12] Omap fixes for 2.6.33-rc3 Tony Lindgren
` (2 preceding siblings ...)
2010-01-07 0:19 ` [PATCH 03/12] omap: &&/|| confusion in iommu_put() Tony Lindgren
@ 2010-01-07 0:19 ` Tony Lindgren
2010-01-07 0:19 ` [PATCH 05/12] omap1: Add 7xx clocks and pin muxes for SPI Tony Lindgren
` (7 subsequent siblings)
11 siblings, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 0:19 UTC (permalink / raw)
To: linux-arm-kernel
Flags is not used on 15xx.
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
arch/arm/plat-omap/gpio.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index f8dfa8d..d17620c 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -1117,7 +1117,7 @@ static inline void _set_gpio_irqenable(struct gpio_bank *bank, int gpio, int ena
*/
static int _set_gpio_wakeup(struct gpio_bank *bank, int gpio, int enable)
{
- unsigned long flags;
+ unsigned long uninitialized_var(flags);
switch (bank->method) {
#ifdef CONFIG_ARCH_OMAP16XX
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH 05/12] omap1: Add 7xx clocks and pin muxes for SPI
2010-01-07 0:18 [PATCH 00/12] Omap fixes for 2.6.33-rc3 Tony Lindgren
` (3 preceding siblings ...)
2010-01-07 0:19 ` [PATCH 04/12] omap: Remove uninitialized warning for gpio.c Tony Lindgren
@ 2010-01-07 0:19 ` Tony Lindgren
2010-01-07 9:46 ` Grazvydas Ignotas
2010-01-07 0:19 ` [PATCH 06/12] omap1: Fix compile for omap1_bl.c Tony Lindgren
` (6 subsequent siblings)
11 siblings, 1 reply; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 0:19 UTC (permalink / raw)
To: linux-arm-kernel
From: Cory Maccarrone <darkstar6262@gmail.com>
Commit 35c9049b27040d09461bc90928ad770be7ddf661 added
drivers/spi/omap_spi_100k.c.
This patch add the related clocks and pin muxing
entries to make the driver work on omap7xx platforms.
Signed-off-by: Cory Maccarrone <darkstar6262@gmail.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
arch/arm/mach-omap1/clock_data.c | 4 +++
arch/arm/mach-omap1/devices.c | 35 +++++++++++++++++++++++++++++
arch/arm/mach-omap1/mux.c | 8 +++++++
arch/arm/plat-omap/include/plat/mux.h | 8 +++++++
arch/arm/plat-omap/include/plat/omap7xx.h | 3 ++
5 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap1/clock_data.c b/arch/arm/mach-omap1/clock_data.c
index 31fba07..2ac5796 100644
--- a/arch/arm/mach-omap1/clock_data.c
+++ b/arch/arm/mach-omap1/clock_data.c
@@ -658,6 +658,10 @@ static struct omap_clk omap_clks[] = {
CLK("i2c_omap.1", "fck", &i2c_fck, CK_16XX | CK_1510 | CK_310 | CK_7XX),
CLK("i2c_omap.1", "ick", &i2c_ick, CK_16XX),
CLK("i2c_omap.1", "ick", &dummy_ck, CK_1510 | CK_310 | CK_7XX),
+ CLK("omap1_spi100k.1", "fck", &dummy_ck, CK_7XX),
+ CLK("omap1_spi100k.1", "ick", &dummy_ck, CK_7XX),
+ CLK("omap1_spi100k.2", "fck", &dummy_ck, CK_7XX),
+ CLK("omap1_spi100k.2", "ick", &dummy_ck, CK_7XX),
CLK("omap_uwire", "fck", &armxor_ck.clk, CK_16XX | CK_1510 | CK_310),
CLK("omap-mcbsp.1", "ick", &dspper_ck, CK_16XX),
CLK("omap-mcbsp.1", "ick", &dummy_ck, CK_1510 | CK_310),
diff --git a/arch/arm/mach-omap1/devices.c b/arch/arm/mach-omap1/devices.c
index 23ded2d..17ebb47 100644
--- a/arch/arm/mach-omap1/devices.c
+++ b/arch/arm/mach-omap1/devices.c
@@ -14,6 +14,7 @@
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/io.h>
+#include <linux/spi/spi.h>
#include <mach/hardware.h>
#include <asm/mach/map.h>
@@ -23,6 +24,7 @@
#include <plat/mux.h>
#include <mach/gpio.h>
#include <plat/mmc.h>
+#include <plat/omap7xx.h>
/*-------------------------------------------------------------------------*/
@@ -196,6 +198,38 @@ void __init omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
/*-------------------------------------------------------------------------*/
+/* OMAP7xx SPI support */
+#if defined(CONFIG_SPI_OMAP_100K) || defined(CONFIG_SPI_OMAP_100K_MODULE)
+
+struct platform_device omap_spi1 = {
+ .name = "omap1_spi100k",
+ .id = 1,
+};
+
+struct platform_device omap_spi2 = {
+ .name = "omap1_spi100k",
+ .id = 2,
+};
+
+static void omap_init_spi100k(void)
+{
+ omap_spi1.dev.platform_data = ioremap(OMAP7XX_SPI1_BASE, 0x7ff);
+ if (omap_spi1.dev.platform_data)
+ platform_device_register(&omap_spi1);
+
+ omap_spi2.dev.platform_data = ioremap(OMAP7XX_SPI2_BASE, 0x7ff);
+ ifi (omap_spi2.dev.platform_data)
+ platform_device_register(&omap_spi2);
+}
+
+#else
+static inline void omap_init_spi100k(void)
+{
+}
+#endif
+
+/*-------------------------------------------------------------------------*/
+
#if defined(CONFIG_OMAP_STI)
#define OMAP1_STI_BASE 0xfffea000
@@ -263,6 +297,7 @@ static int __init omap1_init_devices(void)
omap_init_mbox();
omap_init_rtc();
+ omap_init_spi100k();
omap_init_sti();
return 0;
diff --git a/arch/arm/mach-omap1/mux.c b/arch/arm/mach-omap1/mux.c
index 07212cc..8434137 100644
--- a/arch/arm/mach-omap1/mux.c
+++ b/arch/arm/mach-omap1/mux.c
@@ -62,6 +62,14 @@ MUX_CFG_7XX("MMC_7XX_DAT0", 2, 17, 0, 16, 1, 0)
/* I2C interface */
MUX_CFG_7XX("I2C_7XX_SCL", 5, 1, 0, 0, 1, 0)
MUX_CFG_7XX("I2C_7XX_SDA", 5, 5, 0, 0, 1, 0)
+
+/* SPI pins */
+MUX_CFG_7XX("SPI_7XX_1", 6, 5, 4, 4, 1, 0)
+MUX_CFG_7XX("SPI_7XX_2", 6, 9, 4, 8, 1, 0)
+MUX_CFG_7XX("SPI_7XX_3", 6, 13, 4, 12, 1, 0)
+MUX_CFG_7XX("SPI_7XX_4", 6, 17, 4, 16, 1, 0)
+MUX_CFG_7XX("SPI_7XX_5", 8, 25, 0, 24, 0, 0)
+MUX_CFG_7XX("SPI_7XX_6", 9, 5, 0, 4, 0, 0)
};
#define OMAP7XX_PINS_SZ ARRAY_SIZE(omap7xx_pins)
#else
diff --git a/arch/arm/plat-omap/include/plat/mux.h b/arch/arm/plat-omap/include/plat/mux.h
index 8f069cc..692c90e 100644
--- a/arch/arm/plat-omap/include/plat/mux.h
+++ b/arch/arm/plat-omap/include/plat/mux.h
@@ -183,6 +183,14 @@ enum omap7xx_index {
/* I2C */
I2C_7XX_SCL,
I2C_7XX_SDA,
+
+ /* SPI */
+ SPI_7XX_1,
+ SPI_7XX_2,
+ SPI_7XX_3,
+ SPI_7XX_4,
+ SPI_7XX_5,
+ SPI_7XX_6,
};
enum omap1xxx_index {
diff --git a/arch/arm/plat-omap/include/plat/omap7xx.h b/arch/arm/plat-omap/include/plat/omap7xx.h
index 53f5241..48e4757 100644
--- a/arch/arm/plat-omap/include/plat/omap7xx.h
+++ b/arch/arm/plat-omap/include/plat/omap7xx.h
@@ -46,6 +46,9 @@
#define OMAP7XX_DSPREG_SIZE SZ_128K
#define OMAP7XX_DSPREG_START 0xE1000000
+#define OMAP7XX_SPI1_BASE 0xfffc0800
+#define OMAP7XX_SPI2_BASE 0xfffc1000
+
/*
* ----------------------------------------------------------------------------
* OMAP7XX specific configuration registers
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH 05/12] omap1: Add 7xx clocks and pin muxes for SPI
2010-01-07 0:19 ` [PATCH 05/12] omap1: Add 7xx clocks and pin muxes for SPI Tony Lindgren
@ 2010-01-07 9:46 ` Grazvydas Ignotas
2010-01-07 19:15 ` Tony Lindgren
0 siblings, 1 reply; 17+ messages in thread
From: Grazvydas Ignotas @ 2010-01-07 9:46 UTC (permalink / raw)
To: linux-arm-kernel
<snip>
> diff --git a/arch/arm/mach-omap1/devices.c b/arch/arm/mach-omap1/devices.c
> index 23ded2d..17ebb47 100644
> --- a/arch/arm/mach-omap1/devices.c
> +++ b/arch/arm/mach-omap1/devices.c
> @@ -14,6 +14,7 @@
> ?#include <linux/init.h>
> ?#include <linux/platform_device.h>
> ?#include <linux/io.h>
> +#include <linux/spi/spi.h>
>
> ?#include <mach/hardware.h>
> ?#include <asm/mach/map.h>
> @@ -23,6 +24,7 @@
> ?#include <plat/mux.h>
> ?#include <mach/gpio.h>
> ?#include <plat/mmc.h>
> +#include <plat/omap7xx.h>
>
> ?/*-------------------------------------------------------------------------*/
>
> @@ -196,6 +198,38 @@ void __init omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
>
> ?/*-------------------------------------------------------------------------*/
>
> +/* OMAP7xx SPI support */
> +#if defined(CONFIG_SPI_OMAP_100K) || defined(CONFIG_SPI_OMAP_100K_MODULE)
> +
> +struct platform_device omap_spi1 = {
> + ? ? ? .name ? ? ? ? ? = "omap1_spi100k",
> + ? ? ? .id ? ? ? ? ? ? = 1,
> +};
> +
> +struct platform_device omap_spi2 = {
> + ? ? ? .name ? ? ? ? ? = "omap1_spi100k",
> + ? ? ? .id ? ? ? ? ? ? = 2,
> +};
> +
> +static void omap_init_spi100k(void)
> +{
> + ? ? ? omap_spi1.dev.platform_data = ioremap(OMAP7XX_SPI1_BASE, 0x7ff);
> + ? ? ? if (omap_spi1.dev.platform_data)
> + ? ? ? ? ? ? ? platform_device_register(&omap_spi1);
> +
> + ? ? ? omap_spi2.dev.platform_data = ioremap(OMAP7XX_SPI2_BASE, 0x7ff);
> + ? ? ? ifi (omap_spi2.dev.platform_data)
a typo here?
> + ? ? ? ? ? ? ? platform_device_register(&omap_spi2);
> +}
> +
> +#else
> +static inline void omap_init_spi100k(void)
> +{
> +}
> +#endif
> +
> +/*-------------------------------------------------------------------------*/
> +
> ?#if defined(CONFIG_OMAP_STI)
>
> ?#define OMAP1_STI_BASE ? ? ? ? 0xfffea000
^ permalink raw reply [flat|nested] 17+ messages in thread* [PATCH 05/12] omap1: Add 7xx clocks and pin muxes for SPI
2010-01-07 9:46 ` Grazvydas Ignotas
@ 2010-01-07 19:15 ` Tony Lindgren
2010-01-09 18:02 ` Cory Maccarrone
0 siblings, 1 reply; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 19:15 UTC (permalink / raw)
To: linux-arm-kernel
* Grazvydas Ignotas <notasas@gmail.com> [100107 01:44]:
> <snip>
>
> > --- a/arch/arm/mach-omap1/devices.c
> > +++ b/arch/arm/mach-omap1/devices.c
> > @@ -196,6 +198,38 @@ void __init omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
> >
> > ?/*-------------------------------------------------------------------------*/
> >
> > +/* OMAP7xx SPI support */
> > +#if defined(CONFIG_SPI_OMAP_100K) || defined(CONFIG_SPI_OMAP_100K_MODULE)
> > +
> > +struct platform_device omap_spi1 = {
> > + ? ? ? .name ? ? ? ? ? = "omap1_spi100k",
> > + ? ? ? .id ? ? ? ? ? ? = 1,
> > +};
> > +
> > +struct platform_device omap_spi2 = {
> > + ? ? ? .name ? ? ? ? ? = "omap1_spi100k",
> > + ? ? ? .id ? ? ? ? ? ? = 2,
> > +};
> > +
> > +static void omap_init_spi100k(void)
> > +{
> > + ? ? ? omap_spi1.dev.platform_data = ioremap(OMAP7XX_SPI1_BASE, 0x7ff);
> > + ? ? ? if (omap_spi1.dev.platform_data)
> > + ? ? ? ? ? ? ? platform_device_register(&omap_spi1);
> > +
> > + ? ? ? omap_spi2.dev.platform_data = ioremap(OMAP7XX_SPI2_BASE, 0x7ff);
> > + ? ? ? ifi (omap_spi2.dev.platform_data)
>
> a typo here?
Thanks, for pointing that out, my fault for editing the patch.. Fixed below
and now compile tested with omap1_spi100k enabled :)
Regards,
Tony
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 06/12] omap1: Fix compile for omap1_bl.c
2010-01-07 0:18 [PATCH 00/12] Omap fixes for 2.6.33-rc3 Tony Lindgren
` (4 preceding siblings ...)
2010-01-07 0:19 ` [PATCH 05/12] omap1: Add 7xx clocks and pin muxes for SPI Tony Lindgren
@ 2010-01-07 0:19 ` Tony Lindgren
2010-01-07 0:19 ` [PATCH 07/12] omap2/3: make serial_in_override() address the right uart port Tony Lindgren
` (5 subsequent siblings)
11 siblings, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 0:19 UTC (permalink / raw)
To: linux-arm-kernel
Commit 9905a43b made struct backlight_ops const. Omap was
setting check_fb dynamically, which caused the following
compile error:
drivers/video/backlight/omap1_bl.c: In function 'omapbl_probe':
drivers/video/backlight/omap1_bl.c:142: error: assignment of read-only variable 'omapbl_ops'
Turns out pdata->check_fb is not being used, so just remove
it to fix the compile.
Cc: Emese Revfy <re.emese@gmail.com>
Cc: Richard Purdie <rpurdie@linux.intel.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
arch/arm/plat-omap/include/plat/board.h | 1 -
drivers/video/backlight/omap1_bl.c | 2 --
2 files changed, 0 insertions(+), 3 deletions(-)
diff --git a/arch/arm/plat-omap/include/plat/board.h b/arch/arm/plat-omap/include/plat/board.h
index 376ce18..5cd6220 100644
--- a/arch/arm/plat-omap/include/plat/board.h
+++ b/arch/arm/plat-omap/include/plat/board.h
@@ -99,7 +99,6 @@ struct fb_info;
struct omap_backlight_config {
int default_intensity;
int (*set_power)(struct device *dev, int state);
- int (*check_fb)(struct fb_info *fb);
};
struct omap_fbmem_config {
diff --git a/drivers/video/backlight/omap1_bl.c b/drivers/video/backlight/omap1_bl.c
index 409ca96..a3a7f89 100644
--- a/drivers/video/backlight/omap1_bl.c
+++ b/drivers/video/backlight/omap1_bl.c
@@ -139,8 +139,6 @@ static int omapbl_probe(struct platform_device *pdev)
if (!pdata)
return -ENXIO;
- omapbl_ops.check_fb = pdata->check_fb;
-
bl = kzalloc(sizeof(struct omap_backlight), GFP_KERNEL);
if (unlikely(!bl))
return -ENOMEM;
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH 07/12] omap2/3: make serial_in_override() address the right uart port
2010-01-07 0:18 [PATCH 00/12] Omap fixes for 2.6.33-rc3 Tony Lindgren
` (5 preceding siblings ...)
2010-01-07 0:19 ` [PATCH 06/12] omap1: Fix compile for omap1_bl.c Tony Lindgren
@ 2010-01-07 0:19 ` Tony Lindgren
2010-01-07 0:20 ` [PATCH 08/12] omap2/3: ZOOM: Correcting key mapping for few keys Tony Lindgren
` (4 subsequent siblings)
11 siblings, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 0:19 UTC (permalink / raw)
To: linux-arm-kernel
From: Alexander Shishkin <virtuoso@slind.org>
Commit f62349ee9788b1d94c55eb6c291d74a1f69bdd9e makes it possible to
have some other than first uart port as ttyS0, which breaks the workaround
serial_in_override() function which will try to address the first uart
port (for ttyS0) and not the one that was initialized.
Signed-off-by: Alexander Shishkin <virtuoso@slind.org>
CC: Mika Westerberg <ext-mika.1.westerberg@nokia.com>
Acked-by: Kevin Hilman <khilman@deeprootsystems.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
arch/arm/mach-omap2/serial.c | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
index 19805a7..8c964be 100644
--- a/arch/arm/mach-omap2/serial.c
+++ b/arch/arm/mach-omap2/serial.c
@@ -125,6 +125,13 @@ static struct plat_serial8250_port serial_platform_data3[] = {
}
};
#endif
+static inline unsigned int __serial_read_reg(struct uart_port *up,
+ int offset)
+{
+ offset <<= up->regshift;
+ return (unsigned int)__raw_readb(up->membase + offset);
+}
+
static inline unsigned int serial_read_reg(struct plat_serial8250_port *up,
int offset)
{
@@ -583,11 +590,12 @@ static unsigned int serial_in_override(struct uart_port *up, int offset)
{
if (UART_RX == offset) {
unsigned int lsr;
- lsr = serial_read_reg(omap_uart[up->line].p, UART_LSR);
+ lsr = __serial_read_reg(up, UART_LSR);
if (!(lsr & UART_LSR_DR))
return -EPERM;
}
- return serial_read_reg(omap_uart[up->line].p, offset);
+
+ return __serial_read_reg(up, offset);
}
void __init omap_serial_early_init(void)
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH 08/12] omap2/3: ZOOM: Correcting key mapping for few keys
2010-01-07 0:18 [PATCH 00/12] Omap fixes for 2.6.33-rc3 Tony Lindgren
` (6 preceding siblings ...)
2010-01-07 0:19 ` [PATCH 07/12] omap2/3: make serial_in_override() address the right uart port Tony Lindgren
@ 2010-01-07 0:20 ` Tony Lindgren
2010-01-07 0:20 ` [PATCH 09/12] omap3: add missing parentheses Tony Lindgren
` (3 subsequent siblings)
11 siblings, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 0:20 UTC (permalink / raw)
To: linux-arm-kernel
From: Vimal Singh <vimalsingh@ti.com>
Keys: 'right arrow', 'up arrow' and 'select' were mapped
wrongly. This patch corrects them.
This patch also adds one missing key present in the board,
currently I added it as 'unknown' key, as I am not able to
find proper description for this key.
One key entry (r: 7, c: 5) is present in the keymap, which
is really not present in the board, removing it.
Signed-off-by: Vimal Singh <vimalsingh@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
arch/arm/mach-omap2/board-zoom-peripherals.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c
index 8dd277c..1e3dfb6 100755
--- a/arch/arm/mach-omap2/board-zoom-peripherals.c
+++ b/arch/arm/mach-omap2/board-zoom-peripherals.c
@@ -63,21 +63,21 @@ static int board_keymap[] = {
KEY(5, 1, KEY_H),
KEY(5, 2, KEY_J),
KEY(5, 3, KEY_F3),
+ KEY(5, 4, KEY_UNKNOWN),
KEY(5, 5, KEY_VOLUMEDOWN),
KEY(5, 6, KEY_M),
- KEY(5, 7, KEY_ENTER),
+ KEY(5, 7, KEY_RIGHT),
KEY(6, 0, KEY_Q),
KEY(6, 1, KEY_A),
KEY(6, 2, KEY_N),
KEY(6, 3, KEY_BACKSPACE),
KEY(6, 6, KEY_P),
- KEY(6, 7, KEY_SELECT),
+ KEY(6, 7, KEY_UP),
KEY(7, 0, KEY_PROG1), /*MACRO 1 <User defined> */
KEY(7, 1, KEY_PROG2), /*MACRO 2 <User defined> */
KEY(7, 2, KEY_PROG3), /*MACRO 3 <User defined> */
KEY(7, 3, KEY_PROG4), /*MACRO 4 <User defined> */
- KEY(7, 5, KEY_RIGHT),
- KEY(7, 6, KEY_UP),
+ KEY(7, 6, KEY_SELECT),
KEY(7, 7, KEY_DOWN)
};
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH 09/12] omap3: add missing parentheses
2010-01-07 0:18 [PATCH 00/12] Omap fixes for 2.6.33-rc3 Tony Lindgren
` (7 preceding siblings ...)
2010-01-07 0:20 ` [PATCH 08/12] omap2/3: ZOOM: Correcting key mapping for few keys Tony Lindgren
@ 2010-01-07 0:20 ` Tony Lindgren
2010-01-07 0:20 ` [PATCH 10/12] " Tony Lindgren
` (2 subsequent siblings)
11 siblings, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 0:20 UTC (permalink / raw)
To: linux-arm-kernel
From: Roel Kluin <roel.kluin@gmail.com>
not(!) has a higher precedence than bit and(&).
Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
arch/arm/plat-omap/include/plat/control.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/plat-omap/include/plat/control.h b/arch/arm/plat-omap/include/plat/control.h
index 2ae8843..a745d62 100644
--- a/arch/arm/plat-omap/include/plat/control.h
+++ b/arch/arm/plat-omap/include/plat/control.h
@@ -147,7 +147,7 @@
#define OMAP343X_CONTROL_IVA2_BOOTADDR (OMAP2_CONTROL_GENERAL + 0x0190)
#define OMAP343X_CONTROL_IVA2_BOOTMOD (OMAP2_CONTROL_GENERAL + 0x0194)
#define OMAP343X_CONTROL_DEBOBS(i) (OMAP2_CONTROL_GENERAL + 0x01B0 \
- + ((i) >> 1) * 4 + (!(i) & 1) * 2)
+ + ((i) >> 1) * 4 + (!((i) & 1)) * 2)
#define OMAP343X_CONTROL_PROG_IO0 (OMAP2_CONTROL_GENERAL + 0x01D4)
#define OMAP343X_CONTROL_PROG_IO1 (OMAP2_CONTROL_GENERAL + 0x01D8)
#define OMAP343X_CONTROL_DSS_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01E0)
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH 10/12] omap3: add missing parentheses
2010-01-07 0:18 [PATCH 00/12] Omap fixes for 2.6.33-rc3 Tony Lindgren
` (8 preceding siblings ...)
2010-01-07 0:20 ` [PATCH 09/12] omap3: add missing parentheses Tony Lindgren
@ 2010-01-07 0:20 ` Tony Lindgren
2010-01-07 0:20 ` [PATCH 11/12] omap3: Fix booting if package is uninitialized Tony Lindgren
2010-01-07 0:20 ` [PATCH 12/12] omap3: EVM: Choose OMAP_PACKAGE_CBB Tony Lindgren
11 siblings, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 0:20 UTC (permalink / raw)
To: linux-arm-kernel
From: Roel Kluin <roel.kluin@gmail.com>
`!' has a higher precedence than `&' so parentheses are required.
Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
arch/arm/mach-omap2/pm34xx.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 81ed252..c6cc809 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -124,8 +124,8 @@ static void omap3_core_save_context(void)
control_padconf_off |= START_PADCONF_SAVE;
omap_ctrl_writel(control_padconf_off, OMAP343X_CONTROL_PADCONF_OFF);
/* wait for the save to complete */
- while (!omap_ctrl_readl(OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS)
- & PADCONF_SAVE_DONE)
+ while (!(omap_ctrl_readl(OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS)
+ & PADCONF_SAVE_DONE))
;
/* Save the Interrupt controller context */
omap_intc_save_context();
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH 11/12] omap3: Fix booting if package is uninitialized
2010-01-07 0:18 [PATCH 00/12] Omap fixes for 2.6.33-rc3 Tony Lindgren
` (9 preceding siblings ...)
2010-01-07 0:20 ` [PATCH 10/12] " Tony Lindgren
@ 2010-01-07 0:20 ` Tony Lindgren
2010-01-07 0:20 ` [PATCH 12/12] omap3: EVM: Choose OMAP_PACKAGE_CBB Tony Lindgren
11 siblings, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 0:20 UTC (permalink / raw)
To: linux-arm-kernel
Otherwise bringing up new boards can be harder:
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 5 [#1]
last sysfs file:
Modules linked in:
CPU: 0 Not tainted (2.6.33-rc2-00015-g0bc9c93-dirty #37)
PC is at omap_mux_init+0xa4/0x3d8
LR is at omap_mux_init+0x3c/0x3d8
...
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
arch/arm/mach-omap2/mux.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
index e071b3f..459ef23 100644
--- a/arch/arm/mach-omap2/mux.c
+++ b/arch/arm/mach-omap2/mux.c
@@ -994,8 +994,10 @@ int __init omap_mux_init(u32 mux_pbase, u32 mux_size,
}
#ifdef CONFIG_OMAP_MUX
- omap_mux_package_fixup(package_subset, superset);
- omap_mux_package_init_balls(package_balls, superset);
+ if (package_subset)
+ omap_mux_package_fixup(package_subset, superset);
+ if (package_balls)
+ omap_mux_package_init_balls(package_balls, superset);
omap_mux_set_cmdline_signals();
omap_mux_set_board_signals(board_mux);
#endif
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH 12/12] omap3: EVM: Choose OMAP_PACKAGE_CBB
2010-01-07 0:18 [PATCH 00/12] Omap fixes for 2.6.33-rc3 Tony Lindgren
` (10 preceding siblings ...)
2010-01-07 0:20 ` [PATCH 11/12] omap3: Fix booting if package is uninitialized Tony Lindgren
@ 2010-01-07 0:20 ` Tony Lindgren
11 siblings, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2010-01-07 0:20 UTC (permalink / raw)
To: linux-arm-kernel
From: Vaibhav Hiremath <hvaibhav@ti.com>
Without this the kernel doesn't boot, it craches in
omap_mux_package_fixup(), since the package_subset becomes NULL.
Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
arch/arm/mach-omap2/Kconfig | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 10eafa7..606bf04 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -80,6 +80,7 @@ config MACH_OVERO
config MACH_OMAP3EVM
bool "OMAP 3530 EVM board"
depends on ARCH_OMAP3 && ARCH_OMAP34XX
+ select OMAP_PACKAGE_CBB
config MACH_OMAP3517EVM
bool "OMAP3517/ AM3517 EVM board"
^ permalink raw reply related [flat|nested] 17+ messages in thread