Commit 464d155c authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/home/rmk/linux-2.6-arm

* master.kernel.org:/home/rmk/linux-2.6-arm: (22 commits)
  ARM: Fix lubbock defconfig build
  ARM: 5769/1: CPU_ARM920T: remove dead Maverick EP9312 URL
  ARM: 5768/1: ep93xx: remove dead code in ep93xx_gpio_ab_irq_handler()
  ARM: 5767/1: ep93xx: remove ep93xx_init_time() prototype
  ARM: 5765/1: Updated U300 defconfig
  ARM: 5766/1: Fix watchdog enabling for AT91SAM9G45
  ARM: 5764/1: bcmring: add oprofile pmu support
  [ARM] pxa/spitz: add gpio button support (fixes regression)
  [ARM] pxa/cm-x300: fix mmc numbering
  ARM: 5763/1: ARM: SMP: Fix the BUG with CONFIG_PREEMPT enabled
  ARM: 5760/1: ep93xx: fix build error in edb93xx.c
  ARM: 5759/1: Add register information of threads to coredump
  ARM: 5757/1: Thumb-2: Correct "mov.w pc, lr" instruction which is unpredictable
  MXC: fix reset for mx31, mx35 and mx27 SoCs
  fix pcm037_eet compilation with the new SPI driver
  fix compilation of i.MX31 platforms
  pcm970 mmc: Fix ro switch
  pcm038: Add SPI/MC13783 support
  mx25: Add missing copyright / license header
  mx25pdk: remove nand support as it is not present in current tree
  ...
parents fefcfd43 09963911
This diff is collapsed.
...@@ -98,6 +98,9 @@ extern int elf_check_arch(const struct elf32_hdr *); ...@@ -98,6 +98,9 @@ extern int elf_check_arch(const struct elf32_hdr *);
extern int arm_elf_read_implies_exec(const struct elf32_hdr *, int); extern int arm_elf_read_implies_exec(const struct elf32_hdr *, int);
#define elf_read_implies_exec(ex,stk) arm_elf_read_implies_exec(&(ex), stk) #define elf_read_implies_exec(ex,stk) arm_elf_read_implies_exec(&(ex), stk)
int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs);
#define ELF_CORE_COPY_TASK_REGS dump_task_regs
#define USE_ELF_CORE_DUMP #define USE_ELF_CORE_DUMP
#define ELF_EXEC_PAGESIZE 4096 #define ELF_EXEC_PAGESIZE 4096
......
...@@ -350,7 +350,7 @@ static inline void local_flush_tlb_mm(struct mm_struct *mm) ...@@ -350,7 +350,7 @@ static inline void local_flush_tlb_mm(struct mm_struct *mm)
if (tlb_flag(TLB_WB)) if (tlb_flag(TLB_WB))
dsb(); dsb();
if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(mm))) { if (cpumask_test_cpu(get_cpu(), mm_cpumask(mm))) {
if (tlb_flag(TLB_V3_FULL)) if (tlb_flag(TLB_V3_FULL))
asm("mcr p15, 0, %0, c6, c0, 0" : : "r" (zero) : "cc"); asm("mcr p15, 0, %0, c6, c0, 0" : : "r" (zero) : "cc");
if (tlb_flag(TLB_V4_U_FULL)) if (tlb_flag(TLB_V4_U_FULL))
...@@ -360,6 +360,7 @@ static inline void local_flush_tlb_mm(struct mm_struct *mm) ...@@ -360,6 +360,7 @@ static inline void local_flush_tlb_mm(struct mm_struct *mm)
if (tlb_flag(TLB_V4_I_FULL)) if (tlb_flag(TLB_V4_I_FULL))
asm("mcr p15, 0, %0, c8, c5, 0" : : "r" (zero) : "cc"); asm("mcr p15, 0, %0, c8, c5, 0" : : "r" (zero) : "cc");
} }
put_cpu();
if (tlb_flag(TLB_V6_U_ASID)) if (tlb_flag(TLB_V6_U_ASID))
asm("mcr p15, 0, %0, c8, c7, 2" : : "r" (asid) : "cc"); asm("mcr p15, 0, %0, c8, c7, 2" : : "r" (asid) : "cc");
......
...@@ -608,33 +608,33 @@ call_fpe: ...@@ -608,33 +608,33 @@ call_fpe:
THUMB( add pc, r8 ) THUMB( add pc, r8 )
nop nop
W(mov) pc, lr @ CP#0 movw_pc lr @ CP#0
W(b) do_fpe @ CP#1 (FPE) W(b) do_fpe @ CP#1 (FPE)
W(b) do_fpe @ CP#2 (FPE) W(b) do_fpe @ CP#2 (FPE)
W(mov) pc, lr @ CP#3 movw_pc lr @ CP#3
#ifdef CONFIG_CRUNCH #ifdef CONFIG_CRUNCH
b crunch_task_enable @ CP#4 (MaverickCrunch) b crunch_task_enable @ CP#4 (MaverickCrunch)
b crunch_task_enable @ CP#5 (MaverickCrunch) b crunch_task_enable @ CP#5 (MaverickCrunch)
b crunch_task_enable @ CP#6 (MaverickCrunch) b crunch_task_enable @ CP#6 (MaverickCrunch)
#else #else
W(mov) pc, lr @ CP#4 movw_pc lr @ CP#4
W(mov) pc, lr @ CP#5 movw_pc lr @ CP#5
W(mov) pc, lr @ CP#6 movw_pc lr @ CP#6
#endif #endif
W(mov) pc, lr @ CP#7 movw_pc lr @ CP#7
W(mov) pc, lr @ CP#8 movw_pc lr @ CP#8
W(mov) pc, lr @ CP#9 movw_pc lr @ CP#9
#ifdef CONFIG_VFP #ifdef CONFIG_VFP
W(b) do_vfp @ CP#10 (VFP) W(b) do_vfp @ CP#10 (VFP)
W(b) do_vfp @ CP#11 (VFP) W(b) do_vfp @ CP#11 (VFP)
#else #else
W(mov) pc, lr @ CP#10 (VFP) movw_pc lr @ CP#10 (VFP)
W(mov) pc, lr @ CP#11 (VFP) movw_pc lr @ CP#11 (VFP)
#endif #endif
W(mov) pc, lr @ CP#12 movw_pc lr @ CP#12
W(mov) pc, lr @ CP#13 movw_pc lr @ CP#13
W(mov) pc, lr @ CP#14 (Debug) movw_pc lr @ CP#14 (Debug)
W(mov) pc, lr @ CP#15 (Control) movw_pc lr @ CP#15 (Control)
#ifdef CONFIG_NEON #ifdef CONFIG_NEON
.align 6 .align 6
......
...@@ -110,6 +110,13 @@ ...@@ -110,6 +110,13 @@
mov \rd, sp, lsr #13 mov \rd, sp, lsr #13
mov \rd, \rd, lsl #13 mov \rd, \rd, lsl #13
.endm .endm
@
@ 32-bit wide "mov pc, reg"
@
.macro movw_pc, reg
mov pc, \reg
.endm
#else /* CONFIG_THUMB2_KERNEL */ #else /* CONFIG_THUMB2_KERNEL */
.macro svc_exit, rpsr .macro svc_exit, rpsr
clrex @ clear the exclusive monitor clrex @ clear the exclusive monitor
...@@ -146,6 +153,14 @@ ...@@ -146,6 +153,14 @@
lsr \rd, \rd, #13 lsr \rd, \rd, #13
mov \rd, \rd, lsl #13 mov \rd, \rd, lsl #13
.endm .endm
@
@ 32-bit wide "mov pc, reg"
@
.macro movw_pc, reg
mov pc, \reg
nop
.endm
#endif /* !CONFIG_THUMB2_KERNEL */ #endif /* !CONFIG_THUMB2_KERNEL */
/* /*
......
...@@ -327,6 +327,15 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start, ...@@ -327,6 +327,15 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start,
return 0; return 0;
} }
/*
* Fill in the task's elfregs structure for a core dump.
*/
int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs)
{
elf_core_copy_regs(elfregs, task_pt_regs(t));
return 1;
}
/* /*
* fill in the fpe structure for a core dump... * fill in the fpe structure for a core dump...
*/ */
......
...@@ -838,7 +838,7 @@ static void __init at91_add_device_rtt(void) ...@@ -838,7 +838,7 @@ static void __init at91_add_device_rtt(void)
* Watchdog * Watchdog
* -------------------------------------------------------------------- */ * -------------------------------------------------------------------- */
#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
static struct platform_device at91sam9g45_wdt_device = { static struct platform_device at91sam9g45_wdt_device = {
.name = "at91_wdt", .name = "at91_wdt",
.id = -1, .id = -1,
......
...@@ -206,7 +206,6 @@ static void ep93xx_gpio_ab_irq_handler(unsigned int irq, struct irq_desc *desc) ...@@ -206,7 +206,6 @@ static void ep93xx_gpio_ab_irq_handler(unsigned int irq, struct irq_desc *desc)
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
if (status & (1 << i)) { if (status & (1 << i)) {
int gpio_irq = gpio_to_irq(EP93XX_GPIO_LINE_B(0)) + i; int gpio_irq = gpio_to_irq(EP93XX_GPIO_LINE_B(0)) + i;
desc = irq_desc + gpio_irq;
generic_handle_irq(gpio_irq); generic_handle_irq(gpio_irq);
} }
} }
......
...@@ -112,7 +112,7 @@ static void __init edb93xx_register_i2c(void) ...@@ -112,7 +112,7 @@ static void __init edb93xx_register_i2c(void)
ARRAY_SIZE(edb93xxa_i2c_board_info)); ARRAY_SIZE(edb93xxa_i2c_board_info));
} else if (machine_is_edb9307() || machine_is_edb9312() || } else if (machine_is_edb9307() || machine_is_edb9312() ||
machine_is_edb9315()) { machine_is_edb9315()) {
ep93xx_register_i2c(&edb93xx_i2c_gpio_data ep93xx_register_i2c(&edb93xx_i2c_gpio_data,
edb93xx_i2c_board_info, edb93xx_i2c_board_info,
ARRAY_SIZE(edb93xx_i2c_board_info)); ARRAY_SIZE(edb93xx_i2c_board_info));
} }
......
...@@ -17,7 +17,6 @@ struct ep93xx_eth_data ...@@ -17,7 +17,6 @@ struct ep93xx_eth_data
void ep93xx_map_io(void); void ep93xx_map_io(void);
void ep93xx_init_irq(void); void ep93xx_init_irq(void);
void ep93xx_init_time(unsigned long);
/* EP93xx System Controller software locked register write */ /* EP93xx System Controller software locked register write */
void ep93xx_syscon_swlocked_write(unsigned int val, void __iomem *reg); void ep93xx_syscon_swlocked_write(unsigned int val, void __iomem *reg);
......
...@@ -638,9 +638,9 @@ static struct clk_lookup lookups[] = { ...@@ -638,9 +638,9 @@ static struct clk_lookup lookups[] = {
_REGISTER_CLOCK("mxc-mmc.0", NULL, sdhc1_clk) _REGISTER_CLOCK("mxc-mmc.0", NULL, sdhc1_clk)
_REGISTER_CLOCK("mxc-mmc.1", NULL, sdhc2_clk) _REGISTER_CLOCK("mxc-mmc.1", NULL, sdhc2_clk)
_REGISTER_CLOCK("mxc-mmc.2", NULL, sdhc3_clk) _REGISTER_CLOCK("mxc-mmc.2", NULL, sdhc3_clk)
_REGISTER_CLOCK(NULL, "cspi1", cspi1_clk) _REGISTER_CLOCK("spi_imx.0", NULL, cspi1_clk)
_REGISTER_CLOCK(NULL, "cspi2", cspi2_clk) _REGISTER_CLOCK("spi_imx.1", NULL, cspi2_clk)
_REGISTER_CLOCK(NULL, "cspi3", cspi3_clk) _REGISTER_CLOCK("spi_imx.2", NULL, cspi3_clk)
_REGISTER_CLOCK("imx-fb.0", NULL, lcdc_clk) _REGISTER_CLOCK("imx-fb.0", NULL, lcdc_clk)
_REGISTER_CLOCK(NULL, "csi", csi_clk) _REGISTER_CLOCK(NULL, "csi", csi_clk)
_REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk) _REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk)
...@@ -665,7 +665,7 @@ static struct clk_lookup lookups[] = { ...@@ -665,7 +665,7 @@ static struct clk_lookup lookups[] = {
_REGISTER_CLOCK(NULL, "sahara2", sahara2_clk) _REGISTER_CLOCK(NULL, "sahara2", sahara2_clk)
_REGISTER_CLOCK(NULL, "ata", ata_clk) _REGISTER_CLOCK(NULL, "ata", ata_clk)
_REGISTER_CLOCK(NULL, "mstick", mstick_clk) _REGISTER_CLOCK(NULL, "mstick", mstick_clk)
_REGISTER_CLOCK(NULL, "wdog", wdog_clk) _REGISTER_CLOCK("imx-wdt.0", NULL, wdog_clk)
_REGISTER_CLOCK(NULL, "gpio", gpio_clk) _REGISTER_CLOCK(NULL, "gpio", gpio_clk)
_REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk)
_REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk)
......
...@@ -23,6 +23,10 @@ ...@@ -23,6 +23,10 @@
#include <linux/mtd/plat-ram.h> #include <linux/mtd/plat-ram.h>
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/regulator/machine.h>
#include <linux/mfd/mc13783.h>
#include <linux/spi/spi.h>
#include <linux/irq.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -35,6 +39,7 @@ ...@@ -35,6 +39,7 @@
#include <mach/iomux.h> #include <mach/iomux.h>
#include <mach/imx-uart.h> #include <mach/imx-uart.h>
#include <mach/mxc_nand.h> #include <mach/mxc_nand.h>
#include <mach/spi.h>
#include "devices.h" #include "devices.h"
...@@ -78,8 +83,6 @@ static int pcm038_pins[] = { ...@@ -78,8 +83,6 @@ static int pcm038_pins[] = {
PC6_PF_I2C2_SCL, PC6_PF_I2C2_SCL,
/* SPI1 */ /* SPI1 */
PD25_PF_CSPI1_RDY, PD25_PF_CSPI1_RDY,
PD27_PF_CSPI1_SS1,
PD28_PF_CSPI1_SS0,
PD29_PF_CSPI1_SCLK, PD29_PF_CSPI1_SCLK,
PD30_PF_CSPI1_MISO, PD30_PF_CSPI1_MISO,
PD31_PF_CSPI1_MOSI, PD31_PF_CSPI1_MOSI,
...@@ -196,6 +199,86 @@ static struct i2c_board_info pcm038_i2c_devices[] = { ...@@ -196,6 +199,86 @@ static struct i2c_board_info pcm038_i2c_devices[] = {
} }
}; };
static int pcm038_spi_cs[] = {GPIO_PORTD + 28};
static struct spi_imx_master pcm038_spi_0_data = {
.chipselect = pcm038_spi_cs,
.num_chipselect = ARRAY_SIZE(pcm038_spi_cs),
};
static struct regulator_consumer_supply sdhc1_consumers[] = {
{
.dev = &mxc_sdhc_device1.dev,
.supply = "sdhc_vcc",
},
};
static struct regulator_init_data sdhc1_data = {
.constraints = {
.min_uV = 3000000,
.max_uV = 3400000,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL |
REGULATOR_MODE_FAST,
.always_on = 0,
.boot_on = 0,
},
.num_consumer_supplies = ARRAY_SIZE(sdhc1_consumers),
.consumer_supplies = sdhc1_consumers,
};
static struct regulator_consumer_supply cam_consumers[] = {
{
.dev = NULL,
.supply = "imx_cam_vcc",
},
};
static struct regulator_init_data cam_data = {
.constraints = {
.min_uV = 3000000,
.max_uV = 3400000,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL |
REGULATOR_MODE_FAST,
.always_on = 0,
.boot_on = 0,
},
.num_consumer_supplies = ARRAY_SIZE(cam_consumers),
.consumer_supplies = cam_consumers,
};
struct mc13783_regulator_init_data pcm038_regulators[] = {
{
.id = MC13783_REGU_VCAM,
.init_data = &cam_data,
}, {
.id = MC13783_REGU_VMMC1,
.init_data = &sdhc1_data,
},
};
static struct mc13783_platform_data pcm038_pmic = {
.regulators = pcm038_regulators,
.num_regulators = ARRAY_SIZE(pcm038_regulators),
.flags = MC13783_USE_ADC | MC13783_USE_REGULATOR |
MC13783_USE_TOUCHSCREEN,
};
static struct spi_board_info pcm038_spi_board_info[] __initdata = {
{
.modalias = "mc13783",
.irq = IRQ_GPIOB(23),
.max_speed_hz = 300000,
.bus_num = 0,
.chip_select = 0,
.platform_data = &pcm038_pmic,
.mode = SPI_CS_HIGH,
}
};
static void __init pcm038_init(void) static void __init pcm038_init(void)
{ {
mxc_gpio_setup_multiple_pins(pcm038_pins, ARRAY_SIZE(pcm038_pins), mxc_gpio_setup_multiple_pins(pcm038_pins, ARRAY_SIZE(pcm038_pins),
...@@ -219,6 +302,15 @@ static void __init pcm038_init(void) ...@@ -219,6 +302,15 @@ static void __init pcm038_init(void)
/* PE18 for user-LED D40 */ /* PE18 for user-LED D40 */
mxc_gpio_mode(GPIO_PORTE | 18 | GPIO_GPIO | GPIO_OUT); mxc_gpio_mode(GPIO_PORTE | 18 | GPIO_GPIO | GPIO_OUT);
mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_OUT);
/* MC13783 IRQ */
mxc_gpio_mode(GPIO_PORTB | 23 | GPIO_GPIO | GPIO_IN);
mxc_register_device(&mxc_spi_device0, &pcm038_spi_0_data);
spi_register_board_info(pcm038_spi_board_info,
ARRAY_SIZE(pcm038_spi_board_info));
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
#ifdef CONFIG_MACH_PCM970_BASEBOARD #ifdef CONFIG_MACH_PCM970_BASEBOARD
......
...@@ -39,7 +39,6 @@ static int pcm970_pins[] = { ...@@ -39,7 +39,6 @@ static int pcm970_pins[] = {
PB7_PF_SD2_D3, PB7_PF_SD2_D3,
PB8_PF_SD2_CMD, PB8_PF_SD2_CMD,
PB9_PF_SD2_CLK, PB9_PF_SD2_CLK,
GPIO_PORTC | 28 | GPIO_GPIO | GPIO_IN, /* card detect */
/* display */ /* display */
PA5_PF_LSCLK, PA5_PF_LSCLK,
PA6_PF_LD0, PA6_PF_LD0,
...@@ -228,6 +227,7 @@ void __init pcm970_baseboard_init(void) ...@@ -228,6 +227,7 @@ void __init pcm970_baseboard_init(void)
"PCM970"); "PCM970");
mxc_register_device(&mxc_fb_device, &pcm038_fb_data); mxc_register_device(&mxc_fb_device, &pcm038_fb_data);
mxc_gpio_mode(GPIO_PORTC | 28 | GPIO_GPIO | GPIO_IN);
mxc_register_device(&mxc_sdhc_device1, &sdhc_pdata); mxc_register_device(&mxc_sdhc_device1, &sdhc_pdata);
platform_device_register(&pcm970_sja1000); platform_device_register(&pcm970_sja1000);
} }
/*
* Copyright 2009 Sascha Hauer, <kernel@pengutronix.de>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <mach/mx25.h> #include <mach/mx25.h>
#include <mach/irqs.h> #include <mach/irqs.h>
......
/*
* Copyright 2009 Sascha Hauer, <kernel@pengutronix.de>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include <linux/types.h> #include <linux/types.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/clk.h> #include <linux/clk.h>
...@@ -23,19 +41,12 @@ static struct imxuart_platform_data uart_pdata = { ...@@ -23,19 +41,12 @@ static struct imxuart_platform_data uart_pdata = {
.flags = IMXUART_HAVE_RTSCTS, .flags = IMXUART_HAVE_RTSCTS,
}; };
static struct mxc_nand_platform_data nand_board_info = {
.width = 1,
.hw_ecc = 1,
};
static void __init mx25pdk_init(void) static void __init mx25pdk_init(void)
{ {
mxc_register_device(&mxc_uart_device0, &uart_pdata); mxc_register_device(&mxc_uart_device0, &uart_pdata);
mxc_register_device(&mxc_usbh2, NULL); mxc_register_device(&mxc_usbh2, NULL);
mxc_register_device(&mxc_nand_device, &nand_board_info);
} }
static void __init mx25pdk_timer_init(void) static void __init mx25pdk_timer_init(void)
{ {
mx25_clocks_init(26000000); mx25_clocks_init(26000000);
......
...@@ -443,7 +443,7 @@ static struct clk_lookup lookups[] = { ...@@ -443,7 +443,7 @@ static struct clk_lookup lookups[] = {
_REGISTER_CLOCK("mxc-ehci.1", "usb", usbotg_clk) _REGISTER_CLOCK("mxc-ehci.1", "usb", usbotg_clk)
_REGISTER_CLOCK("mxc-ehci.2", "usb", usbotg_clk) _REGISTER_CLOCK("mxc-ehci.2", "usb", usbotg_clk)
_REGISTER_CLOCK("fsl-usb2-udc", "usb", usbotg_clk) _REGISTER_CLOCK("fsl-usb2-udc", "usb", usbotg_clk)
_REGISTER_CLOCK("mxc_wdt.0", NULL, wdog_clk) _REGISTER_CLOCK("imx-wdt.0", NULL, wdog_clk)
_REGISTER_CLOCK(NULL, "max", max_clk) _REGISTER_CLOCK(NULL, "max", max_clk)
_REGISTER_CLOCK(NULL, "admux", admux_clk) _REGISTER_CLOCK(NULL, "admux", admux_clk)
_REGISTER_CLOCK(NULL, "csi", csi_clk) _REGISTER_CLOCK(NULL, "csi", csi_clk)
......
...@@ -530,7 +530,7 @@ static struct clk_lookup lookups[] = { ...@@ -530,7 +530,7 @@ static struct clk_lookup lookups[] = {
_REGISTER_CLOCK("spi_imx.2", NULL, cspi3_clk) _REGISTER_CLOCK("spi_imx.2", NULL, cspi3_clk)
_REGISTER_CLOCK(NULL, "gpt", gpt_clk) _REGISTER_CLOCK(NULL, "gpt", gpt_clk)
_REGISTER_CLOCK(NULL, "pwm", pwm_clk) _REGISTER_CLOCK(NULL, "pwm", pwm_clk)
_REGISTER_CLOCK(NULL, "wdog", wdog_clk) _REGISTER_CLOCK("imx-wdt.0", NULL, wdog_clk)
_REGISTER_CLOCK(NULL, "rtc", rtc_clk) _REGISTER_CLOCK(NULL, "rtc", rtc_clk)
_REGISTER_CLOCK(NULL, "epit", epit1_clk) _REGISTER_CLOCK(NULL, "epit", epit1_clk)
_REGISTER_CLOCK(NULL, "epit", epit2_clk) _REGISTER_CLOCK(NULL, "epit", epit2_clk)
......
...@@ -459,7 +459,7 @@ struct platform_device mxc_usbh2 = { ...@@ -459,7 +459,7 @@ struct platform_device mxc_usbh2 = {
* SPI master controller * SPI master controller
* 3 channels * 3 channels
*/ */
static struct resource imx_spi_0_resources[] = { static struct resource mxc_spi_0_resources[] = {
{ {
.start = CSPI1_BASE_ADDR, .start = CSPI1_BASE_ADDR,
.end = CSPI1_BASE_ADDR + SZ_4K - 1, .end = CSPI1_BASE_ADDR + SZ_4K - 1,
...@@ -471,7 +471,7 @@ static struct resource imx_spi_0_resources[] = { ...@@ -471,7 +471,7 @@ static struct resource imx_spi_0_resources[] = {
}, },
}; };
static struct resource imx_spi_1_resources[] = { static struct resource mxc_spi_1_resources[] = {
{ {
.start = CSPI2_BASE_ADDR, .start = CSPI2_BASE_ADDR,
.end = CSPI2_BASE_ADDR + SZ_4K - 1, .end = CSPI2_BASE_ADDR + SZ_4K - 1,
...@@ -483,7 +483,7 @@ static struct resource imx_spi_1_resources[] = { ...@@ -483,7 +483,7 @@ static struct resource imx_spi_1_resources[] = {
}, },
}; };
static struct resource imx_spi_2_resources[] = { static struct resource mxc_spi_2_resources[] = {
{ {
.start = CSPI3_BASE_ADDR, .start = CSPI3_BASE_ADDR,
.end = CSPI3_BASE_ADDR + SZ_4K - 1, .end = CSPI3_BASE_ADDR + SZ_4K - 1,
...@@ -495,25 +495,25 @@ static struct resource imx_spi_2_resources[] = { ...@@ -495,25 +495,25 @@ static struct resource imx_spi_2_resources[] = {
}, },
}; };
struct platform_device imx_spi_device0 = { struct platform_device mxc_spi_device0 = {
.name = "spi_imx", .name = "spi_imx",
.id = 0, .id = 0,
.num_resources = ARRAY_SIZE(imx_spi_0_resources), .num_resources = ARRAY_SIZE(mxc_spi_0_resources),
.resource = imx_spi_0_resources, .resource = mxc_spi_0_resources,
}; };
struct platform_device imx_spi_device1 = { struct platform_device mxc_spi_device1 = {
.name = "spi_imx", .name = "spi_imx",
.id = 1, .id = 1,
.num_resources = ARRAY_SIZE(imx_spi_1_resources), .num_resources = ARRAY_SIZE(mxc_spi_1_resources),
.resource = imx_spi_1_resources, .resource = mxc_spi_1_resources,
}; };
struct platform_device imx_spi_device2 = { struct platform_device mxc_spi_device2 = {
.name = "spi_imx", .name = "spi_imx",
.id = 2, .id = 2,
.num_resources = ARRAY_SIZE(imx_spi_2_resources), .num_resources = ARRAY_SIZE(mxc_spi_2_resources),
.resource = imx_spi_2_resources, .resource = mxc_spi_2_resources,
}; };
#ifdef CONFIG_ARCH_MX35 #ifdef CONFIG_ARCH_MX35
......
...@@ -20,7 +20,7 @@ extern struct platform_device mxc_otg_host; ...@@ -20,7 +20,7 @@ extern struct platform_device mxc_otg_host;
extern struct platform_device mxc_usbh1; extern struct platform_device mxc_usbh1;
extern struct platform_device mxc_usbh2; extern struct platform_device mxc_usbh2;
extern struct platform_device mxc_rnga_device; extern struct platform_device mxc_rnga_device;
extern struct platform_device imx_spi_device0; extern struct platform_device mxc_spi_device0;
extern struct platform_device imx_spi_device1; extern struct platform_device mxc_spi_device1;
extern struct platform_device imx_spi_device2; extern struct platform_device mxc_spi_device2;
...@@ -81,6 +81,7 @@ void __init mx31_map_io(void) ...@@ -81,6 +81,7 @@ void __init mx31_map_io(void)
iotable_init(mxc_io_desc, ARRAY_SIZE(mxc_io_desc)); iotable_init(mxc_io_desc, ARRAY_SIZE(mxc_io_desc));
} }
#ifdef CONFIG_ARCH_MX35
void __init mx35_map_io(void) void __init mx35_map_io(void)
{ {
mxc_set_cpu_type(MXC_CPU_MX35); mxc_set_cpu_type(MXC_CPU_MX35);
...@@ -89,6 +90,7 @@ void __init mx35_map_io(void) ...@@ -89,6 +90,7 @@ void __init mx35_map_io(void)
iotable_init(mxc_io_desc, ARRAY_SIZE(mxc_io_desc)); iotable_init(mxc_io_desc, ARRAY_SIZE(mxc_io_desc));
} }
#endif
void __init mx31_init_irq(void) void __init mx31_init_irq(void)
{ {
......
...@@ -43,10 +43,10 @@ ...@@ -43,10 +43,10 @@
#define CM_X300_ETH_PHYS 0x08000010 #define CM_X300_ETH_PHYS 0x08000010
#define GPIO82_MMC2_IRQ (82) #define GPIO82_MMC_IRQ (82)
#define GPIO85_MMC2_WP (85) #define GPIO85_MMC_WP (85)
#define CM_X300_MMC2_IRQ IRQ_GPIO(GPIO82_MMC2_IRQ) #define CM_X300_MMC_IRQ IRQ_GPIO(GPIO82_MMC_IRQ)
#define GPIO95_RTC_CS (95) #define GPIO95_RTC_CS (95)
#define GPIO96_RTC_WR (96) #define GPIO96_RTC_WR (96)
...@@ -292,37 +292,37 @@ static inline void cm_x300_init_nand(void) {} ...@@ -292,37 +292,37 @@ static inline void cm_x300_init_nand(void) {}
#endif #endif
#if defined(CONFIG_MMC) || defined(CONFIG_MMC_MODULE) #if defined(CONFIG_MMC) || defined(CONFIG_MMC_MODULE)
/* The first MMC slot of CM-X300 is hardwired to Libertas card and has static struct pxamci_platform_data cm_x300_mci_platform_data = {
.detect_delay = 20,
.ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
.gpio_card_detect = GPIO82_MMC_IRQ,
.gpio_card_ro = GPIO85_MMC_WP,
.gpio_power = -1,
};
/* The second MMC slot of CM-X300 is hardwired to Libertas card and has
no detection/ro pins */ no detection/ro pins */
static int cm_x300_mci_init(struct device *dev, static int cm_x300_mci2_init(struct device *dev,
irq_handler_t cm_x300_detect_int, irq_handler_t cm_x300_detect_int,
void *data) void *data)
{ {
return 0; return 0;
} }
static void cm_x300_mci_exit(struct device *dev, void *data) static void cm_x300_mci2_exit(struct device *dev, void *data)
{ {
} }
static struct pxamci_platform_data cm_x300_mci_platform_data = { static struct pxamci_platform_data cm_x300_mci2_platform_data = {
.detect_delay = 20, .detect_delay = 20,
.ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
.init = cm_x300_mci_init, .init = cm_x300_mci2_init,
.exit = cm_x300_mci_exit, .exit = cm_x300_mci2_exit,
.gpio_card_detect = -1, .gpio_card_detect = -1,
.gpio_card_ro = -1, .gpio_card_ro = -1,
.gpio_power = -1, .gpio_power = -1,
}; };
static struct pxamci_platform_data cm_x300_mci2_platform_data = {
.detect_delay = 20,
.ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
.gpio_card_detect = GPIO82_MMC2_IRQ,
.gpio_card_ro = GPIO85_MMC2_WP,
.gpio_power = -1,
};
static void __init cm_x300_init_mmc(void) static void __init cm_x300_init_mmc(void)
{ {
pxa_set_mci_info(&cm_x300_mci_platform_data); pxa_set_mci_info(&cm_x300_mci_platform_data);
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/gpio_keys.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/leds.h> #include <linux/leds.h>
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>
...@@ -375,6 +376,43 @@ static struct platform_device spitzkbd_device = { ...@@ -375,6 +376,43 @@ static struct platform_device spitzkbd_device = {
}; };
static struct gpio_keys_button spitz_gpio_keys[] = {
{
.type = EV_PWR,
.code = KEY_SUSPEND,
.gpio = SPITZ_GPIO_ON_KEY,
.desc = "On/Off",
.wakeup = 1,
},
/* Two buttons detecting the lid state */
{
.type = EV_SW,
.code = 0,
.gpio = SPITZ_GPIO_SWA,
.desc = "Display Down",
},
{
.type = EV_SW,
.code = 1,
.gpio = SPITZ_GPIO_SWB,
.desc = "Lid Closed",
},
};
static struct gpio_keys_platform_data spitz_gpio_keys_platform_data = {
.buttons = spitz_gpio_keys,
.nbuttons = ARRAY_SIZE(spitz_gpio_keys),
};
static struct platform_device spitz_gpio_keys_device = {
.name = "gpio-keys",
.id = -1,
.dev = {
.platform_data = &spitz_gpio_keys_platform_data,
},
};
/* /*
* Spitz LEDs * Spitz LEDs
*/ */
...@@ -689,6 +727,7 @@ static struct platform_device sharpsl_rom_device = { ...@@ -689,6 +727,7 @@ static struct platform_device sharpsl_rom_device = {
static struct platform_device *devices[] __initdata = { static struct platform_device *devices[] __initdata = {
&spitzscoop_device, &spitzscoop_device,
&spitzkbd_device, &spitzkbd_device,
&spitz_gpio_keys_device,
&spitzled_device, &spitzled_device,
&sharpsl_nand_device, &sharpsl_nand_device,
&sharpsl_rom_device, &sharpsl_rom_device,
......
...@@ -122,10 +122,7 @@ config CPU_ARM920T ...@@ -122,10 +122,7 @@ config CPU_ARM920T
select CPU_TLB_V4WBI if MMU select CPU_TLB_V4WBI if MMU
help help
The ARM920T is licensed to be produced by numerous vendors, The ARM920T is licensed to be produced by numerous vendors,
and is used in the Maverick EP9312 and the Samsung S3C2410. and is used in the Cirrus EP93xx and the Samsung S3C2410.
More information on the Maverick EP9312 at
<http://linuxdevices.com/products/PD2382866068.html>.
Say Y if you want support for the ARM920T processor. Say Y if you want support for the ARM920T processor.
Otherwise, say N. Otherwise, say N.
......
...@@ -33,6 +33,9 @@ static int irqs[] = { ...@@ -33,6 +33,9 @@ static int irqs[] = {
#ifdef CONFIG_ARCH_OMAP2 #ifdef CONFIG_ARCH_OMAP2
3, 3,
#endif #endif
#ifdef CONFIG_ARCH_BCMRING
IRQ_PMUIRQ, /* for BCMRING, ARM PMU interrupt is 43 */
#endif
}; };
static void armv6_pmu_stop(void) static void armv6_pmu_stop(void)
......
...@@ -223,6 +223,7 @@ config USB_OTG ...@@ -223,6 +223,7 @@ config USB_OTG
config USB_GADGET_PXA25X config USB_GADGET_PXA25X
boolean "PXA 25x or IXP 4xx" boolean "PXA 25x or IXP 4xx"
depends on (ARCH_PXA && PXA25x) || ARCH_IXP4XX depends on (ARCH_PXA && PXA25x) || ARCH_IXP4XX
select USB_OTG_UTILS
help help
Intel's PXA 25x series XScale ARM-5TE processors include Intel's PXA 25x series XScale ARM-5TE processors include
an integrated full speed USB 1.1 device controller. The an integrated full speed USB 1.1 device controller. The
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment