* [PATCH V3 0/2] Support for HTKW mcx @ 2011-12-21 15:53 Ilya Yanok 2011-12-21 15:53 ` [PATCH V3 1/2] mcx: very basic support for HTKW mcx board Ilya Yanok 2011-12-21 15:53 ` [PATCH V3 2/2] mcx: " Ilya Yanok 0 siblings, 2 replies; 7+ messages in thread From: Ilya Yanok @ 2011-12-21 15:53 UTC (permalink / raw) To: linux-omap; +Cc: linux-arm-kernel, devicetree-discuss, Ilya Yanok Split into two parts: 1. Device tree only to be used with board-generic (only serial works) 2. Full board support via custom machine file for board-testing Sorry for double-posting: I've put wrong linux-arm-kernel address in the first post. Ilya Yanok (2): mcx: very basic support for HTKW mcx board mcx: support for HTKW mcx board arch/arm/boot/dts/mcx.dts | 27 ++ arch/arm/mach-omap2/Kconfig | 6 + arch/arm/mach-omap2/Makefile | 1 + arch/arm/mach-omap2/board-mcx.c | 500 ++++++++++++++++++++++++++ arch/arm/plat-omap/include/plat/uncompress.h | 1 + 5 files changed, 535 insertions(+), 0 deletions(-) create mode 100644 arch/arm/boot/dts/mcx.dts create mode 100644 arch/arm/mach-omap2/board-mcx.c -- 1.7.6.4 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH V3 1/2] mcx: very basic support for HTKW mcx board 2011-12-21 15:53 [PATCH V3 0/2] Support for HTKW mcx Ilya Yanok @ 2011-12-21 15:53 ` Ilya Yanok 2012-03-05 19:53 ` Tony Lindgren 2011-12-21 15:53 ` [PATCH V3 2/2] mcx: " Ilya Yanok 1 sibling, 1 reply; 7+ messages in thread From: Ilya Yanok @ 2011-12-21 15:53 UTC (permalink / raw) To: linux-omap; +Cc: linux-arm-kernel, devicetree-discuss, Ilya Yanok Very basic support for HTKW mcx board. Able to boot via board-generic and ramdisk/initramfs, however most of peripherals is unsupported. Produces tons of twl4030 related errors as this board doesn't have twl4030 installed. Signed-off-by: Ilya Yanok <yanok@emcraft.com> --- Changes from V2: - None Changes from V1: - device tree move to the separate patch - iva node is disabled instead of using custom includes - removed bootargs entry arch/arm/boot/dts/mcx.dts | 27 +++++++++++++++++++++++++++ 1 files changed, 27 insertions(+), 0 deletions(-) create mode 100644 arch/arm/boot/dts/mcx.dts diff --git a/arch/arm/boot/dts/mcx.dts b/arch/arm/boot/dts/mcx.dts new file mode 100644 index 0000000..66b81bd --- /dev/null +++ b/arch/arm/boot/dts/mcx.dts @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2011 Ilya Yanok, EmCraft Systems + * + * 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. + */ +/dts-v1/; + +/include/ "omap3.dtsi" + +/ { + model = "HTKW mcx"; + compatible = "htkw,mcx", "ti,omap3"; + + memory { + device_type = "memory"; + reg = <0x80000000 0x10000000>; /* 256 MB */ + }; + + /* AM35xx doesn't have IVA */ + soc { + iva { + status = "disabled"; + }; + }; +}; -- 1.7.6.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH V3 1/2] mcx: very basic support for HTKW mcx board 2011-12-21 15:53 ` [PATCH V3 1/2] mcx: very basic support for HTKW mcx board Ilya Yanok @ 2012-03-05 19:53 ` Tony Lindgren 2012-03-05 21:38 ` Tony Lindgren 0 siblings, 1 reply; 7+ messages in thread From: Tony Lindgren @ 2012-03-05 19:53 UTC (permalink / raw) To: Grant Likely, Ilya Yanok; +Cc: linux-omap, linux-arm-kernel, devicetree-discuss * Ilya Yanok <yanok@emcraft.com> [111221 07:22]: > Very basic support for HTKW mcx board. Able to boot via board-generic > and ramdisk/initramfs, however most of peripherals is unsupported. > Produces tons of twl4030 related errors as this board doesn't have > twl4030 installed. > > Signed-off-by: Ilya Yanok <yanok@emcraft.com> Grant, care to ack this one? Regards, Tony > > --- > Changes from V2: > > - None > > Changes from V1: > > - device tree move to the separate patch > - iva node is disabled instead of using custom includes > - removed bootargs entry > > arch/arm/boot/dts/mcx.dts | 27 +++++++++++++++++++++++++++ > 1 files changed, 27 insertions(+), 0 deletions(-) > create mode 100644 arch/arm/boot/dts/mcx.dts > > diff --git a/arch/arm/boot/dts/mcx.dts b/arch/arm/boot/dts/mcx.dts > new file mode 100644 > index 0000000..66b81bd > --- /dev/null > +++ b/arch/arm/boot/dts/mcx.dts > @@ -0,0 +1,27 @@ > +/* > + * Copyright (C) 2011 Ilya Yanok, EmCraft Systems > + * > + * 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. > + */ > +/dts-v1/; > + > +/include/ "omap3.dtsi" > + > +/ { > + model = "HTKW mcx"; > + compatible = "htkw,mcx", "ti,omap3"; > + > + memory { > + device_type = "memory"; > + reg = <0x80000000 0x10000000>; /* 256 MB */ > + }; > + > + /* AM35xx doesn't have IVA */ > + soc { > + iva { > + status = "disabled"; > + }; > + }; > +}; > -- > 1.7.6.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH V3 1/2] mcx: very basic support for HTKW mcx board 2012-03-05 19:53 ` Tony Lindgren @ 2012-03-05 21:38 ` Tony Lindgren 0 siblings, 0 replies; 7+ messages in thread From: Tony Lindgren @ 2012-03-05 21:38 UTC (permalink / raw) To: Grant Likely, Ilya Yanok; +Cc: linux-omap, linux-arm-kernel, devicetree-discuss * Tony Lindgren <tony@atomide.com> [120305 11:21]: > * Ilya Yanok <yanok@emcraft.com> [111221 07:22]: > > Very basic support for HTKW mcx board. Able to boot via board-generic > > and ramdisk/initramfs, however most of peripherals is unsupported. > > Produces tons of twl4030 related errors as this board doesn't have > > twl4030 installed. > > > > Signed-off-by: Ilya Yanok <yanok@emcraft.com> > > Grant, care to ack this one? Actually a version of this you already acked as "[PATCH 1/2] mt_ventoux: very basic support for TeeJet Mt.Ventoux board" so using that instead Regards, Tony > > --- > > Changes from V2: > > > > - None > > > > Changes from V1: > > > > - device tree move to the separate patch > > - iva node is disabled instead of using custom includes > > - removed bootargs entry > > > > arch/arm/boot/dts/mcx.dts | 27 +++++++++++++++++++++++++++ > > 1 files changed, 27 insertions(+), 0 deletions(-) > > create mode 100644 arch/arm/boot/dts/mcx.dts > > > > diff --git a/arch/arm/boot/dts/mcx.dts b/arch/arm/boot/dts/mcx.dts > > new file mode 100644 > > index 0000000..66b81bd > > --- /dev/null > > +++ b/arch/arm/boot/dts/mcx.dts > > @@ -0,0 +1,27 @@ > > +/* > > + * Copyright (C) 2011 Ilya Yanok, EmCraft Systems > > + * > > + * 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. > > + */ > > +/dts-v1/; > > + > > +/include/ "omap3.dtsi" > > + > > +/ { > > + model = "HTKW mcx"; > > + compatible = "htkw,mcx", "ti,omap3"; > > + > > + memory { > > + device_type = "memory"; > > + reg = <0x80000000 0x10000000>; /* 256 MB */ > > + }; > > + > > + /* AM35xx doesn't have IVA */ > > + soc { > > + iva { > > + status = "disabled"; > > + }; > > + }; > > +}; > > -- > > 1.7.6.4 > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > > the body of a message to majordomo@vger.kernel.org > > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH V3 2/2] mcx: support for HTKW mcx board 2011-12-21 15:53 [PATCH V3 0/2] Support for HTKW mcx Ilya Yanok 2011-12-21 15:53 ` [PATCH V3 1/2] mcx: very basic support for HTKW mcx board Ilya Yanok @ 2011-12-21 15:53 ` Ilya Yanok 2012-03-05 19:55 ` Tony Lindgren 1 sibling, 1 reply; 7+ messages in thread From: Ilya Yanok @ 2011-12-21 15:53 UTC (permalink / raw) To: linux-omap; +Cc: linux-arm-kernel, devicetree-discuss, Ilya Yanok Support for the HTKW mcx board (TI AM3517 based) including serial, Ethernet, I2C, USB host, HSMMC, DSS and RTC. Signed-off-by: Ilya Yanok <yanok@emcraft.com> --- Requires updated machine-type file, recently posted AM35xx-EMAC patch and "Disable PM init on AM35{05,17} patch. Changes from V2: - Rebased onto the current linux-omap/master - Added "common.h" include - Added .handle_irq field to machine description - Added omap_sdrc_init() call - Removed unneeded pullup from output pins - Moved pin muxing before GPIO accesses - Removed .ocr_mask field (it's overwritten anyway) - Moved touchscreen init out of I2C init - some readability improvements (empty lines, comments) Changes from V1: - Kconfig option name fixed - Makefile entry sanitized - Unneeded headers removed - EMAC initialization moved to separate file/patch - Use gpio_{request,free}_{array,one} where possible - don't use platform data for touchscreen, we only need to pass irq number, do it via client.irq - check mcx_ts_init return value - Moved DEBUG_LL_OMAP3 entry to be in aplhabetical order - check return value of gpio_request for USB pwr pin - use pr_err instead of printk for error printing - added a fixed regulator for vdds_dsi - added SDcard card-detect pin arch/arm/mach-omap2/Kconfig | 6 + arch/arm/mach-omap2/Makefile | 1 + arch/arm/mach-omap2/board-mcx.c | 500 ++++++++++++++++++++++++++ arch/arm/plat-omap/include/plat/uncompress.h | 1 + 4 files changed, 508 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-omap2/board-mcx.c diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 0eb27b2..fd9b8c0 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -231,6 +231,12 @@ config MACH_OMAP_3430SDP default y select OMAP_PACKAGE_CBB +config MACH_MCX + bool "HTKW mcx (AM3517 based) board" + depends on ARCH_OMAP3 + select OMAP_PACKAGE_CBB + select REGULATOR_FIXED_VOLTAGE + config MACH_NOKIA_N800 bool diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 5d75cb5..9405dfc 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -238,6 +238,7 @@ obj-$(CONFIG_MACH_CRANEBOARD) += board-am3517crane.o obj-$(CONFIG_MACH_SBC3530) += board-omap3stalker.o obj-$(CONFIG_MACH_TI8168EVM) += board-ti8168evm.o obj-$(CONFIG_MACH_TI8148EVM) += board-ti8168evm.o +obj-$(CONFIG_MACH_MCX) += board-mcx.o # Platform specific device init code diff --git a/arch/arm/mach-omap2/board-mcx.c b/arch/arm/mach-omap2/board-mcx.c new file mode 100644 index 0000000..70c4339 --- /dev/null +++ b/arch/arm/mach-omap2/board-mcx.c @@ -0,0 +1,500 @@ +/* + * Copyright (C) 2011 Ilya Yanok, Emcraft Systems + * + * Modified from mach-omap2/board-omap3beagle.c + * + * Initial code: Syed Mohammed Khasim + * + * 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/gpio.h> +#include <linux/mtd/partitions.h> +#include <linux/mtd/nand.h> +#include <linux/mmc/host.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h> + +#include <asm/mach-types.h> +#include <asm/mach/arch.h> + +#include <plat/common.h> +#include <video/omapdss.h> +#include <video/omap-panel-generic-dpi.h> +#include <plat/usb.h> + +#include "am35xx-emac.h" +#include "mux.h" +#include "control.h" +#include "hsmmc.h" +#include "common-board-devices.h" +#include "common.h" + +#define MCX_MDIO_FREQUENCY (1000000) + +static struct mtd_partition mcx_nand_partitions[] = { + /* All the partition sizes are listed in terms of NAND block size */ + { + .name = "X-Loader", + .offset = 0, + .size = 4 * NAND_BLOCK_SIZE, + .mask_flags = MTD_WRITEABLE, /* force read-only */ + }, + { + .name = "U-Boot", + .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */ + .size = 15 * NAND_BLOCK_SIZE, + .mask_flags = MTD_WRITEABLE, /* force read-only */ + }, + { + .name = "U-Boot Env", + .offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */ + .size = 1 * NAND_BLOCK_SIZE, + }, + { + .name = "Kernel", + .offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */ + .size = 32 * NAND_BLOCK_SIZE, + }, + { + .name = "File System", + .offset = MTDPART_OFS_APPEND, /* Offset = 0x680000 */ + .size = MTDPART_SIZ_FULL, + }, +}; + +#define LCD_PWR_ENn 131 +#define HDMI_TRCVR_PDn 133 +#define LCD_BKLIGHT_EN 55 +#define LCD_LVL_SFHT_BUF_ENn 43 + +static int lcd_enabled; +static int dvi_enabled; + +static int mcx_panel_enable_lcd(struct omap_dss_device *dssdev) +{ + if (dvi_enabled) { + pr_err("cannot enable LCD, DVI is enabled\n"); + return -EINVAL; + } + + gpio_set_value(LCD_BKLIGHT_EN, 1); + lcd_enabled = 1; + + return 0; +} + +static void mcx_panel_disable_lcd(struct omap_dss_device *dssdev) +{ + gpio_set_value(LCD_BKLIGHT_EN, 0); + lcd_enabled = 0; +} + +static struct panel_generic_dpi_data lcd_panel = { + .name = "focaltech_etm070003dh6", + .platform_enable = mcx_panel_enable_lcd, + .platform_disable = mcx_panel_disable_lcd, +}; + +static struct omap_dss_device mcx_lcd_device = { + .type = OMAP_DISPLAY_TYPE_DPI, + .name = "lcd", + .driver_name = "generic_dpi_panel", + .data = &lcd_panel, + .phy.dpi.data_lines = 24, +}; + +/* + * TV Output + */ + +static int mcx_panel_enable_tv(struct omap_dss_device *dssdev) +{ + return 0; +} + +static void mcx_panel_disable_tv(struct omap_dss_device *dssdev) +{ +} + +static struct omap_dss_device mcx_tv_device = { + .type = OMAP_DISPLAY_TYPE_VENC, + .name = "tv", + .driver_name = "venc", + .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO, + .platform_enable = mcx_panel_enable_tv, + .platform_disable = mcx_panel_disable_tv, +}; + +/* + * DVI/HDMI Output + */ + +static int mcx_panel_enable_dvi(struct omap_dss_device *dssdev) +{ + if (lcd_enabled) { + pr_err("cannot enable DVI, LCD is enabled\n"); + return -EINVAL; + } + dvi_enabled = 1; + gpio_set_value(HDMI_TRCVR_PDn, 1); + return 0; +} + +static void mcx_panel_disable_dvi(struct omap_dss_device *dssdev) +{ + dvi_enabled = 0; + gpio_set_value(HDMI_TRCVR_PDn, 0); +} + +static struct panel_generic_dpi_data dvi_panel = { + .platform_enable = mcx_panel_enable_dvi, + .platform_disable = mcx_panel_disable_dvi, +}; +static struct omap_dss_device mcx_dvi_device = { + .type = OMAP_DISPLAY_TYPE_DPI, + .name = "dvi", + .driver_name = "dvi", + .data = &dvi_panel, + .phy.dpi.data_lines = 24, +}; + +static struct omap_dss_device *mcx_dss_devices[] = { + &mcx_lcd_device, + &mcx_tv_device, + &mcx_dvi_device, +}; + +static struct omap_dss_board_info mcx_dss_data = { + .num_devices = ARRAY_SIZE(mcx_dss_devices), + .devices = mcx_dss_devices, + .default_device = &mcx_lcd_device, +}; + +/* + * use fake regulator for vdds_dsi as we can't find this pin inside + * AM3517 datasheet. + */ +static struct regulator_consumer_supply mcx_vdds_dsi_supply[] = { + REGULATOR_SUPPLY("vdds_dsi", "omapdss"), + REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi.0"), +}; + +static struct regulator_init_data mcx_vdds_dsi = { + .constraints = { + .valid_modes_mask = REGULATOR_MODE_NORMAL, + .always_on = 1, + }, + .num_consumer_supplies = ARRAY_SIZE(mcx_vdds_dsi_supply), + .consumer_supplies = mcx_vdds_dsi_supply, +}; + +static struct fixed_voltage_config mcx_display = { + .supply_name = "display", + .microvolts = 1800000, + .gpio = -EINVAL, + .enabled_at_boot = 1, + .init_data = &mcx_vdds_dsi, +}; + +static struct platform_device mcx_display_device = { + .name = "reg-fixed-voltage", + .id = 0, + .dev = { + .platform_data = &mcx_display, + }, +}; + +static struct gpio mcx_dss_gpios[] __initdata = { + { LCD_BKLIGHT_EN, GPIOF_OUT_INIT_LOW, "lcd backlight enable" }, + { LCD_LVL_SFHT_BUF_ENn, GPIOF_OUT_INIT_LOW, "lcd lvl shifter" }, + { LCD_PWR_ENn, GPIOF_OUT_INIT_LOW, "lcd power enable" }, + { HDMI_TRCVR_PDn, GPIOF_OUT_INIT_LOW, "HDMI trcvr power" }, +}; + +static void __init mcx_display_init(void) +{ + int r; + + omap_mux_init_gpio(LCD_BKLIGHT_EN, OMAP_PIN_OUTPUT); + omap_mux_init_gpio(LCD_LVL_SFHT_BUF_ENn, OMAP_PIN_OUTPUT); + omap_mux_init_gpio(LCD_PWR_ENn, OMAP_PIN_OUTPUT); + omap_mux_init_gpio(HDMI_TRCVR_PDn, OMAP_PIN_OUTPUT); + + r = gpio_request_array(mcx_dss_gpios, ARRAY_SIZE(mcx_dss_gpios)); + if (r) { + pr_err("failed to get DSS control GPIOs\n"); + return; + } + + r = omap_display_init(&mcx_dss_data); + if (r) { + pr_err("Failed to register DSS device\n"); + gpio_free_array(mcx_dss_gpios, ARRAY_SIZE(mcx_dss_gpios)); + } +} + +/* TPS65023 specific initialization */ +/* VDCDC1 -> VDD_CORE */ +static struct regulator_consumer_supply am3517_vdcdc1_supplies[] = { + { + .supply = "vdd_core", + }, +}; + +/* VDCDC2 -> VDDSHV */ +static struct regulator_consumer_supply am3517_vdcdc2_supplies[] = { + { + .supply = "vddshv", + }, +}; + +/* + * VDCDC2 |-> VDDS + * |-> VDDS_SRAM_CORE_BG + * |-> VDDS_SRAM_MPU + */ +static struct regulator_consumer_supply am3517_vdcdc3_supplies[] = { + { + .supply = "vdds", + }, + { + .supply = "vdds_sram_core_bg", + }, + { + .supply = "vdds_sram_mpu", + }, +}; + +/* + * LDO1 |-> VDDA1P8V_USBPHY + * |-> VDDA_DAC + */ +static struct regulator_consumer_supply am3517_ldo1_supplies[] = { + { + .supply = "vdda1p8v_usbphy", + }, + { + .supply = "vdda_dac", + }, +}; + +/* LDO2 -> VDDA3P3V_USBPHY */ +static struct regulator_consumer_supply am3517_ldo2_supplies[] = { + { + .supply = "vdda3p3v_usbphy", + }, +}; + +static struct regulator_init_data mcx_regulator_data[] = { + /* DCDC1 */ + { + .constraints = { + .min_uV = 1200000, + .max_uV = 1200000, + .valid_modes_mask = REGULATOR_MODE_NORMAL, + .valid_ops_mask = REGULATOR_CHANGE_STATUS, + .always_on = true, + .apply_uV = false, + }, + .num_consumer_supplies = ARRAY_SIZE(am3517_vdcdc1_supplies), + .consumer_supplies = am3517_vdcdc1_supplies, + }, + /* DCDC2 */ + { + .constraints = { + .min_uV = 3300000, + .max_uV = 3300000, + .valid_modes_mask = REGULATOR_MODE_NORMAL, + .valid_ops_mask = REGULATOR_CHANGE_STATUS, + .always_on = true, + .apply_uV = false, + }, + .num_consumer_supplies = ARRAY_SIZE(am3517_vdcdc2_supplies), + .consumer_supplies = am3517_vdcdc2_supplies, + }, + /* DCDC3 */ + { + .constraints = { + .min_uV = 1800000, + .max_uV = 1800000, + .valid_modes_mask = REGULATOR_MODE_NORMAL, + .valid_ops_mask = REGULATOR_CHANGE_STATUS, + .always_on = true, + .apply_uV = false, + }, + .num_consumer_supplies = ARRAY_SIZE(am3517_vdcdc3_supplies), + .consumer_supplies = am3517_vdcdc3_supplies, + }, + /* LDO1 */ + { + .constraints = { + .min_uV = 1800000, + .max_uV = 1800000, + .valid_modes_mask = REGULATOR_MODE_NORMAL, + .valid_ops_mask = REGULATOR_CHANGE_STATUS, + .always_on = false, + .apply_uV = false, + }, + .num_consumer_supplies = ARRAY_SIZE(am3517_ldo1_supplies), + .consumer_supplies = am3517_ldo1_supplies, + }, + /* LDO2 */ + { + .constraints = { + .min_uV = 3300000, + .max_uV = 3300000, + .valid_modes_mask = REGULATOR_MODE_NORMAL, + .valid_ops_mask = REGULATOR_CHANGE_STATUS, + .always_on = false, + .apply_uV = false, + }, + .num_consumer_supplies = ARRAY_SIZE(am3517_ldo2_supplies), + .consumer_supplies = am3517_ldo2_supplies, + }, +}; + +static struct i2c_board_info __initdata mcx_i2c1_devices[] = { + { + I2C_BOARD_INFO("ds1337", 0x68), + }, + { + I2C_BOARD_INFO("tps65023", 0x48), + .flags = I2C_CLIENT_WAKE, + .platform_data = &mcx_regulator_data[0], + }, +}; + +#define TOUCH_INT_GPIO 170 + +static int __init mcx_ts_init(void) +{ + struct i2c_board_info mcx_edt_ts[] = { + { + I2C_BOARD_INFO("edt_ts", 0x38), + .irq = gpio_to_irq(TOUCH_INT_GPIO), + }, + }; + int err; + + omap_mux_init_gpio(TOUCH_INT_GPIO, OMAP_PIN_INPUT); + err = gpio_request_one(TOUCH_INT_GPIO, GPIOF_IN, "TOUCH_INT"); + if (err < 0) { + pr_err("failed to get TOUCH_INT gpio\n"); + return -ENODEV; + } + + return i2c_register_board_info(3, mcx_edt_ts, 1); +} + +static void __init mcx_i2c_init(void) +{ + omap_register_i2c_bus(1, 400, mcx_i2c1_devices, + ARRAY_SIZE(mcx_i2c1_devices)); + omap_register_i2c_bus(2, 400, NULL, 0); + omap_register_i2c_bus(3, 400, NULL, 0); +} + +#define USB_HOST_PWR_EN 132 +#define USB_PHY1_RESET 154 +#define USB_PHY2_RESET 152 + +static const struct usbhs_omap_board_data usbhs_bdata __initconst = { + + .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, + .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, + .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, + + .phy_reset = true, + .reset_gpio_port[0] = USB_PHY1_RESET, + .reset_gpio_port[1] = USB_PHY2_RESET, + .reset_gpio_port[2] = -EINVAL +}; + +#define SD_CARD_CD 61 +#define SD_CARD_WP 65 + +static struct omap2_hsmmc_info mmc[] = { + { + .mmc = 1, + .caps = MMC_CAP_4_BIT_DATA, + .gpio_cd = SD_CARD_CD, + .gpio_wp = SD_CARD_WP, + }, + {} /* Terminator */ +}; + +#ifdef CONFIG_OMAP_MUX +static struct omap_board_mux board_mux[] __initdata = { + OMAP3_MUX(CHASSIS_DMAREQ3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN), + OMAP3_MUX(UART1_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), + OMAP3_MUX(UART1_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT), + OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE0 | OMAP_PIN_INPUT), + OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), + { .reg_offset = OMAP_MUX_TERMINATOR }, +}; +#endif + +static struct platform_device *mcx_devices[] __initdata = { + &mcx_display_device, +}; + +static void __init mcx_init(void) +{ + int err; + + omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); + mcx_i2c_init(); + platform_add_devices(mcx_devices, ARRAY_SIZE(mcx_devices)); + omap_serial_init(); + omap_sdrc_init(NULL, NULL); + + mcx_display_init(); + + /* Configure EHCI ports */ + omap_mux_init_gpio(USB_HOST_PWR_EN, OMAP_PIN_OUTPUT); + omap_mux_init_gpio(USB_PHY1_RESET, OMAP_PIN_OUTPUT); + omap_mux_init_gpio(USB_PHY2_RESET, OMAP_PIN_OUTPUT); + err = gpio_request_one(USB_HOST_PWR_EN, GPIOF_OUT_INIT_HIGH, + "USB_HOST_PWR_EN"); + if (err) + pr_warn("Failed to request USB host power enable GPIO\n"); + + usbhs_init(&usbhs_bdata); + + /* NAND */ + omap_nand_flash_init(NAND_BUSWIDTH_16, mcx_nand_partitions, + ARRAY_SIZE(mcx_nand_partitions)); + /* Ethernet */ + am35xx_ethernet_init(MCX_MDIO_FREQUENCY, 1); + + /* MMC init */ + omap_mux_init_gpio(SD_CARD_WP, OMAP_PIN_INPUT); + omap_mux_init_gpio(SD_CARD_CD, OMAP_PIN_INPUT); + omap2_hsmmc_init(mmc); + + /* touchscreen init */ + err = mcx_ts_init(); + if (err < 0) + pr_err("failed to register touchscreen device\n"); +} + +static const char *mcx_dt_match[] __initdata = { + "htkw,mcx", + NULL +}; + +MACHINE_START(MCX, "htkw mcx") + /* Maintainer: Ilya Yanok */ + .atag_offset = 0x100, + .reserve = omap_reserve, + .map_io = omap3_map_io, + .init_early = am35xx_init_early, + .init_irq = omap3_init_irq, + .handle_irq = omap3_intc_handle_irq, + .init_machine = mcx_init, + .timer = &omap3_timer, + .dt_compat = mcx_dt_match, +MACHINE_END diff --git a/arch/arm/plat-omap/include/plat/uncompress.h b/arch/arm/plat-omap/include/plat/uncompress.h index 27d9d31..1141364 100644 --- a/arch/arm/plat-omap/include/plat/uncompress.h +++ b/arch/arm/plat-omap/include/plat/uncompress.h @@ -160,6 +160,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id) DEBUG_LL_OMAP3(3, encore); DEBUG_LL_OMAP3(3, igep0020); DEBUG_LL_OMAP3(3, igep0030); + DEBUG_LL_OMAP3(3, mcx); DEBUG_LL_OMAP3(3, nokia_rm680); DEBUG_LL_OMAP3(3, nokia_rx51); DEBUG_LL_OMAP3(3, omap3517evm); -- 1.7.6.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH V3 2/2] mcx: support for HTKW mcx board 2011-12-21 15:53 ` [PATCH V3 2/2] mcx: " Ilya Yanok @ 2012-03-05 19:55 ` Tony Lindgren 0 siblings, 0 replies; 7+ messages in thread From: Tony Lindgren @ 2012-03-05 19:55 UTC (permalink / raw) To: Ilya Yanok; +Cc: linux-omap, linux-arm-kernel, devicetree-discuss * Ilya Yanok <yanok@emcraft.com> [111221 07:21]: > Support for the HTKW mcx board (TI AM3517 based) including serial, > Ethernet, I2C, USB host, HSMMC, DSS and RTC. This one I can carry in testing-board until device tree works for us in a usable way. But probably some rebasing is needed for this after the hsmmc stuff is cleared out of the way. Regards, Tony ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH V3 0/2] Support for HTKW mcx @ 2011-12-21 15:47 Ilya Yanok 2011-12-21 15:47 ` [PATCH V3 2/2] mcx: support for HTKW mcx board Ilya Yanok 0 siblings, 1 reply; 7+ messages in thread From: Ilya Yanok @ 2011-12-21 15:47 UTC (permalink / raw) To: linux-omap; +Cc: linux-arm-kernel, devicetree-discuss, Ilya Yanok plit into two parts: 1. Device tree only to be used with board-generic (only serial works) 2. Full board support via custom machine file for board-testing Ilya Yanok (2): mcx: very basic support for HTKW mcx board mcx: support for HTKW mcx board arch/arm/boot/dts/mcx.dts | 27 ++ arch/arm/mach-omap2/Kconfig | 6 + arch/arm/mach-omap2/Makefile | 1 + arch/arm/mach-omap2/board-mcx.c | 500 ++++++++++++++++++++++++++ arch/arm/plat-omap/include/plat/uncompress.h | 1 + 5 files changed, 535 insertions(+), 0 deletions(-) create mode 100644 arch/arm/boot/dts/mcx.dts create mode 100644 arch/arm/mach-omap2/board-mcx.c -- 1.7.6.4 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH V3 2/2] mcx: support for HTKW mcx board 2011-12-21 15:47 [PATCH V3 0/2] Support for HTKW mcx Ilya Yanok @ 2011-12-21 15:47 ` Ilya Yanok 0 siblings, 0 replies; 7+ messages in thread From: Ilya Yanok @ 2011-12-21 15:47 UTC (permalink / raw) To: linux-omap; +Cc: linux-arm-kernel, devicetree-discuss, Ilya Yanok Support for the HTKW mcx board (TI AM3517 based) including serial, Ethernet, I2C, USB host, HSMMC, DSS and RTC. Signed-off-by: Ilya Yanok <yanok@emcraft.com> --- Requires updated machine-type file, recently posted AM35xx-EMAC patch and "Disable PM init on AM35{05,17} patch. Changes from V2: - Rebased onto the current linux-omap/master - Added "common.h" include - Added .handle_irq field to machine description - Added omap_sdrc_init() call - Removed unneeded pullup from output pins - Moved pin muxing before GPIO accesses - Removed .ocr_mask field (it's overwritten anyway) - Moved touchscreen init out of I2C init - some readability improvements (empty lines, comments) Changes from V1: - Kconfig option name fixed - Makefile entry sanitized - Unneeded headers removed - EMAC initialization moved to separate file/patch - Use gpio_{request,free}_{array,one} where possible - don't use platform data for touchscreen, we only need to pass irq number, do it via client.irq - check mcx_ts_init return value - Moved DEBUG_LL_OMAP3 entry to be in aplhabetical order - check return value of gpio_request for USB pwr pin - use pr_err instead of printk for error printing - added a fixed regulator for vdds_dsi - added SDcard card-detect pin arch/arm/mach-omap2/Kconfig | 6 + arch/arm/mach-omap2/Makefile | 1 + arch/arm/mach-omap2/board-mcx.c | 500 ++++++++++++++++++++++++++ arch/arm/plat-omap/include/plat/uncompress.h | 1 + 4 files changed, 508 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-omap2/board-mcx.c diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 0eb27b2..fd9b8c0 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -231,6 +231,12 @@ config MACH_OMAP_3430SDP default y select OMAP_PACKAGE_CBB +config MACH_MCX + bool "HTKW mcx (AM3517 based) board" + depends on ARCH_OMAP3 + select OMAP_PACKAGE_CBB + select REGULATOR_FIXED_VOLTAGE + config MACH_NOKIA_N800 bool diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 5d75cb5..9405dfc 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -238,6 +238,7 @@ obj-$(CONFIG_MACH_CRANEBOARD) += board-am3517crane.o obj-$(CONFIG_MACH_SBC3530) += board-omap3stalker.o obj-$(CONFIG_MACH_TI8168EVM) += board-ti8168evm.o obj-$(CONFIG_MACH_TI8148EVM) += board-ti8168evm.o +obj-$(CONFIG_MACH_MCX) += board-mcx.o # Platform specific device init code diff --git a/arch/arm/mach-omap2/board-mcx.c b/arch/arm/mach-omap2/board-mcx.c new file mode 100644 index 0000000..70c4339 --- /dev/null +++ b/arch/arm/mach-omap2/board-mcx.c @@ -0,0 +1,500 @@ +/* + * Copyright (C) 2011 Ilya Yanok, Emcraft Systems + * + * Modified from mach-omap2/board-omap3beagle.c + * + * Initial code: Syed Mohammed Khasim + * + * 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/gpio.h> +#include <linux/mtd/partitions.h> +#include <linux/mtd/nand.h> +#include <linux/mmc/host.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h> + +#include <asm/mach-types.h> +#include <asm/mach/arch.h> + +#include <plat/common.h> +#include <video/omapdss.h> +#include <video/omap-panel-generic-dpi.h> +#include <plat/usb.h> + +#include "am35xx-emac.h" +#include "mux.h" +#include "control.h" +#include "hsmmc.h" +#include "common-board-devices.h" +#include "common.h" + +#define MCX_MDIO_FREQUENCY (1000000) + +static struct mtd_partition mcx_nand_partitions[] = { + /* All the partition sizes are listed in terms of NAND block size */ + { + .name = "X-Loader", + .offset = 0, + .size = 4 * NAND_BLOCK_SIZE, + .mask_flags = MTD_WRITEABLE, /* force read-only */ + }, + { + .name = "U-Boot", + .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */ + .size = 15 * NAND_BLOCK_SIZE, + .mask_flags = MTD_WRITEABLE, /* force read-only */ + }, + { + .name = "U-Boot Env", + .offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */ + .size = 1 * NAND_BLOCK_SIZE, + }, + { + .name = "Kernel", + .offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */ + .size = 32 * NAND_BLOCK_SIZE, + }, + { + .name = "File System", + .offset = MTDPART_OFS_APPEND, /* Offset = 0x680000 */ + .size = MTDPART_SIZ_FULL, + }, +}; + +#define LCD_PWR_ENn 131 +#define HDMI_TRCVR_PDn 133 +#define LCD_BKLIGHT_EN 55 +#define LCD_LVL_SFHT_BUF_ENn 43 + +static int lcd_enabled; +static int dvi_enabled; + +static int mcx_panel_enable_lcd(struct omap_dss_device *dssdev) +{ + if (dvi_enabled) { + pr_err("cannot enable LCD, DVI is enabled\n"); + return -EINVAL; + } + + gpio_set_value(LCD_BKLIGHT_EN, 1); + lcd_enabled = 1; + + return 0; +} + +static void mcx_panel_disable_lcd(struct omap_dss_device *dssdev) +{ + gpio_set_value(LCD_BKLIGHT_EN, 0); + lcd_enabled = 0; +} + +static struct panel_generic_dpi_data lcd_panel = { + .name = "focaltech_etm070003dh6", + .platform_enable = mcx_panel_enable_lcd, + .platform_disable = mcx_panel_disable_lcd, +}; + +static struct omap_dss_device mcx_lcd_device = { + .type = OMAP_DISPLAY_TYPE_DPI, + .name = "lcd", + .driver_name = "generic_dpi_panel", + .data = &lcd_panel, + .phy.dpi.data_lines = 24, +}; + +/* + * TV Output + */ + +static int mcx_panel_enable_tv(struct omap_dss_device *dssdev) +{ + return 0; +} + +static void mcx_panel_disable_tv(struct omap_dss_device *dssdev) +{ +} + +static struct omap_dss_device mcx_tv_device = { + .type = OMAP_DISPLAY_TYPE_VENC, + .name = "tv", + .driver_name = "venc", + .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO, + .platform_enable = mcx_panel_enable_tv, + .platform_disable = mcx_panel_disable_tv, +}; + +/* + * DVI/HDMI Output + */ + +static int mcx_panel_enable_dvi(struct omap_dss_device *dssdev) +{ + if (lcd_enabled) { + pr_err("cannot enable DVI, LCD is enabled\n"); + return -EINVAL; + } + dvi_enabled = 1; + gpio_set_value(HDMI_TRCVR_PDn, 1); + return 0; +} + +static void mcx_panel_disable_dvi(struct omap_dss_device *dssdev) +{ + dvi_enabled = 0; + gpio_set_value(HDMI_TRCVR_PDn, 0); +} + +static struct panel_generic_dpi_data dvi_panel = { + .platform_enable = mcx_panel_enable_dvi, + .platform_disable = mcx_panel_disable_dvi, +}; +static struct omap_dss_device mcx_dvi_device = { + .type = OMAP_DISPLAY_TYPE_DPI, + .name = "dvi", + .driver_name = "dvi", + .data = &dvi_panel, + .phy.dpi.data_lines = 24, +}; + +static struct omap_dss_device *mcx_dss_devices[] = { + &mcx_lcd_device, + &mcx_tv_device, + &mcx_dvi_device, +}; + +static struct omap_dss_board_info mcx_dss_data = { + .num_devices = ARRAY_SIZE(mcx_dss_devices), + .devices = mcx_dss_devices, + .default_device = &mcx_lcd_device, +}; + +/* + * use fake regulator for vdds_dsi as we can't find this pin inside + * AM3517 datasheet. + */ +static struct regulator_consumer_supply mcx_vdds_dsi_supply[] = { + REGULATOR_SUPPLY("vdds_dsi", "omapdss"), + REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi.0"), +}; + +static struct regulator_init_data mcx_vdds_dsi = { + .constraints = { + .valid_modes_mask = REGULATOR_MODE_NORMAL, + .always_on = 1, + }, + .num_consumer_supplies = ARRAY_SIZE(mcx_vdds_dsi_supply), + .consumer_supplies = mcx_vdds_dsi_supply, +}; + +static struct fixed_voltage_config mcx_display = { + .supply_name = "display", + .microvolts = 1800000, + .gpio = -EINVAL, + .enabled_at_boot = 1, + .init_data = &mcx_vdds_dsi, +}; + +static struct platform_device mcx_display_device = { + .name = "reg-fixed-voltage", + .id = 0, + .dev = { + .platform_data = &mcx_display, + }, +}; + +static struct gpio mcx_dss_gpios[] __initdata = { + { LCD_BKLIGHT_EN, GPIOF_OUT_INIT_LOW, "lcd backlight enable" }, + { LCD_LVL_SFHT_BUF_ENn, GPIOF_OUT_INIT_LOW, "lcd lvl shifter" }, + { LCD_PWR_ENn, GPIOF_OUT_INIT_LOW, "lcd power enable" }, + { HDMI_TRCVR_PDn, GPIOF_OUT_INIT_LOW, "HDMI trcvr power" }, +}; + +static void __init mcx_display_init(void) +{ + int r; + + omap_mux_init_gpio(LCD_BKLIGHT_EN, OMAP_PIN_OUTPUT); + omap_mux_init_gpio(LCD_LVL_SFHT_BUF_ENn, OMAP_PIN_OUTPUT); + omap_mux_init_gpio(LCD_PWR_ENn, OMAP_PIN_OUTPUT); + omap_mux_init_gpio(HDMI_TRCVR_PDn, OMAP_PIN_OUTPUT); + + r = gpio_request_array(mcx_dss_gpios, ARRAY_SIZE(mcx_dss_gpios)); + if (r) { + pr_err("failed to get DSS control GPIOs\n"); + return; + } + + r = omap_display_init(&mcx_dss_data); + if (r) { + pr_err("Failed to register DSS device\n"); + gpio_free_array(mcx_dss_gpios, ARRAY_SIZE(mcx_dss_gpios)); + } +} + +/* TPS65023 specific initialization */ +/* VDCDC1 -> VDD_CORE */ +static struct regulator_consumer_supply am3517_vdcdc1_supplies[] = { + { + .supply = "vdd_core", + }, +}; + +/* VDCDC2 -> VDDSHV */ +static struct regulator_consumer_supply am3517_vdcdc2_supplies[] = { + { + .supply = "vddshv", + }, +}; + +/* + * VDCDC2 |-> VDDS + * |-> VDDS_SRAM_CORE_BG + * |-> VDDS_SRAM_MPU + */ +static struct regulator_consumer_supply am3517_vdcdc3_supplies[] = { + { + .supply = "vdds", + }, + { + .supply = "vdds_sram_core_bg", + }, + { + .supply = "vdds_sram_mpu", + }, +}; + +/* + * LDO1 |-> VDDA1P8V_USBPHY + * |-> VDDA_DAC + */ +static struct regulator_consumer_supply am3517_ldo1_supplies[] = { + { + .supply = "vdda1p8v_usbphy", + }, + { + .supply = "vdda_dac", + }, +}; + +/* LDO2 -> VDDA3P3V_USBPHY */ +static struct regulator_consumer_supply am3517_ldo2_supplies[] = { + { + .supply = "vdda3p3v_usbphy", + }, +}; + +static struct regulator_init_data mcx_regulator_data[] = { + /* DCDC1 */ + { + .constraints = { + .min_uV = 1200000, + .max_uV = 1200000, + .valid_modes_mask = REGULATOR_MODE_NORMAL, + .valid_ops_mask = REGULATOR_CHANGE_STATUS, + .always_on = true, + .apply_uV = false, + }, + .num_consumer_supplies = ARRAY_SIZE(am3517_vdcdc1_supplies), + .consumer_supplies = am3517_vdcdc1_supplies, + }, + /* DCDC2 */ + { + .constraints = { + .min_uV = 3300000, + .max_uV = 3300000, + .valid_modes_mask = REGULATOR_MODE_NORMAL, + .valid_ops_mask = REGULATOR_CHANGE_STATUS, + .always_on = true, + .apply_uV = false, + }, + .num_consumer_supplies = ARRAY_SIZE(am3517_vdcdc2_supplies), + .consumer_supplies = am3517_vdcdc2_supplies, + }, + /* DCDC3 */ + { + .constraints = { + .min_uV = 1800000, + .max_uV = 1800000, + .valid_modes_mask = REGULATOR_MODE_NORMAL, + .valid_ops_mask = REGULATOR_CHANGE_STATUS, + .always_on = true, + .apply_uV = false, + }, + .num_consumer_supplies = ARRAY_SIZE(am3517_vdcdc3_supplies), + .consumer_supplies = am3517_vdcdc3_supplies, + }, + /* LDO1 */ + { + .constraints = { + .min_uV = 1800000, + .max_uV = 1800000, + .valid_modes_mask = REGULATOR_MODE_NORMAL, + .valid_ops_mask = REGULATOR_CHANGE_STATUS, + .always_on = false, + .apply_uV = false, + }, + .num_consumer_supplies = ARRAY_SIZE(am3517_ldo1_supplies), + .consumer_supplies = am3517_ldo1_supplies, + }, + /* LDO2 */ + { + .constraints = { + .min_uV = 3300000, + .max_uV = 3300000, + .valid_modes_mask = REGULATOR_MODE_NORMAL, + .valid_ops_mask = REGULATOR_CHANGE_STATUS, + .always_on = false, + .apply_uV = false, + }, + .num_consumer_supplies = ARRAY_SIZE(am3517_ldo2_supplies), + .consumer_supplies = am3517_ldo2_supplies, + }, +}; + +static struct i2c_board_info __initdata mcx_i2c1_devices[] = { + { + I2C_BOARD_INFO("ds1337", 0x68), + }, + { + I2C_BOARD_INFO("tps65023", 0x48), + .flags = I2C_CLIENT_WAKE, + .platform_data = &mcx_regulator_data[0], + }, +}; + +#define TOUCH_INT_GPIO 170 + +static int __init mcx_ts_init(void) +{ + struct i2c_board_info mcx_edt_ts[] = { + { + I2C_BOARD_INFO("edt_ts", 0x38), + .irq = gpio_to_irq(TOUCH_INT_GPIO), + }, + }; + int err; + + omap_mux_init_gpio(TOUCH_INT_GPIO, OMAP_PIN_INPUT); + err = gpio_request_one(TOUCH_INT_GPIO, GPIOF_IN, "TOUCH_INT"); + if (err < 0) { + pr_err("failed to get TOUCH_INT gpio\n"); + return -ENODEV; + } + + return i2c_register_board_info(3, mcx_edt_ts, 1); +} + +static void __init mcx_i2c_init(void) +{ + omap_register_i2c_bus(1, 400, mcx_i2c1_devices, + ARRAY_SIZE(mcx_i2c1_devices)); + omap_register_i2c_bus(2, 400, NULL, 0); + omap_register_i2c_bus(3, 400, NULL, 0); +} + +#define USB_HOST_PWR_EN 132 +#define USB_PHY1_RESET 154 +#define USB_PHY2_RESET 152 + +static const struct usbhs_omap_board_data usbhs_bdata __initconst = { + + .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, + .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, + .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, + + .phy_reset = true, + .reset_gpio_port[0] = USB_PHY1_RESET, + .reset_gpio_port[1] = USB_PHY2_RESET, + .reset_gpio_port[2] = -EINVAL +}; + +#define SD_CARD_CD 61 +#define SD_CARD_WP 65 + +static struct omap2_hsmmc_info mmc[] = { + { + .mmc = 1, + .caps = MMC_CAP_4_BIT_DATA, + .gpio_cd = SD_CARD_CD, + .gpio_wp = SD_CARD_WP, + }, + {} /* Terminator */ +}; + +#ifdef CONFIG_OMAP_MUX +static struct omap_board_mux board_mux[] __initdata = { + OMAP3_MUX(CHASSIS_DMAREQ3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN), + OMAP3_MUX(UART1_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), + OMAP3_MUX(UART1_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT), + OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE0 | OMAP_PIN_INPUT), + OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), + { .reg_offset = OMAP_MUX_TERMINATOR }, +}; +#endif + +static struct platform_device *mcx_devices[] __initdata = { + &mcx_display_device, +}; + +static void __init mcx_init(void) +{ + int err; + + omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); + mcx_i2c_init(); + platform_add_devices(mcx_devices, ARRAY_SIZE(mcx_devices)); + omap_serial_init(); + omap_sdrc_init(NULL, NULL); + + mcx_display_init(); + + /* Configure EHCI ports */ + omap_mux_init_gpio(USB_HOST_PWR_EN, OMAP_PIN_OUTPUT); + omap_mux_init_gpio(USB_PHY1_RESET, OMAP_PIN_OUTPUT); + omap_mux_init_gpio(USB_PHY2_RESET, OMAP_PIN_OUTPUT); + err = gpio_request_one(USB_HOST_PWR_EN, GPIOF_OUT_INIT_HIGH, + "USB_HOST_PWR_EN"); + if (err) + pr_warn("Failed to request USB host power enable GPIO\n"); + + usbhs_init(&usbhs_bdata); + + /* NAND */ + omap_nand_flash_init(NAND_BUSWIDTH_16, mcx_nand_partitions, + ARRAY_SIZE(mcx_nand_partitions)); + /* Ethernet */ + am35xx_ethernet_init(MCX_MDIO_FREQUENCY, 1); + + /* MMC init */ + omap_mux_init_gpio(SD_CARD_WP, OMAP_PIN_INPUT); + omap_mux_init_gpio(SD_CARD_CD, OMAP_PIN_INPUT); + omap2_hsmmc_init(mmc); + + /* touchscreen init */ + err = mcx_ts_init(); + if (err < 0) + pr_err("failed to register touchscreen device\n"); +} + +static const char *mcx_dt_match[] __initdata = { + "htkw,mcx", + NULL +}; + +MACHINE_START(MCX, "htkw mcx") + /* Maintainer: Ilya Yanok */ + .atag_offset = 0x100, + .reserve = omap_reserve, + .map_io = omap3_map_io, + .init_early = am35xx_init_early, + .init_irq = omap3_init_irq, + .handle_irq = omap3_intc_handle_irq, + .init_machine = mcx_init, + .timer = &omap3_timer, + .dt_compat = mcx_dt_match, +MACHINE_END diff --git a/arch/arm/plat-omap/include/plat/uncompress.h b/arch/arm/plat-omap/include/plat/uncompress.h index 27d9d31..1141364 100644 --- a/arch/arm/plat-omap/include/plat/uncompress.h +++ b/arch/arm/plat-omap/include/plat/uncompress.h @@ -160,6 +160,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id) DEBUG_LL_OMAP3(3, encore); DEBUG_LL_OMAP3(3, igep0020); DEBUG_LL_OMAP3(3, igep0030); + DEBUG_LL_OMAP3(3, mcx); DEBUG_LL_OMAP3(3, nokia_rm680); DEBUG_LL_OMAP3(3, nokia_rx51); DEBUG_LL_OMAP3(3, omap3517evm); -- 1.7.6.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-03-05 21:38 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-12-21 15:53 [PATCH V3 0/2] Support for HTKW mcx Ilya Yanok 2011-12-21 15:53 ` [PATCH V3 1/2] mcx: very basic support for HTKW mcx board Ilya Yanok 2012-03-05 19:53 ` Tony Lindgren 2012-03-05 21:38 ` Tony Lindgren 2011-12-21 15:53 ` [PATCH V3 2/2] mcx: " Ilya Yanok 2012-03-05 19:55 ` Tony Lindgren -- strict thread matches above, loose matches on Subject: below -- 2011-12-21 15:47 [PATCH V3 0/2] Support for HTKW mcx Ilya Yanok 2011-12-21 15:47 ` [PATCH V3 2/2] mcx: support for HTKW mcx board Ilya Yanok
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).