提交 c541c15f 编写于 作者: T Tony Lindgren

Merge branches 'cleanup-part3', 'voltage', 'dmtimer' and 'l3' into dt-base

...@@ -12,7 +12,12 @@ struct dev_archdata { ...@@ -12,7 +12,12 @@ struct dev_archdata {
#endif #endif
}; };
struct omap_device;
struct pdev_archdata { struct pdev_archdata {
#ifdef CONFIG_ARCH_OMAP
struct omap_device *od;
#endif
}; };
#endif #endif
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# Common support # Common support
obj-y := io.o id.o sram.o time.o irq.o mux.o flash.o serial.o devices.o dma.o obj-y := io.o id.o sram.o time.o irq.o mux.o flash.o serial.o devices.o dma.o
obj-y += clock.o clock_data.o opp_data.o reset.o pm_bus.o obj-y += clock.o clock_data.o opp_data.o reset.o pm_bus.o timer.o
obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
static int dsp_use; static int dsp_use;
static struct clk *api_clk; static struct clk *api_clk;
static struct clk *dsp_clk; static struct clk *dsp_clk;
static struct platform_device **omap_mcbsp_devices;
static void omap1_mcbsp_request(unsigned int id) static void omap1_mcbsp_request(unsigned int id)
{ {
...@@ -78,6 +79,17 @@ static struct omap_mcbsp_ops omap1_mcbsp_ops = { ...@@ -78,6 +79,17 @@ static struct omap_mcbsp_ops omap1_mcbsp_ops = {
.free = omap1_mcbsp_free, .free = omap1_mcbsp_free,
}; };
#define OMAP7XX_MCBSP1_BASE 0xfffb1000
#define OMAP7XX_MCBSP2_BASE 0xfffb1800
#define OMAP1510_MCBSP1_BASE 0xe1011800
#define OMAP1510_MCBSP2_BASE 0xfffb1000
#define OMAP1510_MCBSP3_BASE 0xe1017000
#define OMAP1610_MCBSP1_BASE 0xe1011800
#define OMAP1610_MCBSP2_BASE 0xfffb1000
#define OMAP1610_MCBSP3_BASE 0xe1017000
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850) #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
struct resource omap7xx_mcbsp_res[][6] = { struct resource omap7xx_mcbsp_res[][6] = {
{ {
...@@ -369,6 +381,39 @@ static struct omap_mcbsp_platform_data omap16xx_mcbsp_pdata[] = { ...@@ -369,6 +381,39 @@ static struct omap_mcbsp_platform_data omap16xx_mcbsp_pdata[] = {
#define OMAP16XX_MCBSP_COUNT 0 #define OMAP16XX_MCBSP_COUNT 0
#endif #endif
static void omap_mcbsp_register_board_cfg(struct resource *res, int res_count,
struct omap_mcbsp_platform_data *config, int size)
{
int i;
omap_mcbsp_devices = kzalloc(size * sizeof(struct platform_device *),
GFP_KERNEL);
if (!omap_mcbsp_devices) {
printk(KERN_ERR "Could not register McBSP devices\n");
return;
}
for (i = 0; i < size; i++) {
struct platform_device *new_mcbsp;
int ret;
new_mcbsp = platform_device_alloc("omap-mcbsp", i + 1);
if (!new_mcbsp)
continue;
platform_device_add_resources(new_mcbsp, &res[i * res_count],
res_count);
config[i].reg_size = 2;
config[i].reg_step = 2;
new_mcbsp->dev.platform_data = &config[i];
ret = platform_device_add(new_mcbsp);
if (ret) {
platform_device_put(new_mcbsp);
continue;
}
omap_mcbsp_devices[i] = new_mcbsp;
}
}
static int __init omap1_mcbsp_init(void) static int __init omap1_mcbsp_init(void)
{ {
if (!cpu_class_is_omap1()) if (!cpu_class_is_omap1())
......
/**
* OMAP1 Dual-Mode Timers - platform device registration
*
* Contains first level initialization routines which internally
* generates timer device information and registers with linux
* device model. It also has low level function to chnage the timer
* input clock source.
*
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
* Tarun Kanti DebBarma <tarun.kanti@ti.com>
* Thara Gopinath <thara@ti.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
* kind, whether express or implied; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/clk.h>
#include <linux/io.h>
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/platform_device.h>
#include <mach/irqs.h>
#include <plat/dmtimer.h>
#define OMAP1610_GPTIMER1_BASE 0xfffb1400
#define OMAP1610_GPTIMER2_BASE 0xfffb1c00
#define OMAP1610_GPTIMER3_BASE 0xfffb2400
#define OMAP1610_GPTIMER4_BASE 0xfffb2c00
#define OMAP1610_GPTIMER5_BASE 0xfffb3400
#define OMAP1610_GPTIMER6_BASE 0xfffb3c00
#define OMAP1610_GPTIMER7_BASE 0xfffb7400
#define OMAP1610_GPTIMER8_BASE 0xfffbd400
#define OMAP1_DM_TIMER_COUNT 8
static int omap1_dm_timer_set_src(struct platform_device *pdev,
int source)
{
int n = (pdev->id - 1) << 1;
u32 l;
l = __raw_readl(MOD_CONF_CTRL_1) & ~(0x03 << n);
l |= source << n;
__raw_writel(l, MOD_CONF_CTRL_1);
return 0;
}
int __init omap1_dm_timer_init(void)
{
int i;
int ret;
struct dmtimer_platform_data *pdata;
struct platform_device *pdev;
if (!cpu_is_omap16xx())
return 0;
for (i = 1; i <= OMAP1_DM_TIMER_COUNT; i++) {
struct resource res[2];
u32 base, irq;
switch (i) {
case 1:
base = OMAP1610_GPTIMER1_BASE;
irq = INT_1610_GPTIMER1;
break;
case 2:
base = OMAP1610_GPTIMER2_BASE;
irq = INT_1610_GPTIMER2;
break;
case 3:
base = OMAP1610_GPTIMER3_BASE;
irq = INT_1610_GPTIMER3;
break;
case 4:
base = OMAP1610_GPTIMER4_BASE;
irq = INT_1610_GPTIMER4;
break;
case 5:
base = OMAP1610_GPTIMER5_BASE;
irq = INT_1610_GPTIMER5;
break;
case 6:
base = OMAP1610_GPTIMER6_BASE;
irq = INT_1610_GPTIMER6;
break;
case 7:
base = OMAP1610_GPTIMER7_BASE;
irq = INT_1610_GPTIMER7;
break;
case 8:
base = OMAP1610_GPTIMER8_BASE;
irq = INT_1610_GPTIMER8;
break;
default:
/*
* not supposed to reach here.
* this is to remove warning.
*/
return -EINVAL;
}
pdev = platform_device_alloc("omap_timer", i);
if (!pdev) {
pr_err("%s: Failed to device alloc for dmtimer%d\n",
__func__, i);
return -ENOMEM;
}
memset(res, 0, 2 * sizeof(struct resource));
res[0].start = base;
res[0].end = base + 0x46;
res[0].flags = IORESOURCE_MEM;
res[1].start = irq;
res[1].end = irq;
res[1].flags = IORESOURCE_IRQ;
ret = platform_device_add_resources(pdev, res,
ARRAY_SIZE(res));
if (ret) {
dev_err(&pdev->dev, "%s: Failed to add resources.\n",
__func__);
goto err_free_pdev;
}
pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
if (!pdata) {
dev_err(&pdev->dev, "%s: Failed to allocate pdata.\n",
__func__);
ret = -ENOMEM;
goto err_free_pdata;
}
pdata->set_timer_src = omap1_dm_timer_set_src;
pdata->needs_manual_reset = 1;
ret = platform_device_add_data(pdev, pdata, sizeof(*pdata));
if (ret) {
dev_err(&pdev->dev, "%s: Failed to add platform data.\n",
__func__);
goto err_free_pdata;
}
ret = platform_device_add(pdev);
if (ret) {
dev_err(&pdev->dev, "%s: Failed to add platform device.\n",
__func__);
goto err_free_pdata;
}
dev_dbg(&pdev->dev, " Registered.\n");
}
return 0;
err_free_pdata:
kfree(pdata);
err_free_pdev:
platform_device_unregister(pdev);
return ret;
}
arch_initcall(omap1_dm_timer_init);
...@@ -89,14 +89,13 @@ obj-$(CONFIG_ARCH_OMAP4) += prcm.o cm2xxx_3xxx.o cminst44xx.o \ ...@@ -89,14 +89,13 @@ obj-$(CONFIG_ARCH_OMAP4) += prcm.o cm2xxx_3xxx.o cminst44xx.o \
vp44xx_data.o vp44xx_data.o
# OMAP voltage domains # OMAP voltage domains
ifeq ($(CONFIG_PM),y) voltagedomain-common := voltage.o vc.o vp.o
voltagedomain-common := voltage.o obj-$(CONFIG_ARCH_OMAP2) += $(voltagedomain-common) \
obj-$(CONFIG_ARCH_OMAP2) += $(voltagedomain-common) voltagedomains2xxx_data.o
obj-$(CONFIG_ARCH_OMAP3) += $(voltagedomain-common) \ obj-$(CONFIG_ARCH_OMAP3) += $(voltagedomain-common) \
voltagedomains3xxx_data.o voltagedomains3xxx_data.o
obj-$(CONFIG_ARCH_OMAP4) += $(voltagedomain-common) \ obj-$(CONFIG_ARCH_OMAP4) += $(voltagedomain-common) \
voltagedomains44xx_data.o voltagedomains44xx_data.o
endif
# OMAP powerdomain framework # OMAP powerdomain framework
powerdomain-common += powerdomain.o powerdomain-common.o powerdomain-common += powerdomain.o powerdomain-common.o
...@@ -116,9 +115,12 @@ obj-$(CONFIG_ARCH_OMAP4) += $(powerdomain-common) \ ...@@ -116,9 +115,12 @@ obj-$(CONFIG_ARCH_OMAP4) += $(powerdomain-common) \
obj-$(CONFIG_ARCH_OMAP2) += clockdomain.o \ obj-$(CONFIG_ARCH_OMAP2) += clockdomain.o \
clockdomain2xxx_3xxx.o \ clockdomain2xxx_3xxx.o \
clockdomains2xxx_3xxx_data.o clockdomains2xxx_3xxx_data.o
obj-$(CONFIG_SOC_OMAP2420) += clockdomains2420_data.o
obj-$(CONFIG_SOC_OMAP2430) += clockdomains2430_data.o
obj-$(CONFIG_ARCH_OMAP3) += clockdomain.o \ obj-$(CONFIG_ARCH_OMAP3) += clockdomain.o \
clockdomain2xxx_3xxx.o \ clockdomain2xxx_3xxx.o \
clockdomains2xxx_3xxx_data.o clockdomains2xxx_3xxx_data.o \
clockdomains3xxx_data.o
obj-$(CONFIG_ARCH_OMAP4) += clockdomain.o \ obj-$(CONFIG_ARCH_OMAP4) += clockdomain.o \
clockdomain44xx.o \ clockdomain44xx.o \
clockdomains44xx_data.o clockdomains44xx_data.o
...@@ -185,78 +187,66 @@ endif ...@@ -185,78 +187,66 @@ endif
# Specific board support # Specific board support
obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o
obj-$(CONFIG_MACH_OMAP_H4) += board-h4.o obj-$(CONFIG_MACH_OMAP_H4) += board-h4.o
obj-$(CONFIG_MACH_OMAP_2430SDP) += board-2430sdp.o \ obj-$(CONFIG_MACH_OMAP_2430SDP) += board-2430sdp.o
hsmmc.o
obj-$(CONFIG_MACH_OMAP_APOLLON) += board-apollon.o obj-$(CONFIG_MACH_OMAP_APOLLON) += board-apollon.o
obj-$(CONFIG_MACH_OMAP3_BEAGLE) += board-omap3beagle.o \ obj-$(CONFIG_MACH_OMAP3_BEAGLE) += board-omap3beagle.o
hsmmc.o obj-$(CONFIG_MACH_DEVKIT8000) += board-devkit8000.o
obj-$(CONFIG_MACH_DEVKIT8000) += board-devkit8000.o \ obj-$(CONFIG_MACH_OMAP_LDP) += board-ldp.o
hsmmc.o obj-$(CONFIG_MACH_OMAP3530_LV_SOM) += board-omap3logic.o
obj-$(CONFIG_MACH_OMAP_LDP) += board-ldp.o \ obj-$(CONFIG_MACH_OMAP3_TORPEDO) += board-omap3logic.o
board-flash.o \ obj-$(CONFIG_MACH_ENCORE) += board-omap3encore.o
hsmmc.o obj-$(CONFIG_MACH_OVERO) += board-overo.o
obj-$(CONFIG_MACH_OMAP3530_LV_SOM) += board-omap3logic.o \ obj-$(CONFIG_MACH_OMAP3EVM) += board-omap3evm.o
hsmmc.o obj-$(CONFIG_MACH_OMAP3_PANDORA) += board-omap3pandora.o
obj-$(CONFIG_MACH_OMAP3_TORPEDO) += board-omap3logic.o \ obj-$(CONFIG_MACH_OMAP_3430SDP) += board-3430sdp.o
hsmmc.o
obj-$(CONFIG_MACH_OVERO) += board-overo.o \
hsmmc.o
obj-$(CONFIG_MACH_OMAP3EVM) += board-omap3evm.o \
hsmmc.o
obj-$(CONFIG_MACH_OMAP3_PANDORA) += board-omap3pandora.o \
hsmmc.o
obj-$(CONFIG_MACH_OMAP_3430SDP) += board-3430sdp.o \
hsmmc.o \
board-flash.o
obj-$(CONFIG_MACH_NOKIA_N8X0) += board-n8x0.o obj-$(CONFIG_MACH_NOKIA_N8X0) += board-n8x0.o
obj-$(CONFIG_MACH_NOKIA_RM680) += board-rm680.o \ obj-$(CONFIG_MACH_NOKIA_RM680) += board-rm680.o \
sdram-nokia.o \ sdram-nokia.o
hsmmc.o
obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51.o \ obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51.o \
sdram-nokia.o \ sdram-nokia.o \
board-rx51-peripherals.o \ board-rx51-peripherals.o \
board-rx51-video.o \ board-rx51-video.o
hsmmc.o
obj-$(CONFIG_MACH_OMAP_ZOOM2) += board-zoom.o \ obj-$(CONFIG_MACH_OMAP_ZOOM2) += board-zoom.o \
board-zoom-peripherals.o \ board-zoom-peripherals.o \
board-zoom-display.o \ board-zoom-display.o \
board-flash.o \
hsmmc.o \
board-zoom-debugboard.o board-zoom-debugboard.o
obj-$(CONFIG_MACH_OMAP_ZOOM3) += board-zoom.o \ obj-$(CONFIG_MACH_OMAP_ZOOM3) += board-zoom.o \
board-zoom-peripherals.o \ board-zoom-peripherals.o \
board-zoom-display.o \ board-zoom-display.o \
board-flash.o \
hsmmc.o \
board-zoom-debugboard.o board-zoom-debugboard.o
obj-$(CONFIG_MACH_OMAP_3630SDP) += board-3630sdp.o \ obj-$(CONFIG_MACH_OMAP_3630SDP) += board-3630sdp.o \
board-zoom-peripherals.o \ board-zoom-peripherals.o \
board-zoom-display.o \ board-zoom-display.o
board-flash.o \ obj-$(CONFIG_MACH_CM_T35) += board-cm-t35.o
hsmmc.o
obj-$(CONFIG_MACH_CM_T35) += board-cm-t35.o \
hsmmc.o
obj-$(CONFIG_MACH_CM_T3517) += board-cm-t3517.o obj-$(CONFIG_MACH_CM_T3517) += board-cm-t3517.o
obj-$(CONFIG_MACH_IGEP0020) += board-igep0020.o \ obj-$(CONFIG_MACH_IGEP0020) += board-igep0020.o
hsmmc.o obj-$(CONFIG_MACH_OMAP3_TOUCHBOOK) += board-omap3touchbook.o
obj-$(CONFIG_MACH_OMAP3_TOUCHBOOK) += board-omap3touchbook.o \
hsmmc.o
obj-$(CONFIG_MACH_OMAP_4430SDP) += board-4430sdp.o \ obj-$(CONFIG_MACH_OMAP_4430SDP) += board-4430sdp.o \
hsmmc.o \
omap_phy_internal.o omap_phy_internal.o
obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \
hsmmc.o \ omap_phy_internal.o
obj-$(CONFIG_MACH_PCM049) += board-omap4pcm049.o \
omap_phy_internal.o omap_phy_internal.o
obj-$(CONFIG_MACH_OMAP3517EVM) += board-am3517evm.o \ obj-$(CONFIG_MACH_OMAP3517EVM) += board-am3517evm.o \
omap_phy_internal.o \ omap_phy_internal.o
obj-$(CONFIG_MACH_CRANEBOARD) += board-am3517crane.o obj-$(CONFIG_MACH_CRANEBOARD) += board-am3517crane.o
obj-$(CONFIG_MACH_SBC3530) += board-omap3stalker.o \ obj-$(CONFIG_MACH_SBC3530) += board-omap3stalker.o
hsmmc.o
obj-$(CONFIG_MACH_TI8168EVM) += board-ti8168evm.o obj-$(CONFIG_MACH_TI8168EVM) += board-ti8168evm.o
# Platform specific device init code # Platform specific device init code
omap-flash-$(CONFIG_MTD_NAND_OMAP2) := board-flash.o
omap-flash-$(CONFIG_MTD_ONENAND_OMAP2) := board-flash.o
obj-y += $(omap-flash-y) $(omap-flash-m)
omap-hsmmc-$(CONFIG_MMC_OMAP_HS) := hsmmc.o
obj-y += $(omap-hsmmc-m) $(omap-hsmmc-y)
usbfs-$(CONFIG_ARCH_OMAP_OTG) := usb-fs.o usbfs-$(CONFIG_ARCH_OMAP_OTG) := usb-fs.o
obj-y += $(usbfs-m) $(usbfs-y) obj-y += $(usbfs-m) $(usbfs-y)
obj-y += usb-musb.o obj-y += usb-musb.o
......
...@@ -141,12 +141,6 @@ static struct omap_board_config_kernel sdp2430_config[] __initdata = { ...@@ -141,12 +141,6 @@ static struct omap_board_config_kernel sdp2430_config[] __initdata = {
{OMAP_TAG_LCD, &sdp2430_lcd_config}, {OMAP_TAG_LCD, &sdp2430_lcd_config},
}; };
static void __init omap_2430sdp_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static struct regulator_consumer_supply sdp2430_vmmc1_supplies[] = { static struct regulator_consumer_supply sdp2430_vmmc1_supplies[] = {
REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"), REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
}; };
...@@ -236,6 +230,7 @@ static void __init omap_2430sdp_init(void) ...@@ -236,6 +230,7 @@ static void __init omap_2430sdp_init(void)
platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices)); platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices));
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
omap2_hsmmc_init(mmc); omap2_hsmmc_init(mmc);
omap2_usbfs_init(&sdp2430_usb_config); omap2_usbfs_init(&sdp2430_usb_config);
...@@ -249,18 +244,12 @@ static void __init omap_2430sdp_init(void) ...@@ -249,18 +244,12 @@ static void __init omap_2430sdp_init(void)
"Secondary LCD backlight"); "Secondary LCD backlight");
} }
static void __init omap_2430sdp_map_io(void)
{
omap2_set_globals_243x();
omap243x_map_common_io();
}
MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board") MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board")
/* Maintainer: Syed Khasim - Texas Instruments Inc */ /* Maintainer: Syed Khasim - Texas Instruments Inc */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap_2430sdp_map_io, .map_io = omap243x_map_io,
.init_early = omap_2430sdp_init_early, .init_early = omap2430_init_early,
.init_irq = omap2_init_irq, .init_irq = omap2_init_irq,
.init_machine = omap_2430sdp_init, .init_machine = omap_2430sdp_init,
.timer = &omap2_timer, .timer = &omap2_timer,
......
...@@ -225,12 +225,6 @@ static struct omap_dss_board_info sdp3430_dss_data = { ...@@ -225,12 +225,6 @@ static struct omap_dss_board_info sdp3430_dss_data = {
static struct omap_board_config_kernel sdp3430_config[] __initdata = { static struct omap_board_config_kernel sdp3430_config[] __initdata = {
}; };
static void __init omap_3430sdp_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(hyb18m512160af6_sdrc_params, NULL);
}
static struct omap2_hsmmc_info mmc[] = { static struct omap2_hsmmc_info mmc[] = {
{ {
.mmc = 1, .mmc = 1,
...@@ -719,6 +713,7 @@ static void __init omap_3430sdp_init(void) ...@@ -719,6 +713,7 @@ static void __init omap_3430sdp_init(void)
gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV1; gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV1;
omap_ads7846_init(1, gpio_pendown, 310, NULL); omap_ads7846_init(1, gpio_pendown, 310, NULL);
board_serial_init(); board_serial_init();
omap_sdrc_init(hyb18m512160af6_sdrc_params, NULL);
usb_musb_init(NULL); usb_musb_init(NULL);
board_smc91x_init(); board_smc91x_init();
board_flash_init(sdp_flash_partitions, chip_sel_3430, 0); board_flash_init(sdp_flash_partitions, chip_sel_3430, 0);
...@@ -732,7 +727,7 @@ MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board") ...@@ -732,7 +727,7 @@ MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap_3430sdp_init_early, .init_early = omap3430_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap_3430sdp_init, .init_machine = omap_3430sdp_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -70,13 +70,6 @@ static const struct usbhs_omap_board_data usbhs_bdata __initconst = { ...@@ -70,13 +70,6 @@ static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
static struct omap_board_config_kernel sdp_config[] __initdata = { static struct omap_board_config_kernel sdp_config[] __initdata = {
}; };
static void __init omap_sdp_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params,
h8mbx00u0mer0em_sdrc_params);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
{ .reg_offset = OMAP_MUX_TERMINATOR }, { .reg_offset = OMAP_MUX_TERMINATOR },
...@@ -207,6 +200,8 @@ static void __init omap_sdp_init(void) ...@@ -207,6 +200,8 @@ static void __init omap_sdp_init(void)
omap_board_config = sdp_config; omap_board_config = sdp_config;
omap_board_config_size = ARRAY_SIZE(sdp_config); omap_board_config_size = ARRAY_SIZE(sdp_config);
zoom_peripherals_init(); zoom_peripherals_init();
omap_sdrc_init(h8mbx00u0mer0em_sdrc_params,
h8mbx00u0mer0em_sdrc_params);
zoom_display_init(); zoom_display_init();
board_smc91x_init(); board_smc91x_init();
board_flash_init(sdp_flash_partitions, chip_sel_sdp, NAND_BUSWIDTH_16); board_flash_init(sdp_flash_partitions, chip_sel_sdp, NAND_BUSWIDTH_16);
...@@ -218,7 +213,7 @@ MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board") ...@@ -218,7 +213,7 @@ MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap_sdp_init_early, .init_early = omap3630_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap_sdp_init, .init_machine = omap_sdp_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -389,12 +389,6 @@ static struct omap_board_config_kernel sdp4430_config[] __initdata = { ...@@ -389,12 +389,6 @@ static struct omap_board_config_kernel sdp4430_config[] __initdata = {
{ OMAP_TAG_LCD, &sdp4430_lcd_config }, { OMAP_TAG_LCD, &sdp4430_lcd_config },
}; };
static void __init omap_4430sdp_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static struct omap_musb_board_data musb_board_data = { static struct omap_musb_board_data musb_board_data = {
.interface_type = MUSB_INTERFACE_UTMI, .interface_type = MUSB_INTERFACE_UTMI,
.mode = MUSB_OTG, .mode = MUSB_OTG,
...@@ -809,6 +803,7 @@ static void __init omap_4430sdp_init(void) ...@@ -809,6 +803,7 @@ static void __init omap_4430sdp_init(void)
omap_sfh7741prox_init(); omap_sfh7741prox_init();
platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices)); platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
board_serial_init(); board_serial_init();
omap_sdrc_init(NULL, NULL);
omap4_sdp4430_wifi_init(); omap4_sdp4430_wifi_init();
omap4_twl6030_hsmmc_init(mmc); omap4_twl6030_hsmmc_init(mmc);
...@@ -830,18 +825,12 @@ static void __init omap_4430sdp_init(void) ...@@ -830,18 +825,12 @@ static void __init omap_4430sdp_init(void)
omap_4430sdp_display_init(); omap_4430sdp_display_init();
} }
static void __init omap_4430sdp_map_io(void)
{
omap2_set_globals_443x();
omap44xx_map_common_io();
}
MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board") MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board")
/* Maintainer: Santosh Shilimkar - Texas Instruments Inc */ /* Maintainer: Santosh Shilimkar - Texas Instruments Inc */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap_4430sdp_map_io, .map_io = omap4_map_io,
.init_early = omap_4430sdp_init_early, .init_early = omap4430_init_early,
.init_irq = gic_init_irq, .init_irq = gic_init_irq,
.init_machine = omap_4430sdp_init, .init_machine = omap_4430sdp_init,
.timer = &omap4_timer, .timer = &omap4_timer,
......
...@@ -47,12 +47,6 @@ static struct omap_board_mux board_mux[] __initdata = { ...@@ -47,12 +47,6 @@ static struct omap_board_mux board_mux[] __initdata = {
}; };
#endif #endif
static void __init am3517_crane_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static struct usbhs_omap_board_data usbhs_bdata __initdata = { static struct usbhs_omap_board_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED, .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
...@@ -70,6 +64,7 @@ static void __init am3517_crane_init(void) ...@@ -70,6 +64,7 @@ static void __init am3517_crane_init(void)
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
omap_board_config = am3517_crane_config; omap_board_config = am3517_crane_config;
omap_board_config_size = ARRAY_SIZE(am3517_crane_config); omap_board_config_size = ARRAY_SIZE(am3517_crane_config);
...@@ -101,7 +96,7 @@ MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD") ...@@ -101,7 +96,7 @@ MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = am3517_crane_init_early, .init_early = am35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = am3517_crane_init, .init_machine = am3517_crane_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -362,11 +362,6 @@ static struct omap_dss_board_info am3517_evm_dss_data = { ...@@ -362,11 +362,6 @@ static struct omap_dss_board_info am3517_evm_dss_data = {
/* /*
* Board initialization * Board initialization
*/ */
static void __init am3517_evm_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static struct omap_musb_board_data musb_board_data = { static struct omap_musb_board_data musb_board_data = {
.interface_type = MUSB_INTERFACE_ULPI, .interface_type = MUSB_INTERFACE_ULPI,
...@@ -469,6 +464,7 @@ static void __init am3517_evm_init(void) ...@@ -469,6 +464,7 @@ static void __init am3517_evm_init(void)
am3517_evm_i2c_init(); am3517_evm_i2c_init();
omap_display_init(&am3517_evm_dss_data); omap_display_init(&am3517_evm_dss_data);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
/* Configure GPIO for EHCI port */ /* Configure GPIO for EHCI port */
omap_mux_init_gpio(57, OMAP_PIN_OUTPUT); omap_mux_init_gpio(57, OMAP_PIN_OUTPUT);
...@@ -493,7 +489,7 @@ MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM") ...@@ -493,7 +489,7 @@ MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = am3517_evm_init_early, .init_early = am35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = am3517_evm_init, .init_machine = am3517_evm_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -273,12 +273,6 @@ static struct omap_board_config_kernel apollon_config[] __initdata = { ...@@ -273,12 +273,6 @@ static struct omap_board_config_kernel apollon_config[] __initdata = {
{ OMAP_TAG_LCD, &apollon_lcd_config }, { OMAP_TAG_LCD, &apollon_lcd_config },
}; };
static void __init omap_apollon_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static struct gpio apollon_gpio_leds[] __initdata = { static struct gpio apollon_gpio_leds[] __initdata = {
{ LED0_GPIO13, GPIOF_OUT_INIT_LOW, "LED0" }, /* LED0 - AA10 */ { LED0_GPIO13, GPIOF_OUT_INIT_LOW, "LED0" }, /* LED0 - AA10 */
{ LED1_GPIO14, GPIOF_OUT_INIT_LOW, "LED1" }, /* LED1 - AA6 */ { LED1_GPIO14, GPIOF_OUT_INIT_LOW, "LED1" }, /* LED1 - AA6 */
...@@ -340,20 +334,15 @@ static void __init omap_apollon_init(void) ...@@ -340,20 +334,15 @@ static void __init omap_apollon_init(void)
*/ */
platform_add_devices(apollon_devices, ARRAY_SIZE(apollon_devices)); platform_add_devices(apollon_devices, ARRAY_SIZE(apollon_devices));
omap_serial_init(); omap_serial_init();
} omap_sdrc_init(NULL, NULL);
static void __init omap_apollon_map_io(void)
{
omap2_set_globals_242x();
omap242x_map_common_io();
} }
MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon") MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon")
/* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */ /* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap_apollon_map_io, .map_io = omap242x_map_io,
.init_early = omap_apollon_init_early, .init_early = omap2420_init_early,
.init_irq = omap2_init_irq, .init_irq = omap2_init_irq,
.init_machine = omap_apollon_init, .init_machine = omap_apollon_init,
.timer = &omap2_timer, .timer = &omap2_timer,
......
...@@ -471,13 +471,6 @@ static void __init cm_t35_init_i2c(void) ...@@ -471,13 +471,6 @@ static void __init cm_t35_init_i2c(void)
omap3_pmic_init("tps65930", &cm_t35_twldata); omap3_pmic_init("tps65930", &cm_t35_twldata);
} }
static void __init cm_t35_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
/* nCS and IRQ for CM-T35 ethernet */ /* nCS and IRQ for CM-T35 ethernet */
...@@ -610,6 +603,8 @@ static void __init cm_t3x_common_init(void) ...@@ -610,6 +603,8 @@ static void __init cm_t3x_common_init(void)
omap_board_config_size = ARRAY_SIZE(cm_t35_config); omap_board_config_size = ARRAY_SIZE(cm_t35_config);
omap3_mux_init(board_mux, OMAP_PACKAGE_CUS); omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
cm_t35_init_i2c(); cm_t35_init_i2c();
omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL); omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL);
cm_t35_init_ethernet(); cm_t35_init_ethernet();
...@@ -637,7 +632,7 @@ MACHINE_START(CM_T35, "Compulab CM-T35") ...@@ -637,7 +632,7 @@ MACHINE_START(CM_T35, "Compulab CM-T35")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = cm_t35_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = cm_t35_init, .init_machine = cm_t35_init,
.timer = &omap3_timer, .timer = &omap3_timer,
...@@ -647,7 +642,7 @@ MACHINE_START(CM_T3730, "Compulab CM-T3730") ...@@ -647,7 +642,7 @@ MACHINE_START(CM_T3730, "Compulab CM-T3730")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = cm_t35_init_early, .init_early = omap3630_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = cm_t3730_init, .init_machine = cm_t3730_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -251,12 +251,6 @@ static inline void cm_t3517_init_nand(void) {} ...@@ -251,12 +251,6 @@ static inline void cm_t3517_init_nand(void) {}
static struct omap_board_config_kernel cm_t3517_config[] __initdata = { static struct omap_board_config_kernel cm_t3517_config[] __initdata = {
}; };
static void __init cm_t3517_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
/* GPIO186 - Green LED */ /* GPIO186 - Green LED */
...@@ -289,6 +283,7 @@ static void __init cm_t3517_init(void) ...@@ -289,6 +283,7 @@ static void __init cm_t3517_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
omap_board_config = cm_t3517_config; omap_board_config = cm_t3517_config;
omap_board_config_size = ARRAY_SIZE(cm_t3517_config); omap_board_config_size = ARRAY_SIZE(cm_t3517_config);
cm_t3517_init_leds(); cm_t3517_init_leds();
...@@ -302,7 +297,7 @@ MACHINE_START(CM_T3517, "Compulab CM-T3517") ...@@ -302,7 +297,7 @@ MACHINE_START(CM_T3517, "Compulab CM-T3517")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = cm_t3517_init_early, .init_early = am35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = cm_t3517_init, .init_machine = cm_t3517_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -397,19 +397,6 @@ static struct platform_device keys_gpio = { ...@@ -397,19 +397,6 @@ static struct platform_device keys_gpio = {
}, },
}; };
static void __init devkit8000_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
}
static void __init devkit8000_init_irq(void)
{
omap3_init_irq();
}
#define OMAP_DM9000_BASE 0x2c000000 #define OMAP_DM9000_BASE 0x2c000000
static struct resource omap_dm9000_resources[] = { static struct resource omap_dm9000_resources[] = {
...@@ -645,6 +632,8 @@ static void __init devkit8000_init(void) ...@@ -645,6 +632,8 @@ static void __init devkit8000_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CUS); omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
omap_dm9000_init(); omap_dm9000_init();
...@@ -670,8 +659,8 @@ MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000") ...@@ -670,8 +659,8 @@ MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = devkit8000_init_early, .init_early = omap35xx_init_early,
.init_irq = devkit8000_init_irq, .init_irq = omap3_init_irq,
.init_machine = devkit8000_init, .init_machine = devkit8000_init,
.timer = &omap3_secure_timer, .timer = &omap3_secure_timer,
MACHINE_END MACHINE_END
...@@ -148,11 +148,6 @@ __init board_nand_init(struct mtd_partition *nand_parts, ...@@ -148,11 +148,6 @@ __init board_nand_init(struct mtd_partition *nand_parts,
board_nand_data.gpmc_irq = OMAP_GPMC_IRQ_BASE + cs; board_nand_data.gpmc_irq = OMAP_GPMC_IRQ_BASE + cs;
gpmc_nand_init(&board_nand_data); gpmc_nand_init(&board_nand_data);
} }
#else
void
__init board_nand_init(struct mtd_partition *nand_parts, u8 nr_parts, u8 cs, int nand_type)
{
}
#endif /* CONFIG_MTD_NAND_OMAP2 || CONFIG_MTD_NAND_OMAP2_MODULE */ #endif /* CONFIG_MTD_NAND_OMAP2 || CONFIG_MTD_NAND_OMAP2_MODULE */
/** /**
......
...@@ -24,7 +24,26 @@ struct flash_partitions { ...@@ -24,7 +24,26 @@ struct flash_partitions {
int nr_parts; int nr_parts;
}; };
#if defined(CONFIG_MTD_NAND_OMAP2) || \
defined(CONFIG_MTD_NAND_OMAP2_MODULE) || \
defined(CONFIG_MTD_ONENAND_OMAP2) || \
defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
extern void board_flash_init(struct flash_partitions [], extern void board_flash_init(struct flash_partitions [],
char chip_sel[][GPMC_CS_NUM], int nand_type); char chip_sel[][GPMC_CS_NUM], int nand_type);
#else
static inline void board_flash_init(struct flash_partitions part[],
char chip_sel[][GPMC_CS_NUM], int nand_type)
{
}
#endif
#if defined(CONFIG_MTD_NAND_OMAP2) || \
defined(CONFIG_MTD_NAND_OMAP2_MODULE)
extern void board_nand_init(struct mtd_partition *nand_parts, extern void board_nand_init(struct mtd_partition *nand_parts,
u8 nr_parts, u8 cs, int nand_type); u8 nr_parts, u8 cs, int nand_type);
#else
static inline void board_nand_init(struct mtd_partition *nand_parts,
u8 nr_parts, u8 cs, int nand_type)
{
}
#endif
...@@ -36,12 +36,12 @@ static struct omap_board_config_kernel generic_config[] = { ...@@ -36,12 +36,12 @@ static struct omap_board_config_kernel generic_config[] = {
static void __init omap_generic_init_early(void) static void __init omap_generic_init_early(void)
{ {
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
} }
static void __init omap_generic_init(void) static void __init omap_generic_init(void)
{ {
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
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);
} }
......
...@@ -290,17 +290,6 @@ static struct omap_board_config_kernel h4_config[] __initdata = { ...@@ -290,17 +290,6 @@ static struct omap_board_config_kernel h4_config[] __initdata = {
{ OMAP_TAG_LCD, &h4_lcd_config }, { OMAP_TAG_LCD, &h4_lcd_config },
}; };
static void __init omap_h4_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static void __init omap_h4_init_irq(void)
{
omap2_init_irq();
}
static struct at24_platform_data m24c01 = { static struct at24_platform_data m24c01 = {
.byte_len = SZ_1K / 8, .byte_len = SZ_1K / 8,
.page_size = 16, .page_size = 16,
...@@ -371,22 +360,17 @@ static void __init omap_h4_init(void) ...@@ -371,22 +360,17 @@ static void __init omap_h4_init(void)
platform_add_devices(h4_devices, ARRAY_SIZE(h4_devices)); platform_add_devices(h4_devices, ARRAY_SIZE(h4_devices));
omap2_usbfs_init(&h4_usb_config); omap2_usbfs_init(&h4_usb_config);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
h4_init_flash(); h4_init_flash();
} }
static void __init omap_h4_map_io(void)
{
omap2_set_globals_242x();
omap242x_map_common_io();
}
MACHINE_START(OMAP_H4, "OMAP2420 H4 board") MACHINE_START(OMAP_H4, "OMAP2420 H4 board")
/* Maintainer: Paul Mundt <paul.mundt@nokia.com> */ /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap_h4_map_io, .map_io = omap242x_map_io,
.init_early = omap_h4_init_early, .init_early = omap2420_init_early,
.init_irq = omap_h4_init_irq, .init_irq = omap2_init_irq,
.init_machine = omap_h4_init, .init_machine = omap_h4_init,
.timer = &omap2_timer, .timer = &omap2_timer,
MACHINE_END MACHINE_END
...@@ -491,13 +491,6 @@ static struct platform_device *igep_devices[] __initdata = { ...@@ -491,13 +491,6 @@ static struct platform_device *igep_devices[] __initdata = {
&igep_vwlan_device, &igep_vwlan_device,
}; };
static void __init igep_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(m65kxxxxam_sdrc_params,
m65kxxxxam_sdrc_params);
}
static int igep2_keymap[] = { static int igep2_keymap[] = {
KEY(0, 0, KEY_LEFT), KEY(0, 0, KEY_LEFT),
KEY(0, 1, KEY_RIGHT), KEY(0, 1, KEY_RIGHT),
...@@ -650,6 +643,8 @@ static void __init igep_init(void) ...@@ -650,6 +643,8 @@ static void __init igep_init(void)
igep_i2c_init(); igep_i2c_init();
platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices)); platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices));
omap_serial_init(); omap_serial_init();
omap_sdrc_init(m65kxxxxam_sdrc_params,
m65kxxxxam_sdrc_params);
usb_musb_init(NULL); usb_musb_init(NULL);
igep_flash_init(); igep_flash_init();
...@@ -675,7 +670,7 @@ MACHINE_START(IGEP0020, "IGEP v2 board") ...@@ -675,7 +670,7 @@ MACHINE_START(IGEP0020, "IGEP v2 board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = igep_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = igep_init, .init_machine = igep_init,
.timer = &omap3_timer, .timer = &omap3_timer,
...@@ -685,7 +680,7 @@ MACHINE_START(IGEP0030, "IGEP OMAP3 module") ...@@ -685,7 +680,7 @@ MACHINE_START(IGEP0030, "IGEP OMAP3 module")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = igep_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = igep_init, .init_machine = igep_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -193,12 +193,6 @@ static struct omap_board_config_kernel ldp_config[] __initdata = { ...@@ -193,12 +193,6 @@ static struct omap_board_config_kernel ldp_config[] __initdata = {
{ OMAP_TAG_LCD, &ldp_lcd_config }, { OMAP_TAG_LCD, &ldp_lcd_config },
}; };
static void __init omap_ldp_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static struct twl4030_gpio_platform_data ldp_gpio_data = { static struct twl4030_gpio_platform_data ldp_gpio_data = {
.gpio_base = OMAP_MAX_GPIO_LINES, .gpio_base = OMAP_MAX_GPIO_LINES,
.irq_base = TWL4030_GPIO_IRQ_BASE, .irq_base = TWL4030_GPIO_IRQ_BASE,
...@@ -325,6 +319,7 @@ static void __init omap_ldp_init(void) ...@@ -325,6 +319,7 @@ static void __init omap_ldp_init(void)
platform_add_devices(ldp_devices, ARRAY_SIZE(ldp_devices)); platform_add_devices(ldp_devices, ARRAY_SIZE(ldp_devices));
omap_ads7846_init(1, 54, 310, NULL); omap_ads7846_init(1, 54, 310, NULL);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
usb_musb_init(NULL); usb_musb_init(NULL);
board_nand_init(ldp_nand_partitions, board_nand_init(ldp_nand_partitions,
ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0); ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0);
...@@ -336,7 +331,7 @@ MACHINE_START(OMAP_LDP, "OMAP LDP board") ...@@ -336,7 +331,7 @@ MACHINE_START(OMAP_LDP, "OMAP LDP board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap_ldp_init_early, .init_early = omap3430_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap_ldp_init, .init_machine = omap_ldp_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -616,18 +616,6 @@ static struct i2c_board_info n810_i2c_board_info_2[] __initdata = { ...@@ -616,18 +616,6 @@ static struct i2c_board_info n810_i2c_board_info_2[] __initdata = {
}, },
}; };
static void __init n8x0_map_io(void)
{
omap2_set_globals_242x();
omap242x_map_common_io();
}
static void __init n8x0_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
/* I2S codec port pins for McBSP block */ /* I2S codec port pins for McBSP block */
...@@ -689,6 +677,7 @@ static void __init n8x0_init_machine(void) ...@@ -689,6 +677,7 @@ static void __init n8x0_init_machine(void)
i2c_register_board_info(2, n810_i2c_board_info_2, i2c_register_board_info(2, n810_i2c_board_info_2,
ARRAY_SIZE(n810_i2c_board_info_2)); ARRAY_SIZE(n810_i2c_board_info_2));
board_serial_init(); board_serial_init();
omap_sdrc_init(NULL, NULL);
gpmc_onenand_init(board_onenand_data); gpmc_onenand_init(board_onenand_data);
n8x0_mmc_init(); n8x0_mmc_init();
n8x0_usb_init(); n8x0_usb_init();
...@@ -697,8 +686,8 @@ static void __init n8x0_init_machine(void) ...@@ -697,8 +686,8 @@ static void __init n8x0_init_machine(void)
MACHINE_START(NOKIA_N800, "Nokia N800") MACHINE_START(NOKIA_N800, "Nokia N800")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = n8x0_map_io, .map_io = omap242x_map_io,
.init_early = n8x0_init_early, .init_early = omap2420_init_early,
.init_irq = omap2_init_irq, .init_irq = omap2_init_irq,
.init_machine = n8x0_init_machine, .init_machine = n8x0_init_machine,
.timer = &omap2_timer, .timer = &omap2_timer,
...@@ -707,8 +696,8 @@ MACHINE_END ...@@ -707,8 +696,8 @@ MACHINE_END
MACHINE_START(NOKIA_N810, "Nokia N810") MACHINE_START(NOKIA_N810, "Nokia N810")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = n8x0_map_io, .map_io = omap242x_map_io,
.init_early = n8x0_init_early, .init_early = omap2420_init_early,
.init_irq = omap2_init_irq, .init_irq = omap2_init_irq,
.init_machine = n8x0_init_machine, .init_machine = n8x0_init_machine,
.timer = &omap2_timer, .timer = &omap2_timer,
...@@ -717,8 +706,8 @@ MACHINE_END ...@@ -717,8 +706,8 @@ MACHINE_END
MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX") MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = n8x0_map_io, .map_io = omap242x_map_io,
.init_early = n8x0_init_early, .init_early = omap2420_init_early,
.init_irq = omap2_init_irq, .init_irq = omap2_init_irq,
.init_machine = n8x0_init_machine, .init_machine = n8x0_init_machine,
.timer = &omap2_timer, .timer = &omap2_timer,
......
...@@ -447,13 +447,6 @@ static struct platform_device keys_gpio = { ...@@ -447,13 +447,6 @@ static struct platform_device keys_gpio = {
static void __init omap3_beagle_init_early(void) static void __init omap3_beagle_init_early(void)
{ {
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
}
static void __init omap3_beagle_init_irq(void)
{
omap3_init_irq();
} }
static struct platform_device *omap3_beagle_devices[] __initdata = { static struct platform_device *omap3_beagle_devices[] __initdata = {
...@@ -534,6 +527,8 @@ static void __init omap3_beagle_init(void) ...@@ -534,6 +527,8 @@ static void __init omap3_beagle_init(void)
ARRAY_SIZE(omap3_beagle_devices)); ARRAY_SIZE(omap3_beagle_devices));
omap_display_init(&beagle_dss_data); omap_display_init(&beagle_dss_data);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
omap_mux_init_gpio(170, OMAP_PIN_INPUT); omap_mux_init_gpio(170, OMAP_PIN_INPUT);
/* REVISIT leave DVI powered down until it's needed ... */ /* REVISIT leave DVI powered down until it's needed ... */
...@@ -561,7 +556,7 @@ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") ...@@ -561,7 +556,7 @@ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3_beagle_init_early, .init_early = omap3_beagle_init_early,
.init_irq = omap3_beagle_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3_beagle_init, .init_machine = omap3_beagle_init,
.timer = &omap3_secure_timer, .timer = &omap3_secure_timer,
MACHINE_END MACHINE_END
...@@ -520,12 +520,6 @@ static int __init omap3_evm_i2c_init(void) ...@@ -520,12 +520,6 @@ static int __init omap3_evm_i2c_init(void)
static struct omap_board_config_kernel omap3_evm_config[] __initdata = { static struct omap_board_config_kernel omap3_evm_config[] __initdata = {
}; };
static void __init omap3_evm_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
}
static struct usbhs_omap_board_data usbhs_bdata __initdata = { static struct usbhs_omap_board_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
...@@ -640,6 +634,7 @@ static void __init omap3_evm_init(void) ...@@ -640,6 +634,7 @@ static void __init omap3_evm_init(void)
omap_display_init(&omap3_evm_dss_data); omap_display_init(&omap3_evm_dss_data);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params, NULL);
/* OMAP3EVM uses ISP1504 phy and so register nop transceiver */ /* OMAP3EVM uses ISP1504 phy and so register nop transceiver */
usb_nop_xceiv_register(); usb_nop_xceiv_register();
...@@ -684,7 +679,7 @@ MACHINE_START(OMAP3EVM, "OMAP3 EVM") ...@@ -684,7 +679,7 @@ MACHINE_START(OMAP3EVM, "OMAP3 EVM")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3_evm_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3_evm_init, .init_machine = omap3_evm_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -182,12 +182,6 @@ static inline void __init board_smsc911x_init(void) ...@@ -182,12 +182,6 @@ static inline void __init board_smsc911x_init(void)
gpmc_smsc911x_init(&board_smsc911x_data); gpmc_smsc911x_init(&board_smsc911x_data);
} }
static void __init omap3logic_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
{ .reg_offset = OMAP_MUX_TERMINATOR }, { .reg_offset = OMAP_MUX_TERMINATOR },
...@@ -200,6 +194,7 @@ static void __init omap3logic_init(void) ...@@ -200,6 +194,7 @@ static void __init omap3logic_init(void)
omap3torpedo_fix_pbias_voltage(); omap3torpedo_fix_pbias_voltage();
omap3logic_i2c_init(); omap3logic_i2c_init();
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
board_mmc_init(); board_mmc_init();
board_smsc911x_init(); board_smsc911x_init();
...@@ -211,7 +206,7 @@ static void __init omap3logic_init(void) ...@@ -211,7 +206,7 @@ static void __init omap3logic_init(void)
MACHINE_START(OMAP3_TORPEDO, "Logic OMAP3 Torpedo board") MACHINE_START(OMAP3_TORPEDO, "Logic OMAP3 Torpedo board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3logic_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3logic_init, .init_machine = omap3logic_init,
.timer = &omap3_timer, .timer = &omap3_timer,
...@@ -220,7 +215,7 @@ MACHINE_END ...@@ -220,7 +215,7 @@ MACHINE_END
MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board") MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3logic_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3logic_init, .init_machine = omap3logic_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -525,13 +525,6 @@ static struct spi_board_info omap3pandora_spi_board_info[] __initdata = { ...@@ -525,13 +525,6 @@ static struct spi_board_info omap3pandora_spi_board_info[] __initdata = {
} }
}; };
static void __init omap3pandora_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
}
static void __init pandora_wl1251_init(void) static void __init pandora_wl1251_init(void)
{ {
struct wl12xx_platform_data pandora_wl1251_pdata; struct wl12xx_platform_data pandora_wl1251_pdata;
...@@ -593,6 +586,8 @@ static void __init omap3pandora_init(void) ...@@ -593,6 +586,8 @@ static void __init omap3pandora_init(void)
ARRAY_SIZE(omap3pandora_devices)); ARRAY_SIZE(omap3pandora_devices));
omap_display_init(&pandora_dss_data); omap_display_init(&pandora_dss_data);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
spi_register_board_info(omap3pandora_spi_board_info, spi_register_board_info(omap3pandora_spi_board_info,
ARRAY_SIZE(omap3pandora_spi_board_info)); ARRAY_SIZE(omap3pandora_spi_board_info));
omap_ads7846_init(1, OMAP3_PANDORA_TS_GPIO, 0, NULL); omap_ads7846_init(1, OMAP3_PANDORA_TS_GPIO, 0, NULL);
...@@ -609,7 +604,7 @@ MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console") ...@@ -609,7 +604,7 @@ MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3pandora_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3pandora_init, .init_machine = omap3pandora_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -428,17 +428,6 @@ static int __init omap3_stalker_i2c_init(void) ...@@ -428,17 +428,6 @@ static int __init omap3_stalker_i2c_init(void)
static struct omap_board_config_kernel omap3_stalker_config[] __initdata = { static struct omap_board_config_kernel omap3_stalker_config[] __initdata = {
}; };
static void __init omap3_stalker_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
}
static void __init omap3_stalker_init_irq(void)
{
omap3_init_irq();
}
static struct platform_device *omap3_stalker_devices[] __initdata = { static struct platform_device *omap3_stalker_devices[] __initdata = {
&keys_gpio, &keys_gpio,
}; };
...@@ -478,6 +467,7 @@ static void __init omap3_stalker_init(void) ...@@ -478,6 +467,7 @@ static void __init omap3_stalker_init(void)
omap_display_init(&omap3_stalker_dss_data); omap_display_init(&omap3_stalker_dss_data);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params, NULL);
usb_musb_init(NULL); usb_musb_init(NULL);
usbhs_init(&usbhs_bdata); usbhs_init(&usbhs_bdata);
omap_ads7846_init(1, OMAP3_STALKER_TS_GPIO, 310, NULL); omap_ads7846_init(1, OMAP3_STALKER_TS_GPIO, 310, NULL);
...@@ -496,8 +486,8 @@ MACHINE_START(SBC3530, "OMAP3 STALKER") ...@@ -496,8 +486,8 @@ MACHINE_START(SBC3530, "OMAP3 STALKER")
/* Maintainer: Jason Lam -lzg@ema-tech.com */ /* Maintainer: Jason Lam -lzg@ema-tech.com */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3_stalker_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_stalker_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3_stalker_init, .init_machine = omap3_stalker_init,
.timer = &omap3_secure_timer, .timer = &omap3_secure_timer,
MACHINE_END MACHINE_END
...@@ -326,18 +326,6 @@ static struct omap_board_mux board_mux[] __initdata = { ...@@ -326,18 +326,6 @@ static struct omap_board_mux board_mux[] __initdata = {
}; };
#endif #endif
static void __init omap3_touchbook_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
}
static void __init omap3_touchbook_init_irq(void)
{
omap3_init_irq();
}
static struct platform_device *omap3_touchbook_devices[] __initdata = { static struct platform_device *omap3_touchbook_devices[] __initdata = {
&omap3_touchbook_lcd_device, &omap3_touchbook_lcd_device,
&leds_gpio, &leds_gpio,
...@@ -385,6 +373,8 @@ static void __init omap3_touchbook_init(void) ...@@ -385,6 +373,8 @@ static void __init omap3_touchbook_init(void)
platform_add_devices(omap3_touchbook_devices, platform_add_devices(omap3_touchbook_devices,
ARRAY_SIZE(omap3_touchbook_devices)); ARRAY_SIZE(omap3_touchbook_devices));
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
omap_mux_init_gpio(170, OMAP_PIN_INPUT); omap_mux_init_gpio(170, OMAP_PIN_INPUT);
/* REVISIT leave DVI powered down until it's needed ... */ /* REVISIT leave DVI powered down until it's needed ... */
...@@ -407,8 +397,8 @@ MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board") ...@@ -407,8 +397,8 @@ MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3_touchbook_init_early, .init_early = omap3430_init_early,
.init_irq = omap3_touchbook_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3_touchbook_init, .init_machine = omap3_touchbook_init,
.timer = &omap3_secure_timer, .timer = &omap3_secure_timer,
MACHINE_END MACHINE_END
...@@ -95,12 +95,6 @@ static struct platform_device *panda_devices[] __initdata = { ...@@ -95,12 +95,6 @@ static struct platform_device *panda_devices[] __initdata = {
&wl1271_device, &wl1271_device,
}; };
static void __init omap4_panda_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static const struct usbhs_omap_board_data usbhs_bdata __initconst = { static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED, .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
...@@ -569,24 +563,19 @@ static void __init omap4_panda_init(void) ...@@ -569,24 +563,19 @@ static void __init omap4_panda_init(void)
platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices)); platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
platform_device_register(&omap_vwlan_device); platform_device_register(&omap_vwlan_device);
board_serial_init(); board_serial_init();
omap_sdrc_init(NULL, NULL);
omap4_twl6030_hsmmc_init(mmc); omap4_twl6030_hsmmc_init(mmc);
omap4_ehci_init(); omap4_ehci_init();
usb_musb_init(&musb_board_data); usb_musb_init(&musb_board_data);
omap4_panda_display_init(); omap4_panda_display_init();
} }
static void __init omap4_panda_map_io(void)
{
omap2_set_globals_443x();
omap44xx_map_common_io();
}
MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board") MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board")
/* Maintainer: David Anders - Texas Instruments Inc */ /* Maintainer: David Anders - Texas Instruments Inc */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap4_panda_map_io, .map_io = omap4_map_io,
.init_early = omap4_panda_init_early, .init_early = omap4430_init_early,
.init_irq = gic_init_irq, .init_irq = gic_init_irq,
.init_machine = omap4_panda_init, .init_machine = omap4_panda_init,
.timer = &omap4_timer, .timer = &omap4_timer,
......
...@@ -478,13 +478,6 @@ static int __init overo_spi_init(void) ...@@ -478,13 +478,6 @@ static int __init overo_spi_init(void)
return 0; return 0;
} }
static void __init overo_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
}
static const struct usbhs_omap_board_data usbhs_bdata __initconst = { static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
...@@ -514,6 +507,8 @@ static void __init overo_init(void) ...@@ -514,6 +507,8 @@ static void __init overo_init(void)
overo_i2c_init(); overo_i2c_init();
omap_display_init(&overo_dss_data); omap_display_init(&overo_dss_data);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
omap_nand_flash_init(0, overo_nand_partitions, omap_nand_flash_init(0, overo_nand_partitions,
ARRAY_SIZE(overo_nand_partitions)); ARRAY_SIZE(overo_nand_partitions));
usb_musb_init(NULL); usb_musb_init(NULL);
...@@ -564,7 +559,7 @@ MACHINE_START(OVERO, "Gumstix Overo") ...@@ -564,7 +559,7 @@ MACHINE_START(OVERO, "Gumstix Overo")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = overo_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = overo_init, .init_machine = overo_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -123,15 +123,6 @@ static void __init rm680_peripherals_init(void) ...@@ -123,15 +123,6 @@ static void __init rm680_peripherals_init(void)
omap2_hsmmc_init(mmc); omap2_hsmmc_init(mmc);
} }
static void __init rm680_init_early(void)
{
struct omap_sdrc_params *sdrc_params;
omap2_init_common_infrastructure();
sdrc_params = nokia_get_sdram_timings();
omap2_init_common_devices(sdrc_params, sdrc_params);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
{ .reg_offset = OMAP_MUX_TERMINATOR }, { .reg_offset = OMAP_MUX_TERMINATOR },
...@@ -140,23 +131,23 @@ static struct omap_board_mux board_mux[] __initdata = { ...@@ -140,23 +131,23 @@ static struct omap_board_mux board_mux[] __initdata = {
static void __init rm680_init(void) static void __init rm680_init(void)
{ {
struct omap_sdrc_params *sdrc_params;
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_serial_init(); omap_serial_init();
sdrc_params = nokia_get_sdram_timings();
omap_sdrc_init(sdrc_params, sdrc_params);
usb_musb_init(NULL); usb_musb_init(NULL);
rm680_peripherals_init(); rm680_peripherals_init();
} }
static void __init rm680_map_io(void)
{
omap2_set_globals_3xxx();
omap34xx_map_common_io();
}
MACHINE_START(NOKIA_RM680, "Nokia RM-680 board") MACHINE_START(NOKIA_RM680, "Nokia RM-680 board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = rm680_map_io, .map_io = omap3_map_io,
.init_early = rm680_init_early, .init_early = omap3630_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = rm680_init, .init_machine = rm680_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -102,15 +102,6 @@ static struct omap_board_config_kernel rx51_config[] = { ...@@ -102,15 +102,6 @@ static struct omap_board_config_kernel rx51_config[] = {
{ OMAP_TAG_LCD, &rx51_lcd_config }, { OMAP_TAG_LCD, &rx51_lcd_config },
}; };
static void __init rx51_init_early(void)
{
struct omap_sdrc_params *sdrc_params;
omap2_init_common_infrastructure();
sdrc_params = nokia_get_sdram_timings();
omap2_init_common_devices(sdrc_params, sdrc_params);
}
extern void __init rx51_peripherals_init(void); extern void __init rx51_peripherals_init(void);
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
...@@ -127,11 +118,17 @@ static struct omap_musb_board_data musb_board_data = { ...@@ -127,11 +118,17 @@ static struct omap_musb_board_data musb_board_data = {
static void __init rx51_init(void) static void __init rx51_init(void)
{ {
struct omap_sdrc_params *sdrc_params;
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_board_config = rx51_config; omap_board_config = rx51_config;
omap_board_config_size = ARRAY_SIZE(rx51_config); omap_board_config_size = ARRAY_SIZE(rx51_config);
omap3_pm_init_cpuidle(rx51_cpuidle_params); omap3_pm_init_cpuidle(rx51_cpuidle_params);
omap_serial_init(); omap_serial_init();
sdrc_params = nokia_get_sdram_timings();
omap_sdrc_init(sdrc_params, sdrc_params);
usb_musb_init(&musb_board_data); usb_musb_init(&musb_board_data);
rx51_peripherals_init(); rx51_peripherals_init();
...@@ -142,12 +139,6 @@ static void __init rx51_init(void) ...@@ -142,12 +139,6 @@ static void __init rx51_init(void)
platform_device_register(&leds_gpio); platform_device_register(&leds_gpio);
} }
static void __init rx51_map_io(void)
{
omap2_set_globals_3xxx();
omap34xx_map_common_io();
}
static void __init rx51_reserve(void) static void __init rx51_reserve(void)
{ {
rx51_video_mem_init(); rx51_video_mem_init();
...@@ -158,8 +149,8 @@ MACHINE_START(NOKIA_RX51, "Nokia RX-51 board") ...@@ -158,8 +149,8 @@ MACHINE_START(NOKIA_RX51, "Nokia RX-51 board")
/* Maintainer: Lauri Leukkunen <lauri.leukkunen@nokia.com> */ /* Maintainer: Lauri Leukkunen <lauri.leukkunen@nokia.com> */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = rx51_reserve, .reserve = rx51_reserve,
.map_io = rx51_map_io, .map_io = omap3_map_io,
.init_early = rx51_init_early, .init_early = omap3430_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = rx51_init, .init_machine = rx51_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -27,15 +27,10 @@ ...@@ -27,15 +27,10 @@
static struct omap_board_config_kernel ti8168_evm_config[] __initdata = { static struct omap_board_config_kernel ti8168_evm_config[] __initdata = {
}; };
static void __init ti8168_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static void __init ti8168_evm_init(void) static void __init ti8168_evm_init(void)
{ {
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
omap_board_config = ti8168_evm_config; omap_board_config = ti8168_evm_config;
omap_board_config_size = ARRAY_SIZE(ti8168_evm_config); omap_board_config_size = ARRAY_SIZE(ti8168_evm_config);
} }
...@@ -50,7 +45,7 @@ MACHINE_START(TI8168EVM, "ti8168evm") ...@@ -50,7 +45,7 @@ MACHINE_START(TI8168EVM, "ti8168evm")
/* Maintainer: Texas Instruments */ /* Maintainer: Texas Instruments */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = ti8168_evm_map_io, .map_io = ti8168_evm_map_io,
.init_early = ti8168_init_early, .init_early = ti816x_init_early,
.init_irq = ti816x_init_irq, .init_irq = ti816x_init_irq,
.timer = &omap3_timer, .timer = &omap3_timer,
.init_machine = ti8168_evm_init, .init_machine = ti8168_evm_init,
......
...@@ -34,17 +34,6 @@ ...@@ -34,17 +34,6 @@
#define ZOOM3_EHCI_RESET_GPIO 64 #define ZOOM3_EHCI_RESET_GPIO 64
static void __init omap_zoom_init_early(void)
{
omap2_init_common_infrastructure();
if (machine_is_omap_zoom2())
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
else if (machine_is_omap_zoom3())
omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params,
h8mbx00u0mer0em_sdrc_params);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
/* WLAN IRQ - GPIO 162 */ /* WLAN IRQ - GPIO 162 */
...@@ -129,6 +118,14 @@ static void __init omap_zoom_init(void) ...@@ -129,6 +118,14 @@ static void __init omap_zoom_init(void)
ZOOM_NAND_CS, NAND_BUSWIDTH_16); ZOOM_NAND_CS, NAND_BUSWIDTH_16);
zoom_debugboard_init(); zoom_debugboard_init();
zoom_peripherals_init(); zoom_peripherals_init();
if (machine_is_omap_zoom2())
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
else if (machine_is_omap_zoom3())
omap_sdrc_init(h8mbx00u0mer0em_sdrc_params,
h8mbx00u0mer0em_sdrc_params);
zoom_display_init(); zoom_display_init();
} }
...@@ -136,7 +133,7 @@ MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board") ...@@ -136,7 +133,7 @@ MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap_zoom_init_early, .init_early = omap3430_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap_zoom_init, .init_machine = omap_zoom_init,
.timer = &omap3_timer, .timer = &omap3_timer,
...@@ -146,7 +143,7 @@ MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board") ...@@ -146,7 +143,7 @@ MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap_zoom_init_early, .init_early = omap3630_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap_zoom_init, .init_machine = omap_zoom_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -1898,6 +1898,54 @@ static struct omap_clk omap2420_clks[] = { ...@@ -1898,6 +1898,54 @@ static struct omap_clk omap2420_clks[] = {
CLK(NULL, "pka_ick", &pka_ick, CK_242X), CLK(NULL, "pka_ick", &pka_ick, CK_242X),
CLK(NULL, "usb_fck", &usb_fck, CK_242X), CLK(NULL, "usb_fck", &usb_fck, CK_242X),
CLK("musb-hdrc", "fck", &osc_ck, CK_242X), CLK("musb-hdrc", "fck", &osc_ck, CK_242X),
CLK("omap_timer.1", "fck", &gpt1_fck, CK_242X),
CLK("omap_timer.2", "fck", &gpt2_fck, CK_242X),
CLK("omap_timer.3", "fck", &gpt3_fck, CK_242X),
CLK("omap_timer.4", "fck", &gpt4_fck, CK_242X),
CLK("omap_timer.5", "fck", &gpt5_fck, CK_242X),
CLK("omap_timer.6", "fck", &gpt6_fck, CK_242X),
CLK("omap_timer.7", "fck", &gpt7_fck, CK_242X),
CLK("omap_timer.8", "fck", &gpt8_fck, CK_242X),
CLK("omap_timer.9", "fck", &gpt9_fck, CK_242X),
CLK("omap_timer.10", "fck", &gpt10_fck, CK_242X),
CLK("omap_timer.11", "fck", &gpt11_fck, CK_242X),
CLK("omap_timer.12", "fck", &gpt12_fck, CK_242X),
CLK("omap_timer.1", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.2", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.3", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.4", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.5", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.6", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.7", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.8", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.9", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.10", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.11", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.12", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.1", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.2", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.3", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.4", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.5", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.6", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.7", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.8", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.9", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.10", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.11", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.12", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.1", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.2", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.3", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.4", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.5", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.6", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.7", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.8", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.9", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.10", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.11", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.12", "alt_ck", &alt_ck, CK_243X),
}; };
/* /*
......
...@@ -1998,6 +1998,54 @@ static struct omap_clk omap2430_clks[] = { ...@@ -1998,6 +1998,54 @@ static struct omap_clk omap2430_clks[] = {
CLK(NULL, "mdm_intc_ick", &mdm_intc_ick, CK_243X), CLK(NULL, "mdm_intc_ick", &mdm_intc_ick, CK_243X),
CLK("omap_hsmmc.0", "mmchsdb_fck", &mmchsdb1_fck, CK_243X), CLK("omap_hsmmc.0", "mmchsdb_fck", &mmchsdb1_fck, CK_243X),
CLK("omap_hsmmc.1", "mmchsdb_fck", &mmchsdb2_fck, CK_243X), CLK("omap_hsmmc.1", "mmchsdb_fck", &mmchsdb2_fck, CK_243X),
CLK("omap_timer.1", "fck", &gpt1_fck, CK_243X),
CLK("omap_timer.2", "fck", &gpt2_fck, CK_243X),
CLK("omap_timer.3", "fck", &gpt3_fck, CK_243X),
CLK("omap_timer.4", "fck", &gpt4_fck, CK_243X),
CLK("omap_timer.5", "fck", &gpt5_fck, CK_243X),
CLK("omap_timer.6", "fck", &gpt6_fck, CK_243X),
CLK("omap_timer.7", "fck", &gpt7_fck, CK_243X),
CLK("omap_timer.8", "fck", &gpt8_fck, CK_243X),
CLK("omap_timer.9", "fck", &gpt9_fck, CK_243X),
CLK("omap_timer.10", "fck", &gpt10_fck, CK_243X),
CLK("omap_timer.11", "fck", &gpt11_fck, CK_243X),
CLK("omap_timer.12", "fck", &gpt12_fck, CK_243X),
CLK("omap_timer.1", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.2", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.3", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.4", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.5", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.6", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.7", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.8", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.9", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.10", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.11", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.12", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.1", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.2", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.3", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.4", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.5", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.6", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.7", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.8", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.9", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.10", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.11", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.12", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.1", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.2", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.3", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.4", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.5", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.6", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.7", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.8", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.9", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.10", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.11", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.12", "alt_ck", &alt_ck, CK_243X),
}; };
/* /*
......
...@@ -3464,6 +3464,42 @@ static struct omap_clk omap3xxx_clks[] = { ...@@ -3464,6 +3464,42 @@ static struct omap_clk omap3xxx_clks[] = {
CLK("musb-am35x", "fck", &hsotgusb_fck_am35xx, CK_AM35XX), CLK("musb-am35x", "fck", &hsotgusb_fck_am35xx, CK_AM35XX),
CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX), CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX),
CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX), CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX),
CLK("omap_timer.1", "fck", &gpt1_fck, CK_3XXX),
CLK("omap_timer.2", "fck", &gpt2_fck, CK_3XXX),
CLK("omap_timer.3", "fck", &gpt3_fck, CK_3XXX),
CLK("omap_timer.4", "fck", &gpt4_fck, CK_3XXX),
CLK("omap_timer.5", "fck", &gpt5_fck, CK_3XXX),
CLK("omap_timer.6", "fck", &gpt6_fck, CK_3XXX),
CLK("omap_timer.7", "fck", &gpt7_fck, CK_3XXX),
CLK("omap_timer.8", "fck", &gpt8_fck, CK_3XXX),
CLK("omap_timer.9", "fck", &gpt9_fck, CK_3XXX),
CLK("omap_timer.10", "fck", &gpt10_fck, CK_3XXX),
CLK("omap_timer.11", "fck", &gpt11_fck, CK_3XXX),
CLK("omap_timer.12", "fck", &gpt12_fck, CK_3XXX),
CLK("omap_timer.1", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.2", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.3", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.4", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.5", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.6", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.7", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.8", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.9", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.10", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.11", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.12", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.1", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.2", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.3", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.4", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.5", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.6", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.7", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.8", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.9", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.10", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.11", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.12", "sys_ck", &sys_ck, CK_3XXX),
}; };
...@@ -3472,7 +3508,16 @@ int __init omap3xxx_clk_init(void) ...@@ -3472,7 +3508,16 @@ int __init omap3xxx_clk_init(void)
struct omap_clk *c; struct omap_clk *c;
u32 cpu_clkflg = 0; u32 cpu_clkflg = 0;
if (cpu_is_omap3517()) { /*
* 3505 must be tested before 3517, since 3517 returns true
* for both AM3517 chips and AM3517 family chips, which
* includes 3505. Unfortunately there's no obvious family
* test for 3517/3505 :-(
*/
if (cpu_is_omap3505()) {
cpu_mask = RATE_IN_34XX;
cpu_clkflg = CK_3505;
} else if (cpu_is_omap3517()) {
cpu_mask = RATE_IN_34XX; cpu_mask = RATE_IN_34XX;
cpu_clkflg = CK_3517; cpu_clkflg = CK_3517;
} else if (cpu_is_omap3505()) { } else if (cpu_is_omap3505()) {
......
...@@ -3363,6 +3363,39 @@ static struct omap_clk omap44xx_clks[] = { ...@@ -3363,6 +3363,39 @@ static struct omap_clk omap44xx_clks[] = {
CLK("usbhs-omap.0", "usbhost_ick", &dummy_ck, CK_443X), CLK("usbhs-omap.0", "usbhost_ick", &dummy_ck, CK_443X),
CLK("usbhs-omap.0", "usbtll_fck", &dummy_ck, CK_443X), CLK("usbhs-omap.0", "usbtll_fck", &dummy_ck, CK_443X),
CLK("omap_wdt", "ick", &dummy_ck, CK_443X), CLK("omap_wdt", "ick", &dummy_ck, CK_443X),
CLK("omap_timer.1", "fck", &timer1_fck, CK_443X),
CLK("omap_timer.2", "fck", &timer2_fck, CK_443X),
CLK("omap_timer.3", "fck", &timer3_fck, CK_443X),
CLK("omap_timer.4", "fck", &timer4_fck, CK_443X),
CLK("omap_timer.5", "fck", &timer5_fck, CK_443X),
CLK("omap_timer.6", "fck", &timer6_fck, CK_443X),
CLK("omap_timer.7", "fck", &timer7_fck, CK_443X),
CLK("omap_timer.8", "fck", &timer8_fck, CK_443X),
CLK("omap_timer.9", "fck", &timer9_fck, CK_443X),
CLK("omap_timer.10", "fck", &timer10_fck, CK_443X),
CLK("omap_timer.11", "fck", &timer11_fck, CK_443X),
CLK("omap_timer.1", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.2", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.3", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.4", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.5", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.6", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.7", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.8", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.9", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.10", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.11", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.1", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.2", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.3", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.4", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.9", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.10", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.11", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.5", "sys_ck", &syc_clk_div_ck, CK_443X),
CLK("omap_timer.6", "sys_ck", &syc_clk_div_ck, CK_443X),
CLK("omap_timer.7", "sys_ck", &syc_clk_div_ck, CK_443X),
CLK("omap_timer.8", "sys_ck", &syc_clk_div_ck, CK_443X),
}; };
int __init omap4xxx_clk_init(void) int __init omap4xxx_clk_init(void)
......
...@@ -73,9 +73,6 @@ static int _clkdm_register(struct clockdomain *clkdm) ...@@ -73,9 +73,6 @@ static int _clkdm_register(struct clockdomain *clkdm)
if (!clkdm || !clkdm->name) if (!clkdm || !clkdm->name)
return -EINVAL; return -EINVAL;
if (!omap_chip_is(clkdm->omap_chip))
return -EINVAL;
pwrdm = pwrdm_lookup(clkdm->pwrdm.name); pwrdm = pwrdm_lookup(clkdm->pwrdm.name);
if (!pwrdm) { if (!pwrdm) {
pr_err("clockdomain: %s: powerdomain %s does not exist\n", pr_err("clockdomain: %s: powerdomain %s does not exist\n",
...@@ -105,13 +102,10 @@ static struct clkdm_dep *_clkdm_deps_lookup(struct clockdomain *clkdm, ...@@ -105,13 +102,10 @@ static struct clkdm_dep *_clkdm_deps_lookup(struct clockdomain *clkdm,
{ {
struct clkdm_dep *cd; struct clkdm_dep *cd;
if (!clkdm || !deps || !omap_chip_is(clkdm->omap_chip)) if (!clkdm || !deps)
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
for (cd = deps; cd->clkdm_name; cd++) { for (cd = deps; cd->clkdm_name; cd++) {
if (!omap_chip_is(cd->omap_chip))
continue;
if (!cd->clkdm && cd->clkdm_name) if (!cd->clkdm && cd->clkdm_name)
cd->clkdm = _clkdm_lookup(cd->clkdm_name); cd->clkdm = _clkdm_lookup(cd->clkdm_name);
...@@ -148,9 +142,6 @@ static void _autodep_lookup(struct clkdm_autodep *autodep) ...@@ -148,9 +142,6 @@ static void _autodep_lookup(struct clkdm_autodep *autodep)
if (!autodep) if (!autodep)
return; return;
if (!omap_chip_is(autodep->omap_chip))
return;
clkdm = clkdm_lookup(autodep->clkdm.name); clkdm = clkdm_lookup(autodep->clkdm.name);
if (!clkdm) { if (!clkdm) {
pr_err("clockdomain: autodeps: clockdomain %s does not exist\n", pr_err("clockdomain: autodeps: clockdomain %s does not exist\n",
...@@ -182,9 +173,6 @@ void _clkdm_add_autodeps(struct clockdomain *clkdm) ...@@ -182,9 +173,6 @@ void _clkdm_add_autodeps(struct clockdomain *clkdm)
if (IS_ERR(autodep->clkdm.ptr)) if (IS_ERR(autodep->clkdm.ptr))
continue; continue;
if (!omap_chip_is(autodep->omap_chip))
continue;
pr_debug("clockdomain: adding %s sleepdep/wkdep for " pr_debug("clockdomain: adding %s sleepdep/wkdep for "
"clkdm %s\n", autodep->clkdm.ptr->name, "clkdm %s\n", autodep->clkdm.ptr->name,
clkdm->name); clkdm->name);
...@@ -216,9 +204,6 @@ void _clkdm_del_autodeps(struct clockdomain *clkdm) ...@@ -216,9 +204,6 @@ void _clkdm_del_autodeps(struct clockdomain *clkdm)
if (IS_ERR(autodep->clkdm.ptr)) if (IS_ERR(autodep->clkdm.ptr))
continue; continue;
if (!omap_chip_is(autodep->omap_chip))
continue;
pr_debug("clockdomain: removing %s sleepdep/wkdep for " pr_debug("clockdomain: removing %s sleepdep/wkdep for "
"clkdm %s\n", autodep->clkdm.ptr->name, "clkdm %s\n", autodep->clkdm.ptr->name,
clkdm->name); clkdm->name);
...@@ -243,8 +228,6 @@ static void _resolve_clkdm_deps(struct clockdomain *clkdm, ...@@ -243,8 +228,6 @@ static void _resolve_clkdm_deps(struct clockdomain *clkdm,
struct clkdm_dep *cd; struct clkdm_dep *cd;
for (cd = clkdm_deps; cd && cd->clkdm_name; cd++) { for (cd = clkdm_deps; cd && cd->clkdm_name; cd++) {
if (!omap_chip_is(cd->omap_chip))
continue;
if (cd->clkdm) if (cd->clkdm)
continue; continue;
cd->clkdm = _clkdm_lookup(cd->clkdm_name); cd->clkdm = _clkdm_lookup(cd->clkdm_name);
...@@ -257,43 +240,113 @@ static void _resolve_clkdm_deps(struct clockdomain *clkdm, ...@@ -257,43 +240,113 @@ static void _resolve_clkdm_deps(struct clockdomain *clkdm,
/* Public functions */ /* Public functions */
/** /**
* clkdm_init - set up the clockdomain layer * clkdm_register_platform_funcs - register clockdomain implementation fns
* @clkdms: optional pointer to an array of clockdomains to register * @co: func pointers for arch specific implementations
* @init_autodeps: optional pointer to an array of autodeps to register *
* @custom_funcs: func pointers for arch specific implementations * Register the list of function pointers used to implement the
* * clockdomain functions on different OMAP SoCs. Should be called
* Set up internal state. If a pointer to an array of clockdomains * before any other clkdm_register*() function. Returns -EINVAL if
* @clkdms was supplied, loop through the list of clockdomains, * @co is null, -EEXIST if platform functions have already been
* register all that are available on the current platform. Similarly, * registered, or 0 upon success.
* if a pointer to an array of clockdomain autodependencies */
* @init_autodeps was provided, register those. No return value. int clkdm_register_platform_funcs(struct clkdm_ops *co)
{
if (!co)
return -EINVAL;
if (arch_clkdm)
return -EEXIST;
arch_clkdm = co;
return 0;
};
/**
* clkdm_register_clkdms - register SoC clockdomains
* @cs: pointer to an array of struct clockdomain to register
*
* Register the clockdomains available on a particular OMAP SoC. Must
* be called after clkdm_register_platform_funcs(). May be called
* multiple times. Returns -EACCES if called before
* clkdm_register_platform_funcs(); -EINVAL if the argument @cs is
* null; or 0 upon success.
*/ */
void clkdm_init(struct clockdomain **clkdms, int clkdm_register_clkdms(struct clockdomain **cs)
struct clkdm_autodep *init_autodeps,
struct clkdm_ops *custom_funcs)
{ {
struct clockdomain **c = NULL; struct clockdomain **c = NULL;
struct clockdomain *clkdm;
struct clkdm_autodep *autodep = NULL;
if (!custom_funcs) if (!arch_clkdm)
WARN(1, "No custom clkdm functions registered\n"); return -EACCES;
else
arch_clkdm = custom_funcs; if (!cs)
return -EINVAL;
for (c = cs; *c; c++)
_clkdm_register(*c);
return 0;
}
/**
* clkdm_register_autodeps - register autodeps (if required)
* @ia: pointer to a static array of struct clkdm_autodep to register
*
* Register clockdomain "automatic dependencies." These are
* clockdomain wakeup and sleep dependencies that are automatically
* added whenever the first clock inside a clockdomain is enabled, and
* removed whenever the last clock inside a clockdomain is disabled.
* These are currently only used on OMAP3 devices, and are deprecated,
* since they waste energy. However, until the OMAP2/3 IP block
* enable/disable sequence can be converted to match the OMAP4
* sequence, they are needed.
*
* Must be called only after all of the SoC clockdomains are
* registered, since the function will resolve autodep clockdomain
* names into clockdomain pointers.
*
* The struct clkdm_autodep @ia array must be static, as this function
* does not copy the array elements.
*
* Returns -EACCES if called before any clockdomains have been
* registered, -EINVAL if called with a null @ia argument, -EEXIST if
* autodeps have already been registered, or 0 upon success.
*/
int clkdm_register_autodeps(struct clkdm_autodep *ia)
{
struct clkdm_autodep *a = NULL;
if (clkdms) if (list_empty(&clkdm_list))
for (c = clkdms; *c; c++) return -EACCES;
_clkdm_register(*c);
if (!ia)
return -EINVAL;
autodeps = init_autodeps;
if (autodeps) if (autodeps)
for (autodep = autodeps; autodep->clkdm.ptr; autodep++) return -EEXIST;
_autodep_lookup(autodep);
autodeps = ia;
for (a = autodeps; a->clkdm.ptr; a++)
_autodep_lookup(a);
return 0;
}
/**
* clkdm_complete_init - set up the clockdomain layer
*
* Put all clockdomains into software-supervised mode; PM code should
* later enable hardware-supervised mode as appropriate. Must be
* called after clkdm_register_clkdms(). Returns -EACCES if called
* before clkdm_register_clkdms(), or 0 upon success.
*/
int clkdm_complete_init(void)
{
struct clockdomain *clkdm;
if (list_empty(&clkdm_list))
return -EACCES;
/*
* Put all clockdomains into software-supervised mode; PM code
* should later enable hardware-supervised mode as appropriate
*/
list_for_each_entry(clkdm, &clkdm_list, node) { list_for_each_entry(clkdm, &clkdm_list, node) {
if (clkdm->flags & CLKDM_CAN_FORCE_WAKEUP) if (clkdm->flags & CLKDM_CAN_FORCE_WAKEUP)
clkdm_wakeup(clkdm); clkdm_wakeup(clkdm);
...@@ -306,6 +359,8 @@ void clkdm_init(struct clockdomain **clkdms, ...@@ -306,6 +359,8 @@ void clkdm_init(struct clockdomain **clkdms,
_resolve_clkdm_deps(clkdm, clkdm->sleepdep_srcs); _resolve_clkdm_deps(clkdm, clkdm->sleepdep_srcs);
clkdm_clear_all_sleepdeps(clkdm); clkdm_clear_all_sleepdeps(clkdm);
} }
return 0;
} }
/** /**
......
...@@ -45,7 +45,6 @@ ...@@ -45,7 +45,6 @@
/** /**
* struct clkdm_autodep - clkdm deps to add when entering/exiting hwsup mode * struct clkdm_autodep - clkdm deps to add when entering/exiting hwsup mode
* @clkdm: clockdomain to add wkdep+sleepdep on - set name member only * @clkdm: clockdomain to add wkdep+sleepdep on - set name member only
* @omap_chip: OMAP chip types that this autodep is valid on
* *
* A clockdomain that should have wkdeps and sleepdeps added when a * A clockdomain that should have wkdeps and sleepdeps added when a
* clockdomain should stay active in hwsup mode; and conversely, * clockdomain should stay active in hwsup mode; and conversely,
...@@ -60,14 +59,12 @@ struct clkdm_autodep { ...@@ -60,14 +59,12 @@ struct clkdm_autodep {
const char *name; const char *name;
struct clockdomain *ptr; struct clockdomain *ptr;
} clkdm; } clkdm;
const struct omap_chip_id omap_chip;
}; };
/** /**
* struct clkdm_dep - encode dependencies between clockdomains * struct clkdm_dep - encode dependencies between clockdomains
* @clkdm_name: clockdomain name * @clkdm_name: clockdomain name
* @clkdm: pointer to the struct clockdomain of @clkdm_name * @clkdm: pointer to the struct clockdomain of @clkdm_name
* @omap_chip: OMAP chip types that this dependency is valid on
* @wkdep_usecount: Number of wakeup dependencies causing this clkdm to wake * @wkdep_usecount: Number of wakeup dependencies causing this clkdm to wake
* @sleepdep_usecount: Number of sleep deps that could prevent clkdm from idle * @sleepdep_usecount: Number of sleep deps that could prevent clkdm from idle
* *
...@@ -81,7 +78,6 @@ struct clkdm_dep { ...@@ -81,7 +78,6 @@ struct clkdm_dep {
struct clockdomain *clkdm; struct clockdomain *clkdm;
atomic_t wkdep_usecount; atomic_t wkdep_usecount;
atomic_t sleepdep_usecount; atomic_t sleepdep_usecount;
const struct omap_chip_id omap_chip;
}; };
/* Possible flags for struct clockdomain._flags */ /* Possible flags for struct clockdomain._flags */
...@@ -101,7 +97,6 @@ struct clkdm_dep { ...@@ -101,7 +97,6 @@ struct clkdm_dep {
* @clkdm_offs: (OMAP4 only) CM clockdomain register offset * @clkdm_offs: (OMAP4 only) CM clockdomain register offset
* @wkdep_srcs: Clockdomains that can be told to wake this powerdomain up * @wkdep_srcs: Clockdomains that can be told to wake this powerdomain up
* @sleepdep_srcs: Clockdomains that can be told to keep this clkdm from inact * @sleepdep_srcs: Clockdomains that can be told to keep this clkdm from inact
* @omap_chip: OMAP chip types that this clockdomain is valid on
* @usecount: Usecount tracking * @usecount: Usecount tracking
* @node: list_head to link all clockdomains together * @node: list_head to link all clockdomains together
* *
...@@ -126,7 +121,6 @@ struct clockdomain { ...@@ -126,7 +121,6 @@ struct clockdomain {
const u16 clkdm_offs; const u16 clkdm_offs;
struct clkdm_dep *wkdep_srcs; struct clkdm_dep *wkdep_srcs;
struct clkdm_dep *sleepdep_srcs; struct clkdm_dep *sleepdep_srcs;
const struct omap_chip_id omap_chip;
atomic_t usecount; atomic_t usecount;
struct list_head node; struct list_head node;
spinlock_t lock; spinlock_t lock;
...@@ -166,8 +160,11 @@ struct clkdm_ops { ...@@ -166,8 +160,11 @@ struct clkdm_ops {
int (*clkdm_clk_disable)(struct clockdomain *clkdm); int (*clkdm_clk_disable)(struct clockdomain *clkdm);
}; };
void clkdm_init(struct clockdomain **clkdms, struct clkdm_autodep *autodeps, int clkdm_register_platform_funcs(struct clkdm_ops *co);
struct clkdm_ops *custom_funcs); int clkdm_register_autodeps(struct clkdm_autodep *ia);
int clkdm_register_clkdms(struct clockdomain **c);
int clkdm_complete_init(void);
struct clockdomain *clkdm_lookup(const char *name); struct clockdomain *clkdm_lookup(const char *name);
int clkdm_for_each(int (*fn)(struct clockdomain *clkdm, void *user), int clkdm_for_each(int (*fn)(struct clockdomain *clkdm, void *user),
...@@ -195,7 +192,8 @@ int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk); ...@@ -195,7 +192,8 @@ int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk);
int clkdm_hwmod_enable(struct clockdomain *clkdm, struct omap_hwmod *oh); int clkdm_hwmod_enable(struct clockdomain *clkdm, struct omap_hwmod *oh);
int clkdm_hwmod_disable(struct clockdomain *clkdm, struct omap_hwmod *oh); int clkdm_hwmod_disable(struct clockdomain *clkdm, struct omap_hwmod *oh);
extern void __init omap2xxx_clockdomains_init(void); extern void __init omap242x_clockdomains_init(void);
extern void __init omap243x_clockdomains_init(void);
extern void __init omap3xxx_clockdomains_init(void); extern void __init omap3xxx_clockdomains_init(void);
extern void __init omap44xx_clockdomains_init(void); extern void __init omap44xx_clockdomains_init(void);
extern void _clkdm_add_autodeps(struct clockdomain *clkdm); extern void _clkdm_add_autodeps(struct clockdomain *clkdm);
...@@ -205,4 +203,10 @@ extern struct clkdm_ops omap2_clkdm_operations; ...@@ -205,4 +203,10 @@ extern struct clkdm_ops omap2_clkdm_operations;
extern struct clkdm_ops omap3_clkdm_operations; extern struct clkdm_ops omap3_clkdm_operations;
extern struct clkdm_ops omap4_clkdm_operations; extern struct clkdm_ops omap4_clkdm_operations;
extern struct clkdm_dep gfx_24xx_wkdeps[];
extern struct clkdm_dep dsp_24xx_wkdeps[];
extern struct clockdomain wkup_common_clkdm;
extern struct clockdomain prm_common_clkdm;
extern struct clockdomain cm_common_clkdm;
#endif #endif
...@@ -52,8 +52,6 @@ static int omap2_clkdm_clear_all_wkdeps(struct clockdomain *clkdm) ...@@ -52,8 +52,6 @@ static int omap2_clkdm_clear_all_wkdeps(struct clockdomain *clkdm)
u32 mask = 0; u32 mask = 0;
for (cd = clkdm->wkdep_srcs; cd && cd->clkdm_name; cd++) { for (cd = clkdm->wkdep_srcs; cd && cd->clkdm_name; cd++) {
if (!omap_chip_is(cd->omap_chip))
continue;
if (!cd->clkdm) if (!cd->clkdm)
continue; /* only happens if data is erroneous */ continue; /* only happens if data is erroneous */
...@@ -98,8 +96,6 @@ static int omap3_clkdm_clear_all_sleepdeps(struct clockdomain *clkdm) ...@@ -98,8 +96,6 @@ static int omap3_clkdm_clear_all_sleepdeps(struct clockdomain *clkdm)
u32 mask = 0; u32 mask = 0;
for (cd = clkdm->sleepdep_srcs; cd && cd->clkdm_name; cd++) { for (cd = clkdm->sleepdep_srcs; cd && cd->clkdm_name; cd++) {
if (!omap_chip_is(cd->omap_chip))
continue;
if (!cd->clkdm) if (!cd->clkdm)
continue; /* only happens if data is erroneous */ continue; /* only happens if data is erroneous */
......
...@@ -52,8 +52,6 @@ static int omap4_clkdm_clear_all_wkup_sleep_deps(struct clockdomain *clkdm) ...@@ -52,8 +52,6 @@ static int omap4_clkdm_clear_all_wkup_sleep_deps(struct clockdomain *clkdm)
u32 mask = 0; u32 mask = 0;
for (cd = clkdm->wkdep_srcs; cd && cd->clkdm_name; cd++) { for (cd = clkdm->wkdep_srcs; cd && cd->clkdm_name; cd++) {
if (!omap_chip_is(cd->omap_chip))
continue;
if (!cd->clkdm) if (!cd->clkdm)
continue; /* only happens if data is erroneous */ continue; /* only happens if data is erroneous */
......
/*
* OMAP2420 clockdomains
*
* Copyright (C) 2008-2011 Texas Instruments, Inc.
* Copyright (C) 2008-2010 Nokia Corporation
*
* Paul Walmsley, Jouni Högander
*
* This file contains clockdomains and clockdomain wakeup dependencies
* for OMAP2420 chips. Some notes:
*
* A useful validation rule for struct clockdomain: Any clockdomain
* referenced by a wkdep_srcs must have a dep_bit assigned. So
* wkdep_srcs are really just software-controllable dependencies.
* Non-software-controllable dependencies do exist, but they are not
* encoded below (yet).
*
* 24xx does not support programmable sleep dependencies (SLEEPDEP)
*
* The overly-specific dep_bit names are due to a bit name collision
* with CM_FCLKEN_{DSP,IVA2}. The DSP/IVA2 PM_WKDEP and CM_SLEEPDEP shift
* value are the same for all powerdomains: 2
*
* XXX should dep_bit be a mask, so we can test to see if it is 0 as a
* sanity check?
* XXX encode hardware fixed wakeup dependencies -- esp. for 3430 CORE
*/
/*
* To-Do List
* -> Port the Sleep/Wakeup dependencies for the domains
* from the Power domain framework
*/
#include <linux/kernel.h>
#include <linux/io.h>
#include "clockdomain.h"
#include "prm2xxx_3xxx.h"
#include "cm2xxx_3xxx.h"
#include "cm-regbits-24xx.h"
#include "prm-regbits-24xx.h"
/*
* Clockdomain dependencies for wkdeps
*
* XXX Hardware dependencies (e.g., dependencies that cannot be
* changed in software) are not included here yet, but should be.
*/
/* Wakeup dependency source arrays */
/* 2420-specific possible wakeup dependencies */
/* 2420 PM_WKDEP_MPU: CORE, DSP, WKUP */
static struct clkdm_dep mpu_2420_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "dsp_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/* 2420 PM_WKDEP_CORE: DSP, GFX, MPU, WKUP */
static struct clkdm_dep core_2420_wkdeps[] = {
{ .clkdm_name = "dsp_clkdm" },
{ .clkdm_name = "gfx_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/*
* 2420-only clockdomains
*/
static struct clockdomain mpu_2420_clkdm = {
.name = "mpu_clkdm",
.pwrdm = { .name = "mpu_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.wkdep_srcs = mpu_2420_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
};
static struct clockdomain iva1_2420_clkdm = {
.name = "iva1_clkdm",
.pwrdm = { .name = "dsp_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT,
.wkdep_srcs = dsp_24xx_wkdeps,
.clktrctrl_mask = OMAP2420_AUTOSTATE_IVA_MASK,
};
static struct clockdomain dsp_2420_clkdm = {
.name = "dsp_clkdm",
.pwrdm = { .name = "dsp_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK,
};
static struct clockdomain gfx_2420_clkdm = {
.name = "gfx_clkdm",
.pwrdm = { .name = "gfx_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = gfx_24xx_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK,
};
static struct clockdomain core_l3_2420_clkdm = {
.name = "core_l3_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.wkdep_srcs = core_2420_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK,
};
static struct clockdomain core_l4_2420_clkdm = {
.name = "core_l4_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.wkdep_srcs = core_2420_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK,
};
static struct clockdomain dss_2420_clkdm = {
.name = "dss_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK,
};
static struct clockdomain *clockdomains_omap242x[] __initdata = {
&wkup_common_clkdm,
&cm_common_clkdm,
&prm_common_clkdm,
&mpu_2420_clkdm,
&iva1_2420_clkdm,
&dsp_2420_clkdm,
&gfx_2420_clkdm,
&core_l3_2420_clkdm,
&core_l4_2420_clkdm,
&dss_2420_clkdm,
NULL,
};
void __init omap242x_clockdomains_init(void)
{
if (!cpu_is_omap242x())
return;
clkdm_register_platform_funcs(&omap2_clkdm_operations);
clkdm_register_clkdms(clockdomains_omap242x);
clkdm_complete_init();
}
/*
* OMAP2xxx clockdomains
*
* Copyright (C) 2008-2009 Texas Instruments, Inc.
* Copyright (C) 2008-2010 Nokia Corporation
*
* Paul Walmsley, Jouni Högander
*
* This file contains clockdomains and clockdomain wakeup dependencies
* for OMAP2xxx chips. Some notes:
*
* A useful validation rule for struct clockdomain: Any clockdomain
* referenced by a wkdep_srcs must have a dep_bit assigned. So
* wkdep_srcs are really just software-controllable dependencies.
* Non-software-controllable dependencies do exist, but they are not
* encoded below (yet).
*
* 24xx does not support programmable sleep dependencies (SLEEPDEP)
*
* The overly-specific dep_bit names are due to a bit name collision
* with CM_FCLKEN_{DSP,IVA2}. The DSP/IVA2 PM_WKDEP and CM_SLEEPDEP shift
* value are the same for all powerdomains: 2
*
* XXX should dep_bit be a mask, so we can test to see if it is 0 as a
* sanity check?
* XXX encode hardware fixed wakeup dependencies -- esp. for 3430 CORE
*/
/*
* To-Do List
* -> Port the Sleep/Wakeup dependencies for the domains
* from the Power domain framework
*/
#include <linux/kernel.h>
#include <linux/io.h>
#include "clockdomain.h"
#include "prm2xxx_3xxx.h"
#include "cm2xxx_3xxx.h"
#include "cm-regbits-24xx.h"
#include "prm-regbits-24xx.h"
/*
* Clockdomain dependencies for wkdeps
*
* XXX Hardware dependencies (e.g., dependencies that cannot be
* changed in software) are not included here yet, but should be.
*/
/* Wakeup dependency source arrays */
/* 2430-specific possible wakeup dependencies */
/* 2430 PM_WKDEP_CORE: DSP, GFX, MPU, WKUP, MDM */
static struct clkdm_dep core_2430_wkdeps[] = {
{ .clkdm_name = "dsp_clkdm" },
{ .clkdm_name = "gfx_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ .clkdm_name = "mdm_clkdm" },
{ NULL },
};
/* 2430 PM_WKDEP_MPU: CORE, DSP, WKUP, MDM */
static struct clkdm_dep mpu_2430_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "dsp_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ .clkdm_name = "mdm_clkdm" },
{ NULL },
};
/* 2430 PM_WKDEP_MDM: CORE, MPU, WKUP */
static struct clkdm_dep mdm_2430_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/*
* 2430-only clockdomains
*/
static struct clockdomain mpu_2430_clkdm = {
.name = "mpu_clkdm",
.pwrdm = { .name = "mpu_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = mpu_2430_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
};
/* Another case of bit name collisions between several registers: EN_MDM */
static struct clockdomain mdm_clkdm = {
.name = "mdm_clkdm",
.pwrdm = { .name = "mdm_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.dep_bit = OMAP2430_PM_WKDEP_MPU_EN_MDM_SHIFT,
.wkdep_srcs = mdm_2430_wkdeps,
.clktrctrl_mask = OMAP2430_AUTOSTATE_MDM_MASK,
};
static struct clockdomain dsp_2430_clkdm = {
.name = "dsp_clkdm",
.pwrdm = { .name = "dsp_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT,
.wkdep_srcs = dsp_24xx_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK,
};
static struct clockdomain gfx_2430_clkdm = {
.name = "gfx_clkdm",
.pwrdm = { .name = "gfx_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = gfx_24xx_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK,
};
/*
* XXX add usecounting for clkdm dependencies, otherwise the presence
* of a single dep bit for core_l3_24xx_clkdm and core_l4_24xx_clkdm
* could cause trouble
*/
static struct clockdomain core_l3_2430_clkdm = {
.name = "core_l3_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.dep_bit = OMAP24XX_EN_CORE_SHIFT,
.wkdep_srcs = core_2430_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK,
};
/*
* XXX add usecounting for clkdm dependencies, otherwise the presence
* of a single dep bit for core_l3_24xx_clkdm and core_l4_24xx_clkdm
* could cause trouble
*/
static struct clockdomain core_l4_2430_clkdm = {
.name = "core_l4_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.dep_bit = OMAP24XX_EN_CORE_SHIFT,
.wkdep_srcs = core_2430_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK,
};
static struct clockdomain dss_2430_clkdm = {
.name = "dss_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK,
};
static struct clockdomain *clockdomains_omap243x[] __initdata = {
&wkup_common_clkdm,
&cm_common_clkdm,
&prm_common_clkdm,
&mpu_2430_clkdm,
&mdm_clkdm,
&dsp_2430_clkdm,
&gfx_2430_clkdm,
&core_l3_2430_clkdm,
&core_l4_2430_clkdm,
&dss_2430_clkdm,
NULL,
};
void __init omap243x_clockdomains_init(void)
{
if (!cpu_is_omap243x())
return;
clkdm_register_platform_funcs(&omap2_clkdm_operations);
clkdm_register_clkdms(clockdomains_omap243x);
clkdm_complete_init();
}
/*
* OMAP3xxx clockdomains
*
* Copyright (C) 2008-2011 Texas Instruments, Inc.
* Copyright (C) 2008-2010 Nokia Corporation
*
* Paul Walmsley, Jouni Högander
*
* This file contains clockdomains and clockdomain wakeup/sleep
* dependencies for the OMAP3xxx chips. Some notes:
*
* A useful validation rule for struct clockdomain: Any clockdomain
* referenced by a wkdep_srcs or sleepdep_srcs array must have a
* dep_bit assigned. So wkdep_srcs/sleepdep_srcs are really just
* software-controllable dependencies. Non-software-controllable
* dependencies do exist, but they are not encoded below (yet).
*
* The overly-specific dep_bit names are due to a bit name collision
* with CM_FCLKEN_{DSP,IVA2}. The DSP/IVA2 PM_WKDEP and CM_SLEEPDEP shift
* value are the same for all powerdomains: 2
*
* XXX should dep_bit be a mask, so we can test to see if it is 0 as a
* sanity check?
* XXX encode hardware fixed wakeup dependencies -- esp. for 3430 CORE
*/
/*
* To-Do List
* -> Port the Sleep/Wakeup dependencies for the domains
* from the Power domain framework
*/
#include <linux/kernel.h>
#include <linux/io.h>
#include "clockdomain.h"
#include "prm2xxx_3xxx.h"
#include "cm2xxx_3xxx.h"
#include "cm-regbits-34xx.h"
#include "prm-regbits-34xx.h"
/*
* Clockdomain dependencies for wkdeps/sleepdeps
*
* XXX Hardware dependencies (e.g., dependencies that cannot be
* changed in software) are not included here yet, but should be.
*/
/* OMAP3-specific possible dependencies */
/*
* 3430ES1 PM_WKDEP_GFX: adds IVA2, removes CORE
* 3430ES2 PM_WKDEP_SGX: adds IVA2, removes CORE
*/
static struct clkdm_dep gfx_sgx_3xxx_wkdeps[] = {
{ .clkdm_name = "iva2_clkdm", },
{ .clkdm_name = "mpu_clkdm", },
{ .clkdm_name = "wkup_clkdm", },
{ NULL },
};
/* 3430: PM_WKDEP_PER: CORE, IVA2, MPU, WKUP */
static struct clkdm_dep per_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "iva2_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/* 3430ES2: PM_WKDEP_USBHOST: CORE, IVA2, MPU, WKUP */
static struct clkdm_dep usbhost_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "iva2_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/* 3430 PM_WKDEP_MPU: CORE, IVA2, DSS, PER */
static struct clkdm_dep mpu_3xxx_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "iva2_clkdm" },
{ .clkdm_name = "dss_clkdm" },
{ .clkdm_name = "per_clkdm" },
{ NULL },
};
/* 3430 PM_WKDEP_IVA2: CORE, MPU, WKUP, DSS, PER */
static struct clkdm_dep iva2_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ .clkdm_name = "dss_clkdm" },
{ .clkdm_name = "per_clkdm" },
{ NULL },
};
/* 3430 PM_WKDEP_CAM: IVA2, MPU, WKUP */
static struct clkdm_dep cam_wkdeps[] = {
{ .clkdm_name = "iva2_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/* 3430 PM_WKDEP_DSS: IVA2, MPU, WKUP */
static struct clkdm_dep dss_wkdeps[] = {
{ .clkdm_name = "iva2_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/* 3430: PM_WKDEP_NEON: MPU */
static struct clkdm_dep neon_wkdeps[] = {
{ .clkdm_name = "mpu_clkdm" },
{ NULL },
};
/* Sleep dependency source arrays for OMAP3-specific clkdms */
/* 3430: CM_SLEEPDEP_DSS: MPU, IVA */
static struct clkdm_dep dss_sleepdeps[] = {
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "iva2_clkdm" },
{ NULL },
};
/* 3430: CM_SLEEPDEP_PER: MPU, IVA */
static struct clkdm_dep per_sleepdeps[] = {
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "iva2_clkdm" },
{ NULL },
};
/* 3430ES2: CM_SLEEPDEP_USBHOST: MPU, IVA */
static struct clkdm_dep usbhost_sleepdeps[] = {
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "iva2_clkdm" },
{ NULL },
};
/* 3430: CM_SLEEPDEP_CAM: MPU */
static struct clkdm_dep cam_sleepdeps[] = {
{ .clkdm_name = "mpu_clkdm" },
{ NULL },
};
/*
* 3430ES1: CM_SLEEPDEP_GFX: MPU
* 3430ES2: CM_SLEEPDEP_SGX: MPU
* These can share data since they will never be present simultaneously
* on the same device.
*/
static struct clkdm_dep gfx_sgx_sleepdeps[] = {
{ .clkdm_name = "mpu_clkdm" },
{ NULL },
};
/*
* OMAP3 clockdomains
*/
static struct clockdomain mpu_3xxx_clkdm = {
.name = "mpu_clkdm",
.pwrdm = { .name = "mpu_pwrdm" },
.flags = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP,
.dep_bit = OMAP3430_EN_MPU_SHIFT,
.wkdep_srcs = mpu_3xxx_wkdeps,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK,
};
static struct clockdomain neon_clkdm = {
.name = "neon_clkdm",
.pwrdm = { .name = "neon_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = neon_wkdeps,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_NEON_MASK,
};
static struct clockdomain iva2_clkdm = {
.name = "iva2_clkdm",
.pwrdm = { .name = "iva2_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.dep_bit = OMAP3430_PM_WKDEP_MPU_EN_IVA2_SHIFT,
.wkdep_srcs = iva2_wkdeps,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_IVA2_MASK,
};
static struct clockdomain gfx_3430es1_clkdm = {
.name = "gfx_clkdm",
.pwrdm = { .name = "gfx_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = gfx_sgx_3xxx_wkdeps,
.sleepdep_srcs = gfx_sgx_sleepdeps,
.clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_GFX_MASK,
};
static struct clockdomain sgx_clkdm = {
.name = "sgx_clkdm",
.pwrdm = { .name = "sgx_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = gfx_sgx_3xxx_wkdeps,
.sleepdep_srcs = gfx_sgx_sleepdeps,
.clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK,
};
/*
* The die-to-die clockdomain was documented in the 34xx ES1 TRM, but
* then that information was removed from the 34xx ES2+ TRM. It is
* unclear whether the core is still there, but the clockdomain logic
* is there, and must be programmed to an appropriate state if the
* CORE clockdomain is to become inactive.
*/
static struct clockdomain d2d_clkdm = {
.name = "d2d_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_D2D_MASK,
};
/*
* XXX add usecounting for clkdm dependencies, otherwise the presence
* of a single dep bit for core_l3_3xxx_clkdm and core_l4_3xxx_clkdm
* could cause trouble
*/
static struct clockdomain core_l3_3xxx_clkdm = {
.name = "core_l3_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.dep_bit = OMAP3430_EN_CORE_SHIFT,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_L3_MASK,
};
/*
* XXX add usecounting for clkdm dependencies, otherwise the presence
* of a single dep bit for core_l3_3xxx_clkdm and core_l4_3xxx_clkdm
* could cause trouble
*/
static struct clockdomain core_l4_3xxx_clkdm = {
.name = "core_l4_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.dep_bit = OMAP3430_EN_CORE_SHIFT,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_L4_MASK,
};
/* Another case of bit name collisions between several registers: EN_DSS */
static struct clockdomain dss_3xxx_clkdm = {
.name = "dss_clkdm",
.pwrdm = { .name = "dss_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.dep_bit = OMAP3430_PM_WKDEP_MPU_EN_DSS_SHIFT,
.wkdep_srcs = dss_wkdeps,
.sleepdep_srcs = dss_sleepdeps,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_DSS_MASK,
};
static struct clockdomain cam_clkdm = {
.name = "cam_clkdm",
.pwrdm = { .name = "cam_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = cam_wkdeps,
.sleepdep_srcs = cam_sleepdeps,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_CAM_MASK,
};
static struct clockdomain usbhost_clkdm = {
.name = "usbhost_clkdm",
.pwrdm = { .name = "usbhost_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = usbhost_wkdeps,
.sleepdep_srcs = usbhost_sleepdeps,
.clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK,
};
static struct clockdomain per_clkdm = {
.name = "per_clkdm",
.pwrdm = { .name = "per_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.dep_bit = OMAP3430_EN_PER_SHIFT,
.wkdep_srcs = per_wkdeps,
.sleepdep_srcs = per_sleepdeps,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK,
};
/*
* Disable hw supervised mode for emu_clkdm, because emu_pwrdm is
* switched of even if sdti is in use
*/
static struct clockdomain emu_clkdm = {
.name = "emu_clkdm",
.pwrdm = { .name = "emu_pwrdm" },
.flags = /* CLKDM_CAN_ENABLE_AUTO | */CLKDM_CAN_SWSUP,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_EMU_MASK,
};
static struct clockdomain dpll1_clkdm = {
.name = "dpll1_clkdm",
.pwrdm = { .name = "dpll1_pwrdm" },
};
static struct clockdomain dpll2_clkdm = {
.name = "dpll2_clkdm",
.pwrdm = { .name = "dpll2_pwrdm" },
};
static struct clockdomain dpll3_clkdm = {
.name = "dpll3_clkdm",
.pwrdm = { .name = "dpll3_pwrdm" },
};
static struct clockdomain dpll4_clkdm = {
.name = "dpll4_clkdm",
.pwrdm = { .name = "dpll4_pwrdm" },
};
static struct clockdomain dpll5_clkdm = {
.name = "dpll5_clkdm",
.pwrdm = { .name = "dpll5_pwrdm" },
};
/*
* Clockdomain hwsup dependencies
*/
static struct clkdm_autodep clkdm_autodeps[] = {
{
.clkdm = { .name = "mpu_clkdm" },
},
{
.clkdm = { .name = "iva2_clkdm" },
},
{
.clkdm = { .name = NULL },
}
};
/*
*
*/
static struct clockdomain *clockdomains_omap3430_common[] __initdata = {
&wkup_common_clkdm,
&cm_common_clkdm,
&prm_common_clkdm,
&mpu_3xxx_clkdm,
&neon_clkdm,
&iva2_clkdm,
&d2d_clkdm,
&core_l3_3xxx_clkdm,
&core_l4_3xxx_clkdm,
&dss_3xxx_clkdm,
&cam_clkdm,
&per_clkdm,
&emu_clkdm,
&dpll1_clkdm,
&dpll2_clkdm,
&dpll3_clkdm,
&dpll4_clkdm,
NULL
};
static struct clockdomain *clockdomains_omap3430es1[] __initdata = {
&gfx_3430es1_clkdm,
NULL,
};
static struct clockdomain *clockdomains_omap3430es2plus[] __initdata = {
&sgx_clkdm,
&dpll5_clkdm,
&usbhost_clkdm,
NULL,
};
void __init omap3xxx_clockdomains_init(void)
{
struct clockdomain **sc;
if (!cpu_is_omap34xx())
return;
clkdm_register_platform_funcs(&omap3_clkdm_operations);
clkdm_register_clkdms(clockdomains_omap3430_common);
sc = (omap_rev() == OMAP3430_REV_ES1_0) ? clockdomains_omap3430es1 :
clockdomains_omap3430es2plus;
clkdm_register_clkdms(sc);
clkdm_register_autodeps(clkdm_autodeps);
clkdm_complete_init();
}
...@@ -34,350 +34,122 @@ ...@@ -34,350 +34,122 @@
/* Static Dependencies for OMAP4 Clock Domains */ /* Static Dependencies for OMAP4 Clock Domains */
static struct clkdm_dep d2d_wkup_sleep_deps[] = { static struct clkdm_dep d2d_wkup_sleep_deps[] = {
{ { .clkdm_name = "abe_clkdm" },
.clkdm_name = "abe_clkdm", { .clkdm_name = "ivahd_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l3_1_clkdm" },
}, { .clkdm_name = "l3_2_clkdm" },
{ { .clkdm_name = "l3_emif_clkdm" },
.clkdm_name = "ivahd_clkdm", { .clkdm_name = "l3_init_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l4_cfg_clkdm" },
}, { .clkdm_name = "l4_per_clkdm" },
{
.clkdm_name = "l3_1_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_2_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_emif_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_init_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_cfg_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_per_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{ NULL }, { NULL },
}; };
static struct clkdm_dep ducati_wkup_sleep_deps[] = { static struct clkdm_dep ducati_wkup_sleep_deps[] = {
{ { .clkdm_name = "abe_clkdm" },
.clkdm_name = "abe_clkdm", { .clkdm_name = "ivahd_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l3_1_clkdm" },
}, { .clkdm_name = "l3_2_clkdm" },
{ { .clkdm_name = "l3_dss_clkdm" },
.clkdm_name = "ivahd_clkdm", { .clkdm_name = "l3_emif_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l3_gfx_clkdm" },
}, { .clkdm_name = "l3_init_clkdm" },
{ { .clkdm_name = "l4_cfg_clkdm" },
.clkdm_name = "l3_1_clkdm", { .clkdm_name = "l4_per_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l4_secure_clkdm" },
}, { .clkdm_name = "l4_wkup_clkdm" },
{ { .clkdm_name = "tesla_clkdm" },
.clkdm_name = "l3_2_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_dss_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_emif_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_gfx_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_init_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_cfg_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_per_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_secure_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_wkup_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "tesla_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{ NULL }, { NULL },
}; };
static struct clkdm_dep iss_wkup_sleep_deps[] = { static struct clkdm_dep iss_wkup_sleep_deps[] = {
{ { .clkdm_name = "ivahd_clkdm" },
.clkdm_name = "ivahd_clkdm", { .clkdm_name = "l3_1_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l3_emif_clkdm" },
},
{
.clkdm_name = "l3_1_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_emif_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{ NULL }, { NULL },
}; };
static struct clkdm_dep ivahd_wkup_sleep_deps[] = { static struct clkdm_dep ivahd_wkup_sleep_deps[] = {
{ { .clkdm_name = "l3_1_clkdm" },
.clkdm_name = "l3_1_clkdm", { .clkdm_name = "l3_emif_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_emif_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{ NULL }, { NULL },
}; };
static struct clkdm_dep l3_dma_wkup_sleep_deps[] = { static struct clkdm_dep l3_dma_wkup_sleep_deps[] = {
{ { .clkdm_name = "abe_clkdm" },
.clkdm_name = "abe_clkdm", { .clkdm_name = "ducati_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "ivahd_clkdm" },
}, { .clkdm_name = "l3_1_clkdm" },
{ { .clkdm_name = "l3_dss_clkdm" },
.clkdm_name = "ducati_clkdm", { .clkdm_name = "l3_emif_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l3_init_clkdm" },
}, { .clkdm_name = "l4_cfg_clkdm" },
{ { .clkdm_name = "l4_per_clkdm" },
.clkdm_name = "ivahd_clkdm", { .clkdm_name = "l4_secure_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l4_wkup_clkdm" },
},
{
.clkdm_name = "l3_1_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_dss_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_emif_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_init_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_cfg_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_per_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_secure_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_wkup_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{ NULL }, { NULL },
}; };
static struct clkdm_dep l3_dss_wkup_sleep_deps[] = { static struct clkdm_dep l3_dss_wkup_sleep_deps[] = {
{ { .clkdm_name = "ivahd_clkdm" },
.clkdm_name = "ivahd_clkdm", { .clkdm_name = "l3_2_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l3_emif_clkdm" },
},
{
.clkdm_name = "l3_2_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_emif_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{ NULL }, { NULL },
}; };
static struct clkdm_dep l3_gfx_wkup_sleep_deps[] = { static struct clkdm_dep l3_gfx_wkup_sleep_deps[] = {
{ { .clkdm_name = "ivahd_clkdm" },
.clkdm_name = "ivahd_clkdm", { .clkdm_name = "l3_1_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l3_emif_clkdm" },
},
{
.clkdm_name = "l3_1_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_emif_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{ NULL }, { NULL },
}; };
static struct clkdm_dep l3_init_wkup_sleep_deps[] = { static struct clkdm_dep l3_init_wkup_sleep_deps[] = {
{ { .clkdm_name = "abe_clkdm" },
.clkdm_name = "abe_clkdm", { .clkdm_name = "ivahd_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l3_emif_clkdm" },
}, { .clkdm_name = "l4_cfg_clkdm" },
{ { .clkdm_name = "l4_per_clkdm" },
.clkdm_name = "ivahd_clkdm", { .clkdm_name = "l4_secure_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l4_wkup_clkdm" },
},
{
.clkdm_name = "l3_emif_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_cfg_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_per_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_secure_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_wkup_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{ NULL }, { NULL },
}; };
static struct clkdm_dep l4_secure_wkup_sleep_deps[] = { static struct clkdm_dep l4_secure_wkup_sleep_deps[] = {
{ { .clkdm_name = "l3_1_clkdm" },
.clkdm_name = "l3_1_clkdm", { .clkdm_name = "l3_emif_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l4_per_clkdm" },
},
{
.clkdm_name = "l3_emif_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_per_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{ NULL }, { NULL },
}; };
static struct clkdm_dep mpu_wkup_sleep_deps[] = { static struct clkdm_dep mpu_wkup_sleep_deps[] = {
{ { .clkdm_name = "abe_clkdm" },
.clkdm_name = "abe_clkdm", { .clkdm_name = "ducati_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "ivahd_clkdm" },
}, { .clkdm_name = "l3_1_clkdm" },
{ { .clkdm_name = "l3_2_clkdm" },
.clkdm_name = "ducati_clkdm", { .clkdm_name = "l3_dss_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l3_emif_clkdm" },
}, { .clkdm_name = "l3_gfx_clkdm" },
{ { .clkdm_name = "l3_init_clkdm" },
.clkdm_name = "ivahd_clkdm", { .clkdm_name = "l4_cfg_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l4_per_clkdm" },
}, { .clkdm_name = "l4_secure_clkdm" },
{ { .clkdm_name = "l4_wkup_clkdm" },
.clkdm_name = "l3_1_clkdm", { .clkdm_name = "tesla_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_2_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_dss_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_emif_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_gfx_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_init_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_cfg_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_per_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_secure_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_wkup_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "tesla_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{ NULL }, { NULL },
}; };
static struct clkdm_dep tesla_wkup_sleep_deps[] = { static struct clkdm_dep tesla_wkup_sleep_deps[] = {
{ { .clkdm_name = "abe_clkdm" },
.clkdm_name = "abe_clkdm", { .clkdm_name = "ivahd_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l3_1_clkdm" },
}, { .clkdm_name = "l3_2_clkdm" },
{ { .clkdm_name = "l3_emif_clkdm" },
.clkdm_name = "ivahd_clkdm", { .clkdm_name = "l3_init_clkdm" },
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430) { .clkdm_name = "l4_cfg_clkdm" },
}, { .clkdm_name = "l4_per_clkdm" },
{ { .clkdm_name = "l4_wkup_clkdm" },
.clkdm_name = "l3_1_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_2_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_emif_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l3_init_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_cfg_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_per_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{
.clkdm_name = "l4_wkup_clkdm",
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
},
{ NULL }, { NULL },
}; };
...@@ -388,7 +160,6 @@ static struct clockdomain l4_cefuse_44xx_clkdm = { ...@@ -388,7 +160,6 @@ static struct clockdomain l4_cefuse_44xx_clkdm = {
.cm_inst = OMAP4430_CM2_CEFUSE_INST, .cm_inst = OMAP4430_CM2_CEFUSE_INST,
.clkdm_offs = OMAP4430_CM2_CEFUSE_CEFUSE_CDOFFS, .clkdm_offs = OMAP4430_CM2_CEFUSE_CEFUSE_CDOFFS,
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l4_cfg_44xx_clkdm = { static struct clockdomain l4_cfg_44xx_clkdm = {
...@@ -399,7 +170,6 @@ static struct clockdomain l4_cfg_44xx_clkdm = { ...@@ -399,7 +170,6 @@ static struct clockdomain l4_cfg_44xx_clkdm = {
.clkdm_offs = OMAP4430_CM2_CORE_L4CFG_CDOFFS, .clkdm_offs = OMAP4430_CM2_CORE_L4CFG_CDOFFS,
.dep_bit = OMAP4430_L4CFG_STATDEP_SHIFT, .dep_bit = OMAP4430_L4CFG_STATDEP_SHIFT,
.flags = CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain tesla_44xx_clkdm = { static struct clockdomain tesla_44xx_clkdm = {
...@@ -412,7 +182,6 @@ static struct clockdomain tesla_44xx_clkdm = { ...@@ -412,7 +182,6 @@ static struct clockdomain tesla_44xx_clkdm = {
.wkdep_srcs = tesla_wkup_sleep_deps, .wkdep_srcs = tesla_wkup_sleep_deps,
.sleepdep_srcs = tesla_wkup_sleep_deps, .sleepdep_srcs = tesla_wkup_sleep_deps,
.flags = CLKDM_CAN_HWSUP_SWSUP, .flags = CLKDM_CAN_HWSUP_SWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l3_gfx_44xx_clkdm = { static struct clockdomain l3_gfx_44xx_clkdm = {
...@@ -425,7 +194,6 @@ static struct clockdomain l3_gfx_44xx_clkdm = { ...@@ -425,7 +194,6 @@ static struct clockdomain l3_gfx_44xx_clkdm = {
.wkdep_srcs = l3_gfx_wkup_sleep_deps, .wkdep_srcs = l3_gfx_wkup_sleep_deps,
.sleepdep_srcs = l3_gfx_wkup_sleep_deps, .sleepdep_srcs = l3_gfx_wkup_sleep_deps,
.flags = CLKDM_CAN_HWSUP_SWSUP, .flags = CLKDM_CAN_HWSUP_SWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain ivahd_44xx_clkdm = { static struct clockdomain ivahd_44xx_clkdm = {
...@@ -438,7 +206,6 @@ static struct clockdomain ivahd_44xx_clkdm = { ...@@ -438,7 +206,6 @@ static struct clockdomain ivahd_44xx_clkdm = {
.wkdep_srcs = ivahd_wkup_sleep_deps, .wkdep_srcs = ivahd_wkup_sleep_deps,
.sleepdep_srcs = ivahd_wkup_sleep_deps, .sleepdep_srcs = ivahd_wkup_sleep_deps,
.flags = CLKDM_CAN_HWSUP_SWSUP, .flags = CLKDM_CAN_HWSUP_SWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l4_secure_44xx_clkdm = { static struct clockdomain l4_secure_44xx_clkdm = {
...@@ -451,7 +218,6 @@ static struct clockdomain l4_secure_44xx_clkdm = { ...@@ -451,7 +218,6 @@ static struct clockdomain l4_secure_44xx_clkdm = {
.wkdep_srcs = l4_secure_wkup_sleep_deps, .wkdep_srcs = l4_secure_wkup_sleep_deps,
.sleepdep_srcs = l4_secure_wkup_sleep_deps, .sleepdep_srcs = l4_secure_wkup_sleep_deps,
.flags = CLKDM_CAN_HWSUP_SWSUP, .flags = CLKDM_CAN_HWSUP_SWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l4_per_44xx_clkdm = { static struct clockdomain l4_per_44xx_clkdm = {
...@@ -462,7 +228,6 @@ static struct clockdomain l4_per_44xx_clkdm = { ...@@ -462,7 +228,6 @@ static struct clockdomain l4_per_44xx_clkdm = {
.clkdm_offs = OMAP4430_CM2_L4PER_L4PER_CDOFFS, .clkdm_offs = OMAP4430_CM2_L4PER_L4PER_CDOFFS,
.dep_bit = OMAP4430_L4PER_STATDEP_SHIFT, .dep_bit = OMAP4430_L4PER_STATDEP_SHIFT,
.flags = CLKDM_CAN_HWSUP_SWSUP, .flags = CLKDM_CAN_HWSUP_SWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain abe_44xx_clkdm = { static struct clockdomain abe_44xx_clkdm = {
...@@ -473,7 +238,6 @@ static struct clockdomain abe_44xx_clkdm = { ...@@ -473,7 +238,6 @@ static struct clockdomain abe_44xx_clkdm = {
.clkdm_offs = OMAP4430_CM1_ABE_ABE_CDOFFS, .clkdm_offs = OMAP4430_CM1_ABE_ABE_CDOFFS,
.dep_bit = OMAP4430_ABE_STATDEP_SHIFT, .dep_bit = OMAP4430_ABE_STATDEP_SHIFT,
.flags = CLKDM_CAN_HWSUP_SWSUP, .flags = CLKDM_CAN_HWSUP_SWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l3_instr_44xx_clkdm = { static struct clockdomain l3_instr_44xx_clkdm = {
...@@ -482,7 +246,6 @@ static struct clockdomain l3_instr_44xx_clkdm = { ...@@ -482,7 +246,6 @@ static struct clockdomain l3_instr_44xx_clkdm = {
.prcm_partition = OMAP4430_CM2_PARTITION, .prcm_partition = OMAP4430_CM2_PARTITION,
.cm_inst = OMAP4430_CM2_CORE_INST, .cm_inst = OMAP4430_CM2_CORE_INST,
.clkdm_offs = OMAP4430_CM2_CORE_L3INSTR_CDOFFS, .clkdm_offs = OMAP4430_CM2_CORE_L3INSTR_CDOFFS,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l3_init_44xx_clkdm = { static struct clockdomain l3_init_44xx_clkdm = {
...@@ -495,7 +258,6 @@ static struct clockdomain l3_init_44xx_clkdm = { ...@@ -495,7 +258,6 @@ static struct clockdomain l3_init_44xx_clkdm = {
.wkdep_srcs = l3_init_wkup_sleep_deps, .wkdep_srcs = l3_init_wkup_sleep_deps,
.sleepdep_srcs = l3_init_wkup_sleep_deps, .sleepdep_srcs = l3_init_wkup_sleep_deps,
.flags = CLKDM_CAN_HWSUP_SWSUP, .flags = CLKDM_CAN_HWSUP_SWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain d2d_44xx_clkdm = { static struct clockdomain d2d_44xx_clkdm = {
...@@ -507,7 +269,6 @@ static struct clockdomain d2d_44xx_clkdm = { ...@@ -507,7 +269,6 @@ static struct clockdomain d2d_44xx_clkdm = {
.wkdep_srcs = d2d_wkup_sleep_deps, .wkdep_srcs = d2d_wkup_sleep_deps,
.sleepdep_srcs = d2d_wkup_sleep_deps, .sleepdep_srcs = d2d_wkup_sleep_deps,
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain mpu0_44xx_clkdm = { static struct clockdomain mpu0_44xx_clkdm = {
...@@ -517,7 +278,6 @@ static struct clockdomain mpu0_44xx_clkdm = { ...@@ -517,7 +278,6 @@ static struct clockdomain mpu0_44xx_clkdm = {
.cm_inst = OMAP4430_PRCM_MPU_CPU0_INST, .cm_inst = OMAP4430_PRCM_MPU_CPU0_INST,
.clkdm_offs = OMAP4430_PRCM_MPU_CPU0_CPU0_CDOFFS, .clkdm_offs = OMAP4430_PRCM_MPU_CPU0_CPU0_CDOFFS,
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain mpu1_44xx_clkdm = { static struct clockdomain mpu1_44xx_clkdm = {
...@@ -527,7 +287,6 @@ static struct clockdomain mpu1_44xx_clkdm = { ...@@ -527,7 +287,6 @@ static struct clockdomain mpu1_44xx_clkdm = {
.cm_inst = OMAP4430_PRCM_MPU_CPU1_INST, .cm_inst = OMAP4430_PRCM_MPU_CPU1_INST,
.clkdm_offs = OMAP4430_PRCM_MPU_CPU1_CPU1_CDOFFS, .clkdm_offs = OMAP4430_PRCM_MPU_CPU1_CPU1_CDOFFS,
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l3_emif_44xx_clkdm = { static struct clockdomain l3_emif_44xx_clkdm = {
...@@ -538,7 +297,6 @@ static struct clockdomain l3_emif_44xx_clkdm = { ...@@ -538,7 +297,6 @@ static struct clockdomain l3_emif_44xx_clkdm = {
.clkdm_offs = OMAP4430_CM2_CORE_MEMIF_CDOFFS, .clkdm_offs = OMAP4430_CM2_CORE_MEMIF_CDOFFS,
.dep_bit = OMAP4430_MEMIF_STATDEP_SHIFT, .dep_bit = OMAP4430_MEMIF_STATDEP_SHIFT,
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l4_ao_44xx_clkdm = { static struct clockdomain l4_ao_44xx_clkdm = {
...@@ -548,7 +306,6 @@ static struct clockdomain l4_ao_44xx_clkdm = { ...@@ -548,7 +306,6 @@ static struct clockdomain l4_ao_44xx_clkdm = {
.cm_inst = OMAP4430_CM2_ALWAYS_ON_INST, .cm_inst = OMAP4430_CM2_ALWAYS_ON_INST,
.clkdm_offs = OMAP4430_CM2_ALWAYS_ON_ALWON_CDOFFS, .clkdm_offs = OMAP4430_CM2_ALWAYS_ON_ALWON_CDOFFS,
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain ducati_44xx_clkdm = { static struct clockdomain ducati_44xx_clkdm = {
...@@ -561,7 +318,6 @@ static struct clockdomain ducati_44xx_clkdm = { ...@@ -561,7 +318,6 @@ static struct clockdomain ducati_44xx_clkdm = {
.wkdep_srcs = ducati_wkup_sleep_deps, .wkdep_srcs = ducati_wkup_sleep_deps,
.sleepdep_srcs = ducati_wkup_sleep_deps, .sleepdep_srcs = ducati_wkup_sleep_deps,
.flags = CLKDM_CAN_HWSUP_SWSUP, .flags = CLKDM_CAN_HWSUP_SWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain mpu_44xx_clkdm = { static struct clockdomain mpu_44xx_clkdm = {
...@@ -573,7 +329,6 @@ static struct clockdomain mpu_44xx_clkdm = { ...@@ -573,7 +329,6 @@ static struct clockdomain mpu_44xx_clkdm = {
.wkdep_srcs = mpu_wkup_sleep_deps, .wkdep_srcs = mpu_wkup_sleep_deps,
.sleepdep_srcs = mpu_wkup_sleep_deps, .sleepdep_srcs = mpu_wkup_sleep_deps,
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l3_2_44xx_clkdm = { static struct clockdomain l3_2_44xx_clkdm = {
...@@ -584,7 +339,6 @@ static struct clockdomain l3_2_44xx_clkdm = { ...@@ -584,7 +339,6 @@ static struct clockdomain l3_2_44xx_clkdm = {
.clkdm_offs = OMAP4430_CM2_CORE_L3_2_CDOFFS, .clkdm_offs = OMAP4430_CM2_CORE_L3_2_CDOFFS,
.dep_bit = OMAP4430_L3_2_STATDEP_SHIFT, .dep_bit = OMAP4430_L3_2_STATDEP_SHIFT,
.flags = CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l3_1_44xx_clkdm = { static struct clockdomain l3_1_44xx_clkdm = {
...@@ -595,7 +349,6 @@ static struct clockdomain l3_1_44xx_clkdm = { ...@@ -595,7 +349,6 @@ static struct clockdomain l3_1_44xx_clkdm = {
.clkdm_offs = OMAP4430_CM2_CORE_L3_1_CDOFFS, .clkdm_offs = OMAP4430_CM2_CORE_L3_1_CDOFFS,
.dep_bit = OMAP4430_L3_1_STATDEP_SHIFT, .dep_bit = OMAP4430_L3_1_STATDEP_SHIFT,
.flags = CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain iss_44xx_clkdm = { static struct clockdomain iss_44xx_clkdm = {
...@@ -607,7 +360,6 @@ static struct clockdomain iss_44xx_clkdm = { ...@@ -607,7 +360,6 @@ static struct clockdomain iss_44xx_clkdm = {
.wkdep_srcs = iss_wkup_sleep_deps, .wkdep_srcs = iss_wkup_sleep_deps,
.sleepdep_srcs = iss_wkup_sleep_deps, .sleepdep_srcs = iss_wkup_sleep_deps,
.flags = CLKDM_CAN_HWSUP_SWSUP, .flags = CLKDM_CAN_HWSUP_SWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l3_dss_44xx_clkdm = { static struct clockdomain l3_dss_44xx_clkdm = {
...@@ -620,7 +372,6 @@ static struct clockdomain l3_dss_44xx_clkdm = { ...@@ -620,7 +372,6 @@ static struct clockdomain l3_dss_44xx_clkdm = {
.wkdep_srcs = l3_dss_wkup_sleep_deps, .wkdep_srcs = l3_dss_wkup_sleep_deps,
.sleepdep_srcs = l3_dss_wkup_sleep_deps, .sleepdep_srcs = l3_dss_wkup_sleep_deps,
.flags = CLKDM_CAN_HWSUP_SWSUP, .flags = CLKDM_CAN_HWSUP_SWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l4_wkup_44xx_clkdm = { static struct clockdomain l4_wkup_44xx_clkdm = {
...@@ -631,7 +382,6 @@ static struct clockdomain l4_wkup_44xx_clkdm = { ...@@ -631,7 +382,6 @@ static struct clockdomain l4_wkup_44xx_clkdm = {
.clkdm_offs = OMAP4430_PRM_WKUP_CM_WKUP_CDOFFS, .clkdm_offs = OMAP4430_PRM_WKUP_CM_WKUP_CDOFFS,
.dep_bit = OMAP4430_L4WKUP_STATDEP_SHIFT, .dep_bit = OMAP4430_L4WKUP_STATDEP_SHIFT,
.flags = CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain emu_sys_44xx_clkdm = { static struct clockdomain emu_sys_44xx_clkdm = {
...@@ -641,7 +391,6 @@ static struct clockdomain emu_sys_44xx_clkdm = { ...@@ -641,7 +391,6 @@ static struct clockdomain emu_sys_44xx_clkdm = {
.cm_inst = OMAP4430_PRM_EMU_CM_INST, .cm_inst = OMAP4430_PRM_EMU_CM_INST,
.clkdm_offs = OMAP4430_PRM_EMU_CM_EMU_CDOFFS, .clkdm_offs = OMAP4430_PRM_EMU_CM_EMU_CDOFFS,
.flags = CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
static struct clockdomain l3_dma_44xx_clkdm = { static struct clockdomain l3_dma_44xx_clkdm = {
...@@ -653,7 +402,6 @@ static struct clockdomain l3_dma_44xx_clkdm = { ...@@ -653,7 +402,6 @@ static struct clockdomain l3_dma_44xx_clkdm = {
.wkdep_srcs = l3_dma_wkup_sleep_deps, .wkdep_srcs = l3_dma_wkup_sleep_deps,
.sleepdep_srcs = l3_dma_wkup_sleep_deps, .sleepdep_srcs = l3_dma_wkup_sleep_deps,
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
}; };
/* As clockdomains are added or removed above, this list must also be changed */ /* As clockdomains are added or removed above, this list must also be changed */
...@@ -685,7 +433,10 @@ static struct clockdomain *clockdomains_omap44xx[] __initdata = { ...@@ -685,7 +433,10 @@ static struct clockdomain *clockdomains_omap44xx[] __initdata = {
NULL NULL
}; };
void __init omap44xx_clockdomains_init(void) void __init omap44xx_clockdomains_init(void)
{ {
clkdm_init(clockdomains_omap44xx, NULL, &omap4_clkdm_operations); clkdm_register_platform_funcs(&omap4_clkdm_operations);
clkdm_register_clkdms(clockdomains_omap44xx);
clkdm_complete_init();
} }
...@@ -56,6 +56,12 @@ void __init omap2_set_globals_242x(void) ...@@ -56,6 +56,12 @@ void __init omap2_set_globals_242x(void)
{ {
__omap2_set_globals(&omap242x_globals); __omap2_set_globals(&omap242x_globals);
} }
void __init omap242x_map_io(void)
{
omap2_set_globals_242x();
omap242x_map_common_io();
}
#endif #endif
#if defined(CONFIG_SOC_OMAP2430) #if defined(CONFIG_SOC_OMAP2430)
...@@ -74,6 +80,12 @@ void __init omap2_set_globals_243x(void) ...@@ -74,6 +80,12 @@ void __init omap2_set_globals_243x(void)
{ {
__omap2_set_globals(&omap243x_globals); __omap2_set_globals(&omap243x_globals);
} }
void __init omap243x_map_io(void)
{
omap2_set_globals_243x();
omap243x_map_common_io();
}
#endif #endif
#if defined(CONFIG_ARCH_OMAP3) #if defined(CONFIG_ARCH_OMAP3)
...@@ -138,5 +150,11 @@ void __init omap2_set_globals_443x(void) ...@@ -138,5 +150,11 @@ void __init omap2_set_globals_443x(void)
omap2_set_globals_control(&omap4_globals); omap2_set_globals_control(&omap4_globals);
omap2_set_globals_prcm(&omap4_globals); omap2_set_globals_prcm(&omap4_globals);
} }
void __init omap4_map_io(void)
{
omap2_set_globals_443x();
omap44xx_map_common_io();
}
#endif #endif
...@@ -44,7 +44,7 @@ static int __init omap3_l3_init(void) ...@@ -44,7 +44,7 @@ static int __init omap3_l3_init(void)
{ {
int l; int l;
struct omap_hwmod *oh; struct omap_hwmod *oh;
struct omap_device *od; struct platform_device *pdev;
char oh_name[L3_MODULES_MAX_LEN]; char oh_name[L3_MODULES_MAX_LEN];
/* /*
...@@ -61,12 +61,12 @@ static int __init omap3_l3_init(void) ...@@ -61,12 +61,12 @@ static int __init omap3_l3_init(void)
if (!oh) if (!oh)
pr_err("could not look up %s\n", oh_name); pr_err("could not look up %s\n", oh_name);
od = omap_device_build("omap_l3_smx", 0, oh, NULL, 0, pdev = omap_device_build("omap_l3_smx", 0, oh, NULL, 0,
NULL, 0, 0); NULL, 0, 0);
WARN(IS_ERR(od), "could not build omap_device for %s\n", oh_name); WARN(IS_ERR(pdev), "could not build omap_device for %s\n", oh_name);
return IS_ERR(od) ? PTR_ERR(od) : 0; return IS_ERR(pdev) ? PTR_ERR(pdev) : 0;
} }
postcore_initcall(omap3_l3_init); postcore_initcall(omap3_l3_init);
...@@ -74,7 +74,7 @@ static int __init omap4_l3_init(void) ...@@ -74,7 +74,7 @@ static int __init omap4_l3_init(void)
{ {
int l, i; int l, i;
struct omap_hwmod *oh[3]; struct omap_hwmod *oh[3];
struct omap_device *od; struct platform_device *pdev;
char oh_name[L3_MODULES_MAX_LEN]; char oh_name[L3_MODULES_MAX_LEN];
/* /*
...@@ -92,12 +92,12 @@ static int __init omap4_l3_init(void) ...@@ -92,12 +92,12 @@ static int __init omap4_l3_init(void)
pr_err("could not look up %s\n", oh_name); pr_err("could not look up %s\n", oh_name);
} }
od = omap_device_build_ss("omap_l3_noc", 0, oh, 3, NULL, pdev = omap_device_build_ss("omap_l3_noc", 0, oh, 3, NULL,
0, NULL, 0, 0); 0, NULL, 0, 0);
WARN(IS_ERR(od), "could not build omap_device for %s\n", oh_name); WARN(IS_ERR(pdev), "could not build omap_device for %s\n", oh_name);
return IS_ERR(od) ? PTR_ERR(od) : 0; return IS_ERR(pdev) ? PTR_ERR(pdev) : 0;
} }
postcore_initcall(omap4_l3_init); postcore_initcall(omap4_l3_init);
...@@ -232,7 +232,7 @@ struct omap_device_pm_latency omap_keyboard_latency[] = { ...@@ -232,7 +232,7 @@ struct omap_device_pm_latency omap_keyboard_latency[] = {
int __init omap4_keyboard_init(struct omap4_keypad_platform_data int __init omap4_keyboard_init(struct omap4_keypad_platform_data
*sdp4430_keypad_data, struct omap_board_data *bdata) *sdp4430_keypad_data, struct omap_board_data *bdata)
{ {
struct omap_device *od; struct platform_device *pdev;
struct omap_hwmod *oh; struct omap_hwmod *oh;
struct omap4_keypad_platform_data *keypad_data; struct omap4_keypad_platform_data *keypad_data;
unsigned int id = -1; unsigned int id = -1;
...@@ -247,15 +247,15 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data ...@@ -247,15 +247,15 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data
keypad_data = sdp4430_keypad_data; keypad_data = sdp4430_keypad_data;
od = omap_device_build(name, id, oh, keypad_data, pdev = omap_device_build(name, id, oh, keypad_data,
sizeof(struct omap4_keypad_platform_data), sizeof(struct omap4_keypad_platform_data),
omap_keyboard_latency, omap_keyboard_latency,
ARRAY_SIZE(omap_keyboard_latency), 0); ARRAY_SIZE(omap_keyboard_latency), 0);
if (IS_ERR(od)) { if (IS_ERR(pdev)) {
WARN(1, "Can't build omap_device for %s:%s.\n", WARN(1, "Can't build omap_device for %s:%s.\n",
name, oh->name); name, oh->name);
return PTR_ERR(od); return PTR_ERR(pdev);
} }
oh->mux = omap_hwmod_mux_init(bdata->pads, bdata->pads_cnt); oh->mux = omap_hwmod_mux_init(bdata->pads, bdata->pads_cnt);
...@@ -274,7 +274,7 @@ static struct omap_device_pm_latency mbox_latencies[] = { ...@@ -274,7 +274,7 @@ static struct omap_device_pm_latency mbox_latencies[] = {
static inline void omap_init_mbox(void) static inline void omap_init_mbox(void)
{ {
struct omap_hwmod *oh; struct omap_hwmod *oh;
struct omap_device *od; struct platform_device *pdev;
oh = omap_hwmod_lookup("mailbox"); oh = omap_hwmod_lookup("mailbox");
if (!oh) { if (!oh) {
...@@ -282,10 +282,10 @@ static inline void omap_init_mbox(void) ...@@ -282,10 +282,10 @@ static inline void omap_init_mbox(void)
return; return;
} }
od = omap_device_build("omap-mailbox", -1, oh, NULL, 0, pdev = omap_device_build("omap-mailbox", -1, oh, NULL, 0,
mbox_latencies, ARRAY_SIZE(mbox_latencies), 0); mbox_latencies, ARRAY_SIZE(mbox_latencies), 0);
WARN(IS_ERR(od), "%s: could not build device, err %ld\n", WARN(IS_ERR(pdev), "%s: could not build device, err %ld\n",
__func__, PTR_ERR(od)); __func__, PTR_ERR(pdev));
} }
#else #else
static inline void omap_init_mbox(void) { } static inline void omap_init_mbox(void) { }
...@@ -344,7 +344,7 @@ struct omap_device_pm_latency omap_mcspi_latency[] = { ...@@ -344,7 +344,7 @@ struct omap_device_pm_latency omap_mcspi_latency[] = {
static int omap_mcspi_init(struct omap_hwmod *oh, void *unused) static int omap_mcspi_init(struct omap_hwmod *oh, void *unused)
{ {
struct omap_device *od; struct platform_device *pdev;
char *name = "omap2_mcspi"; char *name = "omap2_mcspi";
struct omap2_mcspi_platform_config *pdata; struct omap2_mcspi_platform_config *pdata;
static int spi_num; static int spi_num;
...@@ -371,10 +371,10 @@ static int omap_mcspi_init(struct omap_hwmod *oh, void *unused) ...@@ -371,10 +371,10 @@ static int omap_mcspi_init(struct omap_hwmod *oh, void *unused)
} }
spi_num++; spi_num++;
od = omap_device_build(name, spi_num, oh, pdata, pdev = omap_device_build(name, spi_num, oh, pdata,
sizeof(*pdata), omap_mcspi_latency, sizeof(*pdata), omap_mcspi_latency,
ARRAY_SIZE(omap_mcspi_latency), 0); ARRAY_SIZE(omap_mcspi_latency), 0);
WARN(IS_ERR(od), "Can't build omap_device for %s:%s\n", WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s\n",
name, oh->name); name, oh->name);
kfree(pdata); kfree(pdata);
return 0; return 0;
...@@ -709,7 +709,7 @@ static struct omap_device_pm_latency omap_wdt_latency[] = { ...@@ -709,7 +709,7 @@ static struct omap_device_pm_latency omap_wdt_latency[] = {
static int __init omap_init_wdt(void) static int __init omap_init_wdt(void)
{ {
int id = -1; int id = -1;
struct omap_device *od; struct platform_device *pdev;
struct omap_hwmod *oh; struct omap_hwmod *oh;
char *oh_name = "wd_timer2"; char *oh_name = "wd_timer2";
char *dev_name = "omap_wdt"; char *dev_name = "omap_wdt";
...@@ -723,10 +723,10 @@ static int __init omap_init_wdt(void) ...@@ -723,10 +723,10 @@ static int __init omap_init_wdt(void)
return -EINVAL; return -EINVAL;
} }
od = omap_device_build(dev_name, id, oh, NULL, 0, pdev = omap_device_build(dev_name, id, oh, NULL, 0,
omap_wdt_latency, omap_wdt_latency,
ARRAY_SIZE(omap_wdt_latency), 0); ARRAY_SIZE(omap_wdt_latency), 0);
WARN(IS_ERR(od), "Can't build omap_device for %s:%s.\n", WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s.\n",
dev_name, oh->name); dev_name, oh->name);
return 0; return 0;
} }
......
...@@ -78,7 +78,7 @@ int __init omap_display_init(struct omap_dss_board_info *board_data) ...@@ -78,7 +78,7 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
{ {
int r = 0; int r = 0;
struct omap_hwmod *oh; struct omap_hwmod *oh;
struct omap_device *od; struct platform_device *pdev;
int i, oh_count; int i, oh_count;
struct omap_display_platform_data pdata; struct omap_display_platform_data pdata;
const struct omap_dss_hwmod_data *curr_dss_hwmod; const struct omap_dss_hwmod_data *curr_dss_hwmod;
...@@ -108,13 +108,13 @@ int __init omap_display_init(struct omap_dss_board_info *board_data) ...@@ -108,13 +108,13 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
return -ENODEV; return -ENODEV;
} }
od = omap_device_build(curr_dss_hwmod[i].dev_name, pdev = omap_device_build(curr_dss_hwmod[i].dev_name,
curr_dss_hwmod[i].id, oh, &pdata, curr_dss_hwmod[i].id, oh, &pdata,
sizeof(struct omap_display_platform_data), sizeof(struct omap_display_platform_data),
omap_dss_latency, omap_dss_latency,
ARRAY_SIZE(omap_dss_latency), 0); ARRAY_SIZE(omap_dss_latency), 0);
if (WARN((IS_ERR(od)), "Could not build omap_device for %s\n", if (WARN((IS_ERR(pdev)), "Could not build omap_device for %s\n",
curr_dss_hwmod[i].oh_name)) curr_dss_hwmod[i].oh_name))
return -ENODEV; return -ENODEV;
} }
......
...@@ -228,7 +228,7 @@ static u32 configure_dma_errata(void) ...@@ -228,7 +228,7 @@ static u32 configure_dma_errata(void)
/* One time initializations */ /* One time initializations */
static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused)
{ {
struct omap_device *od; struct platform_device *pdev;
struct omap_system_dma_plat_info *p; struct omap_system_dma_plat_info *p;
struct resource *mem; struct resource *mem;
char *name = "omap_dma_system"; char *name = "omap_dma_system";
...@@ -258,23 +258,23 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) ...@@ -258,23 +258,23 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused)
p->errata = configure_dma_errata(); p->errata = configure_dma_errata();
od = omap_device_build(name, 0, oh, p, sizeof(*p), pdev = omap_device_build(name, 0, oh, p, sizeof(*p),
omap2_dma_latency, ARRAY_SIZE(omap2_dma_latency), 0); omap2_dma_latency, ARRAY_SIZE(omap2_dma_latency), 0);
kfree(p); kfree(p);
if (IS_ERR(od)) { if (IS_ERR(pdev)) {
pr_err("%s: Can't build omap_device for %s:%s.\n", pr_err("%s: Can't build omap_device for %s:%s.\n",
__func__, name, oh->name); __func__, name, oh->name);
return PTR_ERR(od); return PTR_ERR(pdev);
} }
mem = platform_get_resource(&od->pdev, IORESOURCE_MEM, 0); mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!mem) { if (!mem) {
dev_err(&od->pdev.dev, "%s: no mem resource\n", __func__); dev_err(&pdev->dev, "%s: no mem resource\n", __func__);
return -EINVAL; return -EINVAL;
} }
dma_base = ioremap(mem->start, resource_size(mem)); dma_base = ioremap(mem->start, resource_size(mem));
if (!dma_base) { if (!dma_base) {
dev_err(&od->pdev.dev, "%s: ioremap fail\n", __func__); dev_err(&pdev->dev, "%s: ioremap fail\n", __func__);
return -ENOMEM; return -ENOMEM;
} }
...@@ -283,7 +283,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) ...@@ -283,7 +283,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused)
(d->lch_count), GFP_KERNEL); (d->lch_count), GFP_KERNEL);
if (!d->chan) { if (!d->chan) {
dev_err(&od->pdev.dev, "%s: kzalloc fail\n", __func__); dev_err(&pdev->dev, "%s: kzalloc fail\n", __func__);
return -ENOMEM; return -ENOMEM;
} }
return 0; return 0;
......
...@@ -34,7 +34,7 @@ static struct omap_device_pm_latency omap_gpio_latency[] = { ...@@ -34,7 +34,7 @@ static struct omap_device_pm_latency omap_gpio_latency[] = {
static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
{ {
struct omap_device *od; struct platform_device *pdev;
struct omap_gpio_platform_data *pdata; struct omap_gpio_platform_data *pdata;
struct omap_gpio_dev_attr *dev_attr; struct omap_gpio_dev_attr *dev_attr;
char *name = "omap_gpio"; char *name = "omap_gpio";
...@@ -107,19 +107,19 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) ...@@ -107,19 +107,19 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
return -EINVAL; return -EINVAL;
} }
od = omap_device_build(name, id - 1, oh, pdata, pdev = omap_device_build(name, id - 1, oh, pdata,
sizeof(*pdata), omap_gpio_latency, sizeof(*pdata), omap_gpio_latency,
ARRAY_SIZE(omap_gpio_latency), ARRAY_SIZE(omap_gpio_latency),
false); false);
kfree(pdata); kfree(pdata);
if (IS_ERR(od)) { if (IS_ERR(pdev)) {
WARN(1, "Can't build omap_device for %s:%s.\n", WARN(1, "Can't build omap_device for %s:%s.\n",
name, oh->name); name, oh->name);
return PTR_ERR(od); return PTR_ERR(pdev);
} }
omap_device_disable_idle_on_suspend(od); omap_device_disable_idle_on_suspend(pdev);
gpio_bank_count++; gpio_bank_count++;
return 0; return 0;
......
...@@ -426,7 +426,7 @@ static struct omap_device_pm_latency omap_hsmmc_latency[] = { ...@@ -426,7 +426,7 @@ static struct omap_device_pm_latency omap_hsmmc_latency[] = {
void __init omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr) void __init omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr)
{ {
struct omap_hwmod *oh; struct omap_hwmod *oh;
struct omap_device *od; struct platform_device *pdev;
struct omap_device_pm_latency *ohl; struct omap_device_pm_latency *ohl;
char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN]; char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN];
struct omap_mmc_platform_data *mmc_data; struct omap_mmc_platform_data *mmc_data;
...@@ -467,9 +467,9 @@ void __init omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr) ...@@ -467,9 +467,9 @@ void __init omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr)
mmc_data->controller_flags = mmc_dev_attr->flags; mmc_data->controller_flags = mmc_dev_attr->flags;
} }
od = omap_device_build(name, ctrl_nr - 1, oh, mmc_data, pdev = omap_device_build(name, ctrl_nr - 1, oh, mmc_data,
sizeof(struct omap_mmc_platform_data), ohl, ohl_cnt, false); sizeof(struct omap_mmc_platform_data), ohl, ohl_cnt, false);
if (IS_ERR(od)) { if (IS_ERR(pdev)) {
WARN(1, "Can't build omap_device for %s:%s.\n", name, oh->name); WARN(1, "Can't build omap_device for %s:%s.\n", name, oh->name);
kfree(mmc_data->slots[0].name); kfree(mmc_data->slots[0].name);
goto done; goto done;
...@@ -478,7 +478,7 @@ void __init omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr) ...@@ -478,7 +478,7 @@ void __init omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr)
* return device handle to board setup code * return device handle to board setup code
* required to populate for regulator framework structure * required to populate for regulator framework structure
*/ */
hsmmcinfo->dev = &od->pdev.dev; hsmmcinfo->dev = &pdev->dev;
done: done:
kfree(mmc_data); kfree(mmc_data);
......
...@@ -35,7 +35,7 @@ int __init hwspinlocks_init(void) ...@@ -35,7 +35,7 @@ int __init hwspinlocks_init(void)
{ {
int retval = 0; int retval = 0;
struct omap_hwmod *oh; struct omap_hwmod *oh;
struct omap_device *od; struct platform_device *pdev;
const char *oh_name = "spinlock"; const char *oh_name = "spinlock";
const char *dev_name = "omap_hwspinlock"; const char *dev_name = "omap_hwspinlock";
...@@ -48,13 +48,13 @@ int __init hwspinlocks_init(void) ...@@ -48,13 +48,13 @@ int __init hwspinlocks_init(void)
if (oh == NULL) if (oh == NULL)
return -EINVAL; return -EINVAL;
od = omap_device_build(dev_name, 0, oh, NULL, 0, pdev = omap_device_build(dev_name, 0, oh, NULL, 0,
omap_spinlock_latency, omap_spinlock_latency,
ARRAY_SIZE(omap_spinlock_latency), false); ARRAY_SIZE(omap_spinlock_latency), false);
if (IS_ERR(od)) { if (IS_ERR(pdev)) {
pr_err("Can't build omap_device for %s:%s\n", dev_name, pr_err("Can't build omap_device for %s:%s\n", dev_name,
oh_name); oh_name);
retval = PTR_ERR(od); retval = PTR_ERR(pdev);
} }
return retval; return retval;
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
#include "control.h" #include "control.h"
static struct omap_chip_id omap_chip;
static unsigned int omap_revision; static unsigned int omap_revision;
u32 omap_features; u32 omap_features;
...@@ -39,19 +38,6 @@ unsigned int omap_rev(void) ...@@ -39,19 +38,6 @@ unsigned int omap_rev(void)
} }
EXPORT_SYMBOL(omap_rev); EXPORT_SYMBOL(omap_rev);
/**
* omap_chip_is - test whether currently running OMAP matches a chip type
* @oc: omap_chip_t to test against
*
* Test whether the currently-running OMAP chip matches the supplied
* chip type 'oc'. Returns 1 upon a match; 0 upon failure.
*/
int omap_chip_is(struct omap_chip_id oci)
{
return (oci.oc & omap_chip.oc) ? 1 : 0;
}
EXPORT_SYMBOL(omap_chip_is);
int omap_type(void) int omap_type(void)
{ {
u32 val = 0; u32 val = 0;
...@@ -242,14 +228,12 @@ static void __init ti816x_check_features(void) ...@@ -242,14 +228,12 @@ static void __init ti816x_check_features(void)
omap_features = OMAP3_HAS_NEON; omap_features = OMAP3_HAS_NEON;
} }
static void __init omap3_check_revision(void) static void __init omap3_check_revision(const char **cpu_rev)
{ {
u32 cpuid, idcode; u32 cpuid, idcode;
u16 hawkeye; u16 hawkeye;
u8 rev; u8 rev;
omap_chip.oc = CHIP_IS_OMAP3430;
/* /*
* We cannot access revision registers on ES1.0. * We cannot access revision registers on ES1.0.
* If the processor type is Cortex-A8 and the revision is 0x0 * If the processor type is Cortex-A8 and the revision is 0x0
...@@ -258,7 +242,7 @@ static void __init omap3_check_revision(void) ...@@ -258,7 +242,7 @@ static void __init omap3_check_revision(void)
cpuid = read_cpuid(CPUID_ID); cpuid = read_cpuid(CPUID_ID);
if ((((cpuid >> 4) & 0xfff) == 0xc08) && ((cpuid & 0xf) == 0x0)) { if ((((cpuid >> 4) & 0xfff) == 0xc08) && ((cpuid & 0xf) == 0x0)) {
omap_revision = OMAP3430_REV_ES1_0; omap_revision = OMAP3430_REV_ES1_0;
omap_chip.oc |= CHIP_IS_OMAP3430ES1; *cpu_rev = "1.0";
return; return;
} }
...@@ -279,77 +263,85 @@ static void __init omap3_check_revision(void) ...@@ -279,77 +263,85 @@ static void __init omap3_check_revision(void)
case 0: /* Take care of early samples */ case 0: /* Take care of early samples */
case 1: case 1:
omap_revision = OMAP3430_REV_ES2_0; omap_revision = OMAP3430_REV_ES2_0;
omap_chip.oc |= CHIP_IS_OMAP3430ES2; *cpu_rev = "2.0";
break; break;
case 2: case 2:
omap_revision = OMAP3430_REV_ES2_1; omap_revision = OMAP3430_REV_ES2_1;
omap_chip.oc |= CHIP_IS_OMAP3430ES2; *cpu_rev = "2.1";
break; break;
case 3: case 3:
omap_revision = OMAP3430_REV_ES3_0; omap_revision = OMAP3430_REV_ES3_0;
omap_chip.oc |= CHIP_IS_OMAP3430ES3_0; *cpu_rev = "3.0";
break; break;
case 4: case 4:
omap_revision = OMAP3430_REV_ES3_1; omap_revision = OMAP3430_REV_ES3_1;
omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; *cpu_rev = "3.1";
break; break;
case 7: case 7:
/* FALLTHROUGH */ /* FALLTHROUGH */
default: default:
/* Use the latest known revision as default */ /* Use the latest known revision as default */
omap_revision = OMAP3430_REV_ES3_1_2; omap_revision = OMAP3430_REV_ES3_1_2;
*cpu_rev = "3.1.2";
/* REVISIT: Add CHIP_IS_OMAP3430ES3_1_2? */
omap_chip.oc |= CHIP_IS_OMAP3430ES3_1;
} }
break; break;
case 0xb868: case 0xb868:
/* Handle OMAP35xx/AM35xx devices /*
* Handle OMAP/AM 3505/3517 devices
* *
* Set the device to be OMAP3505 here. Actual device * Set the device to be OMAP3517 here. Actual device
* is identified later based on the features. * is identified later based on the features.
*
* REVISIT: AM3505/AM3517 should have their own CHIP_IS
*/ */
omap_revision = OMAP3505_REV(rev); switch (rev) {
omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; case 0:
omap_revision = OMAP3517_REV_ES1_0;
*cpu_rev = "1.0";
break;
case 1:
/* FALLTHROUGH */
default:
omap_revision = OMAP3517_REV_ES1_1;
*cpu_rev = "1.1";
}
break; break;
case 0xb891: case 0xb891:
/* Handle 36xx devices */ /* Handle 36xx devices */
omap_chip.oc |= CHIP_IS_OMAP3630ES1;
switch(rev) { switch(rev) {
case 0: /* Take care of early samples */ case 0: /* Take care of early samples */
omap_revision = OMAP3630_REV_ES1_0; omap_revision = OMAP3630_REV_ES1_0;
*cpu_rev = "1.0";
break; break;
case 1: case 1:
omap_revision = OMAP3630_REV_ES1_1; omap_revision = OMAP3630_REV_ES1_1;
omap_chip.oc |= CHIP_IS_OMAP3630ES1_1; *cpu_rev = "1.1";
break; break;
case 2: case 2:
/* FALLTHROUGH */
default: default:
omap_revision = OMAP3630_REV_ES1_2; omap_revision = OMAP3630_REV_ES1_2;
omap_chip.oc |= CHIP_IS_OMAP3630ES1_2; *cpu_rev = "1.2";
} }
break; break;
case 0xb81e: case 0xb81e:
omap_chip.oc = CHIP_IS_TI816X;
switch (rev) { switch (rev) {
case 0: case 0:
omap_revision = TI8168_REV_ES1_0; omap_revision = TI8168_REV_ES1_0;
*cpu_rev = "1.0";
break; break;
case 1: case 1:
/* FALLTHROUGH */
default:
omap_revision = TI8168_REV_ES1_1; omap_revision = TI8168_REV_ES1_1;
*cpu_rev = "1.1";
break; break;
default:
omap_revision = TI8168_REV_ES1_1;
} }
break; break;
default: default:
/* Unknown default to latest silicon rev as default*/ /* Unknown default to latest silicon rev as default */
omap_revision = OMAP3630_REV_ES1_2; omap_revision = OMAP3630_REV_ES1_2;
omap_chip.oc |= CHIP_IS_OMAP3630ES1_2; *cpu_rev = "1.2";
pr_warn("Warning: unknown chip type; assuming OMAP3630ES1.2\n");
} }
} }
...@@ -382,24 +374,20 @@ static void __init omap4_check_revision(void) ...@@ -382,24 +374,20 @@ static void __init omap4_check_revision(void)
switch (rev) { switch (rev) {
case 0: case 0:
omap_revision = OMAP4430_REV_ES1_0; omap_revision = OMAP4430_REV_ES1_0;
omap_chip.oc |= CHIP_IS_OMAP4430ES1;
break; break;
case 1: case 1:
default: default:
omap_revision = OMAP4430_REV_ES2_0; omap_revision = OMAP4430_REV_ES2_0;
omap_chip.oc |= CHIP_IS_OMAP4430ES2;
} }
break; break;
case 0xb95c: case 0xb95c:
switch (rev) { switch (rev) {
case 3: case 3:
omap_revision = OMAP4430_REV_ES2_1; omap_revision = OMAP4430_REV_ES2_1;
omap_chip.oc |= CHIP_IS_OMAP4430ES2_1;
break; break;
case 4: case 4:
default: default:
omap_revision = OMAP4430_REV_ES2_2; omap_revision = OMAP4430_REV_ES2_2;
omap_chip.oc |= CHIP_IS_OMAP4430ES2_2;
} }
break; break;
case 0xb94e: case 0xb94e:
...@@ -407,14 +395,12 @@ static void __init omap4_check_revision(void) ...@@ -407,14 +395,12 @@ static void __init omap4_check_revision(void)
case 0: case 0:
default: default:
omap_revision = OMAP4460_REV_ES1_0; omap_revision = OMAP4460_REV_ES1_0;
omap_chip.oc |= CHIP_IS_OMAP4460ES1_0;
break; break;
} }
break; break;
default: default:
/* Unknown default to latest silicon rev as default */ /* Unknown default to latest silicon rev as default */
omap_revision = OMAP4430_REV_ES2_2; omap_revision = OMAP4430_REV_ES2_2;
omap_chip.oc |= CHIP_IS_OMAP4430ES2_2;
} }
pr_info("OMAP%04x ES%d.%d\n", omap_rev() >> 16, pr_info("OMAP%04x ES%d.%d\n", omap_rev() >> 16,
...@@ -425,94 +411,33 @@ static void __init omap4_check_revision(void) ...@@ -425,94 +411,33 @@ static void __init omap4_check_revision(void)
if (omap3_has_ ##feat()) \ if (omap3_has_ ##feat()) \
printk(#feat" "); printk(#feat" ");
static void __init omap3_cpuinfo(void) static void __init omap3_cpuinfo(const char *cpu_rev)
{ {
u8 rev = GET_OMAP_REVISION(); const char *cpu_name;
char cpu_name[16], cpu_rev[16];
/* OMAP3430 and OMAP3530 are assumed to be same. /*
* OMAP3430 and OMAP3530 are assumed to be same.
* *
* OMAP3525, OMAP3515 and OMAP3503 can be detected only based * OMAP3525, OMAP3515 and OMAP3503 can be detected only based
* on available features. Upon detection, update the CPU id * on available features. Upon detection, update the CPU id
* and CPU class bits. * and CPU class bits.
*/ */
if (cpu_is_omap3630()) { if (cpu_is_omap3630()) {
strcpy(cpu_name, "OMAP3630"); cpu_name = "OMAP3630";
} else if (cpu_is_omap3505()) { } else if (cpu_is_omap3517()) {
/* /* AM35xx devices */
* AM35xx devices cpu_name = (omap3_has_sgx()) ? "AM3517" : "AM3505";
*/
if (omap3_has_sgx()) {
omap_revision = OMAP3517_REV(rev);
strcpy(cpu_name, "AM3517");
} else {
/* Already set in omap3_check_revision() */
strcpy(cpu_name, "AM3505");
}
} else if (cpu_is_ti816x()) { } else if (cpu_is_ti816x()) {
strcpy(cpu_name, "TI816X"); cpu_name = "TI816X";
} else if (omap3_has_iva() && omap3_has_sgx()) { } else if (omap3_has_iva() && omap3_has_sgx()) {
/* OMAP3430, OMAP3525, OMAP3515, OMAP3503 devices */ /* OMAP3430, OMAP3525, OMAP3515, OMAP3503 devices */
strcpy(cpu_name, "OMAP3430/3530"); cpu_name = "OMAP3430/3530";
} else if (omap3_has_iva()) { } else if (omap3_has_iva()) {
omap_revision = OMAP3525_REV(rev); cpu_name = "OMAP3525";
strcpy(cpu_name, "OMAP3525");
} else if (omap3_has_sgx()) { } else if (omap3_has_sgx()) {
omap_revision = OMAP3515_REV(rev); cpu_name = "OMAP3515";
strcpy(cpu_name, "OMAP3515");
} else { } else {
omap_revision = OMAP3503_REV(rev); cpu_name = "OMAP3503";
strcpy(cpu_name, "OMAP3503");
}
if (cpu_is_omap3630() || cpu_is_ti816x()) {
switch (rev) {
case OMAP_REVBITS_00:
strcpy(cpu_rev, "1.0");
break;
case OMAP_REVBITS_01:
strcpy(cpu_rev, "1.1");
break;
case OMAP_REVBITS_02:
/* FALLTHROUGH */
default:
/* Use the latest known revision as default */
strcpy(cpu_rev, "1.2");
}
} else if (cpu_is_omap3505() || cpu_is_omap3517()) {
switch (rev) {
case OMAP_REVBITS_00:
strcpy(cpu_rev, "1.0");
break;
case OMAP_REVBITS_01:
/* FALLTHROUGH */
default:
/* Use the latest known revision as default */
strcpy(cpu_rev, "1.1");
}
} else {
switch (rev) {
case OMAP_REVBITS_00:
strcpy(cpu_rev, "1.0");
break;
case OMAP_REVBITS_01:
strcpy(cpu_rev, "2.0");
break;
case OMAP_REVBITS_02:
strcpy(cpu_rev, "2.1");
break;
case OMAP_REVBITS_03:
strcpy(cpu_rev, "3.0");
break;
case OMAP_REVBITS_04:
strcpy(cpu_rev, "3.1");
break;
case OMAP_REVBITS_05:
/* FALLTHROUGH */
default:
/* Use the latest known revision as default */
strcpy(cpu_rev, "3.1.2");
}
} }
/* Print verbose information */ /* Print verbose information */
...@@ -533,6 +458,8 @@ static void __init omap3_cpuinfo(void) ...@@ -533,6 +458,8 @@ static void __init omap3_cpuinfo(void)
*/ */
void __init omap2_check_revision(void) void __init omap2_check_revision(void)
{ {
const char *cpu_rev;
/* /*
* At this point we have an idea about the processor revision set * At this point we have an idea about the processor revision set
* earlier with omap2_set_globals_tap(). * earlier with omap2_set_globals_tap().
...@@ -540,7 +467,7 @@ void __init omap2_check_revision(void) ...@@ -540,7 +467,7 @@ void __init omap2_check_revision(void)
if (cpu_is_omap24xx()) { if (cpu_is_omap24xx()) {
omap24xx_check_revision(); omap24xx_check_revision();
} else if (cpu_is_omap34xx()) { } else if (cpu_is_omap34xx()) {
omap3_check_revision(); omap3_check_revision(&cpu_rev);
/* TI816X doesn't have feature register */ /* TI816X doesn't have feature register */
if (!cpu_is_ti816x()) if (!cpu_is_ti816x())
...@@ -548,7 +475,7 @@ void __init omap2_check_revision(void) ...@@ -548,7 +475,7 @@ void __init omap2_check_revision(void)
else else
ti816x_check_features(); ti816x_check_features();
omap3_cpuinfo(); omap3_cpuinfo(cpu_rev);
return; return;
} else if (cpu_is_omap44xx()) { } else if (cpu_is_omap44xx()) {
omap4_check_revision(); omap4_check_revision();
...@@ -557,22 +484,6 @@ void __init omap2_check_revision(void) ...@@ -557,22 +484,6 @@ void __init omap2_check_revision(void)
} else { } else {
pr_err("OMAP revision unknown, please fix!\n"); pr_err("OMAP revision unknown, please fix!\n");
} }
/*
* OK, now we know the exact revision. Initialize omap_chip bits
* for powerdowmain and clockdomain code.
*/
if (cpu_is_omap243x()) {
/* Currently only supports 2430ES2.1 and 2430-all */
omap_chip.oc |= CHIP_IS_OMAP2430;
return;
} else if (cpu_is_omap242x()) {
/* Currently only supports 2420ES2.1.1 and 2420-all */
omap_chip.oc |= CHIP_IS_OMAP2420;
return;
}
pr_err("Uninitialized omap_chip, please fix!\n");
} }
/* /*
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include "io.h" #include "io.h"
#include <plat/omap-pm.h> #include <plat/omap-pm.h>
#include "voltage.h"
#include "powerdomain.h" #include "powerdomain.h"
#include "clockdomain.h" #include "clockdomain.h"
...@@ -341,18 +342,22 @@ void __init omap2_init_common_infrastructure(void) ...@@ -341,18 +342,22 @@ void __init omap2_init_common_infrastructure(void)
u8 postsetup_state; u8 postsetup_state;
if (cpu_is_omap242x()) { if (cpu_is_omap242x()) {
omap2xxx_powerdomains_init(); omap2xxx_voltagedomains_init();
omap2xxx_clockdomains_init(); omap242x_powerdomains_init();
omap242x_clockdomains_init();
omap2420_hwmod_init(); omap2420_hwmod_init();
} else if (cpu_is_omap243x()) { } else if (cpu_is_omap243x()) {
omap2xxx_powerdomains_init(); omap2xxx_voltagedomains_init();
omap2xxx_clockdomains_init(); omap243x_powerdomains_init();
omap243x_clockdomains_init();
omap2430_hwmod_init(); omap2430_hwmod_init();
} else if (cpu_is_omap34xx()) { } else if (cpu_is_omap34xx()) {
omap3xxx_voltagedomains_init();
omap3xxx_powerdomains_init(); omap3xxx_powerdomains_init();
omap3xxx_clockdomains_init(); omap3xxx_clockdomains_init();
omap3xxx_hwmod_init(); omap3xxx_hwmod_init();
} else if (cpu_is_omap44xx()) { } else if (cpu_is_omap44xx()) {
omap44xx_voltagedomains_init();
omap44xx_powerdomains_init(); omap44xx_powerdomains_init();
omap44xx_clockdomains_init(); omap44xx_clockdomains_init();
omap44xx_hwmod_init(); omap44xx_hwmod_init();
...@@ -376,7 +381,7 @@ void __init omap2_init_common_infrastructure(void) ...@@ -376,7 +381,7 @@ void __init omap2_init_common_infrastructure(void)
* omap_hwmod_late_init(), so boards that desire full watchdog * omap_hwmod_late_init(), so boards that desire full watchdog
* coverage of kernel initialization can reprogram the * coverage of kernel initialization can reprogram the
* postsetup_state between the calls to * postsetup_state between the calls to
* omap2_init_common_infra() and omap2_init_common_devices(). * omap2_init_common_infra() and omap_sdrc_init().
* *
* XXX ideally we could detect whether the MPU WDT was currently * XXX ideally we could detect whether the MPU WDT was currently
* enabled here and make this conditional * enabled here and make this conditional
...@@ -400,7 +405,47 @@ void __init omap2_init_common_infrastructure(void) ...@@ -400,7 +405,47 @@ void __init omap2_init_common_infrastructure(void)
pr_err("Could not init clock framework - unknown SoC\n"); pr_err("Could not init clock framework - unknown SoC\n");
} }
void __init omap2_init_common_devices(struct omap_sdrc_params *sdrc_cs0, void __init omap2420_init_early(void)
{
omap2_init_common_infrastructure();
}
void __init omap2430_init_early(void)
{
omap2_init_common_infrastructure();
}
void __init omap3430_init_early(void)
{
omap2_init_common_infrastructure();
}
void __init omap35xx_init_early(void)
{
omap2_init_common_infrastructure();
}
void __init omap3630_init_early(void)
{
omap2_init_common_infrastructure();
}
void __init am35xx_init_early(void)
{
omap2_init_common_infrastructure();
}
void __init ti816x_init_early(void)
{
omap2_init_common_infrastructure();
}
void __init omap4430_init_early(void)
{
omap2_init_common_infrastructure();
}
void __init omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
struct omap_sdrc_params *sdrc_cs1) struct omap_sdrc_params *sdrc_cs1)
{ {
if (cpu_is_omap24xx() || omap3_has_sdrc()) { if (cpu_is_omap24xx() || omap3_has_sdrc()) {
......
...@@ -27,66 +27,69 @@ ...@@ -27,66 +27,69 @@
#include "control.h" #include "control.h"
/* McBSP internal signal muxing functions */ /*
* FIXME: Find a mechanism to enable/disable runtime the McBSP ICLK autoidle.
* Sidetone needs non-gated ICLK and sidetone autoidle is broken.
*/
#include "cm2xxx_3xxx.h"
#include "cm-regbits-34xx.h"
void omap2_mcbsp1_mux_clkr_src(u8 mux) /* McBSP internal signal muxing function */
static int omap2_mcbsp1_mux_rx_clk(struct device *dev, const char *signal,
const char *src)
{ {
u32 v; u32 v;
v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0); v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
if (mux == CLKR_SRC_CLKR)
v &= ~OMAP2_MCBSP1_CLKR_MASK;
else if (mux == CLKR_SRC_CLKX)
v |= OMAP2_MCBSP1_CLKR_MASK;
omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0);
}
EXPORT_SYMBOL(omap2_mcbsp1_mux_clkr_src);
void omap2_mcbsp1_mux_fsr_src(u8 mux) if (!strcmp(signal, "clkr")) {
{ if (!strcmp(src, "clkr"))
u32 v; v &= ~OMAP2_MCBSP1_CLKR_MASK;
else if (!strcmp(src, "clkx"))
v |= OMAP2_MCBSP1_CLKR_MASK;
else
return -EINVAL;
} else if (!strcmp(signal, "fsr")) {
if (!strcmp(src, "fsr"))
v &= ~OMAP2_MCBSP1_FSR_MASK;
else if (!strcmp(src, "fsx"))
v |= OMAP2_MCBSP1_FSR_MASK;
else
return -EINVAL;
} else {
return -EINVAL;
}
v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
if (mux == FSR_SRC_FSR)
v &= ~OMAP2_MCBSP1_FSR_MASK;
else if (mux == FSR_SRC_FSX)
v |= OMAP2_MCBSP1_FSR_MASK;
omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0); omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0);
return 0;
} }
EXPORT_SYMBOL(omap2_mcbsp1_mux_fsr_src);
/* McBSP CLKS source switching function */ /* McBSP CLKS source switching function */
static int omap2_mcbsp_set_clk_src(struct device *dev, struct clk *clk,
int omap2_mcbsp_set_clks_src(u8 id, u8 fck_src_id) const char *src)
{ {
struct omap_mcbsp *mcbsp;
struct clk *fck_src; struct clk *fck_src;
char *fck_src_name; char *fck_src_name;
int r; int r;
if (!omap_mcbsp_check_valid_id(id)) { if (!strcmp(src, "clks_ext"))
pr_err("%s: Invalid id (%d)\n", __func__, id + 1);
return -EINVAL;
}
mcbsp = id_to_mcbsp_ptr(id);
if (fck_src_id == MCBSP_CLKS_PAD_SRC)
fck_src_name = "pad_fck"; fck_src_name = "pad_fck";
else if (fck_src_id == MCBSP_CLKS_PRCM_SRC) else if (!strcmp(src, "clks_fclk"))
fck_src_name = "prcm_fck"; fck_src_name = "prcm_fck";
else else
return -EINVAL; return -EINVAL;
fck_src = clk_get(mcbsp->dev, fck_src_name); fck_src = clk_get(dev, fck_src_name);
if (IS_ERR_OR_NULL(fck_src)) { if (IS_ERR_OR_NULL(fck_src)) {
pr_err("omap-mcbsp: %s: could not clk_get() %s\n", "clks", pr_err("omap-mcbsp: %s: could not clk_get() %s\n", "clks",
fck_src_name); fck_src_name);
return -EINVAL; return -EINVAL;
} }
pm_runtime_put_sync(mcbsp->dev); pm_runtime_put_sync(dev);
r = clk_set_parent(mcbsp->fclk, fck_src); r = clk_set_parent(clk, fck_src);
if (IS_ERR_VALUE(r)) { if (IS_ERR_VALUE(r)) {
pr_err("omap-mcbsp: %s: could not clk_set_parent() to %s\n", pr_err("omap-mcbsp: %s: could not clk_set_parent() to %s\n",
"clks", fck_src_name); "clks", fck_src_name);
...@@ -94,13 +97,30 @@ int omap2_mcbsp_set_clks_src(u8 id, u8 fck_src_id) ...@@ -94,13 +97,30 @@ int omap2_mcbsp_set_clks_src(u8 id, u8 fck_src_id)
return -EINVAL; return -EINVAL;
} }
pm_runtime_get_sync(mcbsp->dev); pm_runtime_get_sync(dev);
clk_put(fck_src); clk_put(fck_src);
return 0; return 0;
} }
EXPORT_SYMBOL(omap2_mcbsp_set_clks_src);
static int omap3_enable_st_clock(unsigned int id, bool enable)
{
unsigned int w;
/*
* Sidetone uses McBSP ICLK - which must not idle when sidetones
* are enabled or sidetones start sounding ugly.
*/
w = omap2_cm_read_mod_reg(OMAP3430_PER_MOD, CM_AUTOIDLE);
if (enable)
w &= ~(1 << (id - 2));
else
w |= 1 << (id - 2);
omap2_cm_write_mod_reg(w, OMAP3430_PER_MOD, CM_AUTOIDLE);
return 0;
}
struct omap_device_pm_latency omap2_mcbsp_latency[] = { struct omap_device_pm_latency omap2_mcbsp_latency[] = {
{ {
...@@ -116,7 +136,7 @@ static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused) ...@@ -116,7 +136,7 @@ static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused)
char *name = "omap-mcbsp"; char *name = "omap-mcbsp";
struct omap_hwmod *oh_device[2]; struct omap_hwmod *oh_device[2];
struct omap_mcbsp_platform_data *pdata = NULL; struct omap_mcbsp_platform_data *pdata = NULL;
struct omap_device *od; struct platform_device *pdev;
sscanf(oh->name, "mcbsp%d", &id); sscanf(oh->name, "mcbsp%d", &id);
...@@ -126,7 +146,13 @@ static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused) ...@@ -126,7 +146,13 @@ static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused)
return -ENOMEM; return -ENOMEM;
} }
pdata->mcbsp_config_type = oh->class->rev; pdata->reg_step = 4;
if (oh->class->rev < MCBSP_CONFIG_TYPE2) {
pdata->reg_size = 2;
} else {
pdata->reg_size = 4;
pdata->has_ccr = true;
}
if (oh->class->rev == MCBSP_CONFIG_TYPE3) { if (oh->class->rev == MCBSP_CONFIG_TYPE3) {
if (id == 2) if (id == 2)
...@@ -137,22 +163,29 @@ static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused) ...@@ -137,22 +163,29 @@ static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused)
pdata->buffer_size = 0x80; pdata->buffer_size = 0x80;
} }
if (oh->class->rev >= MCBSP_CONFIG_TYPE3)
pdata->has_wakeup = true;
oh_device[0] = oh; oh_device[0] = oh;
if (oh->dev_attr) { if (oh->dev_attr) {
oh_device[1] = omap_hwmod_lookup(( oh_device[1] = omap_hwmod_lookup((
(struct omap_mcbsp_dev_attr *)(oh->dev_attr))->sidetone); (struct omap_mcbsp_dev_attr *)(oh->dev_attr))->sidetone);
pdata->enable_st_clock = omap3_enable_st_clock;
count++; count++;
} }
od = omap_device_build_ss(name, id, oh_device, count, pdata, pdev = omap_device_build_ss(name, id, oh_device, count, pdata,
sizeof(*pdata), omap2_mcbsp_latency, sizeof(*pdata), omap2_mcbsp_latency,
ARRAY_SIZE(omap2_mcbsp_latency), false); ARRAY_SIZE(omap2_mcbsp_latency), false);
kfree(pdata); kfree(pdata);
if (IS_ERR(od)) { if (IS_ERR(pdev)) {
pr_err("%s: Can't build omap_device for %s:%s.\n", __func__, pr_err("%s: Can't build omap_device for %s:%s.\n", __func__,
name, oh->name); name, oh->name);
return PTR_ERR(od); return PTR_ERR(pdev);
} }
pdata->set_clk_src = omap2_mcbsp_set_clk_src;
if (id == 1)
pdata->mux_signal = omap2_mcbsp1_mux_rx_clk;
omap_mcbsp_count++; omap_mcbsp_count++;
return 0; return 0;
} }
......
...@@ -1954,9 +1954,6 @@ int __init omap_hwmod_register(struct omap_hwmod **ohs) ...@@ -1954,9 +1954,6 @@ int __init omap_hwmod_register(struct omap_hwmod **ohs)
i = 0; i = 0;
do { do {
if (!omap_chip_is(ohs[i]->omap_chip))
continue;
r = _register(ohs[i]); r = _register(ohs[i]);
WARN(r, "omap_hwmod: %s: _register returned %d\n", ohs[i]->name, WARN(r, "omap_hwmod: %s: _register returned %d\n", ohs[i]->name,
r); r);
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册