Merge branch 'for-next/imx'
This commit is contained in:
commit
160bd3b360
|
@ -9,6 +9,7 @@ elif [ -f /env/logo.bmp.lzo ]; then
|
|||
fb0.enable=1
|
||||
fi
|
||||
|
||||
if [ ! -z $use_dfu ]; then
|
||||
gpio_get_value 82
|
||||
if [ $? -eq 0 ]; then
|
||||
gpio_set_value 83 0
|
||||
|
@ -29,6 +30,7 @@ if [ $? -eq 0 ]; then
|
|||
autoboot_timeout=28
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z $eth0.ethaddr ]; then
|
||||
while [ -z $eth0.ethaddr ]; do
|
||||
|
|
|
@ -87,36 +87,6 @@ struct gpio_led led0 = {
|
|||
.active_low = 1,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_USB
|
||||
static void imx25_usb_init(void)
|
||||
{
|
||||
unsigned int tmp;
|
||||
|
||||
/* Host 1 */
|
||||
tmp = readl(MX25_USB_OTG_BASE_ADDR + 0x600);
|
||||
tmp &= ~(MX35_H1_SIC_MASK | MX35_H1_PM_BIT | MX35_H1_TLL_BIT |
|
||||
MX35_H1_USBTE_BIT | MX35_H1_IPPUE_DOWN_BIT | MX35_H1_IPPUE_UP_BIT);
|
||||
tmp |= (MXC_EHCI_INTERFACE_SINGLE_UNI) << MX35_H1_SIC_SHIFT;
|
||||
tmp |= MX35_H1_USBTE_BIT;
|
||||
tmp |= MX35_H1_IPPUE_DOWN_BIT;
|
||||
writel(tmp, MX25_USB_OTG_BASE_ADDR + 0x600);
|
||||
|
||||
tmp = readl(MX25_USB_OTG_BASE_ADDR + 0x584);
|
||||
tmp |= 3 << 30;
|
||||
writel(tmp, MX25_USB_OTG_BASE_ADDR + 0x584);
|
||||
|
||||
/* Set to Host mode */
|
||||
tmp = readl(MX25_USB_OTG_BASE_ADDR + 0x5a8);
|
||||
writel(tmp | 0x3, MX25_USB_OTG_BASE_ADDR + 0x5a8);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static struct fsl_usb2_platform_data usb_pdata = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_UTMI,
|
||||
};
|
||||
|
||||
static iomux_v3_cfg_t eukrea_cpuimx25_pads[] = {
|
||||
MX25_PAD_FEC_MDC__FEC_MDC,
|
||||
MX25_PAD_FEC_MDIO__FEC_MDIO,
|
||||
|
@ -173,6 +143,28 @@ static iomux_v3_cfg_t eukrea_cpuimx25_pads[] = {
|
|||
MX25_PAD_VSTBY_ACK__GPIO_3_18,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_USB
|
||||
#ifndef CONFIG_USB_GADGET
|
||||
struct imxusb_platformdata otg_pdata = {
|
||||
.flags = MXC_EHCI_INTERFACE_DIFF_UNI,
|
||||
.mode = IMX_USB_MODE_HOST,
|
||||
.phymode = USBPHY_INTERFACE_MODE_UTMI,
|
||||
};
|
||||
#endif
|
||||
|
||||
struct imxusb_platformdata hs_pdata = {
|
||||
.flags = MXC_EHCI_INTERFACE_SINGLE_UNI | MXC_EHCI_INTERNAL_PHY | MXC_EHCI_IPPUE_DOWN,
|
||||
.mode = IMX_USB_MODE_HOST,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_USB_GADGET
|
||||
static struct fsl_usb2_platform_data usb_pdata = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_UTMI,
|
||||
};
|
||||
#endif
|
||||
|
||||
static int eukrea_cpuimx25_devices_init(void)
|
||||
{
|
||||
mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx25_pads,
|
||||
|
@ -206,13 +198,6 @@ static int eukrea_cpuimx25_devices_init(void)
|
|||
|
||||
imx25_add_fb(&eukrea_cpuimx25_fb_data);
|
||||
|
||||
imx25_add_i2c0(NULL);
|
||||
imx25_add_mmc0(NULL);
|
||||
|
||||
#ifdef CONFIG_USB
|
||||
imx25_usb_init();
|
||||
add_generic_usb_ehci_device(DEVICE_ID_DYNAMIC, MX25_USB_OTG_BASE_ADDR + 0x400, NULL);
|
||||
#endif
|
||||
#ifdef CONFIG_USB_GADGET
|
||||
/* Workaround ENGcm09152 */
|
||||
writel(readl(MX25_USB_OTG_BASE_ADDR + 0x608) | (1 << 23), MX25_USB_OTG_BASE_ADDR + 0x608);
|
||||
|
@ -220,6 +205,16 @@ static int eukrea_cpuimx25_devices_init(void)
|
|||
IORESOURCE_MEM, &usb_pdata);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_USB
|
||||
#ifndef CONFIG_USB_GADGET
|
||||
imx_add_usb((void *)MX25_USB_OTG_BASE_ADDR, 0, &otg_pdata);
|
||||
#endif
|
||||
imx_add_usb((void *)MX25_USB_HS_BASE_ADDR, 1, &hs_pdata);
|
||||
#endif
|
||||
|
||||
imx25_add_mmc0(NULL);
|
||||
imx25_add_i2c0(NULL);
|
||||
|
||||
armlinux_set_architecture(MACH_TYPE_EUKREA_CPUIMX25SD);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -2,6 +2,7 @@ soc imx25
|
|||
loadaddr 0x80000000
|
||||
dcdofs 0x400
|
||||
|
||||
wm 32 0xb8001008 0x00000000
|
||||
wm 32 0xb8001010 0x00000004
|
||||
wm 32 0xb8001000 0x92100000
|
||||
wm 8 0x80000400 0x12344321
|
||||
|
|
|
@ -1,62 +1,65 @@
|
|||
CONFIG_ARCH_IMX=y
|
||||
CONFIG_ARCH_IMX25=y
|
||||
CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x40000
|
||||
CONFIG_ARCH_IMX_INTERNAL_BOOT=y
|
||||
CONFIG_ARCH_IMX_INTERNAL_BOOT_SERIAL=y
|
||||
CONFIG_MACH_EUKREA_CPUIMX25=y
|
||||
CONFIG_IMX_IIM=y
|
||||
CONFIG_IMX_IIM_FUSE_BLOW=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
|
||||
CONFIG_PBL_IMAGE=y
|
||||
CONFIG_PBL_RELOCATABLE=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x40000
|
||||
CONFIG_MALLOC_SIZE=0x800000
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_MALLOC_TLSF=y
|
||||
CONFIG_LONGHELP=y
|
||||
CONFIG_RELOCATABLE=y
|
||||
CONFIG_GLOB=y
|
||||
CONFIG_HUSH_FANCY_PROMPT=y
|
||||
CONFIG_CMDLINE_EDITING=y
|
||||
CONFIG_AUTO_COMPLETE=y
|
||||
# CONFIG_CONSOLE_ACTIVATE_FIRST is not set
|
||||
CONFIG_CONSOLE_ACTIVATE_ALL=y
|
||||
CONFIG_DEFAULT_COMPRESSION_LZO=y
|
||||
CONFIG_DEFAULT_ENVIRONMENT_GENERIC=y
|
||||
CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/eukrea_cpuimx25/env"
|
||||
CONFIG_CMD_EDIT=y
|
||||
CONFIG_CMD_SLEEP=y
|
||||
CONFIG_CMD_SAVEENV=y
|
||||
CONFIG_CMD_EXPORT=y
|
||||
CONFIG_CMD_PRINTENV=y
|
||||
CONFIG_CMD_READLINE=y
|
||||
CONFIG_CMD_AUTOMOUNT=y
|
||||
CONFIG_CMD_ECHO_E=y
|
||||
CONFIG_CMD_LOADB=y
|
||||
CONFIG_CMD_MEMINFO=y
|
||||
CONFIG_LONGHELP=y
|
||||
CONFIG_CMD_IOMEM=y
|
||||
CONFIG_CMD_MTEST=y
|
||||
CONFIG_CMD_FLASH=y
|
||||
CONFIG_CMD_MEMINFO=y
|
||||
CONFIG_CMD_BOOTM_SHOW_TYPE=y
|
||||
CONFIG_CMD_BOOTM_VERBOSE=y
|
||||
CONFIG_CMD_BOOTM_INITRD=y
|
||||
CONFIG_CMD_BOOTM_OFTREE=y
|
||||
CONFIG_CMD_BOOTM_OFTREE_UIMAGE=y
|
||||
CONFIG_CMD_RESET=y
|
||||
CONFIG_CMD_GO=y
|
||||
CONFIG_CMD_OFTREE=y
|
||||
CONFIG_CMD_TIMEOUT=y
|
||||
CONFIG_CMD_LOADB=y
|
||||
CONFIG_CMD_RESET=y
|
||||
CONFIG_CMD_PARTITION=y
|
||||
CONFIG_CMD_AUTOMOUNT=y
|
||||
CONFIG_CMD_EXPORT=y
|
||||
CONFIG_CMD_PRINTENV=y
|
||||
CONFIG_CMD_MAGICVAR=y
|
||||
CONFIG_CMD_MAGICVAR_HELP=y
|
||||
CONFIG_CMD_SPLASH=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_SAVEENV=y
|
||||
CONFIG_CMD_UNCOMPRESS=y
|
||||
CONFIG_CMD_SLEEP=y
|
||||
CONFIG_CMD_DHCP=y
|
||||
CONFIG_CMD_PING=y
|
||||
CONFIG_CMD_TFTP=y
|
||||
CONFIG_CMD_ECHO_E=y
|
||||
CONFIG_CMD_EDIT=y
|
||||
CONFIG_CMD_SPLASH=y
|
||||
CONFIG_CMD_READLINE=y
|
||||
CONFIG_CMD_TIMEOUT=y
|
||||
CONFIG_CMD_FLASH=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_LED=y
|
||||
CONFIG_CMD_LED_TRIGGER=y
|
||||
CONFIG_CMD_OFTREE=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_CMD_DHCP=y
|
||||
CONFIG_NET_NFS=y
|
||||
CONFIG_CMD_PING=y
|
||||
CONFIG_CMD_TFTP=y
|
||||
CONFIG_FS_TFTP=y
|
||||
CONFIG_NET_NETCONSOLE=y
|
||||
CONFIG_NET_RESOLV=y
|
||||
CONFIG_DRIVER_NET_FEC_IMX=y
|
||||
# CONFIG_SPI is not set
|
||||
CONFIG_I2C=y
|
||||
|
@ -65,12 +68,12 @@ CONFIG_MTD=y
|
|||
CONFIG_MTD_RAW_DEVICE=y
|
||||
CONFIG_NAND=y
|
||||
CONFIG_NAND_IMX=y
|
||||
CONFIG_MTD_UBI=y
|
||||
CONFIG_MTD_UBI_FASTMAP=y
|
||||
CONFIG_USB_HOST=y
|
||||
CONFIG_USB_IMX_CHIPIDEA=y
|
||||
CONFIG_USB_EHCI=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_DFU=y
|
||||
CONFIG_USB_GADGET_SERIAL=y
|
||||
CONFIG_VIDEO=y
|
||||
CONFIG_DRIVER_VIDEO_IMX=y
|
||||
CONFIG_MCI=y
|
||||
|
@ -78,7 +81,10 @@ CONFIG_MCI_IMX_ESDHC=y
|
|||
CONFIG_LED=y
|
||||
CONFIG_LED_GPIO=y
|
||||
CONFIG_LED_TRIGGERS=y
|
||||
CONFIG_FS_TFTP=y
|
||||
CONFIG_FS_FAT=y
|
||||
CONFIG_FS_FAT_WRITE=y
|
||||
CONFIG_FS_FAT_LFN=y
|
||||
CONFIG_LZO_DECOMPRESS=y
|
||||
CONFIG_BMP=y
|
||||
CONFIG_PNG=y
|
||||
|
|
|
@ -74,6 +74,7 @@ int imx25_devices_init(void)
|
|||
add_generic_device("imx31-gpio", 2, NULL, MX25_GPIO3_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL);
|
||||
add_generic_device("imx31-gpio", 3, NULL, MX25_GPIO4_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL);
|
||||
add_generic_device("imx21-wdt", 0, NULL, MX25_WDOG_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL);
|
||||
add_generic_device("imx25-usb-misc", 0, NULL, MX25_USB_OTG_BASE_ADDR + 0x600, 0x100, IORESOURCE_MEM, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -35,11 +35,14 @@
|
|||
#include <driver.h>
|
||||
#include <init.h>
|
||||
#include <of.h>
|
||||
#include <gpio.h>
|
||||
#include <malloc.h>
|
||||
#include <types.h>
|
||||
#include <xfuncs.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <pinctrl.h>
|
||||
#include <of_gpio.h>
|
||||
|
||||
#include <io.h>
|
||||
#include <i2c/i2c.h>
|
||||
|
@ -108,6 +111,7 @@ struct fsl_i2c_struct {
|
|||
int stopped;
|
||||
unsigned int ifdr; /* FSL_I2C_IFDR */
|
||||
unsigned int dfsrr; /* FSL_I2C_DFSRR */
|
||||
struct i2c_bus_recovery_info rinfo;
|
||||
};
|
||||
#define to_fsl_i2c_struct(a) container_of(a, struct fsl_i2c_struct, adapter)
|
||||
|
||||
|
@ -232,8 +236,12 @@ static int i2c_fsl_start(struct i2c_adapter *adapter)
|
|||
writeb(temp, base + FSL_I2C_I2CR);
|
||||
|
||||
result = i2c_fsl_bus_busy(adapter, 1);
|
||||
if (result) {
|
||||
result = i2c_recover_bus(&i2c_fsl->adapter);
|
||||
if (result)
|
||||
return result;
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
i2c_fsl->stopped = 0;
|
||||
|
||||
|
@ -494,9 +502,14 @@ static int i2c_fsl_xfer(struct i2c_adapter *adapter,
|
|||
int result;
|
||||
|
||||
/* Start I2C transfer */
|
||||
for (i = 0; i < 3; i++) {
|
||||
result = i2c_fsl_start(adapter);
|
||||
if (result)
|
||||
goto fail0;
|
||||
if (!result)
|
||||
break;
|
||||
if (result == -EAGAIN)
|
||||
continue;
|
||||
return result;
|
||||
}
|
||||
|
||||
/* read/write data */
|
||||
for (i = 0; i < num; i++) {
|
||||
|
@ -527,6 +540,48 @@ fail0:
|
|||
return (result < 0) ? result : num;
|
||||
}
|
||||
|
||||
static void i2c_fsl_prepare_recovery(struct i2c_adapter *adapter)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = pinctrl_select_state(adapter->dev.parent, "gpio");
|
||||
if (ret)
|
||||
dev_err(adapter->dev.parent, "pinctrl failed: %s\n", strerror(-ret));
|
||||
}
|
||||
static void i2c_fsl_unprepare_recovery(struct i2c_adapter *adapter)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = pinctrl_select_state(adapter->dev.parent, "default");
|
||||
if (ret)
|
||||
dev_err(adapter->dev.parent, "pinctrl failed: %s\n", strerror(-ret));
|
||||
}
|
||||
|
||||
static void i2c_fsl_init_recovery(struct fsl_i2c_struct *i2c_fsl, struct device_d *dev)
|
||||
{
|
||||
if (!dev->device_node)
|
||||
return;
|
||||
|
||||
i2c_fsl->rinfo.sda_gpio = of_get_named_gpio_flags(dev->device_node,
|
||||
"sda-gpios", 0, NULL);
|
||||
i2c_fsl->rinfo.scl_gpio = of_get_named_gpio_flags(dev->device_node,
|
||||
"scl-gpios", 0, NULL);
|
||||
|
||||
if (!gpio_is_valid(i2c_fsl->rinfo.sda_gpio) ||
|
||||
!gpio_is_valid(i2c_fsl->rinfo.scl_gpio))
|
||||
return;
|
||||
|
||||
i2c_fsl->rinfo.get_scl = i2c_get_scl_gpio_value;
|
||||
i2c_fsl->rinfo.get_sda = i2c_get_sda_gpio_value;
|
||||
i2c_fsl->rinfo.set_scl = i2c_set_scl_gpio_value;
|
||||
i2c_fsl->rinfo.prepare_recovery = i2c_fsl_prepare_recovery;
|
||||
i2c_fsl->rinfo.unprepare_recovery = i2c_fsl_unprepare_recovery;
|
||||
i2c_fsl->rinfo.recover_bus = i2c_generic_gpio_recovery;
|
||||
i2c_fsl->adapter.bus_recovery_info = &i2c_fsl->rinfo;
|
||||
|
||||
dev_dbg(dev, "initialized recovery info\n");
|
||||
}
|
||||
|
||||
static int __init i2c_fsl_probe(struct device_d *pdev)
|
||||
{
|
||||
struct fsl_i2c_struct *i2c_fsl;
|
||||
|
@ -555,6 +610,8 @@ static int __init i2c_fsl_probe(struct device_d *pdev)
|
|||
goto fail;
|
||||
}
|
||||
|
||||
i2c_fsl_init_recovery(i2c_fsl, pdev);
|
||||
|
||||
i2c_fsl->dfsrr = -1;
|
||||
|
||||
/* Set up clock divider */
|
||||
|
|
|
@ -236,6 +236,7 @@ static int imx_chipidea_probe(struct device_d *dev)
|
|||
}
|
||||
ci->portno = dev->id;
|
||||
ci->flags = pdata->flags;
|
||||
ci->phymode = pdata->phymode;
|
||||
ci->mode = pdata->mode;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
*.imximg
|
||||
*.imximg.prep
|
||||
*.imximg.signed
|
||||
*.imx-sram-img
|
||||
*.map
|
||||
*.src
|
||||
*.kwbimg
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef __USB_CHIPIDEA_IMX_H
|
||||
#define __USB_CHIPIDEA_IMX_H
|
||||
|
||||
#include <usb/phy.h>
|
||||
|
||||
/*
|
||||
* POTSC flags
|
||||
*/
|
||||
|
@ -42,6 +44,7 @@ enum imx_usb_mode {
|
|||
|
||||
struct imxusb_platformdata {
|
||||
unsigned long flags;
|
||||
enum usb_phy_interface phymode;
|
||||
enum imx_usb_mode mode;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue