Commit 21ace545 authored by Paul Walmsley's avatar Paul Walmsley

Merge remote branches 'remotes/origin/pwrdm_clkdm_b_2.6.39',...

Merge remote branches 'remotes/origin/pwrdm_clkdm_b_2.6.39', 'remotes/origin/pwrdm_add_can_lose_context_fns_2.6.39', 'remotes/origin/omap_device_a_2.6.39', 'remotes/origin/mmc_a_2.6.39', 'remotes/origin/hwmod_b_2.6.39', 'remotes/origin/dmtimer_a_2.6.39', 'remotes/origin/pwrdm_clkdm_a_2.6.39', 'remotes/origin/clkdm_statdep_omap4_2.6.39', 'remotes/origin/clk_a_2.6.39', 'remotes/origin/clk_autoidle_a_2.6.39', 'remotes/origin/clk_autoidle_b_2.6.39', 'remotes/origin/clk_b_2.6.39', 'remotes/origin/clk_clkdm_a_2.6.39', 'remotes/origin/misc_a_2.6.39', 'remotes/origin/for_2.6.39/omap3_hwmod_data' and 'remotes/origin/wdtimer_a_2.6.39' into tmp-integration-2.6.39-20110310-024
This diff is collapsed.
...@@ -4496,6 +4496,16 @@ L: linux-omap@vger.kernel.org ...@@ -4496,6 +4496,16 @@ L: linux-omap@vger.kernel.org
S: Maintained S: Maintained
F: arch/arm/*omap*/*pm* F: arch/arm/*omap*/*pm*
OMAP POWERDOMAIN/CLOCKDOMAIN SOC ADAPTATION LAYER SUPPORT
M: Rajendra Nayak <rnayak@ti.com>
M: Paul Walmsley <paul@pwsan.com>
L: linux-omap@vger.kernel.org
S: Maintained
F: arch/arm/mach-omap2/powerdomain2xxx_3xxx.c
F: arch/arm/mach-omap2/powerdomain44xx.c
F: arch/arm/mach-omap2/clockdomain2xxx_3xxx.c
F: arch/arm/mach-omap2/clockdomain44xx.c
OMAP AUDIO SUPPORT OMAP AUDIO SUPPORT
M: Jarkko Nikula <jhnikula@gmail.com> M: Jarkko Nikula <jhnikula@gmail.com>
L: alsa-devel@alsa-project.org (subscribers-only) L: alsa-devel@alsa-project.org (subscribers-only)
......
...@@ -58,6 +58,7 @@ CONFIG_ARM_ERRATA_411920=y ...@@ -58,6 +58,7 @@ CONFIG_ARM_ERRATA_411920=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
CONFIG_SMP=y CONFIG_SMP=y
CONFIG_NR_CPUS=2
# CONFIG_LOCAL_TIMERS is not set # CONFIG_LOCAL_TIMERS is not set
CONFIG_AEABI=y CONFIG_AEABI=y
CONFIG_LEDS=y CONFIG_LEDS=y
......
...@@ -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 obj-y += clock.o clock_data.o opp_data.o reset.o
obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
......
...@@ -165,7 +165,7 @@ static struct map_desc ams_delta_io_desc[] __initdata = { ...@@ -165,7 +165,7 @@ static struct map_desc ams_delta_io_desc[] __initdata = {
} }
}; };
static struct omap_lcd_config ams_delta_lcd_config __initdata = { static struct omap_lcd_config ams_delta_lcd_config = {
.ctrl_name = "internal", .ctrl_name = "internal",
}; };
...@@ -175,7 +175,7 @@ static struct omap_usb_config ams_delta_usb_config __initdata = { ...@@ -175,7 +175,7 @@ static struct omap_usb_config ams_delta_usb_config __initdata = {
.pins[0] = 2, .pins[0] = 2,
}; };
static struct omap_board_config_kernel ams_delta_config[] = { static struct omap_board_config_kernel ams_delta_config[] __initdata = {
{ OMAP_TAG_LCD, &ams_delta_lcd_config }, { OMAP_TAG_LCD, &ams_delta_lcd_config },
}; };
...@@ -208,14 +208,14 @@ static const struct matrix_keymap_data ams_delta_keymap_data = { ...@@ -208,14 +208,14 @@ static const struct matrix_keymap_data ams_delta_keymap_data = {
.keymap_size = ARRAY_SIZE(ams_delta_keymap), .keymap_size = ARRAY_SIZE(ams_delta_keymap),
}; };
static struct omap_kp_platform_data ams_delta_kp_data = { static struct omap_kp_platform_data ams_delta_kp_data __initdata = {
.rows = 8, .rows = 8,
.cols = 8, .cols = 8,
.keymap_data = &ams_delta_keymap_data, .keymap_data = &ams_delta_keymap_data,
.delay = 9, .delay = 9,
}; };
static struct platform_device ams_delta_kp_device = { static struct platform_device ams_delta_kp_device __initdata = {
.name = "omap-keypad", .name = "omap-keypad",
.id = -1, .id = -1,
.dev = { .dev = {
...@@ -225,12 +225,12 @@ static struct platform_device ams_delta_kp_device = { ...@@ -225,12 +225,12 @@ static struct platform_device ams_delta_kp_device = {
.resource = ams_delta_kp_resources, .resource = ams_delta_kp_resources,
}; };
static struct platform_device ams_delta_lcd_device = { static struct platform_device ams_delta_lcd_device __initdata = {
.name = "lcd_ams_delta", .name = "lcd_ams_delta",
.id = -1, .id = -1,
}; };
static struct platform_device ams_delta_led_device = { static struct platform_device ams_delta_led_device __initdata = {
.name = "ams-delta-led", .name = "ams-delta-led",
.id = -1 .id = -1
}; };
...@@ -259,7 +259,7 @@ static int ams_delta_camera_power(struct device *dev, int power) ...@@ -259,7 +259,7 @@ static int ams_delta_camera_power(struct device *dev, int power)
#define ams_delta_camera_power NULL #define ams_delta_camera_power NULL
#endif #endif
static struct soc_camera_link __initdata ams_delta_iclink = { static struct soc_camera_link ams_delta_iclink = {
.bus_id = 0, /* OMAP1 SoC camera bus */ .bus_id = 0, /* OMAP1 SoC camera bus */
.i2c_adapter_id = 1, .i2c_adapter_id = 1,
.board_info = &ams_delta_camera_board_info[0], .board_info = &ams_delta_camera_board_info[0],
...@@ -267,7 +267,7 @@ static struct soc_camera_link __initdata ams_delta_iclink = { ...@@ -267,7 +267,7 @@ static struct soc_camera_link __initdata ams_delta_iclink = {
.power = ams_delta_camera_power, .power = ams_delta_camera_power,
}; };
static struct platform_device ams_delta_camera_device = { static struct platform_device ams_delta_camera_device __initdata = {
.name = "soc-camera-pdrv", .name = "soc-camera-pdrv",
.id = 0, .id = 0,
.dev = { .dev = {
......
...@@ -287,11 +287,11 @@ static struct platform_device *devices[] __initdata = { ...@@ -287,11 +287,11 @@ static struct platform_device *devices[] __initdata = {
&lcd_device, &lcd_device,
}; };
static struct omap_lcd_config fsample_lcd_config __initdata = { static struct omap_lcd_config fsample_lcd_config = {
.ctrl_name = "internal", .ctrl_name = "internal",
}; };
static struct omap_board_config_kernel fsample_config[] = { static struct omap_board_config_kernel fsample_config[] __initdata = {
{ OMAP_TAG_LCD, &fsample_lcd_config }, { OMAP_TAG_LCD, &fsample_lcd_config },
}; };
......
...@@ -202,7 +202,7 @@ static int h2_nand_dev_ready(struct mtd_info *mtd) ...@@ -202,7 +202,7 @@ static int h2_nand_dev_ready(struct mtd_info *mtd)
static const char *h2_part_probes[] = { "cmdlinepart", NULL }; static const char *h2_part_probes[] = { "cmdlinepart", NULL };
struct platform_nand_data h2_nand_platdata = { static struct platform_nand_data h2_nand_platdata = {
.chip = { .chip = {
.nr_chips = 1, .nr_chips = 1,
.chip_offset = 0, .chip_offset = 0,
......
...@@ -204,7 +204,7 @@ static int nand_dev_ready(struct mtd_info *mtd) ...@@ -204,7 +204,7 @@ static int nand_dev_ready(struct mtd_info *mtd)
static const char *part_probes[] = { "cmdlinepart", NULL }; static const char *part_probes[] = { "cmdlinepart", NULL };
struct platform_nand_data nand_platdata = { static struct platform_nand_data nand_platdata = {
.chip = { .chip = {
.nr_chips = 1, .nr_chips = 1,
.chip_offset = 0, .chip_offset = 0,
......
...@@ -331,7 +331,7 @@ static struct resource htcpld_resources[] = { ...@@ -331,7 +331,7 @@ static struct resource htcpld_resources[] = {
}, },
}; };
struct htcpld_chip_platform_data htcpld_chips[] = { static struct htcpld_chip_platform_data htcpld_chips[] = {
[0] = { [0] = {
.addr = 0x03, .addr = 0x03,
.reset = 0x04, .reset = 0x04,
...@@ -366,7 +366,7 @@ struct htcpld_chip_platform_data htcpld_chips[] = { ...@@ -366,7 +366,7 @@ struct htcpld_chip_platform_data htcpld_chips[] = {
}, },
}; };
struct htcpld_core_platform_data htcpld_pfdata = { static struct htcpld_core_platform_data htcpld_pfdata = {
.int_reset_gpio_hi = HTCPLD_GPIO_INT_RESET_HI, .int_reset_gpio_hi = HTCPLD_GPIO_INT_RESET_HI,
.int_reset_gpio_lo = HTCPLD_GPIO_INT_RESET_LO, .int_reset_gpio_lo = HTCPLD_GPIO_INT_RESET_LO,
.i2c_adapter_id = 1, .i2c_adapter_id = 1,
......
...@@ -365,7 +365,7 @@ static struct omap_mmc_platform_data mmc1_data = { ...@@ -365,7 +365,7 @@ static struct omap_mmc_platform_data mmc1_data = {
static struct omap_mmc_platform_data *mmc_data[OMAP16XX_NR_MMC]; static struct omap_mmc_platform_data *mmc_data[OMAP16XX_NR_MMC];
void __init innovator_mmc_init(void) static void __init innovator_mmc_init(void)
{ {
mmc_data[0] = &mmc1_data; mmc_data[0] = &mmc1_data;
omap1_init_mmc(mmc_data, OMAP15XX_NR_MMC); omap1_init_mmc(mmc_data, OMAP15XX_NR_MMC);
......
...@@ -115,7 +115,7 @@ static struct mipid_platform_data nokia770_mipid_platform_data = { ...@@ -115,7 +115,7 @@ static struct mipid_platform_data nokia770_mipid_platform_data = {
.shutdown = mipid_shutdown, .shutdown = mipid_shutdown,
}; };
static void mipid_dev_init(void) static void __init mipid_dev_init(void)
{ {
const struct omap_lcd_config *conf; const struct omap_lcd_config *conf;
...@@ -126,7 +126,7 @@ static void mipid_dev_init(void) ...@@ -126,7 +126,7 @@ static void mipid_dev_init(void)
} }
} }
static void ads7846_dev_init(void) static void __init ads7846_dev_init(void)
{ {
if (gpio_request(ADS7846_PENDOWN_GPIO, "ADS7846 pendown") < 0) if (gpio_request(ADS7846_PENDOWN_GPIO, "ADS7846 pendown") < 0)
printk(KERN_ERR "can't get ads7846 pen down GPIO\n"); printk(KERN_ERR "can't get ads7846 pen down GPIO\n");
...@@ -170,7 +170,7 @@ static struct hwa742_platform_data nokia770_hwa742_platform_data = { ...@@ -170,7 +170,7 @@ static struct hwa742_platform_data nokia770_hwa742_platform_data = {
.te_connected = 1, .te_connected = 1,
}; };
static void hwa742_dev_init(void) static void __init hwa742_dev_init(void)
{ {
clk_add_alias("hwa_sys_ck", NULL, "bclk", NULL); clk_add_alias("hwa_sys_ck", NULL, "bclk", NULL);
omapfb_set_ctrl_platform_data(&nokia770_hwa742_platform_data); omapfb_set_ctrl_platform_data(&nokia770_hwa742_platform_data);
......
...@@ -230,19 +230,6 @@ static struct spi_board_info palmte_spi_info[] __initdata = { ...@@ -230,19 +230,6 @@ static struct spi_board_info palmte_spi_info[] __initdata = {
}, },
}; };
static void palmte_headphones_detect(void *data, int state)
{
if (state) {
/* Headphones connected, disable speaker */
gpio_set_value(PALMTE_SPEAKER_GPIO, 0);
printk(KERN_INFO "PM: speaker off\n");
} else {
/* Headphones unplugged, re-enable speaker */
gpio_set_value(PALMTE_SPEAKER_GPIO, 1);
printk(KERN_INFO "PM: speaker on\n");
}
}
static void __init palmte_misc_gpio_setup(void) static void __init palmte_misc_gpio_setup(void)
{ {
/* Set TSC2102 PINTDAV pin as input (used by TSC2102 driver) */ /* Set TSC2102 PINTDAV pin as input (used by TSC2102 driver) */
......
...@@ -26,10 +26,12 @@ ...@@ -26,10 +26,12 @@
#include <linux/smc91x.h> #include <linux/smc91x.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/system.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <plat/board-voiceblue.h>
#include <plat/common.h> #include <plat/common.h>
#include <mach/gpio.h> #include <mach/gpio.h>
#include <plat/flash.h> #include <plat/flash.h>
...@@ -163,52 +165,6 @@ static void __init voiceblue_init_irq(void) ...@@ -163,52 +165,6 @@ static void __init voiceblue_init_irq(void)
omap_init_irq(); omap_init_irq();
} }
static void __init voiceblue_init(void)
{
/* mux pins for uarts */
omap_cfg_reg(UART1_TX);
omap_cfg_reg(UART1_RTS);
omap_cfg_reg(UART2_TX);
omap_cfg_reg(UART2_RTS);
omap_cfg_reg(UART3_TX);
omap_cfg_reg(UART3_RX);
/* Watchdog */
gpio_request(0, "Watchdog");
/* smc91x reset */
gpio_request(7, "SMC91x reset");
gpio_direction_output(7, 1);
udelay(2); /* wait at least 100ns */
gpio_set_value(7, 0);
mdelay(50); /* 50ms until PHY ready */
/* smc91x interrupt pin */
gpio_request(8, "SMC91x irq");
/* 16C554 reset*/
gpio_request(6, "16C554 reset");
gpio_direction_output(6, 0);
/* 16C554 interrupt pins */
gpio_request(12, "16C554 irq");
gpio_request(13, "16C554 irq");
gpio_request(14, "16C554 irq");
gpio_request(15, "16C554 irq");
set_irq_type(gpio_to_irq(12), IRQ_TYPE_EDGE_RISING);
set_irq_type(gpio_to_irq(13), IRQ_TYPE_EDGE_RISING);
set_irq_type(gpio_to_irq(14), IRQ_TYPE_EDGE_RISING);
set_irq_type(gpio_to_irq(15), IRQ_TYPE_EDGE_RISING);
platform_add_devices(voiceblue_devices, ARRAY_SIZE(voiceblue_devices));
omap_board_config = voiceblue_config;
omap_board_config_size = ARRAY_SIZE(voiceblue_config);
omap_serial_init();
omap1_usb_init(&voiceblue_usb_config);
omap_register_i2c_bus(1, 100, NULL, 0);
/* There is a good chance board is going up, so enable power LED
* (it is connected through invertor) */
omap_writeb(0x00, OMAP_LPG1_LCR);
omap_writeb(0x00, OMAP_LPG1_PMR); /* Disable clock */
}
static void __init voiceblue_map_io(void) static void __init voiceblue_map_io(void)
{ {
omap1_map_common_io(); omap1_map_common_io();
...@@ -275,8 +231,17 @@ void voiceblue_wdt_ping(void) ...@@ -275,8 +231,17 @@ void voiceblue_wdt_ping(void)
gpio_set_value(0, wdt_gpio_state); gpio_set_value(0, wdt_gpio_state);
} }
void voiceblue_reset(void) static void voiceblue_reset(char mode, const char *cmd)
{ {
/*
* Workaround for 5912/1611b bug mentioned in sprz209d.pdf p. 28
* "Global Software Reset Affects Traffic Controller Frequency".
*/
if (cpu_is_omap5912()) {
omap_writew(omap_readw(DPLL_CTL) & ~(1 << 4), DPLL_CTL);
omap_writew(0x8, ARM_RSTCT1);
}
set_bit(MACHINE_REBOOT, &machine_state); set_bit(MACHINE_REBOOT, &machine_state);
voiceblue_wdt_enable(); voiceblue_wdt_enable();
while (1) ; while (1) ;
...@@ -286,6 +251,54 @@ EXPORT_SYMBOL(voiceblue_wdt_enable); ...@@ -286,6 +251,54 @@ EXPORT_SYMBOL(voiceblue_wdt_enable);
EXPORT_SYMBOL(voiceblue_wdt_disable); EXPORT_SYMBOL(voiceblue_wdt_disable);
EXPORT_SYMBOL(voiceblue_wdt_ping); EXPORT_SYMBOL(voiceblue_wdt_ping);
static void __init voiceblue_init(void)
{
/* mux pins for uarts */
omap_cfg_reg(UART1_TX);
omap_cfg_reg(UART1_RTS);
omap_cfg_reg(UART2_TX);
omap_cfg_reg(UART2_RTS);
omap_cfg_reg(UART3_TX);
omap_cfg_reg(UART3_RX);
/* Watchdog */
gpio_request(0, "Watchdog");
/* smc91x reset */
gpio_request(7, "SMC91x reset");
gpio_direction_output(7, 1);
udelay(2); /* wait at least 100ns */
gpio_set_value(7, 0);
mdelay(50); /* 50ms until PHY ready */
/* smc91x interrupt pin */
gpio_request(8, "SMC91x irq");
/* 16C554 reset*/
gpio_request(6, "16C554 reset");
gpio_direction_output(6, 0);
/* 16C554 interrupt pins */
gpio_request(12, "16C554 irq");
gpio_request(13, "16C554 irq");
gpio_request(14, "16C554 irq");
gpio_request(15, "16C554 irq");
set_irq_type(gpio_to_irq(12), IRQ_TYPE_EDGE_RISING);
set_irq_type(gpio_to_irq(13), IRQ_TYPE_EDGE_RISING);
set_irq_type(gpio_to_irq(14), IRQ_TYPE_EDGE_RISING);
set_irq_type(gpio_to_irq(15), IRQ_TYPE_EDGE_RISING);
platform_add_devices(voiceblue_devices, ARRAY_SIZE(voiceblue_devices));
omap_board_config = voiceblue_config;
omap_board_config_size = ARRAY_SIZE(voiceblue_config);
omap_serial_init();
omap1_usb_init(&voiceblue_usb_config);
omap_register_i2c_bus(1, 100, NULL, 0);
/* There is a good chance board is going up, so enable power LED
* (it is connected through invertor) */
omap_writeb(0x00, OMAP_LPG1_LCR);
omap_writeb(0x00, OMAP_LPG1_PMR); /* Disable clock */
arch_reset = voiceblue_reset;
}
MACHINE_START(VOICEBLUE, "VoiceBlue OMAP5910") MACHINE_START(VOICEBLUE, "VoiceBlue OMAP5910")
/* Maintainer: Ladislav Michl <michl@2n.cz> */ /* Maintainer: Ladislav Michl <michl@2n.cz> */
.boot_params = 0x10000100, .boot_params = 0x10000100,
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
* *
* Multichannel mode not supported. * Multichannel mode not supported.
*/ */
#include <linux/ioport.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/clk.h> #include <linux/clk.h>
...@@ -78,100 +79,294 @@ static struct omap_mcbsp_ops omap1_mcbsp_ops = { ...@@ -78,100 +79,294 @@ static struct omap_mcbsp_ops omap1_mcbsp_ops = {
}; };
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850) #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
struct resource omap7xx_mcbsp_res[][6] = {
{
{
.start = OMAP7XX_MCBSP1_BASE,
.end = OMAP7XX_MCBSP1_BASE + SZ_256,
.flags = IORESOURCE_MEM,
},
{
.name = "rx",
.start = INT_7XX_McBSP1RX,
.flags = IORESOURCE_IRQ,
},
{
.name = "tx",
.start = INT_7XX_McBSP1TX,
.flags = IORESOURCE_IRQ,
},
{
.name = "rx",
.start = OMAP_DMA_MCBSP1_RX,
.flags = IORESOURCE_DMA,
},
{
.name = "tx",
.start = OMAP_DMA_MCBSP1_TX,
.flags = IORESOURCE_DMA,
},
},
{
{
.start = OMAP7XX_MCBSP2_BASE,
.end = OMAP7XX_MCBSP2_BASE + SZ_256,
.flags = IORESOURCE_MEM,
},
{
.name = "rx",
.start = INT_7XX_McBSP2RX,
.flags = IORESOURCE_IRQ,
},
{
.name = "tx",
.start = INT_7XX_McBSP2TX,
.flags = IORESOURCE_IRQ,
},
{
.name = "rx",
.start = OMAP_DMA_MCBSP3_RX,
.flags = IORESOURCE_DMA,
},
{
.name = "tx",
.start = OMAP_DMA_MCBSP3_TX,
.flags = IORESOURCE_DMA,
},
},
};
#define omap7xx_mcbsp_res_0 omap7xx_mcbsp_res[0]
static struct omap_mcbsp_platform_data omap7xx_mcbsp_pdata[] = { static struct omap_mcbsp_platform_data omap7xx_mcbsp_pdata[] = {
{ {
.phys_base = OMAP7XX_MCBSP1_BASE,
.dma_rx_sync = OMAP_DMA_MCBSP1_RX,
.dma_tx_sync = OMAP_DMA_MCBSP1_TX,
.rx_irq = INT_7XX_McBSP1RX,
.tx_irq = INT_7XX_McBSP1TX,
.ops = &omap1_mcbsp_ops, .ops = &omap1_mcbsp_ops,
}, },
{ {
.phys_base = OMAP7XX_MCBSP2_BASE,
.dma_rx_sync = OMAP_DMA_MCBSP3_RX,
.dma_tx_sync = OMAP_DMA_MCBSP3_TX,
.rx_irq = INT_7XX_McBSP2RX,
.tx_irq = INT_7XX_McBSP2TX,
.ops = &omap1_mcbsp_ops, .ops = &omap1_mcbsp_ops,
}, },
}; };
#define OMAP7XX_MCBSP_PDATA_SZ ARRAY_SIZE(omap7xx_mcbsp_pdata) #define OMAP7XX_MCBSP_RES_SZ ARRAY_SIZE(omap7xx_mcbsp_res[1])
#define OMAP7XX_MCBSP_REG_NUM (OMAP_MCBSP_REG_XCERH / sizeof(u16) + 1) #define OMAP7XX_MCBSP_COUNT ARRAY_SIZE(omap7xx_mcbsp_res)
#else #else
#define omap7xx_mcbsp_res_0 NULL
#define omap7xx_mcbsp_pdata NULL #define omap7xx_mcbsp_pdata NULL
#define OMAP7XX_MCBSP_PDATA_SZ 0 #define OMAP7XX_MCBSP_RES_SZ 0
#define OMAP7XX_MCBSP_REG_NUM 0 #define OMAP7XX_MCBSP_COUNT 0
#endif #endif
#ifdef CONFIG_ARCH_OMAP15XX #ifdef CONFIG_ARCH_OMAP15XX
struct resource omap15xx_mcbsp_res[][6] = {
{
{
.start = OMAP1510_MCBSP1_BASE,
.end = OMAP1510_MCBSP1_BASE + SZ_256,
.flags = IORESOURCE_MEM,
},
{
.name = "rx",
.start = INT_McBSP1RX,
.flags = IORESOURCE_IRQ,
},
{
.name = "tx",
.start = INT_McBSP1TX,
.flags = IORESOURCE_IRQ,
},
{
.name = "rx",
.start = OMAP_DMA_MCBSP1_RX,
.flags = IORESOURCE_DMA,
},
{
.name = "tx",
.start = OMAP_DMA_MCBSP1_TX,
.flags = IORESOURCE_DMA,
},
},
{
{
.start = OMAP1510_MCBSP2_BASE,
.end = OMAP1510_MCBSP2_BASE + SZ_256,
.flags = IORESOURCE_MEM,
},
{
.name = "rx",
.start = INT_1510_SPI_RX,
.flags = IORESOURCE_IRQ,
},
{
.name = "tx",
.start = INT_1510_SPI_TX,
.flags = IORESOURCE_IRQ,
},
{
.name = "rx",
.start = OMAP_DMA_MCBSP2_RX,
.flags = IORESOURCE_DMA,
},
{
.name = "tx",
.start = OMAP_DMA_MCBSP2_TX,
.flags = IORESOURCE_DMA,
},
},
{
{
.start = OMAP1510_MCBSP3_BASE,
.end = OMAP1510_MCBSP3_BASE + SZ_256,
.flags = IORESOURCE_MEM,
},
{
.name = "rx",
.start = INT_McBSP3RX,
.flags = IORESOURCE_IRQ,
},
{
.name = "tx",
.start = INT_McBSP3TX,
.flags = IORESOURCE_IRQ,
},
{
.name = "rx",
.start = OMAP_DMA_MCBSP3_RX,
.flags = IORESOURCE_DMA,
},
{
.name = "tx",
.start = OMAP_DMA_MCBSP3_TX,
.flags = IORESOURCE_DMA,
},
},
};
#define omap15xx_mcbsp_res_0 omap15xx_mcbsp_res[0]
static struct omap_mcbsp_platform_data omap15xx_mcbsp_pdata[] = { static struct omap_mcbsp_platform_data omap15xx_mcbsp_pdata[] = {
{ {
.phys_base = OMAP1510_MCBSP1_BASE,
.dma_rx_sync = OMAP_DMA_MCBSP1_RX,
.dma_tx_sync = OMAP_DMA_MCBSP1_TX,
.rx_irq = INT_McBSP1RX,
.tx_irq = INT_McBSP1TX,
.ops = &omap1_mcbsp_ops, .ops = &omap1_mcbsp_ops,
}, },
{ {
.phys_base = OMAP1510_MCBSP2_BASE,
.dma_rx_sync = OMAP_DMA_MCBSP2_RX,
.dma_tx_sync = OMAP_DMA_MCBSP2_TX,
.rx_irq = INT_1510_SPI_RX,
.tx_irq = INT_1510_SPI_TX,
.ops = &omap1_mcbsp_ops, .ops = &omap1_mcbsp_ops,
}, },
{ {
.phys_base = OMAP1510_MCBSP3_BASE,
.dma_rx_sync = OMAP_DMA_MCBSP3_RX,
.dma_tx_sync = OMAP_DMA_MCBSP3_TX,
.rx_irq = INT_McBSP3RX,
.tx_irq = INT_McBSP3TX,
.ops = &omap1_mcbsp_ops, .ops = &omap1_mcbsp_ops,
}, },
}; };
#define OMAP15XX_MCBSP_PDATA_SZ ARRAY_SIZE(omap15xx_mcbsp_pdata) #define OMAP15XX_MCBSP_RES_SZ ARRAY_SIZE(omap15xx_mcbsp_res[1])
#define OMAP15XX_MCBSP_REG_NUM (OMAP_MCBSP_REG_XCERH / sizeof(u16) + 1) #define OMAP15XX_MCBSP_COUNT ARRAY_SIZE(omap15xx_mcbsp_res)
#else #else
#define omap15xx_mcbsp_res_0 NULL
#define omap15xx_mcbsp_pdata NULL #define omap15xx_mcbsp_pdata NULL
#define OMAP15XX_MCBSP_PDATA_SZ 0 #define OMAP15XX_MCBSP_RES_SZ 0
#define OMAP15XX_MCBSP_REG_NUM 0 #define OMAP15XX_MCBSP_COUNT 0
#endif #endif
#ifdef CONFIG_ARCH_OMAP16XX #ifdef CONFIG_ARCH_OMAP16XX
struct resource omap16xx_mcbsp_res[][6] = {
{
{
.start = OMAP1610_MCBSP1_BASE,
.end = OMAP1610_MCBSP1_BASE + SZ_256,
.flags = IORESOURCE_MEM,
},
{
.name = "rx",
.start = INT_McBSP1RX,
.flags = IORESOURCE_IRQ,
},
{
.name = "tx",
.start = INT_McBSP1TX,
.flags = IORESOURCE_IRQ,
},
{
.name = "rx",
.start = OMAP_DMA_MCBSP1_RX,
.flags = IORESOURCE_DMA,
},
{
.name = "tx",
.start = OMAP_DMA_MCBSP1_TX,
.flags = IORESOURCE_DMA,
},
},
{
{
.start = OMAP1610_MCBSP2_BASE,
.end = OMAP1610_MCBSP2_BASE + SZ_256,
.flags = IORESOURCE_MEM,
},
{
.name = "rx",
.start = INT_1610_McBSP2_RX,
.flags = IORESOURCE_IRQ,
},
{
.name = "tx",
.start = INT_1610_McBSP2_TX,
.flags = IORESOURCE_IRQ,
},
{
.name = "rx",
.start = OMAP_DMA_MCBSP2_RX,
.flags = IORESOURCE_DMA,
},
{
.name = "tx",
.start = OMAP_DMA_MCBSP2_TX,
.flags = IORESOURCE_DMA,
},
},
{
{
.start = OMAP1610_MCBSP3_BASE,
.end = OMAP1610_MCBSP3_BASE + SZ_256,
.flags = IORESOURCE_MEM,
},
{
.name = "rx",
.start = INT_McBSP3RX,
.flags = IORESOURCE_IRQ,
},
{
.name = "tx",
.start = INT_McBSP3TX,
.flags = IORESOURCE_IRQ,
},
{
.name = "rx",
.start = OMAP_DMA_MCBSP3_RX,
.flags = IORESOURCE_DMA,
},
{
.name = "tx",
.start = OMAP_DMA_MCBSP3_TX,
.flags = IORESOURCE_DMA,
},
},
};
#define omap16xx_mcbsp_res_0 omap16xx_mcbsp_res[0]
static struct omap_mcbsp_platform_data omap16xx_mcbsp_pdata[] = { static struct omap_mcbsp_platform_data omap16xx_mcbsp_pdata[] = {
{ {
.phys_base = OMAP1610_MCBSP1_BASE,
.dma_rx_sync = OMAP_DMA_MCBSP1_RX,
.dma_tx_sync = OMAP_DMA_MCBSP1_TX,
.rx_irq = INT_McBSP1RX,
.tx_irq = INT_McBSP1TX,
.ops = &omap1_mcbsp_ops, .ops = &omap1_mcbsp_ops,
}, },
{ {
.phys_base = OMAP1610_MCBSP2_BASE,
.dma_rx_sync = OMAP_DMA_MCBSP2_RX,
.dma_tx_sync = OMAP_DMA_MCBSP2_TX,
.rx_irq = INT_1610_McBSP2_RX,
.tx_irq = INT_1610_McBSP2_TX,
.ops = &omap1_mcbsp_ops, .ops = &omap1_mcbsp_ops,
}, },
{ {
.phys_base = OMAP1610_MCBSP3_BASE,
.dma_rx_sync = OMAP_DMA_MCBSP3_RX,
.dma_tx_sync = OMAP_DMA_MCBSP3_TX,
.rx_irq = INT_McBSP3RX,
.tx_irq = INT_McBSP3TX,
.ops = &omap1_mcbsp_ops, .ops = &omap1_mcbsp_ops,
}, },
}; };
#define OMAP16XX_MCBSP_PDATA_SZ ARRAY_SIZE(omap16xx_mcbsp_pdata) #define OMAP16XX_MCBSP_RES_SZ ARRAY_SIZE(omap16xx_mcbsp_res[1])
#define OMAP16XX_MCBSP_REG_NUM (OMAP_MCBSP_REG_XCERH / sizeof(u16) + 1) #define OMAP16XX_MCBSP_COUNT ARRAY_SIZE(omap16xx_mcbsp_res)
#else #else
#define omap16xx_mcbsp_res_0 NULL
#define omap16xx_mcbsp_pdata NULL #define omap16xx_mcbsp_pdata NULL
#define OMAP16XX_MCBSP_PDATA_SZ 0 #define OMAP16XX_MCBSP_RES_SZ 0
#define OMAP16XX_MCBSP_REG_NUM 0 #define OMAP16XX_MCBSP_COUNT 0
#endif #endif
static int __init omap1_mcbsp_init(void) static int __init omap1_mcbsp_init(void)
...@@ -179,16 +374,12 @@ static int __init omap1_mcbsp_init(void) ...@@ -179,16 +374,12 @@ static int __init omap1_mcbsp_init(void)
if (!cpu_class_is_omap1()) if (!cpu_class_is_omap1())
return -ENODEV; return -ENODEV;
if (cpu_is_omap7xx()) { if (cpu_is_omap7xx())
omap_mcbsp_count = OMAP7XX_MCBSP_PDATA_SZ; omap_mcbsp_count = OMAP7XX_MCBSP_COUNT;
omap_mcbsp_cache_size = OMAP7XX_MCBSP_REG_NUM * sizeof(u16); else if (cpu_is_omap15xx())
} else if (cpu_is_omap15xx()) { omap_mcbsp_count = OMAP15XX_MCBSP_COUNT;
omap_mcbsp_count = OMAP15XX_MCBSP_PDATA_SZ; else if (cpu_is_omap16xx())
omap_mcbsp_cache_size = OMAP15XX_MCBSP_REG_NUM * sizeof(u16); omap_mcbsp_count = OMAP16XX_MCBSP_COUNT;
} else if (cpu_is_omap16xx()) {
omap_mcbsp_count = OMAP16XX_MCBSP_PDATA_SZ;
omap_mcbsp_cache_size = OMAP16XX_MCBSP_REG_NUM * sizeof(u16);
}
mcbsp_ptr = kzalloc(omap_mcbsp_count * sizeof(struct omap_mcbsp *), mcbsp_ptr = kzalloc(omap_mcbsp_count * sizeof(struct omap_mcbsp *),
GFP_KERNEL); GFP_KERNEL);
...@@ -196,16 +387,22 @@ static int __init omap1_mcbsp_init(void) ...@@ -196,16 +387,22 @@ static int __init omap1_mcbsp_init(void)
return -ENOMEM; return -ENOMEM;
if (cpu_is_omap7xx()) if (cpu_is_omap7xx())
omap_mcbsp_register_board_cfg(omap7xx_mcbsp_pdata, omap_mcbsp_register_board_cfg(omap7xx_mcbsp_res_0,
OMAP7XX_MCBSP_PDATA_SZ); OMAP7XX_MCBSP_RES_SZ,
omap7xx_mcbsp_pdata,
OMAP7XX_MCBSP_COUNT);
if (cpu_is_omap15xx()) if (cpu_is_omap15xx())
omap_mcbsp_register_board_cfg(omap15xx_mcbsp_pdata, omap_mcbsp_register_board_cfg(omap15xx_mcbsp_res_0,
OMAP15XX_MCBSP_PDATA_SZ); OMAP15XX_MCBSP_RES_SZ,
omap15xx_mcbsp_pdata,
OMAP15XX_MCBSP_COUNT);
if (cpu_is_omap16xx()) if (cpu_is_omap16xx())
omap_mcbsp_register_board_cfg(omap16xx_mcbsp_pdata, omap_mcbsp_register_board_cfg(omap16xx_mcbsp_res_0,
OMAP16XX_MCBSP_PDATA_SZ); OMAP16XX_MCBSP_RES_SZ,
omap16xx_mcbsp_pdata,
OMAP16XX_MCBSP_COUNT);
return omap_mcbsp_init(); return omap_mcbsp_init();
} }
......
/*
* OMAP1 reset support
*/
#include <linux/kernel.h>
#include <linux/io.h>
#include <mach/hardware.h>
#include <mach/system.h>
#include <plat/prcm.h>
void omap1_arch_reset(char mode, const char *cmd)
{
/*
* Workaround for 5912/1611b bug mentioned in sprz209d.pdf p. 28
* "Global Software Reset Affects Traffic Controller Frequency".
*/
if (cpu_is_omap5912()) {
omap_writew(omap_readw(DPLL_CTL) & ~(1 << 4), DPLL_CTL);
omap_writew(0x8, ARM_RSTCT1);
}
omap_writew(1, ARM_RSTCT1);
}
void (*arch_reset)(char, const char *) = omap1_arch_reset;
...@@ -53,25 +53,30 @@ config ARCH_OMAP4 ...@@ -53,25 +53,30 @@ config ARCH_OMAP4
comment "OMAP Core Type" comment "OMAP Core Type"
depends on ARCH_OMAP2 depends on ARCH_OMAP2
config ARCH_OMAP2420 config SOC_OMAP2420
bool "OMAP2420 support" bool "OMAP2420 support"
depends on ARCH_OMAP2 depends on ARCH_OMAP2
default y default y
select OMAP_DM_TIMER select OMAP_DM_TIMER
select ARCH_OMAP_OTG select ARCH_OMAP_OTG
config ARCH_OMAP2430 config SOC_OMAP2430
bool "OMAP2430 support" bool "OMAP2430 support"
depends on ARCH_OMAP2 depends on ARCH_OMAP2
default y default y
select ARCH_OMAP_OTG select ARCH_OMAP_OTG
config ARCH_OMAP3430 config SOC_OMAP3430
bool "OMAP3430 support" bool "OMAP3430 support"
depends on ARCH_OMAP3 depends on ARCH_OMAP3
default y default y
select ARCH_OMAP_OTG select ARCH_OMAP_OTG
config SOC_OMAPTI816X
bool "TI816X support"
depends on ARCH_OMAP3
default y
config OMAP_PACKAGE_ZAF config OMAP_PACKAGE_ZAF
bool bool
...@@ -106,25 +111,25 @@ config MACH_OMAP_GENERIC ...@@ -106,25 +111,25 @@ config MACH_OMAP_GENERIC
config MACH_OMAP2_TUSB6010 config MACH_OMAP2_TUSB6010
bool bool
depends on ARCH_OMAP2 && ARCH_OMAP2420 depends on ARCH_OMAP2 && SOC_OMAP2420
default y if MACH_NOKIA_N8X0 default y if MACH_NOKIA_N8X0
config MACH_OMAP_H4 config MACH_OMAP_H4
bool "OMAP 2420 H4 board" bool "OMAP 2420 H4 board"
depends on ARCH_OMAP2420 depends on SOC_OMAP2420
default y default y
select OMAP_PACKAGE_ZAF select OMAP_PACKAGE_ZAF
select OMAP_DEBUG_DEVICES select OMAP_DEBUG_DEVICES
config MACH_OMAP_APOLLON config MACH_OMAP_APOLLON
bool "OMAP 2420 Apollon board" bool "OMAP 2420 Apollon board"
depends on ARCH_OMAP2420 depends on SOC_OMAP2420
default y default y
select OMAP_PACKAGE_ZAC select OMAP_PACKAGE_ZAC
config MACH_OMAP_2430SDP config MACH_OMAP_2430SDP
bool "OMAP 2430 SDP board" bool "OMAP 2430 SDP board"
depends on ARCH_OMAP2430 depends on SOC_OMAP2430
default y default y
select OMAP_PACKAGE_ZAC select OMAP_PACKAGE_ZAC
...@@ -219,7 +224,7 @@ config MACH_NOKIA_N810_WIMAX ...@@ -219,7 +224,7 @@ config MACH_NOKIA_N810_WIMAX
config MACH_NOKIA_N8X0 config MACH_NOKIA_N8X0
bool "Nokia N800/N810" bool "Nokia N800/N810"
depends on ARCH_OMAP2420 depends on SOC_OMAP2420
default y default y
select OMAP_PACKAGE_ZAC select OMAP_PACKAGE_ZAC
select MACH_NOKIA_N800 select MACH_NOKIA_N800
...@@ -294,12 +299,18 @@ config MACH_OMAP_3630SDP ...@@ -294,12 +299,18 @@ config MACH_OMAP_3630SDP
default y default y
select OMAP_PACKAGE_CBP select OMAP_PACKAGE_CBP
config MACH_TI8168EVM
bool "TI8168 Evaluation Module"
depends on SOC_OMAPTI816X
default y
config MACH_OMAP_4430SDP config MACH_OMAP_4430SDP
bool "OMAP 4430 SDP board" bool "OMAP 4430 SDP board"
default y default y
depends on ARCH_OMAP4 depends on ARCH_OMAP4
select OMAP_PACKAGE_CBL select OMAP_PACKAGE_CBL
select OMAP_PACKAGE_CBS select OMAP_PACKAGE_CBS
select REGULATOR_FIXED_VOLTAGE
config MACH_OMAP4_PANDA config MACH_OMAP4_PANDA
bool "OMAP4 Panda Board" bool "OMAP4 Panda Board"
...@@ -307,6 +318,7 @@ config MACH_OMAP4_PANDA ...@@ -307,6 +318,7 @@ config MACH_OMAP4_PANDA
depends on ARCH_OMAP4 depends on ARCH_OMAP4
select OMAP_PACKAGE_CBL select OMAP_PACKAGE_CBL
select OMAP_PACKAGE_CBS select OMAP_PACKAGE_CBS
select REGULATOR_FIXED_VOLTAGE
config OMAP3_EMU config OMAP3_EMU
bool "OMAP3 debugging peripherals" bool "OMAP3 debugging peripherals"
......
...@@ -31,8 +31,8 @@ AFLAGS_omap-headsmp.o :=-Wa,-march=armv7-a$(plus_sec) ...@@ -31,8 +31,8 @@ AFLAGS_omap-headsmp.o :=-Wa,-march=armv7-a$(plus_sec)
AFLAGS_omap44xx-smc.o :=-Wa,-march=armv7-a$(plus_sec) AFLAGS_omap44xx-smc.o :=-Wa,-march=armv7-a$(plus_sec)
# Functions loaded to SRAM # Functions loaded to SRAM
obj-$(CONFIG_ARCH_OMAP2420) += sram242x.o obj-$(CONFIG_SOC_OMAP2420) += sram242x.o
obj-$(CONFIG_ARCH_OMAP2430) += sram243x.o obj-$(CONFIG_SOC_OMAP2430) += sram243x.o
obj-$(CONFIG_ARCH_OMAP3) += sram34xx.o obj-$(CONFIG_ARCH_OMAP3) += sram34xx.o
AFLAGS_sram242x.o :=-Wa,-march=armv6 AFLAGS_sram242x.o :=-Wa,-march=armv6
...@@ -40,8 +40,8 @@ AFLAGS_sram243x.o :=-Wa,-march=armv6 ...@@ -40,8 +40,8 @@ AFLAGS_sram243x.o :=-Wa,-march=armv6
AFLAGS_sram34xx.o :=-Wa,-march=armv7-a AFLAGS_sram34xx.o :=-Wa,-march=armv7-a
# Pin multiplexing # Pin multiplexing
obj-$(CONFIG_ARCH_OMAP2420) += mux2420.o obj-$(CONFIG_SOC_OMAP2420) += mux2420.o
obj-$(CONFIG_ARCH_OMAP2430) += mux2430.o obj-$(CONFIG_SOC_OMAP2430) += mux2430.o
obj-$(CONFIG_ARCH_OMAP3) += mux34xx.o obj-$(CONFIG_ARCH_OMAP3) += mux34xx.o
obj-$(CONFIG_ARCH_OMAP4) += mux44xx.o obj-$(CONFIG_ARCH_OMAP4) += mux44xx.o
...@@ -102,39 +102,49 @@ obj-$(CONFIG_ARCH_OMAP4) += $(powerdomain-common) \ ...@@ -102,39 +102,49 @@ obj-$(CONFIG_ARCH_OMAP4) += $(powerdomain-common) \
# PRCM clockdomain control # PRCM clockdomain control
obj-$(CONFIG_ARCH_OMAP2) += clockdomain.o \ obj-$(CONFIG_ARCH_OMAP2) += clockdomain.o \
clockdomain2xxx_3xxx.o \
clockdomains2xxx_3xxx_data.o clockdomains2xxx_3xxx_data.o
obj-$(CONFIG_ARCH_OMAP3) += clockdomain.o \ obj-$(CONFIG_ARCH_OMAP3) += clockdomain.o \
clockdomain2xxx_3xxx.o \
clockdomains2xxx_3xxx_data.o clockdomains2xxx_3xxx_data.o
obj-$(CONFIG_ARCH_OMAP4) += clockdomain.o \ obj-$(CONFIG_ARCH_OMAP4) += clockdomain.o \
clockdomain44xx.o \
clockdomains44xx_data.o clockdomains44xx_data.o
# Clock framework # Clock framework
obj-$(CONFIG_ARCH_OMAP2) += $(clock-common) clock2xxx.o \ obj-$(CONFIG_ARCH_OMAP2) += $(clock-common) clock2xxx.o \
clkt2xxx_sys.o \ clkt2xxx_sys.o \
clkt2xxx_dpllcore.o \ clkt2xxx_dpllcore.o \
clkt2xxx_virt_prcm_set.o \ clkt2xxx_virt_prcm_set.o \
clkt2xxx_apll.o clkt2xxx_osc.o clkt2xxx_apll.o clkt2xxx_osc.o \
obj-$(CONFIG_ARCH_OMAP2420) += clock2420_data.o clkt2xxx_dpll.o clkt_iclk.o
obj-$(CONFIG_ARCH_OMAP2430) += clock2430.o clock2430_data.o obj-$(CONFIG_SOC_OMAP2420) += clock2420_data.o
obj-$(CONFIG_SOC_OMAP2430) += clock2430.o clock2430_data.o
obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) clock3xxx.o \ obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) clock3xxx.o \
clock34xx.o clkt34xx_dpll3m2.o \ clock34xx.o clkt34xx_dpll3m2.o \
clock3517.o clock36xx.o \ clock3517.o clock36xx.o \
dpll3xxx.o clock3xxx_data.o dpll3xxx.o clock3xxx_data.o \
clkt_iclk.o
obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) clock44xx_data.o \ obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) clock44xx_data.o \
dpll3xxx.o dpll3xxx.o dpll44xx.o
# OMAP2 clock rate set data (old "OPP" data) # OMAP2 clock rate set data (old "OPP" data)
obj-$(CONFIG_ARCH_OMAP2420) += opp2420_data.o obj-$(CONFIG_SOC_OMAP2420) += opp2420_data.o
obj-$(CONFIG_ARCH_OMAP2430) += opp2430_data.o obj-$(CONFIG_SOC_OMAP2430) += opp2430_data.o
# hwmod data # hwmod data
obj-$(CONFIG_ARCH_OMAP2420) += omap_hwmod_2420_data.o obj-$(CONFIG_SOC_OMAP2420) += omap_hwmod_2420_data.o
obj-$(CONFIG_ARCH_OMAP2430) += omap_hwmod_2430_data.o obj-$(CONFIG_SOC_OMAP2430) += omap_hwmod_2430_data.o
obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_3xxx_data.o obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_3xxx_data.o
obj-$(CONFIG_ARCH_OMAP4) += omap_hwmod_44xx_data.o obj-$(CONFIG_ARCH_OMAP4) += omap_hwmod_44xx_data.o
# EMU peripherals # EMU peripherals
obj-$(CONFIG_OMAP3_EMU) += emu.o obj-$(CONFIG_OMAP3_EMU) += emu.o
# L3 interconnect
obj-$(CONFIG_ARCH_OMAP3) += omap_l3_smx.o
obj-$(CONFIG_ARCH_OMAP4) += omap_l3_noc.o
obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox_mach.o obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox_mach.o
mailbox_mach-objs := mailbox.o mailbox_mach-objs := mailbox.o
...@@ -218,12 +228,14 @@ obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ ...@@ -218,12 +228,14 @@ obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \
hsmmc.o \ hsmmc.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 \
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 hsmmc.o
obj-$(CONFIG_MACH_TI8168EVM) += board-ti8168evm.o
# Platform specific device init code # Platform specific device init code
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)
...@@ -242,3 +254,7 @@ obj-y += $(smc91x-m) $(smc91x-y) ...@@ -242,3 +254,7 @@ obj-y += $(smc91x-m) $(smc91x-y)
smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o
obj-y += $(smsc911x-m) $(smsc911x-y) obj-y += $(smsc911x-m) $(smsc911x-y)
obj-$(CONFIG_ARCH_OMAP4) += hwspinlock.o
disp-$(CONFIG_OMAP2_DSS) := display.o
obj-y += $(disp-m) $(disp-y)
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/mmc/host.h> #include <linux/mmc/host.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/i2c/twl.h> #include <linux/i2c/twl.h>
#include <linux/regulator/machine.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/io.h> #include <linux/io.h>
...@@ -139,15 +140,31 @@ static struct omap_board_config_kernel sdp2430_config[] __initdata = { ...@@ -139,15 +140,31 @@ 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_irq(void) static void __init omap_2430sdp_init_early(void)
{ {
omap_board_config = sdp2430_config;
omap_board_config_size = ARRAY_SIZE(sdp2430_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL); omap2_init_common_devices(NULL, NULL);
omap_init_irq();
} }
static struct regulator_consumer_supply sdp2430_vmmc1_supplies[] = {
REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
};
/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
static struct regulator_init_data sdp2430_vmmc1 = {
.constraints = {
.min_uV = 1850000,
.max_uV = 3150000,
.valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
| REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS,
},
.num_consumer_supplies = ARRAY_SIZE(sdp2430_vmmc1_supplies),
.consumer_supplies = &sdp2430_vmmc1_supplies[0],
};
static struct twl4030_gpio_platform_data sdp2430_gpio_data = { static struct twl4030_gpio_platform_data sdp2430_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,
...@@ -160,6 +177,7 @@ static struct twl4030_platform_data sdp2430_twldata = { ...@@ -160,6 +177,7 @@ static struct twl4030_platform_data sdp2430_twldata = {
/* platform_data for children goes here */ /* platform_data for children goes here */
.gpio = &sdp2430_gpio_data, .gpio = &sdp2430_gpio_data,
.vmmc1 = &sdp2430_vmmc1,
}; };
static struct i2c_board_info __initdata sdp2430_i2c_boardinfo[] = { static struct i2c_board_info __initdata sdp2430_i2c_boardinfo[] = {
...@@ -226,6 +244,9 @@ static void __init omap_2430sdp_init(void) ...@@ -226,6 +244,9 @@ static void __init omap_2430sdp_init(void)
omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC); omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC);
omap_board_config = sdp2430_config;
omap_board_config_size = ARRAY_SIZE(sdp2430_config);
omap2430_i2c_init(); omap2430_i2c_init();
platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices)); platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices));
...@@ -253,9 +274,10 @@ static void __init omap_2430sdp_map_io(void) ...@@ -253,9 +274,10 @@ static void __init omap_2430sdp_map_io(void)
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,
.map_io = omap_2430sdp_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_2430sdp_init_irq, .map_io = omap_2430sdp_map_io,
.init_early = omap_2430sdp_init_early,
.init_irq = omap_init_irq,
.init_machine = omap_2430sdp_init, .init_machine = omap_2430sdp_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -307,34 +307,16 @@ static struct omap_dss_board_info sdp3430_dss_data = { ...@@ -307,34 +307,16 @@ static struct omap_dss_board_info sdp3430_dss_data = {
.default_device = &sdp3430_lcd_device, .default_device = &sdp3430_lcd_device,
}; };
static struct platform_device sdp3430_dss_device = { static struct regulator_consumer_supply sdp3430_vdda_dac_supply =
.name = "omapdss", REGULATOR_SUPPLY("vdda_dac", "omapdss");
.id = -1,
.dev = {
.platform_data = &sdp3430_dss_data,
},
};
static struct regulator_consumer_supply sdp3430_vdda_dac_supply = {
.supply = "vdda_dac",
.dev = &sdp3430_dss_device.dev,
};
static struct platform_device *sdp3430_devices[] __initdata = {
&sdp3430_dss_device,
};
static struct omap_board_config_kernel sdp3430_config[] __initdata = { static struct omap_board_config_kernel sdp3430_config[] __initdata = {
}; };
static void __init omap_3430sdp_init_irq(void) static void __init omap_3430sdp_init_early(void)
{ {
omap_board_config = sdp3430_config;
omap_board_config_size = ARRAY_SIZE(sdp3430_config);
omap3_pm_init_cpuidle(omap3_cpuidle_params_table);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(hyb18m512160af6_sdrc_params, NULL); omap2_init_common_devices(hyb18m512160af6_sdrc_params, NULL);
omap_init_irq();
} }
static int sdp3430_batt_table[] = { static int sdp3430_batt_table[] = {
...@@ -370,18 +352,6 @@ static struct omap2_hsmmc_info mmc[] = { ...@@ -370,18 +352,6 @@ static struct omap2_hsmmc_info mmc[] = {
{} /* Terminator */ {} /* Terminator */
}; };
static struct regulator_consumer_supply sdp3430_vmmc1_supply = {
.supply = "vmmc",
};
static struct regulator_consumer_supply sdp3430_vsim_supply = {
.supply = "vmmc_aux",
};
static struct regulator_consumer_supply sdp3430_vmmc2_supply = {
.supply = "vmmc",
};
static int sdp3430_twl_gpio_setup(struct device *dev, static int sdp3430_twl_gpio_setup(struct device *dev,
unsigned gpio, unsigned ngpio) unsigned gpio, unsigned ngpio)
{ {
...@@ -392,13 +362,6 @@ static int sdp3430_twl_gpio_setup(struct device *dev, ...@@ -392,13 +362,6 @@ static int sdp3430_twl_gpio_setup(struct device *dev,
mmc[1].gpio_cd = gpio + 1; mmc[1].gpio_cd = gpio + 1;
omap2_hsmmc_init(mmc); omap2_hsmmc_init(mmc);
/* link regulators to MMC adapters ... we "know" the
* regulators will be set up only *after* we return.
*/
sdp3430_vmmc1_supply.dev = mmc[0].dev;
sdp3430_vsim_supply.dev = mmc[0].dev;
sdp3430_vmmc2_supply.dev = mmc[1].dev;
/* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */ /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
gpio_request(gpio + 7, "sub_lcd_en_bkl"); gpio_request(gpio + 7, "sub_lcd_en_bkl");
gpio_direction_output(gpio + 7, 0); gpio_direction_output(gpio + 7, 0);
...@@ -427,6 +390,34 @@ static struct twl4030_madc_platform_data sdp3430_madc_data = { ...@@ -427,6 +390,34 @@ static struct twl4030_madc_platform_data sdp3430_madc_data = {
.irq_line = 1, .irq_line = 1,
}; };
/* regulator consumer mappings */
/* ads7846 on SPI */
static struct regulator_consumer_supply sdp3430_vaux3_supplies[] = {
REGULATOR_SUPPLY("vcc", "spi1.0"),
};
static struct regulator_consumer_supply sdp3430_vdda_dac_supplies[] = {
REGULATOR_SUPPLY("vdda_dac", "omapdss"),
};
/* VPLL2 for digital video outputs */
static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
};
static struct regulator_consumer_supply sdp3430_vmmc1_supplies[] = {
REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
};
static struct regulator_consumer_supply sdp3430_vsim_supplies[] = {
REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.0"),
};
static struct regulator_consumer_supply sdp3430_vmmc2_supplies[] = {
REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
};
/* /*
* Apply all the fixed voltages since most versions of U-Boot * Apply all the fixed voltages since most versions of U-Boot
* don't bother with that initialization. * don't bother with that initialization.
...@@ -469,6 +460,8 @@ static struct regulator_init_data sdp3430_vaux3 = { ...@@ -469,6 +460,8 @@ static struct regulator_init_data sdp3430_vaux3 = {
.valid_ops_mask = REGULATOR_CHANGE_MODE .valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS, | REGULATOR_CHANGE_STATUS,
}, },
.num_consumer_supplies = ARRAY_SIZE(sdp3430_vaux3_supplies),
.consumer_supplies = sdp3430_vaux3_supplies,
}; };
/* VAUX4 for OMAP VDD_CSI2 (camera) */ /* VAUX4 for OMAP VDD_CSI2 (camera) */
...@@ -495,8 +488,8 @@ static struct regulator_init_data sdp3430_vmmc1 = { ...@@ -495,8 +488,8 @@ static struct regulator_init_data sdp3430_vmmc1 = {
| REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS, | REGULATOR_CHANGE_STATUS,
}, },
.num_consumer_supplies = 1, .num_consumer_supplies = ARRAY_SIZE(sdp3430_vmmc1_supplies),
.consumer_supplies = &sdp3430_vmmc1_supply, .consumer_supplies = sdp3430_vmmc1_supplies,
}; };
/* VMMC2 for MMC2 card */ /* VMMC2 for MMC2 card */
...@@ -510,8 +503,8 @@ static struct regulator_init_data sdp3430_vmmc2 = { ...@@ -510,8 +503,8 @@ static struct regulator_init_data sdp3430_vmmc2 = {
.valid_ops_mask = REGULATOR_CHANGE_MODE .valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS, | REGULATOR_CHANGE_STATUS,
}, },
.num_consumer_supplies = 1, .num_consumer_supplies = ARRAY_SIZE(sdp3430_vmmc2_supplies),
.consumer_supplies = &sdp3430_vmmc2_supply, .consumer_supplies = sdp3430_vmmc2_supplies,
}; };
/* VSIM for OMAP VDD_MMC1A (i/o for DAT4..DAT7) */ /* VSIM for OMAP VDD_MMC1A (i/o for DAT4..DAT7) */
...@@ -525,8 +518,8 @@ static struct regulator_init_data sdp3430_vsim = { ...@@ -525,8 +518,8 @@ static struct regulator_init_data sdp3430_vsim = {
| REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS, | REGULATOR_CHANGE_STATUS,
}, },
.num_consumer_supplies = 1, .num_consumer_supplies = ARRAY_SIZE(sdp3430_vsim_supplies),
.consumer_supplies = &sdp3430_vsim_supply, .consumer_supplies = sdp3430_vsim_supplies,
}; };
/* VDAC for DSS driving S-Video */ /* VDAC for DSS driving S-Video */
...@@ -540,16 +533,8 @@ static struct regulator_init_data sdp3430_vdac = { ...@@ -540,16 +533,8 @@ static struct regulator_init_data sdp3430_vdac = {
.valid_ops_mask = REGULATOR_CHANGE_MODE .valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS, | REGULATOR_CHANGE_STATUS,
}, },
.num_consumer_supplies = 1, .num_consumer_supplies = ARRAY_SIZE(sdp3430_vdda_dac_supplies),
.consumer_supplies = &sdp3430_vdda_dac_supply, .consumer_supplies = sdp3430_vdda_dac_supplies,
};
/* VPLL2 for digital video outputs */
static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
{
.supply = "vdds_dsi",
.dev = &sdp3430_dss_device.dev,
}
}; };
static struct regulator_init_data sdp3430_vpll2 = { static struct regulator_init_data sdp3430_vpll2 = {
...@@ -567,9 +552,7 @@ static struct regulator_init_data sdp3430_vpll2 = { ...@@ -567,9 +552,7 @@ static struct regulator_init_data sdp3430_vpll2 = {
.consumer_supplies = sdp3430_vpll2_supplies, .consumer_supplies = sdp3430_vpll2_supplies,
}; };
static struct twl4030_codec_audio_data sdp3430_audio = { static struct twl4030_codec_audio_data sdp3430_audio;
.audio_mclk = 26000000,
};
static struct twl4030_codec_data sdp3430_codec = { static struct twl4030_codec_data sdp3430_codec = {
.audio_mclk = 26000000, .audio_mclk = 26000000,
...@@ -800,8 +783,11 @@ static struct omap_musb_board_data musb_board_data = { ...@@ -800,8 +783,11 @@ static struct omap_musb_board_data musb_board_data = {
static void __init omap_3430sdp_init(void) static void __init omap_3430sdp_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_board_config = sdp3430_config;
omap_board_config_size = ARRAY_SIZE(sdp3430_config);
omap3_pm_init_cpuidle(omap3_cpuidle_params_table);
omap3430_i2c_init(); omap3430_i2c_init();
platform_add_devices(sdp3430_devices, ARRAY_SIZE(sdp3430_devices)); omap_display_init(&sdp3430_dss_data);
if (omap_rev() > OMAP3430_REV_ES1_0) if (omap_rev() > OMAP3430_REV_ES1_0)
ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV2; ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV2;
else else
...@@ -813,7 +799,7 @@ static void __init omap_3430sdp_init(void) ...@@ -813,7 +799,7 @@ static void __init omap_3430sdp_init(void)
omap_serial_init(); omap_serial_init();
usb_musb_init(&musb_board_data); usb_musb_init(&musb_board_data);
board_smc91x_init(); board_smc91x_init();
board_flash_init(sdp_flash_partitions, chip_sel_3430); board_flash_init(sdp_flash_partitions, chip_sel_3430, 0);
sdp3430_display_init(); sdp3430_display_init();
enable_board_wakeup_source(); enable_board_wakeup_source();
usb_ehci_init(&ehci_pdata); usb_ehci_init(&ehci_pdata);
...@@ -822,9 +808,10 @@ static void __init omap_3430sdp_init(void) ...@@ -822,9 +808,10 @@ static void __init omap_3430sdp_init(void)
MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board") MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board")
/* Maintainer: Syed Khasim - Texas Instruments Inc */ /* Maintainer: Syed Khasim - Texas Instruments Inc */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_3430sdp_init_irq, .map_io = omap3_map_io,
.init_early = omap_3430sdp_init_early,
.init_irq = omap_init_irq,
.init_machine = omap_3430sdp_init, .init_machine = omap_3430sdp_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/mtd/nand.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -69,14 +70,11 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { ...@@ -69,14 +70,11 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __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_irq(void) static void __init omap_sdp_init_early(void)
{ {
omap_board_config = sdp_config;
omap_board_config_size = ARRAY_SIZE(sdp_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params, omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params,
h8mbx00u0mer0em_sdrc_params); h8mbx00u0mer0em_sdrc_params);
omap_init_irq();
} }
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
...@@ -206,19 +204,22 @@ static struct flash_partitions sdp_flash_partitions[] = { ...@@ -206,19 +204,22 @@ static struct flash_partitions sdp_flash_partitions[] = {
static void __init omap_sdp_init(void) static void __init omap_sdp_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBP); omap3_mux_init(board_mux, OMAP_PACKAGE_CBP);
omap_board_config = sdp_config;
omap_board_config_size = ARRAY_SIZE(sdp_config);
zoom_peripherals_init(); zoom_peripherals_init();
zoom_display_init(); zoom_display_init();
board_smc91x_init(); board_smc91x_init();
board_flash_init(sdp_flash_partitions, chip_sel_sdp); board_flash_init(sdp_flash_partitions, chip_sel_sdp, NAND_BUSWIDTH_16);
enable_board_wakeup_source(); enable_board_wakeup_source();
usb_ehci_init(&ehci_pdata); usb_ehci_init(&ehci_pdata);
} }
MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board") MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_sdp_init_irq, .map_io = omap3_map_io,
.init_early = omap_sdp_init_early,
.init_irq = omap_init_irq,
.init_machine = omap_sdp_init, .init_machine = omap_sdp_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <plat/common.h> #include <plat/common.h>
#include <plat/usb.h> #include <plat/usb.h>
#include <plat/mmc.h> #include <plat/mmc.h>
#include <plat/omap4-keypad.h>
#include "mux.h" #include "mux.h"
#include "hsmmc.h" #include "hsmmc.h"
...@@ -44,10 +45,93 @@ ...@@ -44,10 +45,93 @@
#define ETH_KS8851_IRQ 34 #define ETH_KS8851_IRQ 34
#define ETH_KS8851_POWER_ON 48 #define ETH_KS8851_POWER_ON 48
#define ETH_KS8851_QUART 138 #define ETH_KS8851_QUART 138
#define OMAP4SDP_MDM_PWR_EN_GPIO 157
#define OMAP4_SFH7741_SENSOR_OUTPUT_GPIO 184 #define OMAP4_SFH7741_SENSOR_OUTPUT_GPIO 184
#define OMAP4_SFH7741_ENABLE_GPIO 188 #define OMAP4_SFH7741_ENABLE_GPIO 188
static const int sdp4430_keymap[] = {
KEY(0, 0, KEY_E),
KEY(0, 1, KEY_R),
KEY(0, 2, KEY_T),
KEY(0, 3, KEY_HOME),
KEY(0, 4, KEY_F5),
KEY(0, 5, KEY_UNKNOWN),
KEY(0, 6, KEY_I),
KEY(0, 7, KEY_LEFTSHIFT),
KEY(1, 0, KEY_D),
KEY(1, 1, KEY_F),
KEY(1, 2, KEY_G),
KEY(1, 3, KEY_SEND),
KEY(1, 4, KEY_F6),
KEY(1, 5, KEY_UNKNOWN),
KEY(1, 6, KEY_K),
KEY(1, 7, KEY_ENTER),
KEY(2, 0, KEY_X),
KEY(2, 1, KEY_C),
KEY(2, 2, KEY_V),
KEY(2, 3, KEY_END),
KEY(2, 4, KEY_F7),
KEY(2, 5, KEY_UNKNOWN),
KEY(2, 6, KEY_DOT),
KEY(2, 7, KEY_CAPSLOCK),
KEY(3, 0, KEY_Z),
KEY(3, 1, KEY_KPPLUS),
KEY(3, 2, KEY_B),
KEY(3, 3, KEY_F1),
KEY(3, 4, KEY_F8),
KEY(3, 5, KEY_UNKNOWN),
KEY(3, 6, KEY_O),
KEY(3, 7, KEY_SPACE),
KEY(4, 0, KEY_W),
KEY(4, 1, KEY_Y),
KEY(4, 2, KEY_U),
KEY(4, 3, KEY_F2),
KEY(4, 4, KEY_VOLUMEUP),
KEY(4, 5, KEY_UNKNOWN),
KEY(4, 6, KEY_L),
KEY(4, 7, KEY_LEFT),
KEY(5, 0, KEY_S),
KEY(5, 1, KEY_H),
KEY(5, 2, KEY_J),
KEY(5, 3, KEY_F3),
KEY(5, 4, KEY_F9),
KEY(5, 5, KEY_VOLUMEDOWN),
KEY(5, 6, KEY_M),
KEY(5, 7, KEY_RIGHT),
KEY(6, 0, KEY_Q),
KEY(6, 1, KEY_A),
KEY(6, 2, KEY_N),
KEY(6, 3, KEY_BACK),
KEY(6, 4, KEY_BACKSPACE),
KEY(6, 5, KEY_UNKNOWN),
KEY(6, 6, KEY_P),
KEY(6, 7, KEY_UP),
KEY(7, 0, KEY_PROG1),
KEY(7, 1, KEY_PROG2),
KEY(7, 2, KEY_PROG3),
KEY(7, 3, KEY_PROG4),
KEY(7, 4, KEY_F4),
KEY(7, 5, KEY_UNKNOWN),
KEY(7, 6, KEY_OK),
KEY(7, 7, KEY_DOWN),
};
static struct matrix_keymap_data sdp4430_keymap_data = {
.keymap = sdp4430_keymap,
.keymap_size = ARRAY_SIZE(sdp4430_keymap),
};
static struct omap4_keypad_platform_data sdp4430_keypad_data = {
.keymap_data = &sdp4430_keymap_data,
.rows = 8,
.cols = 8,
};
static struct gpio_led sdp4430_gpio_leds[] = { static struct gpio_led sdp4430_gpio_leds[] = {
{ {
.name = "omap4:green:debug0", .name = "omap4:green:debug0",
...@@ -239,28 +323,15 @@ static struct omap_board_config_kernel sdp4430_config[] __initdata = { ...@@ -239,28 +323,15 @@ 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_irq(void) static void __init omap_4430sdp_init_early(void)
{ {
omap_board_config = sdp4430_config;
omap_board_config_size = ARRAY_SIZE(sdp4430_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL); omap2_init_common_devices(NULL, NULL);
#ifdef CONFIG_OMAP_32K_TIMER #ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer(1); omap2_gp_clockevent_set_gptimer(1);
#endif #endif
gic_init_irq();
} }
static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
.port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
.port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN,
.port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
.phy_reset = false,
.reset_gpio_port[0] = -EINVAL,
.reset_gpio_port[1] = -EINVAL,
.reset_gpio_port[2] = -EINVAL,
};
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,
...@@ -275,11 +346,6 @@ static struct twl4030_usb_data omap4_usbphy_data = { ...@@ -275,11 +346,6 @@ static struct twl4030_usb_data omap4_usbphy_data = {
}; };
static struct omap2_hsmmc_info mmc[] = { static struct omap2_hsmmc_info mmc[] = {
{
.mmc = 1,
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_wp = -EINVAL,
},
{ {
.mmc = 2, .mmc = 2,
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
...@@ -288,19 +354,24 @@ static struct omap2_hsmmc_info mmc[] = { ...@@ -288,19 +354,24 @@ static struct omap2_hsmmc_info mmc[] = {
.nonremovable = true, .nonremovable = true,
.ocr_mask = MMC_VDD_29_30, .ocr_mask = MMC_VDD_29_30,
}, },
{
.mmc = 1,
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_wp = -EINVAL,
},
{} /* Terminator */ {} /* Terminator */
}; };
static struct regulator_consumer_supply sdp4430_vaux_supply[] = { static struct regulator_consumer_supply sdp4430_vaux_supply[] = {
{ {
.supply = "vmmc", .supply = "vmmc",
.dev_name = "mmci-omap-hs.1", .dev_name = "omap_hsmmc.1",
}, },
}; };
static struct regulator_consumer_supply sdp4430_vmmc_supply[] = { static struct regulator_consumer_supply sdp4430_vmmc_supply[] = {
{ {
.supply = "vmmc", .supply = "vmmc",
.dev_name = "mmci-omap-hs.0", .dev_name = "omap_hsmmc.0",
}, },
}; };
...@@ -434,7 +505,6 @@ static struct regulator_init_data sdp4430_vana = { ...@@ -434,7 +505,6 @@ static struct regulator_init_data sdp4430_vana = {
.constraints = { .constraints = {
.min_uV = 2100000, .min_uV = 2100000,
.max_uV = 2100000, .max_uV = 2100000,
.apply_uV = true,
.valid_modes_mask = REGULATOR_MODE_NORMAL .valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY, | REGULATOR_MODE_STANDBY,
.valid_ops_mask = REGULATOR_CHANGE_MODE .valid_ops_mask = REGULATOR_CHANGE_MODE
...@@ -446,7 +516,6 @@ static struct regulator_init_data sdp4430_vcxio = { ...@@ -446,7 +516,6 @@ static struct regulator_init_data sdp4430_vcxio = {
.constraints = { .constraints = {
.min_uV = 1800000, .min_uV = 1800000,
.max_uV = 1800000, .max_uV = 1800000,
.apply_uV = true,
.valid_modes_mask = REGULATOR_MODE_NORMAL .valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY, | REGULATOR_MODE_STANDBY,
.valid_ops_mask = REGULATOR_CHANGE_MODE .valid_ops_mask = REGULATOR_CHANGE_MODE
...@@ -458,7 +527,6 @@ static struct regulator_init_data sdp4430_vdac = { ...@@ -458,7 +527,6 @@ static struct regulator_init_data sdp4430_vdac = {
.constraints = { .constraints = {
.min_uV = 1800000, .min_uV = 1800000,
.max_uV = 1800000, .max_uV = 1800000,
.apply_uV = true,
.valid_modes_mask = REGULATOR_MODE_NORMAL .valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY, | REGULATOR_MODE_STANDBY,
.valid_ops_mask = REGULATOR_CHANGE_MODE .valid_ops_mask = REGULATOR_CHANGE_MODE
...@@ -570,20 +638,15 @@ static void __init omap_4430sdp_init(void) ...@@ -570,20 +638,15 @@ static void __init omap_4430sdp_init(void)
package = OMAP_PACKAGE_CBL; package = OMAP_PACKAGE_CBL;
omap4_mux_init(board_mux, package); omap4_mux_init(board_mux, package);
omap_board_config = sdp4430_config;
omap_board_config_size = ARRAY_SIZE(sdp4430_config);
omap4_i2c_init(); omap4_i2c_init();
omap_sfh7741prox_init(); omap_sfh7741prox_init();
platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices)); platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
omap_serial_init(); omap_serial_init();
omap4_twl6030_hsmmc_init(mmc); omap4_twl6030_hsmmc_init(mmc);
/* Power on the ULPI PHY */
status = gpio_request(OMAP4SDP_MDM_PWR_EN_GPIO, "USBB1 PHY VMDM_3V3");
if (status)
pr_err("%s: Could not get USBB1 PHY GPIO\n", __func__);
else
gpio_direction_output(OMAP4SDP_MDM_PWR_EN_GPIO, 1);
usb_ehci_init(&ehci_pdata);
usb_musb_init(&musb_board_data); usb_musb_init(&musb_board_data);
status = omap_ethernet_init(); status = omap_ethernet_init();
...@@ -594,6 +657,10 @@ static void __init omap_4430sdp_init(void) ...@@ -594,6 +657,10 @@ static void __init omap_4430sdp_init(void)
spi_register_board_info(sdp4430_spi_board_info, spi_register_board_info(sdp4430_spi_board_info,
ARRAY_SIZE(sdp4430_spi_board_info)); ARRAY_SIZE(sdp4430_spi_board_info));
} }
status = omap4_keyboard_init(&sdp4430_keypad_data);
if (status)
pr_err("Keypad initialization failed: %d\n", status);
} }
static void __init omap_4430sdp_map_io(void) static void __init omap_4430sdp_map_io(void)
...@@ -605,9 +672,10 @@ static void __init omap_4430sdp_map_io(void) ...@@ -605,9 +672,10 @@ static void __init omap_4430sdp_map_io(void)
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,
.map_io = omap_4430sdp_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_4430sdp_init_irq, .map_io = omap_4430sdp_map_io,
.init_early = omap_4430sdp_init_early,
.init_irq = gic_init_irq,
.init_machine = omap_4430sdp_init, .init_machine = omap_4430sdp_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -49,14 +49,10 @@ static struct omap_board_mux board_mux[] __initdata = { ...@@ -49,14 +49,10 @@ static struct omap_board_mux board_mux[] __initdata = {
#define board_mux NULL #define board_mux NULL
#endif #endif
static void __init am3517_crane_init_irq(void) static void __init am3517_crane_init_early(void)
{ {
omap_board_config = am3517_crane_config;
omap_board_config_size = ARRAY_SIZE(am3517_crane_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL); omap2_init_common_devices(NULL, NULL);
omap_init_irq();
} }
static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = { static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = {
...@@ -77,6 +73,9 @@ static void __init am3517_crane_init(void) ...@@ -77,6 +73,9 @@ 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_board_config = am3517_crane_config;
omap_board_config_size = ARRAY_SIZE(am3517_crane_config);
/* Configure GPIO for EHCI port */ /* Configure GPIO for EHCI port */
if (omap_mux_init_gpio(GPIO_USB_NRESET, OMAP_PIN_OUTPUT)) { if (omap_mux_init_gpio(GPIO_USB_NRESET, OMAP_PIN_OUTPUT)) {
pr_err("Can not configure mux for GPIO_USB_NRESET %d\n", pr_err("Can not configure mux for GPIO_USB_NRESET %d\n",
...@@ -108,9 +107,10 @@ static void __init am3517_crane_init(void) ...@@ -108,9 +107,10 @@ static void __init am3517_crane_init(void)
MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD") MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = am3517_crane_init_irq, .map_io = omap3_map_io,
.init_early = am3517_crane_init_early,
.init_irq = omap_init_irq,
.init_machine = am3517_crane_init, .init_machine = am3517_crane_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -199,6 +199,9 @@ static struct pca953x_platform_data am3517evm_gpio_expander_info_0 = { ...@@ -199,6 +199,9 @@ static struct pca953x_platform_data am3517evm_gpio_expander_info_0 = {
.gpio_base = OMAP_MAX_GPIO_LINES, .gpio_base = OMAP_MAX_GPIO_LINES,
}; };
static struct i2c_board_info __initdata am3517evm_i2c2_boardinfo[] = { static struct i2c_board_info __initdata am3517evm_i2c2_boardinfo[] = {
{
I2C_BOARD_INFO("tlv320aic23", 0x1A),
},
{ {
I2C_BOARD_INFO("tca6416", 0x21), I2C_BOARD_INFO("tca6416", 0x21),
.platform_data = &am3517evm_gpio_expander_info_0, .platform_data = &am3517evm_gpio_expander_info_0,
...@@ -378,37 +381,23 @@ static struct omap_dss_board_info am3517_evm_dss_data = { ...@@ -378,37 +381,23 @@ static struct omap_dss_board_info am3517_evm_dss_data = {
.default_device = &am3517_evm_lcd_device, .default_device = &am3517_evm_lcd_device,
}; };
static struct platform_device am3517_evm_dss_device = {
.name = "omapdss",
.id = -1,
.dev = {
.platform_data = &am3517_evm_dss_data,
},
};
/* /*
* Board initialization * Board initialization
*/ */
static struct omap_board_config_kernel am3517_evm_config[] __initdata = { static void __init am3517_evm_init_early(void)
};
static struct platform_device *am3517_evm_devices[] __initdata = {
&am3517_evm_dss_device,
};
static void __init am3517_evm_init_irq(void)
{ {
omap_board_config = am3517_evm_config;
omap_board_config_size = ARRAY_SIZE(am3517_evm_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL); omap2_init_common_devices(NULL, NULL);
omap_init_irq();
} }
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,
.mode = MUSB_OTG, .mode = MUSB_OTG,
.power = 500, .power = 500,
.set_phy_power = am35x_musb_phy_power,
.clear_irq = am35x_musb_clear_irq,
.set_mode = am35x_musb_set_mode,
.reset = am35x_musb_reset,
}; };
static __init void am3517_evm_musb_init(void) static __init void am3517_evm_musb_init(void)
...@@ -490,14 +479,17 @@ static void am3517_evm_hecc_init(struct ti_hecc_platform_data *pdata) ...@@ -490,14 +479,17 @@ static void am3517_evm_hecc_init(struct ti_hecc_platform_data *pdata)
platform_device_register(&am3517_hecc_device); platform_device_register(&am3517_hecc_device);
} }
static struct omap_board_config_kernel am3517_evm_config[] __initdata = {
};
static void __init am3517_evm_init(void) static void __init am3517_evm_init(void)
{ {
omap_board_config = am3517_evm_config;
omap_board_config_size = ARRAY_SIZE(am3517_evm_config);
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
am3517_evm_i2c_init(); am3517_evm_i2c_init();
platform_add_devices(am3517_evm_devices, omap_display_init(&am3517_evm_dss_data);
ARRAY_SIZE(am3517_evm_devices));
omap_serial_init(); omap_serial_init();
/* Configure GPIO for EHCI port */ /* Configure GPIO for EHCI port */
...@@ -521,9 +513,10 @@ static void __init am3517_evm_init(void) ...@@ -521,9 +513,10 @@ static void __init am3517_evm_init(void)
MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM") MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = am3517_evm_init_irq, .map_io = omap3_map_io,
.init_early = am3517_evm_init_early,
.init_irq = omap_init_irq,
.init_machine = am3517_evm_init, .init_machine = am3517_evm_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -274,13 +274,10 @@ static struct omap_board_config_kernel apollon_config[] __initdata = { ...@@ -274,13 +274,10 @@ 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_irq(void) static void __init omap_apollon_init_early(void)
{ {
omap_board_config = apollon_config;
omap_board_config_size = ARRAY_SIZE(apollon_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL); omap2_init_common_devices(NULL, NULL);
omap_init_irq();
} }
static void __init apollon_led_init(void) static void __init apollon_led_init(void)
...@@ -320,6 +317,8 @@ static void __init omap_apollon_init(void) ...@@ -320,6 +317,8 @@ static void __init omap_apollon_init(void)
u32 v; u32 v;
omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAC); omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAC);
omap_board_config = apollon_config;
omap_board_config_size = ARRAY_SIZE(apollon_config);
apollon_init_smc91x(); apollon_init_smc91x();
apollon_led_init(); apollon_led_init();
...@@ -355,9 +354,10 @@ static void __init omap_apollon_map_io(void) ...@@ -355,9 +354,10 @@ static void __init omap_apollon_map_io(void)
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,
.map_io = omap_apollon_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_apollon_init_irq, .map_io = omap_apollon_map_io,
.init_early = omap_apollon_init_early,
.init_irq = omap_init_irq,
.init_machine = omap_apollon_init, .init_machine = omap_apollon_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -401,14 +401,6 @@ static struct omap_dss_board_info cm_t35_dss_data = { ...@@ -401,14 +401,6 @@ static struct omap_dss_board_info cm_t35_dss_data = {
.default_device = &cm_t35_dvi_device, .default_device = &cm_t35_dvi_device,
}; };
static struct platform_device cm_t35_dss_device = {
.name = "omapdss",
.id = -1,
.dev = {
.platform_data = &cm_t35_dss_data,
},
};
static struct omap2_mcspi_device_config tdo24m_mcspi_config = { static struct omap2_mcspi_device_config tdo24m_mcspi_config = {
.turbo_mode = 0, .turbo_mode = 0,
.single_channel = 1, /* 0: slave, 1: master */ .single_channel = 1, /* 0: slave, 1: master */
...@@ -468,7 +460,7 @@ static void __init cm_t35_init_display(void) ...@@ -468,7 +460,7 @@ static void __init cm_t35_init_display(void)
msleep(50); msleep(50);
gpio_set_value(lcd_en_gpio, 1); gpio_set_value(lcd_en_gpio, 1);
err = platform_device_register(&cm_t35_dss_device); err = omap_display_init(&cm_t35_dss_data);
if (err) { if (err) {
pr_err("CM-T35: failed to register DSS device\n"); pr_err("CM-T35: failed to register DSS device\n");
goto err_dev_reg; goto err_dev_reg;
...@@ -495,15 +487,11 @@ static struct regulator_consumer_supply cm_t35_vsim_supply = { ...@@ -495,15 +487,11 @@ static struct regulator_consumer_supply cm_t35_vsim_supply = {
.supply = "vmmc_aux", .supply = "vmmc_aux",
}; };
static struct regulator_consumer_supply cm_t35_vdac_supply = { static struct regulator_consumer_supply cm_t35_vdac_supply =
.supply = "vdda_dac", REGULATOR_SUPPLY("vdda_dac", "omapdss");
.dev = &cm_t35_dss_device.dev,
};
static struct regulator_consumer_supply cm_t35_vdvi_supply = { static struct regulator_consumer_supply cm_t35_vdvi_supply =
.supply = "vdvi", REGULATOR_SUPPLY("vdvi", "omapdss");
.dev = &cm_t35_dss_device.dev,
};
/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */ /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
static struct regulator_init_data cm_t35_vmmc1 = { static struct regulator_init_data cm_t35_vmmc1 = {
...@@ -680,18 +668,11 @@ static void __init cm_t35_init_i2c(void) ...@@ -680,18 +668,11 @@ static void __init cm_t35_init_i2c(void)
ARRAY_SIZE(cm_t35_i2c_boardinfo)); ARRAY_SIZE(cm_t35_i2c_boardinfo));
} }
static struct omap_board_config_kernel cm_t35_config[] __initdata = { static void __init cm_t35_init_early(void)
};
static void __init cm_t35_init_irq(void)
{ {
omap_board_config = cm_t35_config;
omap_board_config_size = ARRAY_SIZE(cm_t35_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params); mt46h32m32lf6_sdrc_params);
omap_init_irq();
} }
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
...@@ -798,8 +779,13 @@ static struct omap_musb_board_data musb_board_data = { ...@@ -798,8 +779,13 @@ static struct omap_musb_board_data musb_board_data = {
.power = 100, .power = 100,
}; };
static struct omap_board_config_kernel cm_t35_config[] __initdata = {
};
static void __init cm_t35_init(void) static void __init cm_t35_init(void)
{ {
omap_board_config = 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();
cm_t35_init_i2c(); cm_t35_init_i2c();
...@@ -815,9 +801,10 @@ static void __init cm_t35_init(void) ...@@ -815,9 +801,10 @@ static void __init cm_t35_init(void)
MACHINE_START(CM_T35, "Compulab CM-T35") MACHINE_START(CM_T35, "Compulab CM-T35")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = cm_t35_init_irq, .map_io = omap3_map_io,
.init_early = cm_t35_init_early,
.init_irq = omap_init_irq,
.init_machine = cm_t35_init, .init_machine = cm_t35_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -254,14 +254,10 @@ static inline void cm_t3517_init_nand(void) {} ...@@ -254,14 +254,10 @@ 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_irq(void) static void __init cm_t3517_init_early(void)
{ {
omap_board_config = cm_t3517_config;
omap_board_config_size = ARRAY_SIZE(cm_t3517_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL); omap2_init_common_devices(NULL, NULL);
omap_init_irq();
} }
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
...@@ -294,6 +290,8 @@ static void __init cm_t3517_init(void) ...@@ -294,6 +290,8 @@ 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_board_config = cm_t3517_config;
omap_board_config_size = ARRAY_SIZE(cm_t3517_config);
cm_t3517_init_leds(); cm_t3517_init_leds();
cm_t3517_init_nand(); cm_t3517_init_nand();
cm_t3517_init_rtc(); cm_t3517_init_rtc();
...@@ -303,9 +301,10 @@ static void __init cm_t3517_init(void) ...@@ -303,9 +301,10 @@ static void __init cm_t3517_init(void)
MACHINE_START(CM_T3517, "Compulab CM-T3517") MACHINE_START(CM_T3517, "Compulab CM-T3517")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = cm_t3517_init_irq, .map_io = omap3_map_io,
.init_early = cm_t3517_init_early,
.init_irq = omap_init_irq,
.init_machine = cm_t3517_init, .init_machine = cm_t3517_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -140,7 +140,7 @@ static void devkit8000_panel_disable_dvi(struct omap_dss_device *dssdev) ...@@ -140,7 +140,7 @@ static void devkit8000_panel_disable_dvi(struct omap_dss_device *dssdev)
} }
static struct regulator_consumer_supply devkit8000_vmmc1_supply = static struct regulator_consumer_supply devkit8000_vmmc1_supply =
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0"); REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
/* ads7846 on SPI */ /* ads7846 on SPI */
...@@ -195,14 +195,6 @@ static struct omap_dss_board_info devkit8000_dss_data = { ...@@ -195,14 +195,6 @@ static struct omap_dss_board_info devkit8000_dss_data = {
.default_device = &devkit8000_lcd_device, .default_device = &devkit8000_lcd_device,
}; };
static struct platform_device devkit8000_dss_device = {
.name = "omapdss",
.id = -1,
.dev = {
.platform_data = &devkit8000_dss_data,
},
};
static struct regulator_consumer_supply devkit8000_vdda_dac_supply = static struct regulator_consumer_supply devkit8000_vdda_dac_supply =
REGULATOR_SUPPLY("vdda_dac", "omapdss"); REGULATOR_SUPPLY("vdda_dac", "omapdss");
...@@ -350,9 +342,7 @@ static struct twl4030_usb_data devkit8000_usb_data = { ...@@ -350,9 +342,7 @@ static struct twl4030_usb_data devkit8000_usb_data = {
.usb_mode = T2_USB_MODE_ULPI, .usb_mode = T2_USB_MODE_ULPI,
}; };
static struct twl4030_codec_audio_data devkit8000_audio_data = { static struct twl4030_codec_audio_data devkit8000_audio_data;
.audio_mclk = 26000000,
};
static struct twl4030_codec_data devkit8000_codec_data = { static struct twl4030_codec_data devkit8000_codec_data = {
.audio_mclk = 26000000, .audio_mclk = 26000000,
...@@ -456,11 +446,15 @@ static struct platform_device keys_gpio = { ...@@ -456,11 +446,15 @@ static struct platform_device keys_gpio = {
}; };
static void __init devkit8000_init_irq(void) static void __init devkit8000_init_early(void)
{ {
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params); mt46h32m32lf6_sdrc_params);
}
static void __init devkit8000_init_irq(void)
{
omap_init_irq(); omap_init_irq();
#ifdef CONFIG_OMAP_32K_TIMER #ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer(12); omap2_gp_clockevent_set_gptimer(12);
...@@ -575,7 +569,6 @@ static void __init omap_dm9000_init(void) ...@@ -575,7 +569,6 @@ static void __init omap_dm9000_init(void)
} }
static struct platform_device *devkit8000_devices[] __initdata = { static struct platform_device *devkit8000_devices[] __initdata = {
&devkit8000_dss_device,
&leds_gpio, &leds_gpio,
&keys_gpio, &keys_gpio,
&omap_dm9000_dev, &omap_dm9000_dev,
...@@ -797,6 +790,7 @@ static void __init devkit8000_init(void) ...@@ -797,6 +790,7 @@ static void __init devkit8000_init(void)
platform_add_devices(devkit8000_devices, platform_add_devices(devkit8000_devices,
ARRAY_SIZE(devkit8000_devices)); ARRAY_SIZE(devkit8000_devices));
omap_display_init(&devkit8000_dss_data);
spi_register_board_info(devkit8000_spi_board_info, spi_register_board_info(devkit8000_spi_board_info,
ARRAY_SIZE(devkit8000_spi_board_info)); ARRAY_SIZE(devkit8000_spi_board_info));
...@@ -813,8 +807,9 @@ static void __init devkit8000_init(void) ...@@ -813,8 +807,9 @@ static void __init devkit8000_init(void)
MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000") MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io,
.init_early = devkit8000_init_early,
.init_irq = devkit8000_init_irq, .init_irq = devkit8000_init_irq,
.init_machine = devkit8000_init, .init_machine = devkit8000_init,
.timer = &omap_timer, .timer = &omap_timer,
......
/* /*
* board-sdp-flash.c * board-flash.c
* Modified from mach-omap2/board-3430sdp-flash.c * Modified from mach-omap2/board-3430sdp-flash.c
* *
* Copyright (C) 2009 Nokia Corporation * Copyright (C) 2009 Nokia Corporation
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>
#include <linux/io.h> #include <linux/io.h>
#include <plat/irqs.h>
#include <plat/gpmc.h> #include <plat/gpmc.h>
#include <plat/nand.h> #include <plat/nand.h>
...@@ -73,11 +74,11 @@ __init board_nor_init(struct mtd_partition *nor_parts, u8 nr_parts, u8 cs) ...@@ -73,11 +74,11 @@ __init board_nor_init(struct mtd_partition *nor_parts, u8 nr_parts, u8 cs)
+ FLASH_SIZE_SDPV1 - 1; + FLASH_SIZE_SDPV1 - 1;
} }
if (err < 0) { if (err < 0) {
printk(KERN_ERR "NOR: Can't request GPMC CS\n"); pr_err("NOR: Can't request GPMC CS\n");
return; return;
} }
if (platform_device_register(&board_nor_device) < 0) if (platform_device_register(&board_nor_device) < 0)
printk(KERN_ERR "Unable to register NOR device\n"); pr_err("Unable to register NOR device\n");
} }
#if defined(CONFIG_MTD_ONENAND_OMAP2) || \ #if defined(CONFIG_MTD_ONENAND_OMAP2) || \
...@@ -139,17 +140,21 @@ static struct omap_nand_platform_data board_nand_data = { ...@@ -139,17 +140,21 @@ static struct omap_nand_platform_data board_nand_data = {
}; };
void void
__init board_nand_init(struct mtd_partition *nand_parts, u8 nr_parts, u8 cs) __init board_nand_init(struct mtd_partition *nand_parts,
u8 nr_parts, u8 cs, int nand_type)
{ {
board_nand_data.cs = cs; board_nand_data.cs = cs;
board_nand_data.parts = nand_parts; board_nand_data.parts = nand_parts;
board_nand_data.nr_parts = nr_parts; board_nand_data.nr_parts = nr_parts;
board_nand_data.devsize = nand_type;
board_nand_data.ecc_opt = OMAP_ECC_HAMMING_CODE_DEFAULT;
board_nand_data.gpmc_irq = OMAP_GPMC_IRQ_BASE + cs;
gpmc_nand_init(&board_nand_data); gpmc_nand_init(&board_nand_data);
} }
#else #else
void void
__init board_nand_init(struct mtd_partition *nand_parts, u8 nr_parts, u8 cs) __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 */
...@@ -189,12 +194,12 @@ static u8 get_gpmc0_type(void) ...@@ -189,12 +194,12 @@ static u8 get_gpmc0_type(void)
} }
/** /**
* sdp3430_flash_init - Identify devices connected to GPMC and register. * board_flash_init - Identify devices connected to GPMC and register.
* *
* @return - void. * @return - void.
*/ */
void board_flash_init(struct flash_partitions partition_info[], void board_flash_init(struct flash_partitions partition_info[],
char chip_sel_board[][GPMC_CS_NUM]) char chip_sel_board[][GPMC_CS_NUM], int nand_type)
{ {
u8 cs = 0; u8 cs = 0;
u8 norcs = GPMC_CS_NUM + 1; u8 norcs = GPMC_CS_NUM + 1;
...@@ -208,7 +213,7 @@ void board_flash_init(struct flash_partitions partition_info[], ...@@ -208,7 +213,7 @@ void board_flash_init(struct flash_partitions partition_info[],
*/ */
idx = get_gpmc0_type(); idx = get_gpmc0_type();
if (idx >= MAX_SUPPORTED_GPMC_CONFIG) { if (idx >= MAX_SUPPORTED_GPMC_CONFIG) {
printk(KERN_ERR "%s: Invalid chip select: %d\n", __func__, cs); pr_err("%s: Invalid chip select: %d\n", __func__, cs);
return; return;
} }
config_sel = (unsigned char *)(chip_sel_board[idx]); config_sel = (unsigned char *)(chip_sel_board[idx]);
...@@ -232,23 +237,20 @@ void board_flash_init(struct flash_partitions partition_info[], ...@@ -232,23 +237,20 @@ void board_flash_init(struct flash_partitions partition_info[],
} }
if (norcs > GPMC_CS_NUM) if (norcs > GPMC_CS_NUM)
printk(KERN_INFO "NOR: Unable to find configuration " pr_err("NOR: Unable to find configuration in GPMC\n");
"in GPMC\n");
else else
board_nor_init(partition_info[0].parts, board_nor_init(partition_info[0].parts,
partition_info[0].nr_parts, norcs); partition_info[0].nr_parts, norcs);
if (onenandcs > GPMC_CS_NUM) if (onenandcs > GPMC_CS_NUM)
printk(KERN_INFO "OneNAND: Unable to find configuration " pr_err("OneNAND: Unable to find configuration in GPMC\n");
"in GPMC\n");
else else
board_onenand_init(partition_info[1].parts, board_onenand_init(partition_info[1].parts,
partition_info[1].nr_parts, onenandcs); partition_info[1].nr_parts, onenandcs);
if (nandcs > GPMC_CS_NUM) if (nandcs > GPMC_CS_NUM)
printk(KERN_INFO "NAND: Unable to find configuration " pr_err("NAND: Unable to find configuration in GPMC\n");
"in GPMC\n");
else else
board_nand_init(partition_info[2].parts, board_nand_init(partition_info[2].parts,
partition_info[2].nr_parts, nandcs); partition_info[2].nr_parts, nandcs, nand_type);
} }
...@@ -25,6 +25,6 @@ struct flash_partitions { ...@@ -25,6 +25,6 @@ struct flash_partitions {
}; };
extern void board_flash_init(struct flash_partitions [], extern void board_flash_init(struct flash_partitions [],
char chip_sel[][GPMC_CS_NUM]); char chip_sel[][GPMC_CS_NUM], int nand_type);
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); u8 nr_parts, u8 cs, int nand_type);
...@@ -33,18 +33,17 @@ ...@@ -33,18 +33,17 @@
static struct omap_board_config_kernel generic_config[] = { static struct omap_board_config_kernel generic_config[] = {
}; };
static void __init omap_generic_init_irq(void) static void __init omap_generic_init_early(void)
{ {
omap_board_config = generic_config;
omap_board_config_size = ARRAY_SIZE(generic_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL); omap2_init_common_devices(NULL, NULL);
omap_init_irq();
} }
static void __init omap_generic_init(void) static void __init omap_generic_init(void)
{ {
omap_serial_init(); omap_serial_init();
omap_board_config = generic_config;
omap_board_config_size = ARRAY_SIZE(generic_config);
} }
static void __init omap_generic_map_io(void) static void __init omap_generic_map_io(void)
...@@ -68,9 +67,10 @@ static void __init omap_generic_map_io(void) ...@@ -68,9 +67,10 @@ static void __init omap_generic_map_io(void)
MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx") MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx")
/* Maintainer: Paul Mundt <paul.mundt@nokia.com> */ /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap_generic_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_generic_init_irq, .map_io = omap_generic_map_io,
.init_early = omap_generic_init_early,
.init_irq = omap_init_irq,
.init_machine = omap_generic_init, .init_machine = omap_generic_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -290,12 +290,14 @@ static struct omap_board_config_kernel h4_config[] __initdata = { ...@@ -290,12 +290,14 @@ 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_irq(void) static void __init omap_h4_init_early(void)
{ {
omap_board_config = h4_config;
omap_board_config_size = ARRAY_SIZE(h4_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL); omap2_init_common_devices(NULL, NULL);
}
static void __init omap_h4_init_irq(void)
{
omap_init_irq(); omap_init_irq();
h4_init_flash(); h4_init_flash();
} }
...@@ -330,6 +332,9 @@ static void __init omap_h4_init(void) ...@@ -330,6 +332,9 @@ static void __init omap_h4_init(void)
{ {
omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAF); omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAF);
omap_board_config = h4_config;
omap_board_config_size = ARRAY_SIZE(h4_config);
/* /*
* Make sure the serial ports are muxed on at this point. * Make sure the serial ports are muxed on at this point.
* You have to mux them off in device drivers later on * You have to mux them off in device drivers later on
...@@ -378,8 +383,9 @@ static void __init omap_h4_map_io(void) ...@@ -378,8 +383,9 @@ static void __init omap_h4_map_io(void)
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,
.map_io = omap_h4_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap_h4_map_io,
.init_early = omap_h4_init_early,
.init_irq = omap_h4_init_irq, .init_irq = omap_h4_init_irq,
.init_machine = omap_h4_init, .init_machine = omap_h4_init,
.timer = &omap_timer, .timer = &omap_timer,
......
...@@ -250,7 +250,7 @@ static inline void __init igep2_init_smsc911x(void) { } ...@@ -250,7 +250,7 @@ static inline void __init igep2_init_smsc911x(void) { }
#endif #endif
static struct regulator_consumer_supply igep2_vmmc1_supply = static struct regulator_consumer_supply igep2_vmmc1_supply =
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0"); REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */ /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
static struct regulator_init_data igep2_vmmc1 = { static struct regulator_init_data igep2_vmmc1 = {
...@@ -268,7 +268,7 @@ static struct regulator_init_data igep2_vmmc1 = { ...@@ -268,7 +268,7 @@ static struct regulator_init_data igep2_vmmc1 = {
}; };
static struct regulator_consumer_supply igep2_vio_supply = static struct regulator_consumer_supply igep2_vio_supply =
REGULATOR_SUPPLY("vmmc_aux", "mmci-omap-hs.1"); REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.1");
static struct regulator_init_data igep2_vio = { static struct regulator_init_data igep2_vio = {
.constraints = { .constraints = {
...@@ -286,7 +286,7 @@ static struct regulator_init_data igep2_vio = { ...@@ -286,7 +286,7 @@ static struct regulator_init_data igep2_vio = {
}; };
static struct regulator_consumer_supply igep2_vmmc2_supply = static struct regulator_consumer_supply igep2_vmmc2_supply =
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1"); REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
static struct regulator_init_data igep2_vmmc2 = { static struct regulator_init_data igep2_vmmc2 = {
.constraints = { .constraints = {
...@@ -485,18 +485,8 @@ static struct omap_dss_board_info igep2_dss_data = { ...@@ -485,18 +485,8 @@ static struct omap_dss_board_info igep2_dss_data = {
.default_device = &igep2_dvi_device, .default_device = &igep2_dvi_device,
}; };
static struct platform_device igep2_dss_device = { static struct regulator_consumer_supply igep2_vpll2_supply =
.name = "omapdss", REGULATOR_SUPPLY("vdds_dsi", "omapdss");
.id = -1,
.dev = {
.platform_data = &igep2_dss_data,
},
};
static struct regulator_consumer_supply igep2_vpll2_supply = {
.supply = "vdds_dsi",
.dev = &igep2_dss_device.dev,
};
static struct regulator_init_data igep2_vpll2 = { static struct regulator_init_data igep2_vpll2 = {
.constraints = { .constraints = {
...@@ -521,21 +511,17 @@ static void __init igep2_display_init(void) ...@@ -521,21 +511,17 @@ static void __init igep2_display_init(void)
} }
static struct platform_device *igep2_devices[] __initdata = { static struct platform_device *igep2_devices[] __initdata = {
&igep2_dss_device,
&igep2_vwlan_device, &igep2_vwlan_device,
}; };
static void __init igep2_init_irq(void) static void __init igep2_init_early(void)
{ {
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(m65kxxxxam_sdrc_params, omap2_init_common_devices(m65kxxxxam_sdrc_params,
m65kxxxxam_sdrc_params); m65kxxxxam_sdrc_params);
omap_init_irq();
} }
static struct twl4030_codec_audio_data igep2_audio_data = { static struct twl4030_codec_audio_data igep2_audio_data;
.audio_mclk = 26000000,
};
static struct twl4030_codec_data igep2_codec_data = { static struct twl4030_codec_data igep2_codec_data = {
.audio_mclk = 26000000, .audio_mclk = 26000000,
...@@ -697,6 +683,7 @@ static void __init igep2_init(void) ...@@ -697,6 +683,7 @@ static void __init igep2_init(void)
/* Register I2C busses and drivers */ /* Register I2C busses and drivers */
igep2_i2c_init(); igep2_i2c_init();
platform_add_devices(igep2_devices, ARRAY_SIZE(igep2_devices)); platform_add_devices(igep2_devices, ARRAY_SIZE(igep2_devices));
omap_display_init(&igep2_dss_data);
omap_serial_init(); omap_serial_init();
usb_musb_init(&musb_board_data); usb_musb_init(&musb_board_data);
usb_ehci_init(&ehci_pdata); usb_ehci_init(&ehci_pdata);
...@@ -716,9 +703,10 @@ static void __init igep2_init(void) ...@@ -716,9 +703,10 @@ static void __init igep2_init(void)
MACHINE_START(IGEP0020, "IGEP v2 board") MACHINE_START(IGEP0020, "IGEP v2 board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = igep2_init_irq, .map_io = omap3_map_io,
.init_early = igep2_init_early,
.init_irq = omap_init_irq,
.init_machine = igep2_init, .init_machine = igep2_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -142,7 +142,7 @@ static void __init igep3_flash_init(void) {} ...@@ -142,7 +142,7 @@ static void __init igep3_flash_init(void) {}
#endif #endif
static struct regulator_consumer_supply igep3_vmmc1_supply = static struct regulator_consumer_supply igep3_vmmc1_supply =
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0"); REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */ /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
static struct regulator_init_data igep3_vmmc1 = { static struct regulator_init_data igep3_vmmc1 = {
...@@ -160,7 +160,7 @@ static struct regulator_init_data igep3_vmmc1 = { ...@@ -160,7 +160,7 @@ static struct regulator_init_data igep3_vmmc1 = {
}; };
static struct regulator_consumer_supply igep3_vio_supply = static struct regulator_consumer_supply igep3_vio_supply =
REGULATOR_SUPPLY("vmmc_aux", "mmci-omap-hs.1"); REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.1");
static struct regulator_init_data igep3_vio = { static struct regulator_init_data igep3_vio = {
.constraints = { .constraints = {
...@@ -178,7 +178,7 @@ static struct regulator_init_data igep3_vio = { ...@@ -178,7 +178,7 @@ static struct regulator_init_data igep3_vio = {
}; };
static struct regulator_consumer_supply igep3_vmmc2_supply = static struct regulator_consumer_supply igep3_vmmc2_supply =
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1"); REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
static struct regulator_init_data igep3_vmmc2 = { static struct regulator_init_data igep3_vmmc2 = {
.constraints = { .constraints = {
...@@ -331,12 +331,11 @@ static struct platform_device *igep3_devices[] __initdata = { ...@@ -331,12 +331,11 @@ static struct platform_device *igep3_devices[] __initdata = {
&igep3_vwlan_device, &igep3_vwlan_device,
}; };
static void __init igep3_init_irq(void) static void __init igep3_init_early(void)
{ {
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(m65kxxxxam_sdrc_params, omap2_init_common_devices(m65kxxxxam_sdrc_params,
m65kxxxxam_sdrc_params); m65kxxxxam_sdrc_params);
omap_init_irq();
} }
static struct twl4030_platform_data igep3_twl4030_pdata = { static struct twl4030_platform_data igep3_twl4030_pdata = {
...@@ -452,7 +451,8 @@ MACHINE_START(IGEP0030, "IGEP OMAP3 module") ...@@ -452,7 +451,8 @@ 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_irq = igep3_init_irq, .init_early = igep3_init_early,
.init_irq = omap_init_irq,
.init_machine = igep3_init, .init_machine = igep3_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -288,13 +288,10 @@ static struct omap_board_config_kernel ldp_config[] __initdata = { ...@@ -288,13 +288,10 @@ 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_irq(void) static void __init omap_ldp_init_early(void)
{ {
omap_board_config = ldp_config;
omap_board_config_size = ARRAY_SIZE(ldp_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL); omap2_init_common_devices(NULL, NULL);
omap_init_irq();
} }
static struct twl4030_usb_data ldp_usb_data = { static struct twl4030_usb_data ldp_usb_data = {
...@@ -330,6 +327,26 @@ static struct regulator_init_data ldp_vmmc1 = { ...@@ -330,6 +327,26 @@ static struct regulator_init_data ldp_vmmc1 = {
.consumer_supplies = &ldp_vmmc1_supply, .consumer_supplies = &ldp_vmmc1_supply,
}; };
/* ads7846 on SPI */
static struct regulator_consumer_supply ldp_vaux1_supplies[] = {
REGULATOR_SUPPLY("vcc", "spi1.0"),
};
/* VAUX1 */
static struct regulator_init_data ldp_vaux1 = {
.constraints = {
.min_uV = 3000000,
.max_uV = 3000000,
.apply_uV = true,
.valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY,
.valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS,
},
.num_consumer_supplies = ARRAY_SIZE(ldp_vaux1_supplies),
.consumer_supplies = ldp_vaux1_supplies,
};
static struct twl4030_platform_data ldp_twldata = { static struct twl4030_platform_data ldp_twldata = {
.irq_base = TWL4030_IRQ_BASE, .irq_base = TWL4030_IRQ_BASE,
.irq_end = TWL4030_IRQ_END, .irq_end = TWL4030_IRQ_END,
...@@ -338,6 +355,7 @@ static struct twl4030_platform_data ldp_twldata = { ...@@ -338,6 +355,7 @@ static struct twl4030_platform_data ldp_twldata = {
.madc = &ldp_madc_data, .madc = &ldp_madc_data,
.usb = &ldp_usb_data, .usb = &ldp_usb_data,
.vmmc1 = &ldp_vmmc1, .vmmc1 = &ldp_vmmc1,
.vaux1 = &ldp_vaux1,
.gpio = &ldp_gpio_data, .gpio = &ldp_gpio_data,
.keypad = &ldp_kp_twl4030_data, .keypad = &ldp_kp_twl4030_data,
}; };
...@@ -423,6 +441,8 @@ static struct mtd_partition ldp_nand_partitions[] = { ...@@ -423,6 +441,8 @@ static struct mtd_partition ldp_nand_partitions[] = {
static void __init omap_ldp_init(void) static void __init omap_ldp_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_board_config = ldp_config;
omap_board_config_size = ARRAY_SIZE(ldp_config);
ldp_init_smsc911x(); ldp_init_smsc911x();
omap_i2c_init(); omap_i2c_init();
platform_add_devices(ldp_devices, ARRAY_SIZE(ldp_devices)); platform_add_devices(ldp_devices, ARRAY_SIZE(ldp_devices));
...@@ -434,7 +454,7 @@ static void __init omap_ldp_init(void) ...@@ -434,7 +454,7 @@ static void __init omap_ldp_init(void)
omap_serial_init(); omap_serial_init();
usb_musb_init(&musb_board_data); usb_musb_init(&musb_board_data);
board_nand_init(ldp_nand_partitions, board_nand_init(ldp_nand_partitions,
ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS); ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0);
omap2_hsmmc_init(mmc); omap2_hsmmc_init(mmc);
/* link regulators to MMC adapters */ /* link regulators to MMC adapters */
...@@ -443,9 +463,10 @@ static void __init omap_ldp_init(void) ...@@ -443,9 +463,10 @@ static void __init omap_ldp_init(void)
MACHINE_START(OMAP_LDP, "OMAP LDP board") MACHINE_START(OMAP_LDP, "OMAP LDP board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_ldp_init_irq, .map_io = omap3_map_io,
.init_early = omap_ldp_init_early,
.init_irq = omap_init_irq,
.init_machine = omap_ldp_init, .init_machine = omap_ldp_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -536,7 +536,7 @@ static void __init n8x0_mmc_init(void) ...@@ -536,7 +536,7 @@ static void __init n8x0_mmc_init(void)
} }
mmc_data[0] = &mmc1_data; mmc_data[0] = &mmc1_data;
omap2_init_mmc(mmc_data, OMAP24XX_NR_MMC); omap242x_init_mmc(mmc_data);
} }
#else #else
...@@ -628,11 +628,10 @@ static void __init n8x0_map_io(void) ...@@ -628,11 +628,10 @@ static void __init n8x0_map_io(void)
omap242x_map_common_io(); omap242x_map_common_io();
} }
static void __init n8x0_init_irq(void) static void __init n8x0_init_early(void)
{ {
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL); omap2_init_common_devices(NULL, NULL);
omap_init_irq();
} }
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
...@@ -703,27 +702,30 @@ static void __init n8x0_init_machine(void) ...@@ -703,27 +702,30 @@ 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,
.map_io = n8x0_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = n8x0_init_irq, .map_io = n8x0_map_io,
.init_early = n8x0_init_early,
.init_irq = omap_init_irq,
.init_machine = n8x0_init_machine, .init_machine = n8x0_init_machine,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
MACHINE_START(NOKIA_N810, "Nokia N810") MACHINE_START(NOKIA_N810, "Nokia N810")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = n8x0_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = n8x0_init_irq, .map_io = n8x0_map_io,
.init_early = n8x0_init_early,
.init_irq = omap_init_irq,
.init_machine = n8x0_init_machine, .init_machine = n8x0_init_machine,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX") MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = n8x0_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = n8x0_init_irq, .map_io = n8x0_map_io,
.init_early = n8x0_init_early,
.init_irq = omap_init_irq,
.init_machine = n8x0_init_machine, .init_machine = n8x0_init_machine,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -228,14 +228,6 @@ static struct omap_dss_board_info beagle_dss_data = { ...@@ -228,14 +228,6 @@ static struct omap_dss_board_info beagle_dss_data = {
.default_device = &beagle_dvi_device, .default_device = &beagle_dvi_device,
}; };
static struct platform_device beagle_dss_device = {
.name = "omapdss",
.id = -1,
.dev = {
.platform_data = &beagle_dss_data,
},
};
static struct regulator_consumer_supply beagle_vdac_supply = static struct regulator_consumer_supply beagle_vdac_supply =
REGULATOR_SUPPLY("vdda_dac", "omapdss"); REGULATOR_SUPPLY("vdda_dac", "omapdss");
...@@ -435,9 +427,7 @@ static struct twl4030_usb_data beagle_usb_data = { ...@@ -435,9 +427,7 @@ static struct twl4030_usb_data beagle_usb_data = {
.usb_mode = T2_USB_MODE_ULPI, .usb_mode = T2_USB_MODE_ULPI,
}; };
static struct twl4030_codec_audio_data beagle_audio_data = { static struct twl4030_codec_audio_data beagle_audio_data;
.audio_mclk = 26000000,
};
static struct twl4030_codec_data beagle_codec_data = { static struct twl4030_codec_data beagle_codec_data = {
.audio_mclk = 26000000, .audio_mclk = 26000000,
...@@ -536,11 +526,15 @@ static struct platform_device keys_gpio = { ...@@ -536,11 +526,15 @@ static struct platform_device keys_gpio = {
}, },
}; };
static void __init omap3_beagle_init_irq(void) static void __init omap3_beagle_init_early(void)
{ {
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params); mt46h32m32lf6_sdrc_params);
}
static void __init omap3_beagle_init_irq(void)
{
omap_init_irq(); omap_init_irq();
#ifdef CONFIG_OMAP_32K_TIMER #ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer(12); omap2_gp_clockevent_set_gptimer(12);
...@@ -550,7 +544,6 @@ static void __init omap3_beagle_init_irq(void) ...@@ -550,7 +544,6 @@ static void __init omap3_beagle_init_irq(void)
static struct platform_device *omap3_beagle_devices[] __initdata = { static struct platform_device *omap3_beagle_devices[] __initdata = {
&leds_gpio, &leds_gpio,
&keys_gpio, &keys_gpio,
&beagle_dss_device,
}; };
static void __init omap3beagle_flash_init(void) static void __init omap3beagle_flash_init(void)
...@@ -617,6 +610,7 @@ static void __init omap3_beagle_init(void) ...@@ -617,6 +610,7 @@ static void __init omap3_beagle_init(void)
omap3_beagle_i2c_init(); omap3_beagle_i2c_init();
platform_add_devices(omap3_beagle_devices, platform_add_devices(omap3_beagle_devices,
ARRAY_SIZE(omap3_beagle_devices)); ARRAY_SIZE(omap3_beagle_devices));
omap_display_init(&beagle_dss_data);
omap_serial_init(); omap_serial_init();
omap_mux_init_gpio(170, OMAP_PIN_INPUT); omap_mux_init_gpio(170, OMAP_PIN_INPUT);
...@@ -638,8 +632,9 @@ static void __init omap3_beagle_init(void) ...@@ -638,8 +632,9 @@ static void __init omap3_beagle_init(void)
MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
/* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */ /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io,
.init_early = omap3_beagle_init_early,
.init_irq = omap3_beagle_init_irq, .init_irq = omap3_beagle_init_irq,
.init_machine = omap3_beagle_init, .init_machine = omap3_beagle_init,
.timer = &omap_timer, .timer = &omap_timer,
......
This diff is collapsed.
...@@ -195,11 +195,10 @@ static inline void __init board_smsc911x_init(void) ...@@ -195,11 +195,10 @@ 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_irq(void) static void __init omap3logic_init_early(void)
{ {
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL); omap2_init_common_devices(NULL, NULL);
omap_init_irq();
} }
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
...@@ -225,7 +224,8 @@ static void __init omap3logic_init(void) ...@@ -225,7 +224,8 @@ 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_irq = omap3logic_init_irq, .init_early = omap3logic_init_early,
.init_irq = omap_init_irq,
.init_machine = omap3logic_init, .init_machine = omap3logic_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -233,7 +233,8 @@ MACHINE_END ...@@ -233,7 +233,8 @@ 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_irq = omap3logic_init_irq, .init_early = omap3logic_init_early,
.init_irq = omap_init_irq,
.init_machine = omap3logic_init, .init_machine = omap3logic_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -253,14 +253,6 @@ static struct omap_dss_board_info pandora_dss_data = { ...@@ -253,14 +253,6 @@ static struct omap_dss_board_info pandora_dss_data = {
.default_device = &pandora_lcd_device, .default_device = &pandora_lcd_device,
}; };
static struct platform_device pandora_dss_device = {
.name = "omapdss",
.id = -1,
.dev = {
.platform_data = &pandora_dss_data,
},
};
static void pandora_wl1251_init_card(struct mmc_card *card) static void pandora_wl1251_init_card(struct mmc_card *card)
{ {
/* /*
...@@ -341,13 +333,13 @@ static struct twl4030_gpio_platform_data omap3pandora_gpio_data = { ...@@ -341,13 +333,13 @@ static struct twl4030_gpio_platform_data omap3pandora_gpio_data = {
}; };
static struct regulator_consumer_supply pandora_vmmc1_supply = static struct regulator_consumer_supply pandora_vmmc1_supply =
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0"); REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
static struct regulator_consumer_supply pandora_vmmc2_supply = static struct regulator_consumer_supply pandora_vmmc2_supply =
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1"); REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
static struct regulator_consumer_supply pandora_vmmc3_supply = static struct regulator_consumer_supply pandora_vmmc3_supply =
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.2"); REGULATOR_SUPPLY("vmmc", "omap_hsmmc.2");
static struct regulator_consumer_supply pandora_vdda_dac_supply = static struct regulator_consumer_supply pandora_vdda_dac_supply =
REGULATOR_SUPPLY("vdda_dac", "omapdss"); REGULATOR_SUPPLY("vdda_dac", "omapdss");
...@@ -524,9 +516,7 @@ static struct twl4030_usb_data omap3pandora_usb_data = { ...@@ -524,9 +516,7 @@ static struct twl4030_usb_data omap3pandora_usb_data = {
.usb_mode = T2_USB_MODE_ULPI, .usb_mode = T2_USB_MODE_ULPI,
}; };
static struct twl4030_codec_audio_data omap3pandora_audio_data = { static struct twl4030_codec_audio_data omap3pandora_audio_data;
.audio_mclk = 26000000,
};
static struct twl4030_codec_data omap3pandora_codec_data = { static struct twl4030_codec_data omap3pandora_codec_data = {
.audio_mclk = 26000000, .audio_mclk = 26000000,
...@@ -634,12 +624,11 @@ static struct spi_board_info omap3pandora_spi_board_info[] __initdata = { ...@@ -634,12 +624,11 @@ static struct spi_board_info omap3pandora_spi_board_info[] __initdata = {
} }
}; };
static void __init omap3pandora_init_irq(void) static void __init omap3pandora_init_early(void)
{ {
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params); mt46h32m32lf6_sdrc_params);
omap_init_irq();
} }
static void __init pandora_wl1251_init(void) static void __init pandora_wl1251_init(void)
...@@ -677,7 +666,6 @@ static void __init pandora_wl1251_init(void) ...@@ -677,7 +666,6 @@ static void __init pandora_wl1251_init(void)
static struct platform_device *omap3pandora_devices[] __initdata = { static struct platform_device *omap3pandora_devices[] __initdata = {
&pandora_leds_gpio, &pandora_leds_gpio,
&pandora_keys_gpio, &pandora_keys_gpio,
&pandora_dss_device,
&pandora_vwlan_device, &pandora_vwlan_device,
}; };
...@@ -712,6 +700,7 @@ static void __init omap3pandora_init(void) ...@@ -712,6 +700,7 @@ static void __init omap3pandora_init(void)
pandora_wl1251_init(); pandora_wl1251_init();
platform_add_devices(omap3pandora_devices, platform_add_devices(omap3pandora_devices,
ARRAY_SIZE(omap3pandora_devices)); ARRAY_SIZE(omap3pandora_devices));
omap_display_init(&pandora_dss_data);
omap_serial_init(); omap_serial_init();
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));
...@@ -727,9 +716,10 @@ static void __init omap3pandora_init(void) ...@@ -727,9 +716,10 @@ static void __init omap3pandora_init(void)
MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console") MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap3pandora_init_irq, .map_io = omap3_map_io,
.init_early = omap3pandora_init_early,
.init_irq = omap_init_irq,
.init_machine = omap3pandora_init, .init_machine = omap3pandora_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -240,14 +240,6 @@ static struct omap_dss_board_info omap3_stalker_dss_data = { ...@@ -240,14 +240,6 @@ static struct omap_dss_board_info omap3_stalker_dss_data = {
.default_device = &omap3_stalker_dvi_device, .default_device = &omap3_stalker_dvi_device,
}; };
static struct platform_device omap3_stalker_dss_device = {
.name = "omapdss",
.id = -1,
.dev = {
.platform_data = &omap3_stalker_dss_data,
},
};
static struct regulator_consumer_supply omap3stalker_vmmc1_supply = { static struct regulator_consumer_supply omap3stalker_vmmc1_supply = {
.supply = "vmmc", .supply = "vmmc",
}; };
...@@ -439,19 +431,15 @@ static struct twl4030_madc_platform_data omap3stalker_madc_data = { ...@@ -439,19 +431,15 @@ static struct twl4030_madc_platform_data omap3stalker_madc_data = {
.irq_line = 1, .irq_line = 1,
}; };
static struct twl4030_codec_audio_data omap3stalker_audio_data = { static struct twl4030_codec_audio_data omap3stalker_audio_data;
.audio_mclk = 26000000,
};
static struct twl4030_codec_data omap3stalker_codec_data = { static struct twl4030_codec_data omap3stalker_codec_data = {
.audio_mclk = 26000000, .audio_mclk = 26000000,
.audio = &omap3stalker_audio_data, .audio = &omap3stalker_audio_data,
}; };
static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply = { static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply =
.supply = "vdda_dac", REGULATOR_SUPPLY("vdda_dac", "omapdss");
.dev = &omap3_stalker_dss_device.dev,
};
/* VDAC for DSS driving S-Video */ /* VDAC for DSS driving S-Video */
static struct regulator_init_data omap3_stalker_vdac = { static struct regulator_init_data omap3_stalker_vdac = {
...@@ -469,10 +457,8 @@ static struct regulator_init_data omap3_stalker_vdac = { ...@@ -469,10 +457,8 @@ static struct regulator_init_data omap3_stalker_vdac = {
}; };
/* VPLL2 for digital video outputs */ /* VPLL2 for digital video outputs */
static struct regulator_consumer_supply omap3_stalker_vpll2_supply = { static struct regulator_consumer_supply omap3_stalker_vpll2_supply =
.supply = "vdds_dsi", REGULATOR_SUPPLY("vdds_dsi", "omapdss");
.dev = &omap3_stalker_lcd_device.dev,
};
static struct regulator_init_data omap3_stalker_vpll2 = { static struct regulator_init_data omap3_stalker_vpll2 = {
.constraints = { .constraints = {
...@@ -591,12 +577,14 @@ static struct spi_board_info omap3stalker_spi_board_info[] = { ...@@ -591,12 +577,14 @@ static struct spi_board_info omap3stalker_spi_board_info[] = {
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_irq(void) static void __init omap3_stalker_init_early(void)
{ {
omap_board_config = omap3_stalker_config;
omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL); omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
}
static void __init omap3_stalker_init_irq(void)
{
omap_init_irq(); omap_init_irq();
#ifdef CONFIG_OMAP_32K_TIMER #ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer(12); omap2_gp_clockevent_set_gptimer(12);
...@@ -604,7 +592,6 @@ static void __init omap3_stalker_init_irq(void) ...@@ -604,7 +592,6 @@ static void __init omap3_stalker_init_irq(void)
} }
static struct platform_device *omap3_stalker_devices[] __initdata = { static struct platform_device *omap3_stalker_devices[] __initdata = {
&omap3_stalker_dss_device,
&keys_gpio, &keys_gpio,
}; };
...@@ -638,12 +625,15 @@ static struct omap_musb_board_data musb_board_data = { ...@@ -638,12 +625,15 @@ static struct omap_musb_board_data musb_board_data = {
static void __init omap3_stalker_init(void) static void __init omap3_stalker_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CUS); omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
omap_board_config = omap3_stalker_config;
omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
omap3_stalker_i2c_init(); omap3_stalker_i2c_init();
platform_add_devices(omap3_stalker_devices, platform_add_devices(omap3_stalker_devices,
ARRAY_SIZE(omap3_stalker_devices)); ARRAY_SIZE(omap3_stalker_devices));
omap_display_init(&omap3_stalker_dss_data);
spi_register_board_info(omap3stalker_spi_board_info, spi_register_board_info(omap3stalker_spi_board_info,
ARRAY_SIZE(omap3stalker_spi_board_info)); ARRAY_SIZE(omap3stalker_spi_board_info));
...@@ -666,6 +656,7 @@ MACHINE_START(SBC3530, "OMAP3 STALKER") ...@@ -666,6 +656,7 @@ 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_irq = omap3_stalker_init_irq, .init_irq = omap3_stalker_init_irq,
.init_machine = omap3_stalker_init, .init_machine = omap3_stalker_init,
.timer = &omap_timer, .timer = &omap_timer,
......
...@@ -252,9 +252,7 @@ static struct twl4030_usb_data touchbook_usb_data = { ...@@ -252,9 +252,7 @@ static struct twl4030_usb_data touchbook_usb_data = {
.usb_mode = T2_USB_MODE_ULPI, .usb_mode = T2_USB_MODE_ULPI,
}; };
static struct twl4030_codec_audio_data touchbook_audio_data = { static struct twl4030_codec_audio_data touchbook_audio_data;
.audio_mclk = 26000000,
};
static struct twl4030_codec_data touchbook_codec_data = { static struct twl4030_codec_data touchbook_codec_data = {
.audio_mclk = 26000000, .audio_mclk = 26000000,
...@@ -415,14 +413,15 @@ static struct omap_board_mux board_mux[] __initdata = { ...@@ -415,14 +413,15 @@ static struct omap_board_mux board_mux[] __initdata = {
}; };
#endif #endif
static void __init omap3_touchbook_init_irq(void) static void __init omap3_touchbook_init_early(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_board_config = omap3_touchbook_config;
omap_board_config_size = ARRAY_SIZE(omap3_touchbook_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params); mt46h32m32lf6_sdrc_params);
}
static void __init omap3_touchbook_init_irq(void)
{
omap_init_irq(); omap_init_irq();
#ifdef CONFIG_OMAP_32K_TIMER #ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer(12); omap2_gp_clockevent_set_gptimer(12);
...@@ -510,6 +509,10 @@ static struct omap_musb_board_data musb_board_data = { ...@@ -510,6 +509,10 @@ static struct omap_musb_board_data musb_board_data = {
static void __init omap3_touchbook_init(void) static void __init omap3_touchbook_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_board_config = omap3_touchbook_config;
omap_board_config_size = ARRAY_SIZE(omap3_touchbook_config);
pm_power_off = omap3_touchbook_poweroff; pm_power_off = omap3_touchbook_poweroff;
omap3_touchbook_i2c_init(); omap3_touchbook_i2c_init();
...@@ -538,8 +541,9 @@ static void __init omap3_touchbook_init(void) ...@@ -538,8 +541,9 @@ static void __init omap3_touchbook_init(void)
MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board") MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board")
/* Maintainer: Gregoire Gentil - http://www.alwaysinnovating.com */ /* Maintainer: Gregoire Gentil - http://www.alwaysinnovating.com */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io,
.init_early = omap3_touchbook_init_early,
.init_irq = omap3_touchbook_init_irq, .init_irq = omap3_touchbook_init_irq,
.init_machine = omap3_touchbook_init, .init_machine = omap3_touchbook_init,
.timer = &omap_timer, .timer = &omap_timer,
......
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
#include <linux/usb/otg.h> #include <linux/usb/otg.h>
#include <linux/i2c/twl.h> #include <linux/i2c/twl.h>
#include <linux/regulator/machine.h> #include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
#include <linux/wl12xx.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/omap4-common.h> #include <mach/omap4-common.h>
...@@ -45,6 +47,18 @@ ...@@ -45,6 +47,18 @@
#define GPIO_HUB_POWER 1 #define GPIO_HUB_POWER 1
#define GPIO_HUB_NRESET 62 #define GPIO_HUB_NRESET 62
#define GPIO_WIFI_PMENA 43
#define GPIO_WIFI_IRQ 53
/* wl127x BT, FM, GPS connectivity chip */
static int wl1271_gpios[] = {46, -1, -1};
static struct platform_device wl1271_device = {
.name = "kim",
.id = -1,
.dev = {
.platform_data = &wl1271_gpios,
},
};
static struct gpio_led gpio_leds[] = { static struct gpio_led gpio_leds[] = {
{ {
...@@ -74,13 +88,13 @@ static struct platform_device leds_gpio = { ...@@ -74,13 +88,13 @@ static struct platform_device leds_gpio = {
static struct platform_device *panda_devices[] __initdata = { static struct platform_device *panda_devices[] __initdata = {
&leds_gpio, &leds_gpio,
&wl1271_device,
}; };
static void __init omap4_panda_init_irq(void) static void __init omap4_panda_init_early(void)
{ {
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL); omap2_init_common_devices(NULL, NULL);
gic_init_irq();
} }
static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
...@@ -162,16 +176,62 @@ static struct omap2_hsmmc_info mmc[] = { ...@@ -162,16 +176,62 @@ static struct omap2_hsmmc_info mmc[] = {
.gpio_wp = -EINVAL, .gpio_wp = -EINVAL,
.gpio_cd = -EINVAL, .gpio_cd = -EINVAL,
}, },
{
.name = "wl1271",
.mmc = 5,
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
.gpio_wp = -EINVAL,
.gpio_cd = -EINVAL,
.ocr_mask = MMC_VDD_165_195,
.nonremovable = true,
},
{} /* Terminator */ {} /* Terminator */
}; };
static struct regulator_consumer_supply omap4_panda_vmmc_supply[] = { static struct regulator_consumer_supply omap4_panda_vmmc_supply[] = {
{ {
.supply = "vmmc", .supply = "vmmc",
.dev_name = "mmci-omap-hs.0", .dev_name = "omap_hsmmc.0",
}, },
}; };
static struct regulator_consumer_supply omap4_panda_vmmc5_supply = {
.supply = "vmmc",
.dev_name = "omap_hsmmc.4",
};
static struct regulator_init_data panda_vmmc5 = {
.constraints = {
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
},
.num_consumer_supplies = 1,
.consumer_supplies = &omap4_panda_vmmc5_supply,
};
static struct fixed_voltage_config panda_vwlan = {
.supply_name = "vwl1271",
.microvolts = 1800000, /* 1.8V */
.gpio = GPIO_WIFI_PMENA,
.startup_delay = 70000, /* 70msec */
.enable_high = 1,
.enabled_at_boot = 0,
.init_data = &panda_vmmc5,
};
static struct platform_device omap_vwlan_device = {
.name = "reg-fixed-voltage",
.id = 1,
.dev = {
.platform_data = &panda_vwlan,
},
};
struct wl12xx_platform_data omap_panda_wlan_data __initdata = {
.irq = OMAP_GPIO_IRQ(GPIO_WIFI_IRQ),
/* PANDA ref clock is 38.4 MHz */
.board_ref_clock = 2,
};
static int omap4_twl6030_hsmmc_late_init(struct device *dev) static int omap4_twl6030_hsmmc_late_init(struct device *dev)
{ {
int ret = 0; int ret = 0;
...@@ -305,7 +365,6 @@ static struct regulator_init_data omap4_panda_vana = { ...@@ -305,7 +365,6 @@ static struct regulator_init_data omap4_panda_vana = {
.constraints = { .constraints = {
.min_uV = 2100000, .min_uV = 2100000,
.max_uV = 2100000, .max_uV = 2100000,
.apply_uV = true,
.valid_modes_mask = REGULATOR_MODE_NORMAL .valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY, | REGULATOR_MODE_STANDBY,
.valid_ops_mask = REGULATOR_CHANGE_MODE .valid_ops_mask = REGULATOR_CHANGE_MODE
...@@ -317,7 +376,6 @@ static struct regulator_init_data omap4_panda_vcxio = { ...@@ -317,7 +376,6 @@ static struct regulator_init_data omap4_panda_vcxio = {
.constraints = { .constraints = {
.min_uV = 1800000, .min_uV = 1800000,
.max_uV = 1800000, .max_uV = 1800000,
.apply_uV = true,
.valid_modes_mask = REGULATOR_MODE_NORMAL .valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY, | REGULATOR_MODE_STANDBY,
.valid_ops_mask = REGULATOR_CHANGE_MODE .valid_ops_mask = REGULATOR_CHANGE_MODE
...@@ -329,7 +387,6 @@ static struct regulator_init_data omap4_panda_vdac = { ...@@ -329,7 +387,6 @@ static struct regulator_init_data omap4_panda_vdac = {
.constraints = { .constraints = {
.min_uV = 1800000, .min_uV = 1800000,
.max_uV = 1800000, .max_uV = 1800000,
.apply_uV = true,
.valid_modes_mask = REGULATOR_MODE_NORMAL .valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY, | REGULATOR_MODE_STANDBY,
.valid_ops_mask = REGULATOR_CHANGE_MODE .valid_ops_mask = REGULATOR_CHANGE_MODE
...@@ -391,6 +448,19 @@ static int __init omap4_panda_i2c_init(void) ...@@ -391,6 +448,19 @@ static int __init omap4_panda_i2c_init(void)
#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 53 */
OMAP4_MUX(GPMC_NCS3, OMAP_MUX_MODE3 | OMAP_PIN_INPUT),
/* WLAN POWER ENABLE - GPIO 43 */
OMAP4_MUX(GPMC_A19, OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT),
/* WLAN SDIO: MMC5 CMD */
OMAP4_MUX(SDMMC5_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
/* WLAN SDIO: MMC5 CLK */
OMAP4_MUX(SDMMC5_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
/* WLAN SDIO: MMC5 DAT[0-3] */
OMAP4_MUX(SDMMC5_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
OMAP4_MUX(SDMMC5_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
OMAP4_MUX(SDMMC5_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
OMAP4_MUX(SDMMC5_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
{ .reg_offset = OMAP_MUX_TERMINATOR }, { .reg_offset = OMAP_MUX_TERMINATOR },
}; };
#else #else
...@@ -405,8 +475,12 @@ static void __init omap4_panda_init(void) ...@@ -405,8 +475,12 @@ static void __init omap4_panda_init(void)
package = OMAP_PACKAGE_CBL; package = OMAP_PACKAGE_CBL;
omap4_mux_init(board_mux, package); omap4_mux_init(board_mux, package);
if (wl12xx_set_platform_data(&omap_panda_wlan_data))
pr_err("error setting wl12xx data\n");
omap4_panda_i2c_init(); omap4_panda_i2c_init();
platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices)); platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
platform_device_register(&omap_vwlan_device);
omap_serial_init(); omap_serial_init();
omap4_twl6030_hsmmc_init(mmc); omap4_twl6030_hsmmc_init(mmc);
omap4_ehci_init(); omap4_ehci_init();
...@@ -424,7 +498,8 @@ MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board") ...@@ -424,7 +498,8 @@ MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap4_panda_map_io, .map_io = omap4_panda_map_io,
.init_irq = omap4_panda_init_irq, .init_early = omap4_panda_init_early,
.init_irq = gic_init_irq,
.init_machine = omap4_panda_init, .init_machine = omap4_panda_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -358,9 +358,7 @@ static struct regulator_init_data overo_vmmc1 = { ...@@ -358,9 +358,7 @@ static struct regulator_init_data overo_vmmc1 = {
.consumer_supplies = &overo_vmmc1_supply, .consumer_supplies = &overo_vmmc1_supply,
}; };
static struct twl4030_codec_audio_data overo_audio_data = { static struct twl4030_codec_audio_data overo_audio_data;
.audio_mclk = 26000000,
};
static struct twl4030_codec_data overo_codec_data = { static struct twl4030_codec_data overo_codec_data = {
.audio_mclk = 26000000, .audio_mclk = 26000000,
...@@ -409,14 +407,11 @@ static struct omap_board_config_kernel overo_config[] __initdata = { ...@@ -409,14 +407,11 @@ static struct omap_board_config_kernel overo_config[] __initdata = {
{ OMAP_TAG_LCD, &overo_lcd_config }, { OMAP_TAG_LCD, &overo_lcd_config },
}; };
static void __init overo_init_irq(void) static void __init overo_init_early(void)
{ {
omap_board_config = overo_config;
omap_board_config_size = ARRAY_SIZE(overo_config);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params); mt46h32m32lf6_sdrc_params);
omap_init_irq();
} }
static struct platform_device *overo_devices[] __initdata = { static struct platform_device *overo_devices[] __initdata = {
...@@ -449,6 +444,8 @@ static struct omap_musb_board_data musb_board_data = { ...@@ -449,6 +444,8 @@ static struct omap_musb_board_data musb_board_data = {
static void __init overo_init(void) static void __init overo_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_board_config = overo_config;
omap_board_config_size = ARRAY_SIZE(overo_config);
overo_i2c_init(); overo_i2c_init();
platform_add_devices(overo_devices, ARRAY_SIZE(overo_devices)); platform_add_devices(overo_devices, ARRAY_SIZE(overo_devices));
omap_serial_init(); omap_serial_init();
...@@ -501,9 +498,10 @@ static void __init overo_init(void) ...@@ -501,9 +498,10 @@ static void __init overo_init(void)
MACHINE_START(OVERO, "Gumstix Overo") MACHINE_START(OVERO, "Gumstix Overo")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = overo_init_irq, .map_io = omap3_map_io,
.init_early = overo_init_early,
.init_irq = omap_init_irq,
.init_machine = overo_init, .init_machine = overo_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#include "sdram-nokia.h" #include "sdram-nokia.h"
static struct regulator_consumer_supply rm680_vemmc_consumers[] = { static struct regulator_consumer_supply rm680_vemmc_consumers[] = {
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1"), REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
}; };
/* Fixed regulator for internal eMMC */ /* Fixed regulator for internal eMMC */
...@@ -138,14 +138,13 @@ static void __init rm680_peripherals_init(void) ...@@ -138,14 +138,13 @@ static void __init rm680_peripherals_init(void)
omap2_hsmmc_init(mmc); omap2_hsmmc_init(mmc);
} }
static void __init rm680_init_irq(void) static void __init rm680_init_early(void)
{ {
struct omap_sdrc_params *sdrc_params; struct omap_sdrc_params *sdrc_params;
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
sdrc_params = nokia_get_sdram_timings(); sdrc_params = nokia_get_sdram_timings();
omap2_init_common_devices(sdrc_params, sdrc_params); omap2_init_common_devices(sdrc_params, sdrc_params);
omap_init_irq();
} }
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
...@@ -176,9 +175,10 @@ static void __init rm680_map_io(void) ...@@ -176,9 +175,10 @@ static void __init rm680_map_io(void)
MACHINE_START(NOKIA_RM680, "Nokia RM-680 board") MACHINE_START(NOKIA_RM680, "Nokia RM-680 board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = rm680_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = rm680_init_irq, .map_io = rm680_map_io,
.init_early = rm680_init_early,
.init_irq = omap_init_irq,
.init_machine = rm680_init, .init_machine = rm680_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -36,6 +36,8 @@ ...@@ -36,6 +36,8 @@
#include <sound/tlv320aic3x.h> #include <sound/tlv320aic3x.h>
#include <sound/tpa6130a2-plat.h> #include <sound/tpa6130a2-plat.h>
#include <media/radio-si4713.h>
#include <media/si4713.h>
#include <../drivers/staging/iio/light/tsl2563.h> #include <../drivers/staging/iio/light/tsl2563.h>
...@@ -47,6 +49,8 @@ ...@@ -47,6 +49,8 @@
#define RX51_WL1251_POWER_GPIO 87 #define RX51_WL1251_POWER_GPIO 87
#define RX51_WL1251_IRQ_GPIO 42 #define RX51_WL1251_IRQ_GPIO 42
#define RX51_FMTX_RESET_GPIO 163
#define RX51_FMTX_IRQ 53
/* list all spi devices here */ /* list all spi devices here */
enum { enum {
...@@ -331,13 +335,13 @@ static struct omap2_hsmmc_info mmc[] __initdata = { ...@@ -331,13 +335,13 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
}; };
static struct regulator_consumer_supply rx51_vmmc1_supply = static struct regulator_consumer_supply rx51_vmmc1_supply =
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0"); REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
static struct regulator_consumer_supply rx51_vaux3_supply = static struct regulator_consumer_supply rx51_vaux3_supply =
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1"); REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
static struct regulator_consumer_supply rx51_vsim_supply = static struct regulator_consumer_supply rx51_vsim_supply =
REGULATOR_SUPPLY("vmmc_aux", "mmci-omap-hs.1"); REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.1");
static struct regulator_consumer_supply rx51_vmmc2_supplies[] = { static struct regulator_consumer_supply rx51_vmmc2_supplies[] = {
/* tlv320aic3x analog supplies */ /* tlv320aic3x analog supplies */
...@@ -348,7 +352,7 @@ static struct regulator_consumer_supply rx51_vmmc2_supplies[] = { ...@@ -348,7 +352,7 @@ static struct regulator_consumer_supply rx51_vmmc2_supplies[] = {
/* tpa6130a2 */ /* tpa6130a2 */
REGULATOR_SUPPLY("Vdd", "2-0060"), REGULATOR_SUPPLY("Vdd", "2-0060"),
/* Keep vmmc as last item. It is not iterated for newer boards */ /* Keep vmmc as last item. It is not iterated for newer boards */
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1"), REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
}; };
static struct regulator_consumer_supply rx51_vio_supplies[] = { static struct regulator_consumer_supply rx51_vio_supplies[] = {
...@@ -357,10 +361,14 @@ static struct regulator_consumer_supply rx51_vio_supplies[] = { ...@@ -357,10 +361,14 @@ static struct regulator_consumer_supply rx51_vio_supplies[] = {
REGULATOR_SUPPLY("DVDD", "2-0018"), REGULATOR_SUPPLY("DVDD", "2-0018"),
REGULATOR_SUPPLY("IOVDD", "2-0019"), REGULATOR_SUPPLY("IOVDD", "2-0019"),
REGULATOR_SUPPLY("DVDD", "2-0019"), REGULATOR_SUPPLY("DVDD", "2-0019"),
/* Si4713 IO supply */
REGULATOR_SUPPLY("vio", "2-0063"),
}; };
static struct regulator_consumer_supply rx51_vaux1_consumers[] = { static struct regulator_consumer_supply rx51_vaux1_consumers[] = {
REGULATOR_SUPPLY("vdds_sdi", "omapdss"), REGULATOR_SUPPLY("vdds_sdi", "omapdss"),
/* Si4713 supply */
REGULATOR_SUPPLY("vdd", "2-0063"),
}; };
static struct regulator_consumer_supply rx51_vdac_supply[] = { static struct regulator_consumer_supply rx51_vdac_supply[] = {
...@@ -511,6 +519,41 @@ static struct regulator_init_data rx51_vio = { ...@@ -511,6 +519,41 @@ static struct regulator_init_data rx51_vio = {
.consumer_supplies = rx51_vio_supplies, .consumer_supplies = rx51_vio_supplies,
}; };
static struct si4713_platform_data rx51_si4713_i2c_data __initdata_or_module = {
.gpio_reset = RX51_FMTX_RESET_GPIO,
};
static struct i2c_board_info rx51_si4713_board_info __initdata_or_module = {
I2C_BOARD_INFO("si4713", SI4713_I2C_ADDR_BUSEN_HIGH),
.platform_data = &rx51_si4713_i2c_data,
};
static struct radio_si4713_platform_data rx51_si4713_data __initdata_or_module = {
.i2c_bus = 2,
.subdev_board_info = &rx51_si4713_board_info,
};
static struct platform_device rx51_si4713_dev __initdata_or_module = {
.name = "radio-si4713",
.id = -1,
.dev = {
.platform_data = &rx51_si4713_data,
},
};
static __init void rx51_init_si4713(void)
{
int err;
err = gpio_request_one(RX51_FMTX_IRQ, GPIOF_DIR_IN, "si4713 irq");
if (err) {
printk(KERN_ERR "Cannot request si4713 irq gpio. %d\n", err);
return;
}
rx51_si4713_board_info.irq = gpio_to_irq(RX51_FMTX_IRQ);
platform_device_register(&rx51_si4713_dev);
}
static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n) static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n)
{ {
/* FIXME this gpio setup is just a placeholder for now */ /* FIXME this gpio setup is just a placeholder for now */
...@@ -699,6 +742,14 @@ static struct twl4030_power_data rx51_t2scripts_data __initdata = { ...@@ -699,6 +742,14 @@ static struct twl4030_power_data rx51_t2scripts_data __initdata = {
.resource_config = twl4030_rconfig, .resource_config = twl4030_rconfig,
}; };
struct twl4030_codec_vibra_data rx51_vibra_data __initdata = {
.coexist = 0,
};
struct twl4030_codec_data rx51_codec_data __initdata = {
.audio_mclk = 26000000,
.vibra = &rx51_vibra_data,
};
static struct twl4030_platform_data rx51_twldata __initdata = { static struct twl4030_platform_data rx51_twldata __initdata = {
.irq_base = TWL4030_IRQ_BASE, .irq_base = TWL4030_IRQ_BASE,
...@@ -710,6 +761,7 @@ static struct twl4030_platform_data rx51_twldata __initdata = { ...@@ -710,6 +761,7 @@ static struct twl4030_platform_data rx51_twldata __initdata = {
.madc = &rx51_madc_data, .madc = &rx51_madc_data,
.usb = &rx51_usb_data, .usb = &rx51_usb_data,
.power = &rx51_t2scripts_data, .power = &rx51_t2scripts_data,
.codec = &rx51_codec_data,
.vaux1 = &rx51_vaux1, .vaux1 = &rx51_vaux1,
.vaux2 = &rx51_vaux2, .vaux2 = &rx51_vaux2,
...@@ -921,6 +973,7 @@ void __init rx51_peripherals_init(void) ...@@ -921,6 +973,7 @@ void __init rx51_peripherals_init(void)
board_smc91x_init(); board_smc91x_init();
rx51_add_gpio_keys(); rx51_add_gpio_keys();
rx51_init_wl1251(); rx51_init_wl1251();
rx51_init_si4713();
spi_register_board_info(rx51_peripherals_spi_board_info, spi_register_board_info(rx51_peripherals_spi_board_info,
ARRAY_SIZE(rx51_peripherals_spi_board_info)); ARRAY_SIZE(rx51_peripherals_spi_board_info));
......
...@@ -66,18 +66,6 @@ static struct omap_dss_board_info rx51_dss_board_info = { ...@@ -66,18 +66,6 @@ static struct omap_dss_board_info rx51_dss_board_info = {
.default_device = &rx51_lcd_device, .default_device = &rx51_lcd_device,
}; };
struct platform_device rx51_display_device = {
.name = "omapdss",
.id = -1,
.dev = {
.platform_data = &rx51_dss_board_info,
},
};
static struct platform_device *rx51_video_devices[] __initdata = {
&rx51_display_device,
};
static int __init rx51_video_init(void) static int __init rx51_video_init(void)
{ {
if (!machine_is_nokia_rx51()) if (!machine_is_nokia_rx51())
...@@ -95,8 +83,7 @@ static int __init rx51_video_init(void) ...@@ -95,8 +83,7 @@ static int __init rx51_video_init(void)
gpio_direction_output(RX51_LCD_RESET_GPIO, 1); gpio_direction_output(RX51_LCD_RESET_GPIO, 1);
platform_add_devices(rx51_video_devices, omap_display_init(&rx51_dss_board_info);
ARRAY_SIZE(rx51_video_devices));
return 0; return 0;
} }
......
...@@ -98,17 +98,13 @@ static struct omap_board_config_kernel rx51_config[] = { ...@@ -98,17 +98,13 @@ 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_irq(void) static void __init rx51_init_early(void)
{ {
struct omap_sdrc_params *sdrc_params; struct omap_sdrc_params *sdrc_params;
omap_board_config = rx51_config;
omap_board_config_size = ARRAY_SIZE(rx51_config);
omap3_pm_init_cpuidle(rx51_cpuidle_params);
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
sdrc_params = nokia_get_sdram_timings(); sdrc_params = nokia_get_sdram_timings();
omap2_init_common_devices(sdrc_params, sdrc_params); omap2_init_common_devices(sdrc_params, sdrc_params);
omap_init_irq();
} }
extern void __init rx51_peripherals_init(void); extern void __init rx51_peripherals_init(void);
...@@ -128,6 +124,9 @@ static struct omap_musb_board_data musb_board_data = { ...@@ -128,6 +124,9 @@ static struct omap_musb_board_data musb_board_data = {
static void __init rx51_init(void) static void __init rx51_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_board_config = rx51_config;
omap_board_config_size = ARRAY_SIZE(rx51_config);
omap3_pm_init_cpuidle(rx51_cpuidle_params);
omap_serial_init(); omap_serial_init();
usb_musb_init(&musb_board_data); usb_musb_init(&musb_board_data);
rx51_peripherals_init(); rx51_peripherals_init();
...@@ -149,9 +148,10 @@ static void __init rx51_map_io(void) ...@@ -149,9 +148,10 @@ static void __init rx51_map_io(void)
MACHINE_START(NOKIA_RX51, "Nokia RX-51 board") 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,
.map_io = rx51_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = rx51_init_irq, .map_io = rx51_map_io,
.init_early = rx51_init_early,
.init_irq = omap_init_irq,
.init_machine = rx51_init, .init_machine = rx51_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
/*
* Code for TI8168 EVM.
*
* Copyright (C) 2010 Texas Instruments, Inc. - http://www.ti.com/
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation version 2.
*
* 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/kernel.h>
#include <linux/init.h>
#include <mach/hardware.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <plat/irqs.h>
#include <plat/board.h>
#include <plat/common.h>
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_irq(void)
{
omap_init_irq();
}
static void __init ti8168_evm_init(void)
{
omap_serial_init();
omap_board_config = ti8168_evm_config;
omap_board_config_size = ARRAY_SIZE(ti8168_evm_config);
}
static void __init ti8168_evm_map_io(void)
{
omap2_set_globals_ti816x();
omapti816x_map_common_io();
}
MACHINE_START(TI8168EVM, "ti8168evm")
/* Maintainer: Texas Instruments */
.boot_params = 0x80000100,
.map_io = ti8168_evm_map_io,
.init_early = ti8168_init_early,
.init_irq = ti8168_evm_init_irq,
.timer = &omap_timer,
.init_machine = ti8168_evm_init,
MACHINE_END
...@@ -130,14 +130,6 @@ static struct omap_dss_board_info zoom_dss_data = { ...@@ -130,14 +130,6 @@ static struct omap_dss_board_info zoom_dss_data = {
.default_device = &zoom_lcd_device, .default_device = &zoom_lcd_device,
}; };
static struct platform_device zoom_dss_device = {
.name = "omapdss",
.id = -1,
.dev = {
.platform_data = &zoom_dss_data,
},
};
static struct omap2_mcspi_device_config dss_lcd_mcspi_config = { static struct omap2_mcspi_device_config dss_lcd_mcspi_config = {
.turbo_mode = 1, .turbo_mode = 1,
.single_channel = 1, /* 0: slave, 1: master */ .single_channel = 1, /* 0: slave, 1: master */
...@@ -153,14 +145,9 @@ static struct spi_board_info nec_8048_spi_board_info[] __initdata = { ...@@ -153,14 +145,9 @@ static struct spi_board_info nec_8048_spi_board_info[] __initdata = {
}, },
}; };
static struct platform_device *zoom_display_devices[] __initdata = {
&zoom_dss_device,
};
void __init zoom_display_init(void) void __init zoom_display_init(void)
{ {
platform_add_devices(zoom_display_devices, omap_display_init(&zoom_dss_data);
ARRAY_SIZE(zoom_display_devices));
spi_register_board_info(nec_8048_spi_board_info, spi_register_board_info(nec_8048_spi_board_info,
ARRAY_SIZE(nec_8048_spi_board_info)); ARRAY_SIZE(nec_8048_spi_board_info));
zoom_lcd_panel_init(); zoom_lcd_panel_init();
......
...@@ -118,7 +118,7 @@ static struct regulator_consumer_supply zoom_vmmc2_supply = { ...@@ -118,7 +118,7 @@ static struct regulator_consumer_supply zoom_vmmc2_supply = {
static struct regulator_consumer_supply zoom_vmmc3_supply = { static struct regulator_consumer_supply zoom_vmmc3_supply = {
.supply = "vmmc", .supply = "vmmc",
.dev_name = "mmci-omap-hs.2", .dev_name = "omap_hsmmc.2",
}; };
/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */ /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
...@@ -322,9 +322,7 @@ static struct twl4030_madc_platform_data zoom_madc_data = { ...@@ -322,9 +322,7 @@ static struct twl4030_madc_platform_data zoom_madc_data = {
.irq_line = 1, .irq_line = 1,
}; };
static struct twl4030_codec_audio_data zoom_audio_data = { static struct twl4030_codec_audio_data zoom_audio_data;
.audio_mclk = 26000000,
};
static struct twl4030_codec_data zoom_codec_data = { static struct twl4030_codec_data zoom_codec_data = {
.audio_mclk = 26000000, .audio_mclk = 26000000,
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/input.h> #include <linux/input.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/i2c/twl.h> #include <linux/i2c/twl.h>
#include <linux/mtd/nand.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -33,7 +34,7 @@ ...@@ -33,7 +34,7 @@
#define ZOOM3_EHCI_RESET_GPIO 64 #define ZOOM3_EHCI_RESET_GPIO 64
static void __init omap_zoom_init_irq(void) static void __init omap_zoom_init_early(void)
{ {
omap2_init_common_infrastructure(); omap2_init_common_infrastructure();
if (machine_is_omap_zoom2()) if (machine_is_omap_zoom2())
...@@ -42,8 +43,6 @@ static void __init omap_zoom_init_irq(void) ...@@ -42,8 +43,6 @@ static void __init omap_zoom_init_irq(void)
else if (machine_is_omap_zoom3()) else if (machine_is_omap_zoom3())
omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params, omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params,
h8mbx00u0mer0em_sdrc_params); h8mbx00u0mer0em_sdrc_params);
omap_init_irq();
} }
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
...@@ -126,8 +125,8 @@ static void __init omap_zoom_init(void) ...@@ -126,8 +125,8 @@ static void __init omap_zoom_init(void)
usb_ehci_init(&ehci_pdata); usb_ehci_init(&ehci_pdata);
} }
board_nand_init(zoom_nand_partitions, board_nand_init(zoom_nand_partitions, ARRAY_SIZE(zoom_nand_partitions),
ARRAY_SIZE(zoom_nand_partitions), ZOOM_NAND_CS); ZOOM_NAND_CS, NAND_BUSWIDTH_16);
zoom_debugboard_init(); zoom_debugboard_init();
zoom_peripherals_init(); zoom_peripherals_init();
zoom_display_init(); zoom_display_init();
...@@ -135,18 +134,20 @@ static void __init omap_zoom_init(void) ...@@ -135,18 +134,20 @@ static void __init omap_zoom_init(void)
MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board") MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_zoom_init_irq, .map_io = omap3_map_io,
.init_early = omap_zoom_init_early,
.init_irq = omap_init_irq,
.init_machine = omap_zoom_init, .init_machine = omap_zoom_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board") MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_zoom_init_irq, .map_io = omap3_map_io,
.init_early = omap_zoom_init_early,
.init_irq = omap_init_irq,
.init_machine = omap_zoom_init, .init_machine = omap_zoom_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
...@@ -78,6 +78,26 @@ static int omap2_clk_apll54_enable(struct clk *clk) ...@@ -78,6 +78,26 @@ static int omap2_clk_apll54_enable(struct clk *clk)
return omap2_clk_apll_enable(clk, OMAP24XX_ST_54M_APLL_MASK); return omap2_clk_apll_enable(clk, OMAP24XX_ST_54M_APLL_MASK);
} }
static void _apll96_allow_idle(struct clk *clk)
{
omap2xxx_cm_set_apll96_auto_low_power_stop();
}
static void _apll96_deny_idle(struct clk *clk)
{
omap2xxx_cm_set_apll96_disable_autoidle();
}
static void _apll54_allow_idle(struct clk *clk)
{
omap2xxx_cm_set_apll54_auto_low_power_stop();
}
static void _apll54_deny_idle(struct clk *clk)
{
omap2xxx_cm_set_apll54_disable_autoidle();
}
/* Stop APLL */ /* Stop APLL */
static void omap2_clk_apll_disable(struct clk *clk) static void omap2_clk_apll_disable(struct clk *clk)
{ {
...@@ -93,11 +113,15 @@ static void omap2_clk_apll_disable(struct clk *clk) ...@@ -93,11 +113,15 @@ static void omap2_clk_apll_disable(struct clk *clk)
const struct clkops clkops_apll96 = { const struct clkops clkops_apll96 = {
.enable = omap2_clk_apll96_enable, .enable = omap2_clk_apll96_enable,
.disable = omap2_clk_apll_disable, .disable = omap2_clk_apll_disable,
.allow_idle = _apll96_allow_idle,
.deny_idle = _apll96_deny_idle,
}; };
const struct clkops clkops_apll54 = { const struct clkops clkops_apll54 = {
.enable = omap2_clk_apll54_enable, .enable = omap2_clk_apll54_enable,
.disable = omap2_clk_apll_disable, .disable = omap2_clk_apll_disable,
.allow_idle = _apll54_allow_idle,
.deny_idle = _apll54_deny_idle,
}; };
/* Public functions */ /* Public functions */
......
/*
* OMAP2-specific DPLL control functions
*
* Copyright (C) 2011 Nokia Corporation
* Paul Walmsley
*
* 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.
*/
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/clk.h>
#include <linux/io.h>
#include <plat/clock.h>
#include "clock.h"
#include "cm2xxx_3xxx.h"
#include "cm-regbits-24xx.h"
/* Private functions */
/**
* _allow_idle - enable DPLL autoidle bits
* @clk: struct clk * of the DPLL to operate on
*
* Enable DPLL automatic idle control. The DPLL will enter low-power
* stop when its downstream clocks are gated. No return value.
* REVISIT: DPLL can optionally enter low-power bypass by writing 0x1
* instead. Add some mechanism to optionally enter this mode.
*/
static void _allow_idle(struct clk *clk)
{
if (!clk || !clk->dpll_data)
return;
omap2xxx_cm_set_dpll_auto_low_power_stop();
}
/**
* _deny_idle - prevent DPLL from automatically idling
* @clk: struct clk * of the DPLL to operate on
*
* Disable DPLL automatic idle control. No return value.
*/
static void _deny_idle(struct clk *clk)
{
if (!clk || !clk->dpll_data)
return;
omap2xxx_cm_set_dpll_disable_autoidle();
}
/* Public data */
const struct clkops clkops_omap2xxx_dpll_ops = {
.allow_idle = _allow_idle,
.deny_idle = _deny_idle,
};
...@@ -30,6 +30,13 @@ ...@@ -30,6 +30,13 @@
#include "prm2xxx_3xxx.h" #include "prm2xxx_3xxx.h"
#include "prm-regbits-24xx.h" #include "prm-regbits-24xx.h"
/*
* XXX This does not actually enable the osc_ck, since the osc_ck must
* be running for this function to be called. Instead, this function
* is used to disable an autoidle mode on the osc_ck. The existing
* clk_enable/clk_disable()-based usecounting for osc_ck should be
* replaced with autoidle-based usecounting.
*/
static int omap2_enable_osc_ck(struct clk *clk) static int omap2_enable_osc_ck(struct clk *clk)
{ {
u32 pcc; u32 pcc;
...@@ -41,6 +48,13 @@ static int omap2_enable_osc_ck(struct clk *clk) ...@@ -41,6 +48,13 @@ static int omap2_enable_osc_ck(struct clk *clk)
return 0; return 0;
} }
/*
* XXX This does not actually disable the osc_ck, since doing so would
* immediately halt the system. Instead, this function is used to
* enable an autoidle mode on the osc_ck. The existing
* clk_enable/clk_disable()-based usecounting for osc_ck should be
* replaced with autoidle-based usecounting.
*/
static void omap2_disable_osc_ck(struct clk *clk) static void omap2_disable_osc_ck(struct clk *clk)
{ {
u32 pcc; u32 pcc;
......
...@@ -97,7 +97,7 @@ static u8 _get_div_and_fieldval(struct clk *src_clk, struct clk *clk, ...@@ -97,7 +97,7 @@ static u8 _get_div_and_fieldval(struct clk *src_clk, struct clk *clk,
u32 *field_val) u32 *field_val)
{ {
const struct clksel *clks; const struct clksel *clks;
const struct clksel_rate *clkr, *max_clkr; const struct clksel_rate *clkr, *max_clkr = NULL;
u8 max_div = 0; u8 max_div = 0;
clks = _get_clksel_by_parent(clk, src_clk); clks = _get_clksel_by_parent(clk, src_clk);
......
...@@ -178,12 +178,11 @@ void omap2_init_dpll_parent(struct clk *clk) ...@@ -178,12 +178,11 @@ void omap2_init_dpll_parent(struct clk *clk)
if (!dd) if (!dd)
return; return;
/* Return bypass rate if DPLL is bypassed */
v = __raw_readl(dd->control_reg); v = __raw_readl(dd->control_reg);
v &= dd->enable_mask; v &= dd->enable_mask;
v >>= __ffs(dd->enable_mask); v >>= __ffs(dd->enable_mask);
/* Reparent in case the dpll is in bypass */ /* Reparent the struct clk in case the dpll is in bypass */
if (cpu_is_omap24xx()) { if (cpu_is_omap24xx()) {
if (v == OMAP2XXX_EN_DPLL_LPBYPASS || if (v == OMAP2XXX_EN_DPLL_LPBYPASS ||
v == OMAP2XXX_EN_DPLL_FRBYPASS) v == OMAP2XXX_EN_DPLL_FRBYPASS)
...@@ -259,51 +258,23 @@ u32 omap2_get_dpll_rate(struct clk *clk) ...@@ -259,51 +258,23 @@ u32 omap2_get_dpll_rate(struct clk *clk)
/* DPLL rate rounding code */ /* DPLL rate rounding code */
/**
* omap2_dpll_set_rate_tolerance: set the error tolerance during rate rounding
* @clk: struct clk * of the DPLL
* @tolerance: maximum rate error tolerance
*
* Set the maximum DPLL rate error tolerance for the rate rounding
* algorithm. The rate tolerance is an attempt to balance DPLL power
* saving (the least divider value "n") vs. rate fidelity (the least
* difference between the desired DPLL target rate and the rounded
* rate out of the algorithm). So, increasing the tolerance is likely
* to decrease DPLL power consumption and increase DPLL rate error.
* Returns -EINVAL if provided a null clock ptr or a clk that is not a
* DPLL; or 0 upon success.
*/
int omap2_dpll_set_rate_tolerance(struct clk *clk, unsigned int tolerance)
{
if (!clk || !clk->dpll_data)
return -EINVAL;
clk->dpll_data->rate_tolerance = tolerance;
return 0;
}
/** /**
* omap2_dpll_round_rate - round a target rate for an OMAP DPLL * omap2_dpll_round_rate - round a target rate for an OMAP DPLL
* @clk: struct clk * for a DPLL * @clk: struct clk * for a DPLL
* @target_rate: desired DPLL clock rate * @target_rate: desired DPLL clock rate
* *
* Given a DPLL, a desired target rate, and a rate tolerance, round * Given a DPLL and a desired target rate, round the target rate to a
* the target rate to a possible, programmable rate for this DPLL. * possible, programmable rate for this DPLL. Attempts to select the
* Rate tolerance is assumed to be set by the caller before this * minimum possible n. Stores the computed (m, n) in the DPLL's
* function is called. Attempts to select the minimum possible n * dpll_data structure so set_rate() will not need to call this
* within the tolerance to reduce power consumption. Stores the * (expensive) function again. Returns ~0 if the target rate cannot
* computed (m, n) in the DPLL's dpll_data structure so set_rate() * be rounded, or the rounded rate upon success.
* will not need to call this (expensive) function again. Returns ~0
* if the target rate cannot be rounded, either because the rate is
* too low or because the rate tolerance is set too tightly; or the
* rounded rate upon success.
*/ */
long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate) long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate)
{ {
int m, n, r, e, scaled_max_m; int m, n, r, scaled_max_m;
unsigned long scaled_rt_rp, new_rate; unsigned long scaled_rt_rp;
int min_e = -1, min_e_m = -1, min_e_n = -1; unsigned long new_rate = 0;
struct dpll_data *dd; struct dpll_data *dd;
if (!clk || !clk->dpll_data) if (!clk || !clk->dpll_data)
...@@ -311,8 +282,8 @@ long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate) ...@@ -311,8 +282,8 @@ long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate)
dd = clk->dpll_data; dd = clk->dpll_data;
pr_debug("clock: starting DPLL round_rate for clock %s, target rate " pr_debug("clock: %s: starting DPLL round_rate, target rate %ld\n",
"%ld\n", clk->name, target_rate); clk->name, target_rate);
scaled_rt_rp = target_rate / (dd->clk_ref->rate / DPLL_SCALE_FACTOR); scaled_rt_rp = target_rate / (dd->clk_ref->rate / DPLL_SCALE_FACTOR);
scaled_max_m = dd->max_multiplier * DPLL_SCALE_FACTOR; scaled_max_m = dd->max_multiplier * DPLL_SCALE_FACTOR;
...@@ -347,39 +318,23 @@ long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate) ...@@ -347,39 +318,23 @@ long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate)
if (r == DPLL_MULT_UNDERFLOW) if (r == DPLL_MULT_UNDERFLOW)
continue; continue;
e = target_rate - new_rate; pr_debug("clock: %s: m = %d: n = %d: new_rate = %ld\n",
pr_debug("clock: n = %d: m = %d: rate error is %d " clk->name, m, n, new_rate);
"(new_rate = %ld)\n", n, m, e, new_rate);
if (min_e == -1 ||
min_e >= (int)(abs(e) - dd->rate_tolerance)) {
min_e = e;
min_e_m = m;
min_e_n = n;
pr_debug("clock: found new least error %d\n", min_e); if (target_rate == new_rate) {
dd->last_rounded_m = m;
/* We found good settings -- bail out now */ dd->last_rounded_n = n;
if (min_e <= dd->rate_tolerance) dd->last_rounded_rate = target_rate;
break; break;
} }
} }
if (min_e < 0) { if (target_rate != new_rate) {
pr_debug("clock: error: target rate or tolerance too low\n"); pr_debug("clock: %s: cannot round to rate %ld\n", clk->name,
target_rate);
return ~0; return ~0;
} }
dd->last_rounded_m = min_e_m; return target_rate;
dd->last_rounded_n = min_e_n;
dd->last_rounded_rate = _dpll_compute_new_rate(dd->clk_ref->rate,
min_e_m, min_e_n);
pr_debug("clock: final least error: e = %d, m = %d, n = %d\n",
min_e, min_e_m, min_e_n);
pr_debug("clock: final rate: %ld (target rate: %ld)\n",
dd->last_rounded_rate, target_rate);
return dd->last_rounded_rate;
} }
/*
* OMAP2/3 interface clock control
*
* Copyright (C) 2011 Nokia Corporation
* Paul Walmsley
*
* 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.
*/
#undef DEBUG
#include <linux/kernel.h>
#include <linux/clk.h>
#include <linux/io.h>
#include <plat/clock.h>
#include <plat/prcm.h>
#include "clock.h"
#include "clock2xxx.h"
#include "cm2xxx_3xxx.h"
#include "cm-regbits-24xx.h"
/* Private functions */
/* XXX */
void omap2_clkt_iclk_allow_idle(struct clk *clk)
{
u32 v, r;
r = ((__force u32)clk->enable_reg ^ (CM_AUTOIDLE ^ CM_ICLKEN));
v = __raw_readl((__force void __iomem *)r);
v |= (1 << clk->enable_bit);
__raw_writel(v, (__force void __iomem *)r);
}
/* XXX */
void omap2_clkt_iclk_deny_idle(struct clk *clk)
{
u32 v, r;
r = ((__force u32)clk->enable_reg ^ (CM_AUTOIDLE ^ CM_ICLKEN));
v = __raw_readl((__force void __iomem *)r);
v &= ~(1 << clk->enable_bit);
__raw_writel(v, (__force void __iomem *)r);
}
/* Public data */
const struct clkops clkops_omap2_iclk_dflt_wait = {
.enable = omap2_dflt_clk_enable,
.disable = omap2_dflt_clk_disable,
.find_companion = omap2_clk_dflt_find_companion,
.find_idlest = omap2_clk_dflt_find_idlest,
.allow_idle = omap2_clkt_iclk_allow_idle,
.deny_idle = omap2_clkt_iclk_deny_idle,
};
const struct clkops clkops_omap2_iclk_dflt = {
.enable = omap2_dflt_clk_enable,
.disable = omap2_dflt_clk_disable,
.allow_idle = omap2_clkt_iclk_allow_idle,
.deny_idle = omap2_clkt_iclk_deny_idle,
};
const struct clkops clkops_omap2_iclk_idle_only = {
.allow_idle = omap2_clkt_iclk_allow_idle,
.deny_idle = omap2_clkt_iclk_deny_idle,
};
const struct clkops clkops_omap2_mdmclk_dflt_wait = {
.enable = omap2_dflt_clk_enable,
.disable = omap2_dflt_clk_disable,
.find_companion = omap2_clk_dflt_find_companion,
.find_idlest = omap2_clk_dflt_find_idlest,
.allow_idle = omap2_clkt_iclk_allow_idle,
.deny_idle = omap2_clkt_iclk_deny_idle,
};
...@@ -261,10 +261,11 @@ void omap2_clk_disable(struct clk *clk) ...@@ -261,10 +261,11 @@ void omap2_clk_disable(struct clk *clk)
pr_debug("clock: %s: disabling in hardware\n", clk->name); pr_debug("clock: %s: disabling in hardware\n", clk->name);
if (clk->ops && clk->ops->disable)
clk->ops->disable(clk); clk->ops->disable(clk);
if (clk->clkdm) if (clk->clkdm)
omap2_clkdm_clk_disable(clk->clkdm, clk); clkdm_clk_disable(clk->clkdm, clk);
if (clk->parent) if (clk->parent)
omap2_clk_disable(clk->parent); omap2_clk_disable(clk->parent);
...@@ -304,7 +305,7 @@ int omap2_clk_enable(struct clk *clk) ...@@ -304,7 +305,7 @@ int omap2_clk_enable(struct clk *clk)
} }
if (clk->clkdm) { if (clk->clkdm) {
ret = omap2_clkdm_clk_enable(clk->clkdm, clk); ret = clkdm_clk_enable(clk->clkdm, clk);
if (ret) { if (ret) {
WARN(1, "clock: %s: could not enable clockdomain %s: " WARN(1, "clock: %s: could not enable clockdomain %s: "
"%d\n", clk->name, clk->clkdm->name, ret); "%d\n", clk->name, clk->clkdm->name, ret);
...@@ -312,17 +313,20 @@ int omap2_clk_enable(struct clk *clk) ...@@ -312,17 +313,20 @@ int omap2_clk_enable(struct clk *clk)
} }
} }
if (clk->ops && clk->ops->enable) {
ret = clk->ops->enable(clk); ret = clk->ops->enable(clk);
if (ret) { if (ret) {
WARN(1, "clock: %s: could not enable: %d\n", clk->name, ret); WARN(1, "clock: %s: could not enable: %d\n",
clk->name, ret);
goto oce_err3; goto oce_err3;
} }
}
return 0; return 0;
oce_err3: oce_err3:
if (clk->clkdm) if (clk->clkdm)
omap2_clkdm_clk_disable(clk->clkdm, clk); clkdm_clk_disable(clk->clkdm, clk);
oce_err2: oce_err2:
if (clk->parent) if (clk->parent)
omap2_clk_disable(clk->parent); omap2_clk_disable(clk->parent);
...@@ -373,10 +377,16 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent) ...@@ -373,10 +377,16 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent)
const struct clkops clkops_omap3_noncore_dpll_ops = { const struct clkops clkops_omap3_noncore_dpll_ops = {
.enable = omap3_noncore_dpll_enable, .enable = omap3_noncore_dpll_enable,
.disable = omap3_noncore_dpll_disable, .disable = omap3_noncore_dpll_disable,
.allow_idle = omap3_dpll_allow_idle,
.deny_idle = omap3_dpll_deny_idle,
}; };
#endif const struct clkops clkops_omap3_core_dpll_ops = {
.allow_idle = omap3_dpll_allow_idle,
.deny_idle = omap3_dpll_deny_idle,
};
#endif
/* /*
* OMAP2+ clock reset and init functions * OMAP2+ clock reset and init functions
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* linux/arch/arm/mach-omap2/clock.h * linux/arch/arm/mach-omap2/clock.h
* *
* Copyright (C) 2005-2009 Texas Instruments, Inc. * Copyright (C) 2005-2009 Texas Instruments, Inc.
* Copyright (C) 2004-2009 Nokia Corporation * Copyright (C) 2004-2011 Nokia Corporation
* *
* Contacts: * Contacts:
* Richard Woodruff <r-woodruff2@ti.com> * Richard Woodruff <r-woodruff2@ti.com>
...@@ -18,9 +18,6 @@ ...@@ -18,9 +18,6 @@
#include <plat/clock.h> #include <plat/clock.h>
/* The maximum error between a target DPLL rate and the rounded rate in Hz */
#define DEFAULT_DPLL_RATE_TOLERANCE 50000
/* CM_CLKSEL2_PLL.CORE_CLK_SRC bits (2XXX) */ /* CM_CLKSEL2_PLL.CORE_CLK_SRC bits (2XXX) */
#define CORE_CLK_SRC_32K 0x0 #define CORE_CLK_SRC_32K 0x0
#define CORE_CLK_SRC_DPLL 0x1 #define CORE_CLK_SRC_DPLL 0x1
...@@ -55,7 +52,6 @@ void omap2_clk_disable(struct clk *clk); ...@@ -55,7 +52,6 @@ void omap2_clk_disable(struct clk *clk);
long omap2_clk_round_rate(struct clk *clk, unsigned long rate); long omap2_clk_round_rate(struct clk *clk, unsigned long rate);
int omap2_clk_set_rate(struct clk *clk, unsigned long rate); int omap2_clk_set_rate(struct clk *clk, unsigned long rate);
int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent); int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent);
int omap2_dpll_set_rate_tolerance(struct clk *clk, unsigned int tolerance);
long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate); long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate);
unsigned long omap3_dpll_recalc(struct clk *clk); unsigned long omap3_dpll_recalc(struct clk *clk);
unsigned long omap3_clkoutx2_recalc(struct clk *clk); unsigned long omap3_clkoutx2_recalc(struct clk *clk);
...@@ -65,6 +61,9 @@ u32 omap3_dpll_autoidle_read(struct clk *clk); ...@@ -65,6 +61,9 @@ u32 omap3_dpll_autoidle_read(struct clk *clk);
int omap3_noncore_dpll_set_rate(struct clk *clk, unsigned long rate); int omap3_noncore_dpll_set_rate(struct clk *clk, unsigned long rate);
int omap3_noncore_dpll_enable(struct clk *clk); int omap3_noncore_dpll_enable(struct clk *clk);
void omap3_noncore_dpll_disable(struct clk *clk); void omap3_noncore_dpll_disable(struct clk *clk);
int omap4_dpllmx_gatectrl_read(struct clk *clk);
void omap4_dpllmx_allow_gatectrl(struct clk *clk);
void omap4_dpllmx_deny_gatectrl(struct clk *clk);
#ifdef CONFIG_OMAP_RESET_CLOCKS #ifdef CONFIG_OMAP_RESET_CLOCKS
void omap2_clk_disable_unused(struct clk *clk); void omap2_clk_disable_unused(struct clk *clk);
...@@ -83,6 +82,10 @@ long omap2_clksel_round_rate(struct clk *clk, unsigned long target_rate); ...@@ -83,6 +82,10 @@ long omap2_clksel_round_rate(struct clk *clk, unsigned long target_rate);
int omap2_clksel_set_rate(struct clk *clk, unsigned long rate); int omap2_clksel_set_rate(struct clk *clk, unsigned long rate);
int omap2_clksel_set_parent(struct clk *clk, struct clk *new_parent); int omap2_clksel_set_parent(struct clk *clk, struct clk *new_parent);
/* clkt_iclk.c public functions */
extern void omap2_clkt_iclk_allow_idle(struct clk *clk);
extern void omap2_clkt_iclk_deny_idle(struct clk *clk);
u32 omap2_get_dpll_rate(struct clk *clk); u32 omap2_get_dpll_rate(struct clk *clk);
void omap2_init_dpll_parent(struct clk *clk); void omap2_init_dpll_parent(struct clk *clk);
...@@ -136,6 +139,7 @@ extern struct clk *vclk, *sclk; ...@@ -136,6 +139,7 @@ extern struct clk *vclk, *sclk;
extern const struct clksel_rate gpt_32k_rates[]; extern const struct clksel_rate gpt_32k_rates[];
extern const struct clksel_rate gpt_sys_rates[]; extern const struct clksel_rate gpt_sys_rates[];
extern const struct clksel_rate gfx_l3_rates[]; extern const struct clksel_rate gfx_l3_rates[];
extern const struct clksel_rate dsp_ick_rates[];
#if defined(CONFIG_ARCH_OMAP2) && defined(CONFIG_CPU_FREQ) #if defined(CONFIG_ARCH_OMAP2) && defined(CONFIG_CPU_FREQ)
extern void omap2_clk_init_cpufreq_table(struct cpufreq_frequency_table **table); extern void omap2_clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
...@@ -145,6 +149,13 @@ extern void omap2_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table) ...@@ -145,6 +149,13 @@ extern void omap2_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table)
#define omap2_clk_exit_cpufreq_table 0 #define omap2_clk_exit_cpufreq_table 0
#endif #endif
extern const struct clkops clkops_omap2_iclk_dflt_wait;
extern const struct clkops clkops_omap2_iclk_dflt;
extern const struct clkops clkops_omap2_iclk_idle_only;
extern const struct clkops clkops_omap2_mdmclk_dflt_wait;
extern const struct clkops clkops_omap2xxx_dpll_ops;
extern const struct clkops clkops_omap3_noncore_dpll_ops; extern const struct clkops clkops_omap3_noncore_dpll_ops;
extern const struct clkops clkops_omap3_core_dpll_ops;
extern const struct clkops clkops_omap4_dpllmx_ops;
#endif #endif
This diff is collapsed.
This diff is collapsed.
...@@ -20,16 +20,16 @@ u32 omap2xxx_get_apll_clkin(void); ...@@ -20,16 +20,16 @@ u32 omap2xxx_get_apll_clkin(void);
u32 omap2xxx_get_sysclkdiv(void); u32 omap2xxx_get_sysclkdiv(void);
void omap2xxx_clk_prepare_for_reboot(void); void omap2xxx_clk_prepare_for_reboot(void);
#ifdef CONFIG_ARCH_OMAP2420 #ifdef CONFIG_SOC_OMAP2420
int omap2420_clk_init(void); int omap2420_clk_init(void);
#else #else
#define omap2420_clk_init() 0 #define omap2420_clk_init() do { } while(0)
#endif #endif
#ifdef CONFIG_ARCH_OMAP2430 #ifdef CONFIG_SOC_OMAP2430
int omap2430_clk_init(void); int omap2430_clk_init(void);
#else #else
#define omap2430_clk_init() 0 #define omap2430_clk_init() do { } while(0)
#endif #endif
extern void __iomem *prcm_clksrc_ctrl, *cm_idlest_pll; extern void __iomem *prcm_clksrc_ctrl, *cm_idlest_pll;
......
This diff is collapsed.
...@@ -2,14 +2,17 @@ ...@@ -2,14 +2,17 @@
* OMAP34xx clock function prototypes and macros * OMAP34xx clock function prototypes and macros
* *
* Copyright (C) 2007-2010 Texas Instruments, Inc. * Copyright (C) 2007-2010 Texas Instruments, Inc.
* Copyright (C) 2007-2010 Nokia Corporation * Copyright (C) 2007-2011 Nokia Corporation
*/ */
#ifndef __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H #ifndef __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H
#define __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H #define __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H
extern const struct clkops clkops_omap3430es2_ssi_wait; extern const struct clkops clkops_omap3430es2_ssi_wait;
extern const struct clkops clkops_omap3430es2_iclk_ssi_wait;
extern const struct clkops clkops_omap3430es2_hsotgusb_wait; extern const struct clkops clkops_omap3430es2_hsotgusb_wait;
extern const struct clkops clkops_omap3430es2_iclk_hsotgusb_wait;
extern const struct clkops clkops_omap3430es2_dss_usbhost_wait; extern const struct clkops clkops_omap3430es2_dss_usbhost_wait;
extern const struct clkops clkops_omap3430es2_iclk_dss_usbhost_wait;
#endif #endif
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* OMAP3517/3505-specific clock framework functions * OMAP3517/3505-specific clock framework functions
* *
* Copyright (C) 2010 Texas Instruments, Inc. * Copyright (C) 2010 Texas Instruments, Inc.
* Copyright (C) 2010 Nokia Corporation * Copyright (C) 2011 Nokia Corporation
* *
* Ranjith Lohithakshan * Ranjith Lohithakshan
* Paul Walmsley * Paul Walmsley
...@@ -119,6 +119,8 @@ const struct clkops clkops_am35xx_ipss_wait = { ...@@ -119,6 +119,8 @@ const struct clkops clkops_am35xx_ipss_wait = {
.disable = omap2_dflt_clk_disable, .disable = omap2_dflt_clk_disable,
.find_idlest = am35xx_clk_ipss_find_idlest, .find_idlest = am35xx_clk_ipss_find_idlest,
.find_companion = omap2_clk_dflt_find_companion, .find_companion = omap2_clk_dflt_find_companion,
.allow_idle = omap2_clkt_iclk_allow_idle,
.deny_idle = omap2_clkt_iclk_deny_idle,
}; };
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "cm.h" #include "cm.h"
#define OMAP4_CM_CLKSTCTRL 0x0000 #define OMAP4_CM_CLKSTCTRL 0x0000
#define OMAP4_CM_STATICDEP 0x0004
/* Function prototypes */ /* Function prototypes */
# ifndef __ASSEMBLER__ # ifndef __ASSEMBLER__
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment