Commit 4d6e060d authored by Tony Lindgren's avatar Tony Lindgren Committed by Russell King

[ARM PATCH] 2170/1: OMAP update 2/8, take 2: Arch files

Patch from Tony Lindgren

This patch syncs the mainline kernel with the linux-omap tree.
The highlights of the patch are:
- Collapse OMAP 1610, 6912 and 1710 into one processor group 16xx
- USB updates by David Brownell
- Pin multiplexing updates by David Brownell
- Board specific low level serial port init

Signed-off-by: Tony Lindgren
parent 1c8f423b
if ARCH_OMAP
menu "TI OMAP Implementations" menu "TI OMAP Implementations"
comment "OMAP Core Type" comment "OMAP Core Type"
config ARCH_OMAP730 config ARCH_OMAP730
depends on ARCH_OMAP
bool "OMAP730 Based System" bool "OMAP730 Based System"
select CPU_ARM926T select ARCH_OMAP_OTG
config ARCH_OMAP1510 config ARCH_OMAP1510
depends on ARCH_OMAP
default y default y
bool "OMAP1510 Based System" bool "OMAP1510 Based System"
select CPU_ARM925T
select CPU_DCACHE_WRITETHROUGH
config ARCH_OMAP1610 config ARCH_OMAP16XX
bool "OMAP1610 Based System" depends on ARCH_OMAP
select CPU_ARM926T bool "OMAP16XX Based System"
select ARCH_OMAP_OTG
config ARCH_OMAP5912 config ARCH_OMAP_OTG
bool "OMAP5912 Based System" bool
select CPU_ARM926T
comment "OMAP Board Type" comment "OMAP Board Type"
config MACH_OMAP_INNOVATOR config MACH_OMAP_INNOVATOR
bool "TI Innovator" bool "TI Innovator"
default y depends on ARCH_OMAP1510 || ARCH_OMAP16XX
depends on ARCH_OMAP1510 || ARCH_OMAP1610
help help
TI OMAP 1510 or 1610 Innovator board support. Say Y here if you TI OMAP 1510 or 1610 Innovator board support. Say Y here if you
have such a board. have such a board.
config MACH_OMAP_H2 config MACH_OMAP_H2
bool "TI H2 Support" bool "TI H2 Support"
depends on ARCH_OMAP1610 depends on ARCH_OMAP16XX
select MACH_OMAP_INNOVATOR
help help
TI OMAP 1610 H2 board support. Say Y here if you have such TI OMAP 1610/1611B H2 board support. Say Y here if you have such
a board. a board.
config MACH_OMAP_H3 config MACH_OMAP_H3
bool "TI H3 Support" bool "TI H3 Support"
depends on ARCH_OMAP1610 depends on ARCH_OMAP16XX
help help
TI OMAP 1610 H3 board support. Say Y here if you have such TI OMAP 1710 H3 board support. Say Y here if you have such
a board. a board.
config MACH_OMAP_H4 config MACH_OMAP_H4
bool "TI H4 Support" bool "TI H4 Support"
depends on ARCH_OMAP1610 depends on ARCH_OMAP16XX
help help
TI OMAP 1610 H4 board support. Say Y here if you have such TI OMAP 1610 H4 board support. Say Y here if you have such
a board. a board.
config MACH_OMAP_OSK config MACH_OMAP_OSK
bool "TI OSK Support" bool "TI OSK Support"
depends on ARCH_OMAP5912 depends on ARCH_OMAP16XX
help help
TI OMAP 5912 OSK (OMAP Starter Kit) board support. Say Y here TI OMAP 5912 OSK (OMAP Starter Kit) board support. Say Y here
if you have such a board. if you have such a board.
...@@ -64,19 +61,16 @@ config MACH_OMAP_OSK ...@@ -64,19 +61,16 @@ config MACH_OMAP_OSK
config MACH_OMAP_PERSEUS2 config MACH_OMAP_PERSEUS2
bool "TI Perseus2" bool "TI Perseus2"
depends on ARCH_OMAP730 depends on ARCH_OMAP730
select LEDS
select LEDS_TIMER
select LEDS_CPU
help help
Support for TI OMAP 730 Perseus2 board. Say Y here if you have such Support for TI OMAP 730 Perseus2 board. Say Y here if you have such
a board. a board.
config MACH_OMAP_GENERIC config MACH_OMAP_GENERIC
bool "Generic OMAP board" bool "Generic OMAP board"
depends on ARCH_OMAP1510 || ARCH_OMAP1610 depends on ARCH_OMAP1510 || ARCH_OMAP16XX
help help
Support for generic OMAP-1510 or 1610 board with no Support for generic OMAP-1510, 1610 or 1710 board with
FPGA. Can be used as template for porting Linux to no FPGA. Can be used as template for porting Linux to
custom OMAP boards. Say Y here if you have a custom custom OMAP boards. Say Y here if you have a custom
board. board.
...@@ -84,6 +78,7 @@ comment "OMAP Feature Selections" ...@@ -84,6 +78,7 @@ comment "OMAP Feature Selections"
#config OMAP_BOOT_TAG #config OMAP_BOOT_TAG
# bool "OMAP bootloader information passing" # bool "OMAP bootloader information passing"
# depends on ARCH_OMAP
# default n # default n
# help # help
# Say Y, if you have a bootloader which passes information # Say Y, if you have a bootloader which passes information
...@@ -91,6 +86,7 @@ comment "OMAP Feature Selections" ...@@ -91,6 +86,7 @@ comment "OMAP Feature Selections"
config OMAP_MUX config OMAP_MUX
bool "OMAP multiplexing support" bool "OMAP multiplexing support"
depends on ARCH_OMAP
default y default y
help help
Pin multiplexing support for OMAP boards. If your bootloader Pin multiplexing support for OMAP boards. If your bootloader
...@@ -106,8 +102,18 @@ config OMAP_MUX_DEBUG ...@@ -106,8 +102,18 @@ config OMAP_MUX_DEBUG
This is useful if you want to find out the correct values of the This is useful if you want to find out the correct values of the
multiplexing registers. multiplexing registers.
config OMAP_MUX_WARNINGS
bool "Warn about pins the bootloader didn't set up"
depends on OMAP_MUX
default y
help
Choose Y here to warn whenever driver initialization logic needs
to change the pin multiplexing setup. When there are no warnings
printed, it's safe to deselect OMAP_MUX for your product.
choice choice
prompt "Low-level debug console UART" prompt "Low-level debug console UART"
depends on ARCH_OMAP
default OMAP_LL_DEBUG_UART1 default OMAP_LL_DEBUG_UART1
config OMAP_LL_DEBUG_UART1 config OMAP_LL_DEBUG_UART1
...@@ -129,7 +135,7 @@ config OMAP_ARM_195MHZ ...@@ -129,7 +135,7 @@ config OMAP_ARM_195MHZ
config OMAP_ARM_192MHZ config OMAP_ARM_192MHZ
bool "OMAP ARM 192 MHz CPU" bool "OMAP ARM 192 MHz CPU"
depends on ARCH_OMAP1610 || ARCH_OMAP5912 depends on ARCH_OMAP16XX
help help
Enable 192MHz clock for OMAP CPU. If unsure, say N. Enable 192MHz clock for OMAP CPU. If unsure, say N.
...@@ -141,29 +147,27 @@ config OMAP_ARM_182MHZ ...@@ -141,29 +147,27 @@ config OMAP_ARM_182MHZ
config OMAP_ARM_168MHZ config OMAP_ARM_168MHZ
bool "OMAP ARM 168 MHz CPU" bool "OMAP ARM 168 MHz CPU"
depends on ARCH_OMAP1510 || ARCH_OMAP1610 || ARCH_OMAP730 || ARCH_OMAP5912 depends on ARCH_OMAP1510 || ARCH_OMAP16XX || ARCH_OMAP730
help help
Enable 168MHz clock for OMAP CPU. If unsure, say N. Enable 168MHz clock for OMAP CPU. If unsure, say N.
config OMAP_ARM_120MHZ config OMAP_ARM_120MHZ
bool "OMAP ARM 120 MHz CPU" bool "OMAP ARM 120 MHz CPU"
depends on ARCH_OMAP1510 || ARCH_OMAP1610 || ARCH_OMAP730 depends on ARCH_OMAP1510 || ARCH_OMAP16XX || ARCH_OMAP730
help help
Enable 120MHz clock for OMAP CPU. If unsure, say N. Enable 120MHz clock for OMAP CPU. If unsure, say N.
config OMAP_ARM_60MHZ config OMAP_ARM_60MHZ
bool "OMAP ARM 60 MHz CPU" bool "OMAP ARM 60 MHz CPU"
depends on ARCH_OMAP1510 || ARCH_OMAP1610 || ARCH_OMAP730 depends on ARCH_OMAP1510 || ARCH_OMAP16XX || ARCH_OMAP730
default y default y
help help
Enable 60MHz clock for OMAP CPU. If unsure, say Y. Enable 60MHz clock for OMAP CPU. If unsure, say Y.
config OMAP_ARM_30MHZ config OMAP_ARM_30MHZ
bool "OMAP ARM 30 MHz CPU" bool "OMAP ARM 30 MHz CPU"
depends on ARCH_OMAP1510 || ARCH_OMAP1610 || ARCH_OMAP730 depends on ARCH_OMAP1510 || ARCH_OMAP16XX || ARCH_OMAP730
help help
Enable 30MHz clock for OMAP CPU. If unsure, say N. Enable 30MHz clock for OMAP CPU. If unsure, say N.
endmenu endmenu
endif
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# #
# Common support # Common support
obj-y := common.o time.o irq.o dma.o clocks.o mux.o gpio.o mcbsp.o obj-y := common.o time.o irq.o dma.o clock.o mux.o gpio.o mcbsp.o usb.o
obj-m := obj-m :=
obj-n := obj-n :=
obj- := obj- :=
...@@ -18,9 +18,7 @@ obj-$(CONFIG_MACH_OMAP_OSK) += board-osk.o ...@@ -18,9 +18,7 @@ obj-$(CONFIG_MACH_OMAP_OSK) += board-osk.o
obj-$(CONFIG_MACH_OMAP_H3) += board-h3.o obj-$(CONFIG_MACH_OMAP_H3) += board-h3.o
# OCPI interconnect support for 1710, 1610 and 5912 # OCPI interconnect support for 1710, 1610 and 5912
obj-$(CONFIG_ARCH_OMAP1710) += ocpi.o obj-$(CONFIG_ARCH_OMAP16XX) += ocpi.o
obj-$(CONFIG_ARCH_OMAP1610) += ocpi.o
obj-$(CONFIG_ARCH_OMAP5912) += ocpi.o
# LEDs support # LEDs support
led-$(CONFIG_MACH_OMAP_H2) += leds-h2p2-debug.o led-$(CONFIG_MACH_OMAP_H2) += leds-h2p2-debug.o
......
...@@ -22,42 +22,21 @@ ...@@ -22,42 +22,21 @@
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/arch/clocks.h>
#include <asm/arch/gpio.h> #include <asm/arch/gpio.h>
#include <asm/arch/mux.h> #include <asm/arch/mux.h>
#include <asm/arch/usb.h> #include <asm/arch/usb.h>
#include <asm/arch/board.h> #include <asm/arch/board.h>
#include <asm/arch/serial.h>
#include "common.h" #include "common.h"
static int __initdata generic_serial_ports[OMAP_MAX_NR_PORTS] = {1, 1, 1};
static void __init omap_generic_init_irq(void) static void __init omap_generic_init_irq(void)
{ {
omap_init_irq(); omap_init_irq();
} }
/*
* Muxes the serial ports on
*/
#ifdef CONFIG_ARCH_OMAP1510
static void __init omap_early_serial_init(void)
{
#ifdef CONFIG_OMAP_LL_DEBUG_UART1
omap_cfg_reg(UART1_TX);
omap_cfg_reg(UART1_RTS);
#endif
#ifdef CONFIG_OMAP_LL_DEBUG_UART2
omap_cfg_reg(UART2_TX);
omap_cfg_reg(UART2_RTS);
#endif
#ifdef CONFIG_OMAP_LL_DEBUG_UART1
omap_cfg_reg(UART3_TX);
omap_cfg_reg(UART3_RX);
#endif
}
#endif
/* assume no Mini-AB port */ /* assume no Mini-AB port */
#ifdef CONFIG_ARCH_OMAP1510 #ifdef CONFIG_ARCH_OMAP1510
...@@ -69,7 +48,7 @@ static struct omap_usb_config generic1510_usb_config __initdata = { ...@@ -69,7 +48,7 @@ static struct omap_usb_config generic1510_usb_config __initdata = {
}; };
#endif #endif
#ifdef CONFIG_ARCH_OMAP1610 #if defined(CONFIG_ARCH_OMAP16XX)
static struct omap_usb_config generic1610_usb_config __initdata = { static struct omap_usb_config generic1610_usb_config __initdata = {
.register_host = 1, .register_host = 1,
.register_dev = 1, .register_dev = 1,
...@@ -91,17 +70,17 @@ static void __init omap_generic_init(void) ...@@ -91,17 +70,17 @@ static void __init omap_generic_init(void)
*/ */
#ifdef CONFIG_ARCH_OMAP1510 #ifdef CONFIG_ARCH_OMAP1510
if (cpu_is_omap1510()) { if (cpu_is_omap1510()) {
omap_early_serial_init();
generic_config[0].data = &generic1510_usb_config; generic_config[0].data = &generic1510_usb_config;
} }
#endif #endif
#ifdef CONFIG_ARCH_OMAP1610 #if defined(CONFIG_ARCH_OMAP16XX)
if (!cpu_is_omap1510()) { if (!cpu_is_omap1510()) {
generic_config[0].data = &generic1610_usb_config; generic_config[0].data = &generic1610_usb_config;
} }
#endif #endif
omap_board_config = generic_config; omap_board_config = generic_config;
omap_board_config_size = ARRAY_SIZE(generic_config); omap_board_config_size = ARRAY_SIZE(generic_config);
omap_serial_init(generic_serial_ports);
} }
static void __init omap_generic_map_io(void) static void __init omap_generic_map_io(void)
......
...@@ -32,14 +32,11 @@ ...@@ -32,14 +32,11 @@
#include <asm/arch/clocks.h> #include <asm/arch/clocks.h>
#include <asm/arch/gpio.h> #include <asm/arch/gpio.h>
#include <asm/arch/usb.h> #include <asm/arch/usb.h>
#include <asm/arch/serial.h>
#include "common.h" #include "common.h"
static struct map_desc h2_io_desc[] __initdata = { static int __initdata h2_serial_ports[OMAP_MAX_NR_PORTS] = {1, 1, 1};
{ OMAP1610_ETHR_BASE, OMAP1610_ETHR_START, OMAP1610_ETHR_SIZE,MT_DEVICE },
{ OMAP1610_NOR_FLASH_BASE, OMAP1610_NOR_FLASH_START, OMAP1610_NOR_FLASH_SIZE,
MT_DEVICE },
};
static struct resource h2_smc91x_resources[] = { static struct resource h2_smc91x_resources[] = {
[0] = { [0] = {
...@@ -78,15 +75,22 @@ static struct omap_usb_config h2_usb_config __initdata = { ...@@ -78,15 +75,22 @@ static struct omap_usb_config h2_usb_config __initdata = {
.hmc_mode = 19, // 0:host(off) 1:dev|otg 2:disabled .hmc_mode = 19, // 0:host(off) 1:dev|otg 2:disabled
// .hmc_mode = 21, // 0:host(off) 1:dev(loopback) 2:host(loopback) // .hmc_mode = 21, // 0:host(off) 1:dev(loopback) 2:host(loopback)
#elif defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) #elif defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
/* NONSTANDARD CABLE NEEDED (B-to-Mini-B) */ /* needs OTG cable, or NONSTANDARD (B-to-MiniB) */
.hmc_mode = 20, // 1:dev|otg(off) 1:host 2:disabled .hmc_mode = 20, // 1:dev|otg(off) 1:host 2:disabled
#endif #endif
.pins[1] = 3, .pins[1] = 3,
}; };
static struct omap_mmc_config h2_mmc_config __initdata = {
.mmc_blocks = 1,
.mmc1_power_pin = -1, /* tps65010 gpio3 */
.mmc1_switch_pin = OMAP_MPUIO(1),
};
static struct omap_board_config_kernel h2_config[] = { static struct omap_board_config_kernel h2_config[] = {
{ OMAP_TAG_USB, &h2_usb_config }, { OMAP_TAG_USB, &h2_usb_config },
{ OMAP_TAG_MMC, &h2_mmc_config },
}; };
static void __init h2_init(void) static void __init h2_init(void)
...@@ -99,7 +103,7 @@ static void __init h2_init(void) ...@@ -99,7 +103,7 @@ static void __init h2_init(void)
static void __init h2_map_io(void) static void __init h2_map_io(void)
{ {
omap_map_io(); omap_map_io();
iotable_init(h2_io_desc, ARRAY_SIZE(h2_io_desc)); omap_serial_init(h2_serial_ports);
} }
MACHINE_START(OMAP_H2, "TI-H2") MACHINE_START(OMAP_H2, "TI-H2")
......
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
#include <asm/arch/irqs.h> #include <asm/arch/irqs.h>
#include <asm/arch/gpio.h> #include <asm/arch/gpio.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/arch/serial.h>
#include "common.h" #include "common.h"
void h3_init_irq(void) void h3_init_irq(void)
...@@ -37,6 +39,8 @@ void h3_init_irq(void) ...@@ -37,6 +39,8 @@ void h3_init_irq(void)
omap_init_irq(); omap_init_irq();
} }
static int __initdata h3_serial_ports[OMAP_MAX_NR_PORTS] = {1, 1, 1};
static struct resource smc91x_resources[] = { static struct resource smc91x_resources[] = {
[0] = { [0] = {
.start = OMAP1710_ETHR_START, /* Physical */ .start = OMAP1710_ETHR_START, /* Physical */
...@@ -66,15 +70,10 @@ static void __init h3_init(void) ...@@ -66,15 +70,10 @@ static void __init h3_init(void)
(void) platform_add_devices(devices, ARRAY_SIZE(devices)); (void) platform_add_devices(devices, ARRAY_SIZE(devices));
} }
static struct map_desc h3_io_desc[] __initdata = {
{ OMAP1710_ETHR_BASE, OMAP1710_ETHR_START, OMAP1710_ETHR_SIZE, MT_DEVICE },
{ OMAP_NOR_FLASH_BASE, OMAP_NOR_FLASH_START, OMAP_NOR_FLASH_SIZE, MT_DEVICE },
};
static void __init h3_map_io(void) static void __init h3_map_io(void)
{ {
omap_map_io(); omap_map_io();
iotable_init(h3_io_desc, ARRAY_SIZE(h3_io_desc)); omap_serial_init(h3_serial_ports);
} }
MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board") MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board")
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <asm/arch/gpio.h> #include <asm/arch/gpio.h>
#include <asm/arch/fpga.h> #include <asm/arch/fpga.h>
#include <asm/arch/usb.h> #include <asm/arch/usb.h>
#include <asm/arch/serial.h>
#include "common.h" #include "common.h"
...@@ -43,6 +44,8 @@ static struct map_desc innovator1510_io_desc[] __initdata = { ...@@ -43,6 +44,8 @@ static struct map_desc innovator1510_io_desc[] __initdata = {
MT_DEVICE }, MT_DEVICE },
}; };
static int __initdata innovator_serial_ports[OMAP_MAX_NR_PORTS] = {1, 1, 1};
static struct resource innovator1510_smc91x_resources[] = { static struct resource innovator1510_smc91x_resources[] = {
[0] = { [0] = {
.start = OMAP1510_FPGA_ETHR_START, /* Physical */ .start = OMAP1510_FPGA_ETHR_START, /* Physical */
...@@ -69,18 +72,12 @@ static struct platform_device *innovator1510_devices[] __initdata = { ...@@ -69,18 +72,12 @@ static struct platform_device *innovator1510_devices[] __initdata = {
#endif /* CONFIG_ARCH_OMAP1510 */ #endif /* CONFIG_ARCH_OMAP1510 */
#ifdef CONFIG_ARCH_OMAP1610 #ifdef CONFIG_ARCH_OMAP16XX
static struct map_desc innovator1610_io_desc[] __initdata = {
{ OMAP1610_ETHR_BASE, OMAP1610_ETHR_START, OMAP1610_ETHR_SIZE,MT_DEVICE },
{ OMAP1610_NOR_FLASH_BASE, OMAP1610_NOR_FLASH_START, OMAP1610_NOR_FLASH_SIZE,
MT_DEVICE },
};
static struct resource innovator1610_smc91x_resources[] = { static struct resource innovator1610_smc91x_resources[] = {
[0] = { [0] = {
.start = OMAP1610_ETHR_START, /* Physical */ .start = INNOVATOR1610_ETHR_START, /* Physical */
.end = OMAP1610_ETHR_START + SZ_4K, .end = INNOVATOR1610_ETHR_START + SZ_4K,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
[1] = { [1] = {
...@@ -101,7 +98,7 @@ static struct platform_device *innovator1610_devices[] __initdata = { ...@@ -101,7 +98,7 @@ static struct platform_device *innovator1610_devices[] __initdata = {
&innovator1610_smc91x_device, &innovator1610_smc91x_device,
}; };
#endif /* CONFIG_ARCH_OMAP1610 */ #endif /* CONFIG_ARCH_OMAP16XX */
void innovator_init_irq(void) void innovator_init_irq(void)
{ {
...@@ -116,16 +113,19 @@ void innovator_init_irq(void) ...@@ -116,16 +113,19 @@ void innovator_init_irq(void)
#ifdef CONFIG_ARCH_OMAP1510 #ifdef CONFIG_ARCH_OMAP1510
static struct omap_usb_config innovator1510_usb_config __initdata = { static struct omap_usb_config innovator1510_usb_config __initdata = {
/* has usb host and device, but no Mini-AB port */ /* for bundled non-standard host and peripheral cables */
.hmc_mode = 4,
.register_host = 1, .register_host = 1,
.pins[1] = 6,
.pins[2] = 6, /* Conflicts with UART2 */
.register_dev = 1, .register_dev = 1,
/* Assume bad Innovator wiring; Use internal host only with custom cable */
.hmc_mode = 16,
.pins[0] = 2, .pins[0] = 2,
}; };
#endif #endif
#ifdef CONFIG_ARCH_OMAP1610 #ifdef CONFIG_ARCH_OMAP16XX
static struct omap_usb_config h2_usb_config __initdata = { static struct omap_usb_config h2_usb_config __initdata = {
/* usb1 has a Mini-AB port and external isp1301 transceiver */ /* usb1 has a Mini-AB port and external isp1301 transceiver */
.otg = 2, .otg = 2,
...@@ -153,7 +153,7 @@ static void __init innovator_init(void) ...@@ -153,7 +153,7 @@ static void __init innovator_init(void)
platform_add_devices(innovator1510_devices, ARRAY_SIZE(innovator1510_devices)); platform_add_devices(innovator1510_devices, ARRAY_SIZE(innovator1510_devices));
} }
#endif #endif
#ifdef CONFIG_ARCH_OMAP1610 #ifdef CONFIG_ARCH_OMAP16XX
if (!cpu_is_omap1510()) { if (!cpu_is_omap1510()) {
platform_add_devices(innovator1610_devices, ARRAY_SIZE(innovator1610_devices)); platform_add_devices(innovator1610_devices, ARRAY_SIZE(innovator1610_devices));
} }
...@@ -163,7 +163,7 @@ static void __init innovator_init(void) ...@@ -163,7 +163,7 @@ static void __init innovator_init(void)
if (cpu_is_omap1510()) if (cpu_is_omap1510())
innovator_config[0].data = &innovator1510_usb_config; innovator_config[0].data = &innovator1510_usb_config;
#endif #endif
#ifdef CONFIG_ARCH_OMAP1610 #ifdef CONFIG_ARCH_OMAP16XX
if (cpu_is_omap1610()) if (cpu_is_omap1610())
innovator_config[0].data = &h2_usb_config; innovator_config[0].data = &h2_usb_config;
#endif #endif
...@@ -187,11 +187,7 @@ static void __init innovator_map_io(void) ...@@ -187,11 +187,7 @@ static void __init innovator_map_io(void)
fpga_read(OMAP1510_FPGA_BOARD_REV)); fpga_read(OMAP1510_FPGA_BOARD_REV));
} }
#endif #endif
#ifdef CONFIG_ARCH_OMAP1610 omap_serial_init(innovator_serial_ports);
if (!cpu_is_omap1510()) {
iotable_init(innovator1610_io_desc, ARRAY_SIZE(innovator1610_io_desc));
}
#endif
} }
MACHINE_START(OMAP_INNOVATOR, "TI-Innovator") MACHINE_START(OMAP_INNOVATOR, "TI-Innovator")
......
...@@ -38,15 +38,18 @@ ...@@ -38,15 +38,18 @@
#include <asm/arch/clocks.h> #include <asm/arch/clocks.h>
#include <asm/arch/gpio.h> #include <asm/arch/gpio.h>
#include <asm/arch/fpga.h> #include <asm/arch/fpga.h>
#include <asm/arch/usb.h>
#include <asm/arch/serial.h>
#include "common.h" #include "common.h"
static struct map_desc osk5912_io_desc[] __initdata = { static struct map_desc osk5912_io_desc[] __initdata = {
{ OMAP_OSK_ETHR_BASE, OMAP_OSK_ETHR_START, OMAP_OSK_ETHR_SIZE,MT_DEVICE },
{ OMAP_OSK_NOR_FLASH_BASE, OMAP_OSK_NOR_FLASH_START, OMAP_OSK_NOR_FLASH_SIZE, { OMAP_OSK_NOR_FLASH_BASE, OMAP_OSK_NOR_FLASH_START, OMAP_OSK_NOR_FLASH_SIZE,
MT_DEVICE }, MT_DEVICE },
}; };
static int __initdata osk_serial_ports[OMAP_MAX_NR_PORTS] = {1, 0, 0};
static struct resource osk5912_smc91x_resources[] = { static struct resource osk5912_smc91x_resources[] = {
[0] = { [0] = {
.start = OMAP_OSK_ETHR_START, /* Physical */ .start = OMAP_OSK_ETHR_START, /* Physical */
...@@ -76,16 +79,29 @@ void osk_init_irq(void) ...@@ -76,16 +79,29 @@ void osk_init_irq(void)
omap_init_irq(); omap_init_irq();
} }
static struct omap_usb_config osk_usb_config __initdata = {
/* has usb host and device, but no Mini-AB port */
.register_host = 1,
.hmc_mode = 16,
.pins[0] = 2,
};
static struct omap_board_config_kernel osk_config[] = {
{ OMAP_TAG_USB, &osk_usb_config },
};
static void __init osk_init(void) static void __init osk_init(void)
{ {
platform_add_devices(osk5912_devices, ARRAY_SIZE(osk5912_devices)); platform_add_devices(osk5912_devices, ARRAY_SIZE(osk5912_devices));
omap_board_config = osk_config;
omap_board_config_size = ARRAY_SIZE(osk_config);
} }
static void __init osk_map_io(void) static void __init osk_map_io(void)
{ {
omap_map_io(); omap_map_io();
iotable_init(osk5912_io_desc, ARRAY_SIZE(osk5912_io_desc)); iotable_init(osk5912_io_desc, ARRAY_SIZE(osk5912_io_desc));
omap_serial_init(osk_serial_ports);
} }
MACHINE_START(OMAP_OSK, "TI-OSK") MACHINE_START(OMAP_OSK, "TI-OSK")
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <asm/arch/gpio.h> #include <asm/arch/gpio.h>
#include <asm/arch/mux.h> #include <asm/arch/mux.h>
#include <asm/arch/fpga.h> #include <asm/arch/fpga.h>
#include <asm/arch/serial.h>
#include "common.h" #include "common.h"
...@@ -45,6 +46,8 @@ static struct resource smc91x_resources[] = { ...@@ -45,6 +46,8 @@ static struct resource smc91x_resources[] = {
}, },
}; };
static int __initdata p2_serial_ports[OMAP_MAX_NR_PORTS] = {1, 1, 0};
static struct platform_device smc91x_device = { static struct platform_device smc91x_device = {
.name = "smc91x", .name = "smc91x",
.id = 0, .id = 0,
...@@ -104,6 +107,7 @@ static void __init omap_perseus2_map_io(void) ...@@ -104,6 +107,7 @@ static void __init omap_perseus2_map_io(void)
* It is used as the Ethernet controller interrupt * It is used as the Ethernet controller interrupt
*/ */
omap_writel(omap_readl(OMAP730_IO_CONF_9) & 0x1FFFFFFF, OMAP730_IO_CONF_9); omap_writel(omap_readl(OMAP730_IO_CONF_9) & 0x1FFFFFFF, OMAP730_IO_CONF_9);
omap_serial_init(p2_serial_ports);
} }
MACHINE_START(OMAP_PERSEUS2, "OMAP730 Perseus2") MACHINE_START(OMAP_PERSEUS2, "OMAP730 Perseus2")
......
...@@ -94,7 +94,7 @@ struct gpio_bank { ...@@ -94,7 +94,7 @@ struct gpio_bank {
#define METHOD_GPIO_1610 2 #define METHOD_GPIO_1610 2
#define METHOD_GPIO_730 3 #define METHOD_GPIO_730 3
#if defined(CONFIG_ARCH_OMAP1610) || defined(CONFIG_ARCH_OMAP1710) || defined(CONFIG_ARCH_OMAP5912) #if defined(CONFIG_ARCH_OMAP16XX)
static struct gpio_bank gpio_bank_1610[5] = { static struct gpio_bank gpio_bank_1610[5] = {
{ OMAP_MPUIO_BASE, INT_MPUIO, IH_MPUIO_BASE, METHOD_MPUIO}, { OMAP_MPUIO_BASE, INT_MPUIO, IH_MPUIO_BASE, METHOD_MPUIO},
{ OMAP1610_GPIO1_BASE, INT_GPIO_BANK1, IH_GPIO_BASE, METHOD_GPIO_1610 }, { OMAP1610_GPIO1_BASE, INT_GPIO_BANK1, IH_GPIO_BASE, METHOD_GPIO_1610 },
...@@ -135,8 +135,8 @@ static inline struct gpio_bank *get_gpio_bank(int gpio) ...@@ -135,8 +135,8 @@ static inline struct gpio_bank *get_gpio_bank(int gpio)
return &gpio_bank[1]; return &gpio_bank[1];
} }
#endif #endif
#if defined(CONFIG_ARCH_OMAP1610) || defined(CONFIG_ARCH_OMAP1710) || defined(CONFIG_ARCH_OMAP5912) #if defined(CONFIG_ARCH_OMAP16XX)
if (cpu_is_omap1610() || cpu_is_omap1710() || cpu_is_omap5912()) { if (cpu_is_omap16xx()) {
if (OMAP_GPIO_IS_MPUIO(gpio)) if (OMAP_GPIO_IS_MPUIO(gpio))
return &gpio_bank[0]; return &gpio_bank[0];
return &gpio_bank[1 + (gpio >> 4)]; return &gpio_bank[1 + (gpio >> 4)];
...@@ -172,8 +172,8 @@ static inline int gpio_valid(int gpio) ...@@ -172,8 +172,8 @@ static inline int gpio_valid(int gpio)
if (cpu_is_omap1510() && gpio < 16) if (cpu_is_omap1510() && gpio < 16)
return 0; return 0;
#endif #endif
#if defined(CONFIG_ARCH_OMAP1610) || defined(CONFIG_ARCH_OMAP1710) || defined(CONFIG_ARCH_OMAP5912) #if defined(CONFIG_ARCH_OMAP16XX)
if ((cpu_is_omap1610() || cpu_is_omap1710() || cpu_is_omap5912()) && gpio < 64) if ((cpu_is_omap16xx()) && gpio < 64)
return 0; return 0;
#endif #endif
#ifdef CONFIG_ARCH_OMAP730 #ifdef CONFIG_ARCH_OMAP730
...@@ -554,7 +554,7 @@ static void gpio_irq_handler(unsigned int irq, struct irqdesc *desc, ...@@ -554,7 +554,7 @@ static void gpio_irq_handler(unsigned int irq, struct irqdesc *desc,
if (bank->method == METHOD_GPIO_1510) if (bank->method == METHOD_GPIO_1510)
isr_reg = bank->base + OMAP1510_GPIO_INT_STATUS; isr_reg = bank->base + OMAP1510_GPIO_INT_STATUS;
#endif #endif
#if defined(CONFIG_ARCH_OMAP1610) || defined(CONFIG_ARCH_OMAP1710) || defined(CONFIG_ARCH_OMAP5912) #if defined(CONFIG_ARCH_OMAP16XX)
if (bank->method == METHOD_GPIO_1610) if (bank->method == METHOD_GPIO_1610)
isr_reg = bank->base + OMAP1610_GPIO_IRQSTATUS1; isr_reg = bank->base + OMAP1610_GPIO_IRQSTATUS1;
#endif #endif
...@@ -588,7 +588,7 @@ static void gpio_ack_irq(unsigned int irq) ...@@ -588,7 +588,7 @@ static void gpio_ack_irq(unsigned int irq)
if (bank->method == METHOD_GPIO_1510) if (bank->method == METHOD_GPIO_1510)
__raw_writew(1 << (gpio & 0x0f), bank->base + OMAP1510_GPIO_INT_STATUS); __raw_writew(1 << (gpio & 0x0f), bank->base + OMAP1510_GPIO_INT_STATUS);
#endif #endif
#if defined(CONFIG_ARCH_OMAP1610) || defined(CONFIG_ARCH_OMAP1710) || defined(CONFIG_ARCH_OMAP5912) #if defined(CONFIG_ARCH_OMAP16XX)
if (bank->method == METHOD_GPIO_1610) if (bank->method == METHOD_GPIO_1610)
__raw_writew(1 << (gpio & 0x0f), bank->base + OMAP1610_GPIO_IRQSTATUS1); __raw_writew(1 << (gpio & 0x0f), bank->base + OMAP1610_GPIO_IRQSTATUS1);
#endif #endif
...@@ -668,8 +668,8 @@ static int __init _omap_gpio_init(void) ...@@ -668,8 +668,8 @@ static int __init _omap_gpio_init(void)
gpio_bank = gpio_bank_1510; gpio_bank = gpio_bank_1510;
} }
#endif #endif
#if defined(CONFIG_ARCH_OMAP1610) || defined(CONFIG_ARCH_OMAP1710) || defined(CONFIG_ARCH_OMAP5912) #if defined(CONFIG_ARCH_OMAP16XX)
if (cpu_is_omap1610() || cpu_is_omap1710() || cpu_is_omap5912()) { if (cpu_is_omap16xx()) {
int rev; int rev;
gpio_bank_count = 5; gpio_bank_count = 5;
...@@ -702,7 +702,7 @@ static int __init _omap_gpio_init(void) ...@@ -702,7 +702,7 @@ static int __init _omap_gpio_init(void)
__raw_writew(0x0000, bank->base + OMAP1510_GPIO_INT_STATUS); __raw_writew(0x0000, bank->base + OMAP1510_GPIO_INT_STATUS);
} }
#endif #endif
#if defined(CONFIG_ARCH_OMAP1610) || defined(CONFIG_ARCH_OMAP1710) || defined(CONFIG_ARCH_OMAP5912) #if defined(CONFIG_ARCH_OMAP16XX)
if (bank->method == METHOD_GPIO_1610) { if (bank->method == METHOD_GPIO_1610) {
__raw_writew(0x0000, bank->base + OMAP1610_GPIO_IRQENABLE1); __raw_writew(0x0000, bank->base + OMAP1610_GPIO_IRQENABLE1);
__raw_writew(0xffff, bank->base + OMAP1610_GPIO_IRQSTATUS1); __raw_writew(0xffff, bank->base + OMAP1610_GPIO_IRQSTATUS1);
...@@ -722,7 +722,7 @@ static int __init _omap_gpio_init(void) ...@@ -722,7 +722,7 @@ static int __init _omap_gpio_init(void)
set_irq_chip(j, &mpuio_irq_chip); set_irq_chip(j, &mpuio_irq_chip);
else else
set_irq_chip(j, &gpio_irq_chip); set_irq_chip(j, &gpio_irq_chip);
set_irq_handler(j, do_level_IRQ); set_irq_handler(j, do_edge_IRQ);
set_irq_flags(j, IRQF_VALID); set_irq_flags(j, IRQF_VALID);
} }
set_irq_chained_handler(bank->irq, gpio_irq_handler); set_irq_chained_handler(bank->irq, gpio_irq_handler);
......
...@@ -140,12 +140,11 @@ static struct omap_irq_bank omap1510_irq_banks[] = { ...@@ -140,12 +140,11 @@ static struct omap_irq_bank omap1510_irq_banks[] = {
}; };
#endif #endif
#if defined(CONFIG_ARCH_OMAP1610) || defined(CONFIG_ARCH_OMAP5912) \ #if defined(CONFIG_ARCH_OMAP16XX)
|| defined(CONFIG_ARCH_OMAP1710)
static struct omap_irq_bank omap1610_irq_banks[] = { static struct omap_irq_bank omap1610_irq_banks[] = {
{ .base_reg = OMAP_IH1_BASE, .trigger_map = 0xb3fefe8f }, { .base_reg = OMAP_IH1_BASE, .trigger_map = 0xb3fefe8f },
{ .base_reg = OMAP_IH2_BASE, .trigger_map = 0xfffff7ff }, { .base_reg = OMAP_IH2_BASE, .trigger_map = 0xfdb7c1fd },
{ .base_reg = OMAP_IH2_BASE + 0x100, .trigger_map = 0xfffff7ff }, { .base_reg = OMAP_IH2_BASE + 0x100, .trigger_map = 0xfffff7ff },
{ .base_reg = OMAP_IH2_BASE + 0x200, .trigger_map = 0xffffffff }, { .base_reg = OMAP_IH2_BASE + 0x200, .trigger_map = 0xffffffff },
}; };
...@@ -173,9 +172,8 @@ void __init omap_init_irq(void) ...@@ -173,9 +172,8 @@ void __init omap_init_irq(void)
irq_bank_count = ARRAY_SIZE(omap1510_irq_banks); irq_bank_count = ARRAY_SIZE(omap1510_irq_banks);
} }
#endif #endif
#if defined(CONFIG_ARCH_OMAP1610) || defined(CONFIG_ARCH_OMAP5912) \ #if defined(CONFIG_ARCH_OMAP16XX)
|| defined(CONFIG_ARCH_OMAP1710) if (cpu_is_omap16xx()) {
if (cpu_is_omap1610() || cpu_is_omap5912() || cpu_is_omap1710()) {
irq_banks = omap1610_irq_banks; irq_banks = omap1610_irq_banks;
irq_bank_count = ARRAY_SIZE(omap1610_irq_banks); irq_bank_count = ARRAY_SIZE(omap1610_irq_banks);
} }
......
...@@ -32,18 +32,26 @@ ...@@ -32,18 +32,26 @@
#define __MUX_C__ #define __MUX_C__
#include <asm/arch/mux.h> #include <asm/arch/mux.h>
#ifdef CONFIG_OMAP_MUX
/* /*
* Sets the Omap MUX and PULL_DWN registers based on the table * Sets the Omap MUX and PULL_DWN registers based on the table
*/ */
int omap_cfg_reg(const reg_cfg_t reg_cfg) int __init_or_module
omap_cfg_reg(const reg_cfg_t reg_cfg)
{ {
#ifdef CONFIG_OMAP_MUX
static spinlock_t mux_spin_lock = SPIN_LOCK_UNLOCKED; static spinlock_t mux_spin_lock = SPIN_LOCK_UNLOCKED;
unsigned long flags; unsigned long flags;
reg_cfg_set *cfg; reg_cfg_set *cfg;
unsigned int reg_orig = 0, reg = 0, pu_pd_orig = 0, pu_pd = 0, unsigned int reg_orig = 0, reg = 0, pu_pd_orig = 0, pu_pd = 0,
pull_orig = 0, pull = 0; pull_orig = 0, pull = 0;
unsigned int mask, warn = 0;
if (reg_cfg > ARRAY_SIZE(reg_cfg_table)) {
printk(KERN_ERR "MUX: reg_cfg %d\n", reg_cfg);
return -EINVAL;
}
cfg = &reg_cfg_table[reg_cfg]; cfg = &reg_cfg_table[reg_cfg];
...@@ -56,12 +64,20 @@ int omap_cfg_reg(const reg_cfg_t reg_cfg) ...@@ -56,12 +64,20 @@ int omap_cfg_reg(const reg_cfg_t reg_cfg)
/* Check the mux register in question */ /* Check the mux register in question */
if (cfg->mux_reg) { if (cfg->mux_reg) {
unsigned tmp1, tmp2;
reg_orig = omap_readl(cfg->mux_reg); reg_orig = omap_readl(cfg->mux_reg);
/* The mux registers always seem to be 3 bits long */ /* The mux registers always seem to be 3 bits long */
reg = reg_orig & ~(0x7 << cfg->mask_offset); mask = (0x7 << cfg->mask_offset);
tmp1 = reg_orig & mask;
reg = reg_orig & ~mask;
tmp2 = (cfg->mask << cfg->mask_offset);
reg |= tmp2;
reg |= (cfg->mask << cfg->mask_offset); if (tmp1 != tmp2)
warn = 1;
omap_writel(reg, cfg->mux_reg); omap_writel(reg, cfg->mux_reg);
} }
...@@ -70,12 +86,18 @@ int omap_cfg_reg(const reg_cfg_t reg_cfg) ...@@ -70,12 +86,18 @@ int omap_cfg_reg(const reg_cfg_t reg_cfg)
if (!cpu_is_omap1510()) { if (!cpu_is_omap1510()) {
if (cfg->pu_pd_reg && cfg->pull_val) { if (cfg->pu_pd_reg && cfg->pull_val) {
pu_pd_orig = omap_readl(cfg->pu_pd_reg); pu_pd_orig = omap_readl(cfg->pu_pd_reg);
mask = 1 << cfg->pull_bit;
if (cfg->pu_pd_val) { if (cfg->pu_pd_val) {
if (!(pu_pd_orig & mask))
warn = 1;
/* Use pull up */ /* Use pull up */
pu_pd = pu_pd_orig | (1 << cfg->pull_bit); pu_pd = pu_pd_orig | mask;
} else { } else {
if (pu_pd_orig & mask)
warn = 1;
/* Use pull down */ /* Use pull down */
pu_pd = pu_pd_orig & ~(1 << cfg->pull_bit); pu_pd = pu_pd_orig & ~mask;
} }
omap_writel(pu_pd, cfg->pu_pd_reg); omap_writel(pu_pd, cfg->pu_pd_reg);
} }
...@@ -84,21 +106,32 @@ int omap_cfg_reg(const reg_cfg_t reg_cfg) ...@@ -84,21 +106,32 @@ int omap_cfg_reg(const reg_cfg_t reg_cfg)
/* Check for an associated pull down register */ /* Check for an associated pull down register */
if (cfg->pull_reg) { if (cfg->pull_reg) {
pull_orig = omap_readl(cfg->pull_reg); pull_orig = omap_readl(cfg->pull_reg);
mask = 1 << cfg->pull_bit;
if (cfg->pull_val) { if (cfg->pull_val) {
if (pull_orig & mask)
warn = 1;
/* Low bit = pull enabled */ /* Low bit = pull enabled */
pull = pull_orig & ~(1 << cfg->pull_bit); pull = pull_orig & ~mask;
} else { } else {
if (!(pull_orig & mask))
warn = 1;
/* High bit = pull disabled */ /* High bit = pull disabled */
pull = pull_orig | (1 << cfg->pull_bit); pull = pull_orig | mask;
} }
omap_writel(pull, cfg->pull_reg); omap_writel(pull, cfg->pull_reg);
} }
if (warn) {
#ifdef CONFIG_OMAP_MUX_WARNINGS
printk(KERN_WARNING "MUX: initialized %s\n", cfg->name);
#endif
}
#ifdef CONFIG_OMAP_MUX_DEBUG #ifdef CONFIG_OMAP_MUX_DEBUG
if (cfg->debug) { if (cfg->debug || warn) {
printk("Omap: Setting register %s\n", cfg->name); printk("MUX: Setting register %s\n", cfg->name);
printk(" %s (0x%08x) = 0x%08x -> 0x%08x\n", printk(" %s (0x%08x) = 0x%08x -> 0x%08x\n",
cfg->mux_reg_name, cfg->mux_reg, reg_orig, reg); cfg->mux_reg_name, cfg->mux_reg, reg_orig, reg);
...@@ -118,8 +151,13 @@ int omap_cfg_reg(const reg_cfg_t reg_cfg) ...@@ -118,8 +151,13 @@ int omap_cfg_reg(const reg_cfg_t reg_cfg)
spin_unlock_irqrestore(&mux_spin_lock, flags); spin_unlock_irqrestore(&mux_spin_lock, flags);
#endif #ifdef CONFIG_OMAP_MUX_ERRORS
return warn ? -ETXTBSY : 0;
#else
return 0; return 0;
#endif
} }
EXPORT_SYMBOL(omap_cfg_reg); EXPORT_SYMBOL(omap_cfg_reg);
#endif /* CONFIG_OMAP_MUX */
...@@ -59,20 +59,12 @@ int ocpi_enable(void) ...@@ -59,20 +59,12 @@ int ocpi_enable(void)
/* Make sure there's clock for OCPI */ /* Make sure there's clock for OCPI */
#if defined(CONFIG_ARCH_OMAP1610) || defined(CONFIG_ARCH_OMAP1710) #if defined(CONFIG_ARCH_OMAP16XX)
if (cpu_is_omap1610() || cpu_is_omap1710()) { if (cpu_is_omap1610() || cpu_is_omap1710()) {
val = omap_readl(OMAP1610_ARM_IDLECT3); val = omap_readl(OMAP16XX_ARM_IDLECT3);
val |= EN_OCPI_CK; val |= EN_OCPI_CK;
val &= ~IDLOCPI_ARM; val &= ~IDLOCPI_ARM;
omap_writel(val, OMAP1610_ARM_IDLECT3); omap_writel(val, OMAP16XX_ARM_IDLECT3);
}
#endif
#ifdef CONFIG_ARCH_OMAP5912
if (cpu_is_omap5912()) {
val = omap_readl(OMAP5912_ARM_IDLECT3);
val |= EN_OCPI_CK;
val &= ~IDLOCPI_ARM;
omap_writel(val, OMAP5912_ARM_IDLECT3);
} }
#endif #endif
/* Enable access for OHCI in OCPI */ /* Enable access for OHCI in OCPI */
......
...@@ -41,7 +41,6 @@ ...@@ -41,7 +41,6 @@
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/arch/clocks.h>
#ifndef __instrument #ifndef __instrument
#define __instrument #define __instrument
......
...@@ -48,8 +48,10 @@ ...@@ -48,8 +48,10 @@
*/ */
/* TESTED ON: /* TESTED ON:
* - 1611B H2 (with usb1 mini-AB) * - 1611B H2 (with usb1 mini-AB) using standard Mini-B or OTG cables
* - 1510 Innovator with built-in transceiver (custom cable feeding 5V VBUS) * - 1510 Innovator UDC with bundled usb0 cable
* - 1510 Innovator OHCI with bundled usb1/usb2 cable
* - 1510 Innovator OHCI with custom usb0 cable, feeding 5V VBUS
* - 1710 custom development board using alternate pin group * - 1710 custom development board using alternate pin group
*/ */
...@@ -92,7 +94,10 @@ static u32 __init omap_usb0_init(unsigned nwires, unsigned is_device) ...@@ -92,7 +94,10 @@ static u32 __init omap_usb0_init(unsigned nwires, unsigned is_device)
u32 syscon1 = 0; u32 syscon1 = 0;
if (nwires == 0) { if (nwires == 0) {
USB_TRANSCEIVER_CTRL_REG &= ~(1 << 3); if (!cpu_is_omap15xx()) {
/* pulldown D+/D- */
USB_TRANSCEIVER_CTRL_REG &= ~(3 << 1);
}
return 0; return 0;
} }
...@@ -101,36 +106,30 @@ static u32 __init omap_usb0_init(unsigned nwires, unsigned is_device) ...@@ -101,36 +106,30 @@ static u32 __init omap_usb0_init(unsigned nwires, unsigned is_device)
* USB0_VP and USB0_VM are always set on 1510, there's no muxing * USB0_VP and USB0_VM are always set on 1510, there's no muxing
* available for them. * available for them.
*/ */
if (nwires >= 2 && !cpu_is_omap1510()) { if (nwires >= 2 && !cpu_is_omap15xx()) {
omap_cfg_reg(AA9_USB0_VP); omap_cfg_reg(AA9_USB0_VP);
omap_cfg_reg(R9_USB0_VM); omap_cfg_reg(R9_USB0_VM);
} }
if (is_device)
omap_cfg_reg(W4_USB_PUEN);
/* internal transceiver */ /* internal transceiver */
if (nwires == 2) { if (nwires == 2) {
if (cpu_is_omap1510()) { if (cpu_is_omap15xx()) {
/* This works for OHCI on 1510-Innovator, nothing to mux */ /* This works for OHCI on 1510-Innovator */
return 0; return 0;
} }
#if 0
/* NOTE: host OR device mode for now, no OTG */ /* NOTE: host OR device mode for now, no OTG */
USB_TRANSCEIVER_CTRL_REG &= ~(3 << 4); USB_TRANSCEIVER_CTRL_REG &= ~(7 << 4);
if (is_device) { if (is_device) {
omap_cfg_reg(W4_USB_PUEN);
omap_cfg_reg(R18_1510_USB_GPIO0); omap_cfg_reg(R18_1510_USB_GPIO0);
// omap_cfg_reg(USB0_VBUS); // omap_cfg_reg(USB0_VBUS);
// omap_cfg_reg(USB0_PUEN);
// USB_TRANSCEIVER_CTRL_REG.CONF_USB0_PORT_R = 7 // USB_TRANSCEIVER_CTRL_REG.CONF_USB0_PORT_R = 7
// when USB0_PUEN is needed
} else /* host mode needs D+ and D- pulldowns */ } else /* host mode needs D+ and D- pulldowns */
USB_TRANSCEIVER_CTRL_REG &= ~(3 << 1); USB_TRANSCEIVER_CTRL_REG &= ~(3 << 1);
return 3 << 16; return 3 << 16;
#else
/* FIXME: 1610 needs to return the right value here */
printk(KERN_ERR "usb0 internal transceiver, nyet\n");
return 0;
#endif
} }
/* alternate pin config, external transceiver */ /* alternate pin config, external transceiver */
...@@ -170,7 +169,7 @@ static u32 __init omap_usb1_init(unsigned nwires) ...@@ -170,7 +169,7 @@ static u32 __init omap_usb1_init(unsigned nwires)
{ {
u32 syscon1 = 0; u32 syscon1 = 0;
if (nwires != 6) if (nwires != 6 && !cpu_is_omap15xx())
USB_TRANSCEIVER_CTRL_REG &= ~CONF_USB1_UNI_R; USB_TRANSCEIVER_CTRL_REG &= ~CONF_USB1_UNI_R;
if (nwires == 0) if (nwires == 0)
return 0; return 0;
...@@ -178,11 +177,11 @@ static u32 __init omap_usb1_init(unsigned nwires) ...@@ -178,11 +177,11 @@ static u32 __init omap_usb1_init(unsigned nwires)
/* external transceiver */ /* external transceiver */
omap_cfg_reg(USB1_TXD); omap_cfg_reg(USB1_TXD);
omap_cfg_reg(USB1_TXEN); omap_cfg_reg(USB1_TXEN);
if (cpu_is_omap1510()) { if (cpu_is_omap15xx()) {
omap_cfg_reg(USB1_SEO); omap_cfg_reg(USB1_SEO);
omap_cfg_reg(USB1_SPEED); omap_cfg_reg(USB1_SPEED);
// SUSP // SUSP
} else if (cpu_is_omap1610() || cpu_is_omap5912() || cpu_is_omap1710()) { } else if (cpu_is_omap16xx()) {
omap_cfg_reg(W13_1610_USB1_SE0); omap_cfg_reg(W13_1610_USB1_SE0);
omap_cfg_reg(R13_1610_USB1_SPEED); omap_cfg_reg(R13_1610_USB1_SPEED);
// SUSP // SUSP
...@@ -203,7 +202,8 @@ static u32 __init omap_usb1_init(unsigned nwires) ...@@ -203,7 +202,8 @@ static u32 __init omap_usb1_init(unsigned nwires)
syscon1 = 3; syscon1 = 3;
omap_cfg_reg(USB1_VP); omap_cfg_reg(USB1_VP);
omap_cfg_reg(USB1_VM); omap_cfg_reg(USB1_VM);
USB_TRANSCEIVER_CTRL_REG |= CONF_USB1_UNI_R; if (!cpu_is_omap15xx())
USB_TRANSCEIVER_CTRL_REG |= CONF_USB1_UNI_R;
break; break;
default: default:
printk(KERN_ERR "illegal usb%d %d-wire transceiver\n", printk(KERN_ERR "illegal usb%d %d-wire transceiver\n",
...@@ -216,31 +216,32 @@ static u32 __init omap_usb2_init(unsigned nwires, unsigned alt_pingroup) ...@@ -216,31 +216,32 @@ static u32 __init omap_usb2_init(unsigned nwires, unsigned alt_pingroup)
{ {
u32 syscon1 = 0; u32 syscon1 = 0;
if (alt_pingroup) if (alt_pingroup || nwires == 0)
return 0; return 0;
if (nwires != 6) if (nwires != 6 && !cpu_is_omap15xx())
USB_TRANSCEIVER_CTRL_REG &= ~CONF_USB2_UNI_R; USB_TRANSCEIVER_CTRL_REG &= ~CONF_USB2_UNI_R;
if (nwires == 0) if (nwires == 0)
return 0; return 0;
/* external transceiver */ /* external transceiver */
if (cpu_is_omap1510()) { if (cpu_is_omap15xx()) {
omap_cfg_reg(USB2_TXD); omap_cfg_reg(USB2_TXD);
omap_cfg_reg(USB2_TXEN); omap_cfg_reg(USB2_TXEN);
omap_cfg_reg(USB2_SEO); omap_cfg_reg(USB2_SEO);
if (nwires != 3) if (nwires != 3)
omap_cfg_reg(USB2_RCV); omap_cfg_reg(USB2_RCV);
} else if (cpu_is_omap1610() || cpu_is_omap5912() || cpu_is_omap1710()) { /* there is no USB2_SPEED */
} else if (cpu_is_omap16xx()) {
omap_cfg_reg(V6_USB2_TXD); omap_cfg_reg(V6_USB2_TXD);
omap_cfg_reg(W9_USB2_TXEN); omap_cfg_reg(W9_USB2_TXEN);
omap_cfg_reg(W5_USB2_SE0); omap_cfg_reg(W5_USB2_SE0);
if (nwires != 3) if (nwires != 3)
omap_cfg_reg(Y5_USB2_RCV); omap_cfg_reg(Y5_USB2_RCV);
// FIXME omap_cfg_reg(USB2_SPEED);
} else { } else {
pr_debug("usb unrecognized\n"); pr_debug("usb unrecognized\n");
} }
// omap_cfg_reg(USB2_SUSP); // omap_cfg_reg(USB2_SUSP);
// FIXME omap_cfg_reg(USB2_SPEED);
switch (nwires) { switch (nwires) {
case 3: case 3:
...@@ -251,14 +252,14 @@ static u32 __init omap_usb2_init(unsigned nwires, unsigned alt_pingroup) ...@@ -251,14 +252,14 @@ static u32 __init omap_usb2_init(unsigned nwires, unsigned alt_pingroup)
break; break;
case 6: case 6:
syscon1 = 3; syscon1 = 3;
if (cpu_is_omap1510()) { if (cpu_is_omap15xx()) {
omap_cfg_reg(USB2_VP); omap_cfg_reg(USB2_VP);
omap_cfg_reg(USB2_VM); omap_cfg_reg(USB2_VM);
} else { } else {
omap_cfg_reg(AA9_USB2_VP); omap_cfg_reg(AA9_USB2_VP);
omap_cfg_reg(R9_USB2_VM); omap_cfg_reg(R9_USB2_VM);
USB_TRANSCEIVER_CTRL_REG |= CONF_USB2_UNI_R;
} }
USB_TRANSCEIVER_CTRL_REG |= CONF_USB2_UNI_R;
break; break;
default: default:
printk(KERN_ERR "illegal usb%d %d-wire transceiver\n", printk(KERN_ERR "illegal usb%d %d-wire transceiver\n",
...@@ -337,7 +338,7 @@ static struct platform_device ohci_device = { ...@@ -337,7 +338,7 @@ static struct platform_device ohci_device = {
.dev = { .dev = {
.release = usb_release, .release = usb_release,
.dma_mask = &ohci_dmamask, .dma_mask = &ohci_dmamask,
.coherent_dma_mask = 0x0fffffff, .coherent_dma_mask = 0xffffffff,
}, },
.num_resources = ARRAY_SIZE(ohci_resources), .num_resources = ARRAY_SIZE(ohci_resources),
.resource = ohci_resources, .resource = ohci_resources,
...@@ -375,7 +376,11 @@ static struct platform_device otg_device = { ...@@ -375,7 +376,11 @@ static struct platform_device otg_device = {
// FIXME correct answer depends on hmc_mode, // FIXME correct answer depends on hmc_mode,
// as does any nonzero value for config->otg port number // as does any nonzero value for config->otg port number
#ifdef CONFIG_USB_GADGET_OMAP
#define is_usb0_device(config) 1
#else
#define is_usb0_device(config) 0 #define is_usb0_device(config) 0
#endif
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
...@@ -420,7 +425,7 @@ omap_otg_init(struct omap_usb_config *config) ...@@ -420,7 +425,7 @@ omap_otg_init(struct omap_usb_config *config)
if (alt_pingroup) if (alt_pingroup)
printk(", usb2 alt %d wires", config->pins[2]); printk(", usb2 alt %d wires", config->pins[2]);
else if (config->pins[0]) else if (config->pins[0])
printk(", usb0 %d wires%s", config->pins[2], printk(", usb0 %d wires%s", config->pins[0],
is_usb0_device(config) ? " (dev)" : ""); is_usb0_device(config) ? " (dev)" : "");
if (config->pins[1]) if (config->pins[1])
printk(", usb1 %d wires", config->pins[1]); printk(", usb1 %d wires", config->pins[1]);
...@@ -477,6 +482,19 @@ static inline void omap_otg_init(struct omap_usb_config *config) {} ...@@ -477,6 +482,19 @@ static inline void omap_otg_init(struct omap_usb_config *config) {}
#ifdef CONFIG_ARCH_OMAP1510 #ifdef CONFIG_ARCH_OMAP1510
#define ULPD_SOFT_REQ_REG __REG16(ULPD_SOFT_REQ)
#define SOFT_UDC_REQ (1 << 4)
#define SOFT_DPLL_REQ (1 << 0)
#define ULPD_DPLL_CTRL_REG __REG16(ULPD_DPLL_CTRL)
#define DPLL_IOB (1 << 13)
#define DPLL_PLL_ENABLE (1 << 4)
#define DPLL_LOCK (1 << 0)
#define ULPD_APLL_CTRL_REG __REG16(ULPD_APLL_CTRL)
#define APLL_NDPLL_SWITCH (1 << 0)
static void __init omap_1510_usb_init(struct omap_usb_config *config) static void __init omap_1510_usb_init(struct omap_usb_config *config)
{ {
int status; int status;
...@@ -490,16 +508,43 @@ static void __init omap_1510_usb_init(struct omap_usb_config *config) ...@@ -490,16 +508,43 @@ static void __init omap_1510_usb_init(struct omap_usb_config *config)
val |= (config->hmc_mode << 1); val |= (config->hmc_mode << 1);
omap_writel(val, MOD_CONF_CTRL_0); omap_writel(val, MOD_CONF_CTRL_0);
// FIXME this has a UDC controller too printk("USB: hmc %d", config->hmc_mode);
if (config->pins[0])
printk(", usb0 %d wires%s", config->pins[0],
is_usb0_device(config) ? " (dev)" : "");
if (config->pins[1])
printk(", usb1 %d wires", config->pins[1]);
if (config->pins[2])
printk(", usb2 %d wires", config->pins[2]);
printk("\n");
/* use DPLL for 48 MHz function clock */
pr_debug("APLL %04x DPLL %04x REQ %04x\n", ULPD_APLL_CTRL_REG,
ULPD_DPLL_CTRL_REG, ULPD_SOFT_REQ_REG);
ULPD_APLL_CTRL_REG &= ~APLL_NDPLL_SWITCH;
ULPD_DPLL_CTRL_REG |= DPLL_IOB | DPLL_PLL_ENABLE;
ULPD_SOFT_REQ_REG |= SOFT_UDC_REQ | SOFT_DPLL_REQ;
while (!(ULPD_DPLL_CTRL_REG & DPLL_LOCK))
cpu_relax();
#ifdef CONFIG_USB_GADGET_OMAP
if (config->register_dev) {
udc_device.dev.platform_data = config;
status = platform_device_register(&udc_device);
if (status)
pr_debug("can't register UDC device, %d\n", status);
/* udc driver gates 48MHz by D+ pullup */
}
#endif
#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
if (config->otg || config->register_host) { if (config->register_host) {
ohci_device.dev.platform_data = config; ohci_device.dev.platform_data = config;
status = platform_device_register(&ohci_device); status = platform_device_register(&ohci_device);
if (status) if (status)
pr_debug("can't register OHCI device, %d\n", status); pr_debug("can't register OHCI device, %d\n", status);
/* hcd explicitly gates 48MHz */
} }
// FIXME completely untested ...
#endif #endif
} }
...@@ -524,12 +569,9 @@ omap_usb_init(void) ...@@ -524,12 +569,9 @@ omap_usb_init(void)
} }
platform_data = *config; platform_data = *config;
if (cpu_is_omap730() if (cpu_is_omap730() || cpu_is_omap16xx())
|| cpu_is_omap1610()
|| cpu_is_omap1710()
|| cpu_is_omap5912())
omap_otg_init(&platform_data); omap_otg_init(&platform_data);
else if (cpu_is_omap1510()) else if (cpu_is_omap15xx())
omap_1510_usb_init(&platform_data); omap_1510_usb_init(&platform_data);
else { else {
printk(KERN_ERR "USB: No init for your chip yet\n"); printk(KERN_ERR "USB: No init for your chip yet\n");
......
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