|
@@ -730,3 +730,105 @@ static int usbhs1_hardware_init(struct platform_device *pdev)
|
|
|
dev_err(&pdev->dev, "request_irq err\n");
|
|
|
return ret;
|
|
|
}
|
|
|
+
|
|
|
+ /* enable USB phy interrupt */
|
|
|
+ __raw_writew(USB_PHY_MODE | USB_PHY_INT_EN, priv->usbphyaddr);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void usbhs1_hardware_exit(struct platform_device *pdev)
|
|
|
+{
|
|
|
+ struct usbhs_private *priv = usbhs_get_priv(pdev);
|
|
|
+
|
|
|
+ /* clear interrupt status */
|
|
|
+ __raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->usbphyaddr);
|
|
|
+
|
|
|
+ free_irq(IRQ8, pdev);
|
|
|
+}
|
|
|
+
|
|
|
+static int usbhs1_get_id(struct platform_device *pdev)
|
|
|
+{
|
|
|
+ return USBHS_HOST;
|
|
|
+}
|
|
|
+
|
|
|
+static u32 usbhs1_pipe_cfg[] = {
|
|
|
+ USB_ENDPOINT_XFER_CONTROL,
|
|
|
+ USB_ENDPOINT_XFER_ISOC,
|
|
|
+ USB_ENDPOINT_XFER_ISOC,
|
|
|
+ USB_ENDPOINT_XFER_BULK,
|
|
|
+ USB_ENDPOINT_XFER_BULK,
|
|
|
+ USB_ENDPOINT_XFER_BULK,
|
|
|
+ USB_ENDPOINT_XFER_INT,
|
|
|
+ USB_ENDPOINT_XFER_INT,
|
|
|
+ USB_ENDPOINT_XFER_INT,
|
|
|
+ USB_ENDPOINT_XFER_BULK,
|
|
|
+ USB_ENDPOINT_XFER_BULK,
|
|
|
+ USB_ENDPOINT_XFER_BULK,
|
|
|
+ USB_ENDPOINT_XFER_BULK,
|
|
|
+ USB_ENDPOINT_XFER_BULK,
|
|
|
+ USB_ENDPOINT_XFER_BULK,
|
|
|
+ USB_ENDPOINT_XFER_BULK,
|
|
|
+};
|
|
|
+
|
|
|
+static struct usbhs_private usbhs1_private = {
|
|
|
+ .usbphyaddr = IOMEM(0xe60581e2), /* USBPHY1INTAP */
|
|
|
+ .usbcrcaddr = IOMEM(0xe6058130), /* USBCR4 */
|
|
|
+ .info = {
|
|
|
+ .platform_callback = {
|
|
|
+ .hardware_init = usbhs1_hardware_init,
|
|
|
+ .hardware_exit = usbhs1_hardware_exit,
|
|
|
+ .get_id = usbhs1_get_id,
|
|
|
+ .phy_reset = usbhs_phy_reset,
|
|
|
+ },
|
|
|
+ .driver_param = {
|
|
|
+ .buswait_bwait = 4,
|
|
|
+ .has_otg = 1,
|
|
|
+ .pipe_type = usbhs1_pipe_cfg,
|
|
|
+ .pipe_size = ARRAY_SIZE(usbhs1_pipe_cfg),
|
|
|
+ .d0_tx_id = SHDMA_SLAVE_USB1_TX,
|
|
|
+ .d1_rx_id = SHDMA_SLAVE_USB1_RX,
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource usbhs1_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .name = "USBHS1",
|
|
|
+ .start = 0xe68b0000,
|
|
|
+ .end = 0xe68b00e6 - 1,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .start = evt2irq(0x1ce0) /* USB1_USB1I0 */,
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device usbhs1_device = {
|
|
|
+ .name = "renesas_usbhs",
|
|
|
+ .id = 1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &usbhs1_private.info,
|
|
|
+ .dma_mask = &usbhs1_device.dev.coherent_dma_mask,
|
|
|
+ .coherent_dma_mask = DMA_BIT_MASK(32),
|
|
|
+ },
|
|
|
+ .num_resources = ARRAY_SIZE(usbhs1_resources),
|
|
|
+ .resource = usbhs1_resources,
|
|
|
+};
|
|
|
+
|
|
|
+/* LED */
|
|
|
+static struct gpio_led mackerel_leds[] = {
|
|
|
+ {
|
|
|
+ .name = "led0",
|
|
|
+ .gpio = GPIO_PORT0,
|
|
|
+ .default_state = LEDS_GPIO_DEFSTATE_ON,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "led1",
|
|
|
+ .gpio = GPIO_PORT1,
|
|
|
+ .default_state = LEDS_GPIO_DEFSTATE_ON,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "led2",
|
|
|
+ .gpio = GPIO_PORT2,
|