|
@@ -32,6 +32,7 @@
|
|
|
#include <linux/smsc911x.h>
|
|
|
#include <linux/spi/spi.h>
|
|
|
#include <linux/spi/flash.h>
|
|
|
+#include <linux/usb/renesas_usbhs.h>
|
|
|
#include <media/soc_camera.h>
|
|
|
#include <mach/common.h>
|
|
|
#include <mach/irqs.h>
|
|
@@ -99,6 +100,16 @@ static void __iomem *fpga;
|
|
|
* # amixer set "LINEOUT Mixer DACL" on
|
|
|
*/
|
|
|
|
|
|
+/*
|
|
|
+ * USB
|
|
|
+ *
|
|
|
+ * USB1 (CN29) can be Host/Function
|
|
|
+ *
|
|
|
+ * Host Func
|
|
|
+ * SW98 1 2
|
|
|
+ * SW99 1 3
|
|
|
+ */
|
|
|
+
|
|
|
/* Dummy supplies, where voltage doesn't matter */
|
|
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
|
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
|
@@ -117,13 +128,71 @@ static struct resource smsc911x_resources[] __initdata = {
|
|
|
DEFINE_RES_IRQ(irq_pin(0)), /* IRQ 0 */
|
|
|
};
|
|
|
|
|
|
+#if IS_ENABLED(CONFIG_USB_RENESAS_USBHS_UDC)
|
|
|
+/*
|
|
|
+ * When USB1 is Func
|
|
|
+ */
|
|
|
+static int usbhsf_get_id(struct platform_device *pdev)
|
|
|
+{
|
|
|
+ return USBHS_GADGET;
|
|
|
+}
|
|
|
+
|
|
|
+#define SUSPMODE 0x102
|
|
|
+static int usbhsf_power_ctrl(struct platform_device *pdev,
|
|
|
+ void __iomem *base, int enable)
|
|
|
+{
|
|
|
+ enable = !!enable;
|
|
|
+
|
|
|
+ r8a7778_usb_phy_power(enable);
|
|
|
+
|
|
|
+ iowrite16(enable << 14, base + SUSPMODE);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static struct resource usbhsf_resources[] __initdata = {
|
|
|
+ DEFINE_RES_MEM(0xffe60000, 0x110),
|
|
|
+ DEFINE_RES_IRQ(gic_iid(0x4f)),
|
|
|
+};
|
|
|
+
|
|
|
+static struct renesas_usbhs_platform_info usbhs_info __initdata = {
|
|
|
+ .platform_callback = {
|
|
|
+ .get_id = usbhsf_get_id,
|
|
|
+ .power_ctrl = usbhsf_power_ctrl,
|
|
|
+ },
|
|
|
+ .driver_param = {
|
|
|
+ .buswait_bwait = 4,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+#define USB_PHY_SETTING {.port1_func = 1, .ovc_pin[1].active_high = 1,}
|
|
|
+#define USB1_DEVICE "renesas_usbhs"
|
|
|
+#define ADD_USB_FUNC_DEVICE_IF_POSSIBLE() \
|
|
|
+ platform_device_register_resndata( \
|
|
|
+ &platform_bus, "renesas_usbhs", -1, \
|
|
|
+ usbhsf_resources, \
|
|
|
+ ARRAY_SIZE(usbhsf_resources), \
|
|
|
+ &usbhs_info, sizeof(struct renesas_usbhs_platform_info))
|
|
|
+
|
|
|
+#else
|
|
|
+/*
|
|
|
+ * When USB1 is Host
|
|
|
+ */
|
|
|
+#define USB_PHY_SETTING { }
|
|
|
+#define USB1_DEVICE "ehci-platform"
|
|
|
+#define ADD_USB_FUNC_DEVICE_IF_POSSIBLE()
|
|
|
+
|
|
|
+#endif
|
|
|
+
|
|
|
/* USB */
|
|
|
static struct resource usb_phy_resources[] __initdata = {
|
|
|
DEFINE_RES_MEM(0xffe70800, 0x100),
|
|
|
DEFINE_RES_MEM(0xffe76000, 0x100),
|
|
|
};
|
|
|
|
|
|
-static struct rcar_phy_platform_data usb_phy_platform_data __initdata;
|
|
|
+static struct rcar_phy_platform_data usb_phy_platform_data __initdata =
|
|
|
+ USB_PHY_SETTING;
|
|
|
+
|
|
|
|
|
|
/* SDHI */
|
|
|
static struct sh_mobile_sdhi_info sdhi0_info __initdata = {
|
|
@@ -445,7 +514,7 @@ static const struct pinctrl_map bockw_pinctrl_map[] = {
|
|
|
/* USB */
|
|
|
PIN_MAP_MUX_GROUP_DEFAULT("ehci-platform", "pfc-r8a7778",
|
|
|
"usb0", "usb0"),
|
|
|
- PIN_MAP_MUX_GROUP_DEFAULT("ehci-platform", "pfc-r8a7778",
|
|
|
+ PIN_MAP_MUX_GROUP_DEFAULT(USB1_DEVICE, "pfc-r8a7778",
|
|
|
"usb1", "usb1"),
|
|
|
/* SDHI0 */
|
|
|
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7778",
|
|
@@ -583,6 +652,12 @@ static void __init bockw_init(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void __init bockw_init_late(void)
|
|
|
+{
|
|
|
+ r8a7778_init_late();
|
|
|
+ ADD_USB_FUNC_DEVICE_IF_POSSIBLE();
|
|
|
+}
|
|
|
+
|
|
|
static const char *bockw_boards_compat_dt[] __initdata = {
|
|
|
"renesas,bockw",
|
|
|
NULL,
|
|
@@ -593,5 +668,5 @@ DT_MACHINE_START(BOCKW_DT, "bockw")
|
|
|
.init_irq = r8a7778_init_irq_dt,
|
|
|
.init_machine = bockw_init,
|
|
|
.dt_compat = bockw_boards_compat_dt,
|
|
|
- .init_late = r8a7778_init_late,
|
|
|
+ .init_late = bockw_init_late,
|
|
|
MACHINE_END
|