arm: mx6: cm_fx6: add usb support
Add USB and USB OTG host support for Compulab CM-FX6 CoM. Cc: Igor Grinberg <grinberg@compulab.co.il> Cc: Stefano Babic <sbabic@denx.de> Cc: Tom Rini <trini@ti.com> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
This commit is contained in:
parent
02b1343e4a
commit
0f3effb99f
|
|
@ -15,12 +15,88 @@
|
||||||
#include <fdt_support.h>
|
#include <fdt_support.h>
|
||||||
#include <asm/arch/crm_regs.h>
|
#include <asm/arch/crm_regs.h>
|
||||||
#include <asm/arch/sys_proto.h>
|
#include <asm/arch/sys_proto.h>
|
||||||
|
#include <asm/arch/iomux.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/gpio.h>
|
#include <asm/gpio.h>
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
#ifdef CONFIG_USB_EHCI_MX6
|
||||||
|
#define WEAK_PULLDOWN (PAD_CTL_PUS_100K_DOWN | \
|
||||||
|
PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | \
|
||||||
|
PAD_CTL_HYS | PAD_CTL_SRE_SLOW)
|
||||||
|
|
||||||
|
static int cm_fx6_usb_hub_reset(void)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = gpio_request(CM_FX6_USB_HUB_RST, "usb hub rst");
|
||||||
|
if (err) {
|
||||||
|
printf("USB hub rst gpio request failed: %d\n", err);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
SETUP_IOMUX_PAD(PAD_SD3_RST__GPIO7_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL));
|
||||||
|
gpio_direction_output(CM_FX6_USB_HUB_RST, 0);
|
||||||
|
udelay(10);
|
||||||
|
gpio_direction_output(CM_FX6_USB_HUB_RST, 1);
|
||||||
|
mdelay(1);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cm_fx6_init_usb_otg(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
|
||||||
|
|
||||||
|
ret = gpio_request(SB_FX6_USB_OTG_PWR, "usb-pwr");
|
||||||
|
if (ret) {
|
||||||
|
printf("USB OTG pwr gpio request failed: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
SETUP_IOMUX_PAD(PAD_EIM_D22__GPIO3_IO22 | MUX_PAD_CTRL(NO_PAD_CTRL));
|
||||||
|
SETUP_IOMUX_PAD(PAD_ENET_RX_ER__USB_OTG_ID |
|
||||||
|
MUX_PAD_CTRL(WEAK_PULLDOWN));
|
||||||
|
clrbits_le32(&iomux->gpr[1], IOMUXC_GPR1_OTG_ID_MASK);
|
||||||
|
/* disable ext. charger detect, or it'll affect signal quality at dp. */
|
||||||
|
return gpio_direction_output(SB_FX6_USB_OTG_PWR, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MX6_USBNC_BASEADDR 0x2184800
|
||||||
|
#define USBNC_USB_H1_PWR_POL (1 << 9)
|
||||||
|
int board_ehci_hcd_init(int port)
|
||||||
|
{
|
||||||
|
u32 *usbnc_usb_uh1_ctrl = (u32 *)(MX6_USBNC_BASEADDR + 4);
|
||||||
|
|
||||||
|
switch (port) {
|
||||||
|
case 0:
|
||||||
|
return cm_fx6_init_usb_otg();
|
||||||
|
case 1:
|
||||||
|
SETUP_IOMUX_PAD(PAD_GPIO_0__USB_H1_PWR |
|
||||||
|
MUX_PAD_CTRL(NO_PAD_CTRL));
|
||||||
|
|
||||||
|
/* Set PWR polarity to match power switch's enable polarity */
|
||||||
|
setbits_le32(usbnc_usb_uh1_ctrl, USBNC_USB_H1_PWR_POL);
|
||||||
|
return cm_fx6_usb_hub_reset();
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_ehci_power(int port, int on)
|
||||||
|
{
|
||||||
|
if (port == 0)
|
||||||
|
return gpio_direction_output(SB_FX6_USB_OTG_PWR, on);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_FEC_MXC
|
#ifdef CONFIG_FEC_MXC
|
||||||
#define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
|
#define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
|
||||||
PAD_CTL_DSE_40ohm | PAD_CTL_HYS)
|
PAD_CTL_DSE_40ohm | PAD_CTL_HYS)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,9 @@
|
||||||
#define CM_FX6_ECSPI_BUS0_CS0 IMX_GPIO_NR(2, 30)
|
#define CM_FX6_ECSPI_BUS0_CS0 IMX_GPIO_NR(2, 30)
|
||||||
#define CM_FX6_GREEN_LED IMX_GPIO_NR(2, 31)
|
#define CM_FX6_GREEN_LED IMX_GPIO_NR(2, 31)
|
||||||
#define CM_FX6_ENET_NRST IMX_GPIO_NR(2, 8)
|
#define CM_FX6_ENET_NRST IMX_GPIO_NR(2, 8)
|
||||||
|
#define CM_FX6_ENET_NRST IMX_GPIO_NR(2, 8)
|
||||||
|
#define CM_FX6_USB_HUB_RST IMX_GPIO_NR(7, 8)
|
||||||
|
#define SB_FX6_USB_OTG_PWR IMX_GPIO_NR(3, 22)
|
||||||
|
|
||||||
void cm_fx6_set_usdhc_iomux(void);
|
void cm_fx6_set_usdhc_iomux(void);
|
||||||
void cm_fx6_set_ecspi_iomux(void);
|
void cm_fx6_set_ecspi_iomux(void);
|
||||||
|
|
|
||||||
|
|
@ -200,6 +200,16 @@
|
||||||
#define CONFIG_NETMASK 255.255.255.0
|
#define CONFIG_NETMASK 255.255.255.0
|
||||||
#define CONFIG_NET_RETRY_COUNT 5
|
#define CONFIG_NET_RETRY_COUNT 5
|
||||||
|
|
||||||
|
/* USB */
|
||||||
|
#define CONFIG_CMD_USB
|
||||||
|
#define CONFIG_USB_EHCI
|
||||||
|
#define CONFIG_USB_EHCI_MX6
|
||||||
|
#define CONFIG_USB_STORAGE
|
||||||
|
#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
|
||||||
|
#define CONFIG_MXC_USB_FLAGS 0
|
||||||
|
#define CONFIG_USB_MAX_CONTROLLER_COUNT 2
|
||||||
|
#define CONFIG_EHCI_HCD_INIT_AFTER_RESET /* For OTG port */
|
||||||
|
|
||||||
/* GPIO */
|
/* GPIO */
|
||||||
#define CONFIG_MXC_GPIO
|
#define CONFIG_MXC_GPIO
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue