diff mbox series

[U-Boot,v2,10/14] colibri-imx6ull: migrate usb to using driver model

Message ID 20190409152420.11394-11-marcel@ziswiler.com
State Awaiting Upstream
Delegated to: Stefano Babic
Headers show
Series colibri-imx6ull device tree enablement and driver model conversion | expand

Commit Message

Marcel Ziswiler April 9, 2019, 3:24 p.m. UTC
From: Marcel Ziswiler <marcel.ziswiler@toradex.com>

Migrate USB to using driver model.
Add USBH_PEN GPIO regulator.
While at it also add alias e.g. as required for UMS.

Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Reviewed-by: Igor Opaniuk <igor.opaniuk@toradex.com>

---

Changes in v2:
- Added Igor's reviewed-by.

 arch/arm/dts/imx6ull-colibri.dts              | 24 ++++++++++
 .../toradex/colibri-imx6ull/colibri-imx6ull.c | 48 -------------------
 configs/colibri-imx6ull_defconfig             |  1 +
 3 files changed, 25 insertions(+), 48 deletions(-)

Comments

Igor Opaniuk April 17, 2019, 7:58 a.m. UTC | #1
Hi Marcel,

Just found out that to be able to use usbotg1 also in host mode this
change should be introduced:
--- a/arch/arm/dts/imx6ull-colibri.dts
+++ b/arch/arm/dts/imx6ull-colibri.dts
@@ -220,7 +220,7 @@

 /* Colibri USBC */
 &usbotg1 {
-       dr_mode = "otg";
+       dr_mode = "host";
        srp-disable;
        hnp-disable;
        adp-disable;

Without (tested with USB pendrive):
Colibri iMX6ULL # usb start
starting USB...
USB0:   USB1:   USB EHCI 1.00
scanning bus 0 for devices... 1 USB Device(s) found
scanning bus 1 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found


With (tested with USB pendrive):
Colibri iMX6ULL # usb start
starting USB...
USB0:   USB EHCI 1.00
USB1:   USB EHCI 1.00
scanning bus 0 for devices... 2 USB Device(s) found
scanning bus 1 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 1 Storage Device(s) found

On Tue, Apr 9, 2019 at 5:31 PM Marcel Ziswiler <marcel@ziswiler.com> wrote:
>
> From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
>
> Migrate USB to using driver model.
> Add USBH_PEN GPIO regulator.
> While at it also add alias e.g. as required for UMS.
>
> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> Reviewed-by: Igor Opaniuk <igor.opaniuk@toradex.com>
>
> ---
>
> Changes in v2:
> - Added Igor's reviewed-by.
>
>  arch/arm/dts/imx6ull-colibri.dts              | 24 ++++++++++
>  .../toradex/colibri-imx6ull/colibri-imx6ull.c | 48 -------------------
>  configs/colibri-imx6ull_defconfig             |  1 +
>  3 files changed, 25 insertions(+), 48 deletions(-)
>
> diff --git a/arch/arm/dts/imx6ull-colibri.dts b/arch/arm/dts/imx6ull-colibri.dts
> index 0d416ebd10..91e48aab61 100644
> --- a/arch/arm/dts/imx6ull-colibri.dts
> +++ b/arch/arm/dts/imx6ull-colibri.dts
> @@ -13,6 +13,7 @@
>
>         aliases {
>                 mmc0 = &usdhc1;
> +               usb0 = &usbotg1; /* required for ums */
>         };
>
>         chosen {
> @@ -35,6 +36,13 @@
>                 regulator-max-microvolt = <3300000>;
>         };
>
> +       reg_5v0: regulator-5v0 {
> +               compatible = "regulator-fixed";
> +               regulator-name = "5V";
> +               regulator-min-microvolt = <5000000>;
> +               regulator-max-microvolt = <5000000>;
> +       };
> +
>         reg_sd1_vmmc: regulator-sd1-vmmc {
>                 compatible = "regulator-gpio";
>                 gpio = <&gpio5 9 GPIO_ACTIVE_HIGH>;
> @@ -47,6 +55,17 @@
>                 states = <1800000 0x1 3300000 0x0>;
>                 vin-supply = <&reg_module_3v3>;
>         };
> +
> +       reg_usbh_vbus: regulator-usbh-vbus {
> +               compatible = "regulator-fixed";
> +               pinctrl-names = "default";
> +               pinctrl-0 = <&pinctrl_usbh_reg>;
> +               regulator-name = "VCC_USB[1-4]";
> +               regulator-min-microvolt = <5000000>;
> +               regulator-max-microvolt = <5000000>;
> +               gpio = <&gpio1 2 GPIO_ACTIVE_LOW>; /* USBH_PEN */
> +               vin-supply = <&reg_5v0>;
> +       };
>  };
>
>  &adc1 {
> @@ -183,15 +202,20 @@
>         fsl,dte-mode;
>  };
>
> +/* Colibri USBC */
>  &usbotg1 {
>         dr_mode = "otg";
>         srp-disable;
>         hnp-disable;
>         adp-disable;
> +       status = "okay";
>  };
>
> +/* Colibri USBH */
>  &usbotg2 {
>         dr_mode = "host";
> +       vbus-supply = <&reg_usbh_vbus>;
> +       status = "okay";
>  };
>
>  /* Colibri MMC */
> diff --git a/board/toradex/colibri-imx6ull/colibri-imx6ull.c b/board/toradex/colibri-imx6ull/colibri-imx6ull.c
> index c9af44e30e..21addaf6ed 100644
> --- a/board/toradex/colibri-imx6ull/colibri-imx6ull.c
> +++ b/board/toradex/colibri-imx6ull/colibri-imx6ull.c
> @@ -24,8 +24,6 @@
>  #include <miiphy.h>
>  #include <mtd_node.h>
>  #include <netdev.h>
> -#include <usb.h>
> -#include <usb/ehci-ci.h>
>
>  #include "../common/tdx-common.h"
>  #include "../common/tdx-cfg-block.h"
> @@ -41,8 +39,6 @@ DECLARE_GLOBAL_DATA_PTR;
>
>  #define NAND_PAD_READY0_CTRL (PAD_CTL_DSE_48ohm | PAD_CTL_PUS_22K_UP)
>
> -#define USB_CDET_GPIO  IMX_GPIO_NR(7, 14)
> -
>  int dram_init(void)
>  {
>         gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
> @@ -50,10 +46,6 @@ int dram_init(void)
>         return 0;
>  }
>
> -static iomux_v3_cfg_t const usb_cdet_pads[] = {
> -       MX6_PAD_SNVS_TAMPER2__GPIO5_IO02 | MUX_PAD_CTRL(NO_PAD_CTRL),
> -};
> -
>  #ifdef CONFIG_NAND_MXS
>  static void setup_gpmi_nand(void)
>  {
> @@ -163,11 +155,6 @@ int board_init(void)
>         setup_lcd();
>  #endif
>
> -#ifdef CONFIG_USB_EHCI_MX6
> -       imx_iomux_v3_setup_multiple_pads(usb_cdet_pads, ARRAY_SIZE(usb_cdet_pads));
> -       gpio_request(USB_CDET_GPIO, "usb-cdet-gpio");
> -#endif
> -
>         return 0;
>  }
>
> @@ -241,41 +228,6 @@ int ft_board_setup(void *blob, bd_t *bd)
>  }
>  #endif
>
> -#ifdef CONFIG_USB_EHCI_MX6
> -static iomux_v3_cfg_t const usb_otg2_pads[] = {
> -               MX6_PAD_GPIO1_IO02__GPIO1_IO02 | MUX_PAD_CTRL(NO_PAD_CTRL),
> -};
> -
> -int board_ehci_hcd_init(int port)
> -{
> -       switch (port) {
> -       case 0:
> -               break;
> -       case 1:
> -               imx_iomux_v3_setup_multiple_pads(usb_otg2_pads,
> -                                                ARRAY_SIZE(usb_otg2_pads));
> -               break;
> -       default:
> -               return -EINVAL;
> -       }
> -       return 0;
> -}
> -
> -int board_usb_phy_mode(int port)
> -{
> -       switch (port) {
> -       case 0:
> -               if (gpio_get_value(USB_CDET_GPIO))
> -                       return USB_INIT_DEVICE;
> -               else
> -                       return USB_INIT_HOST;
> -       case 1:
> -       default:
> -               return USB_INIT_HOST;
> -       }
> -}
> -#endif
> -
>  static struct mxc_serial_platdata mxc_serial_plat = {
>         .reg = (struct mxc_uart *)UART1_BASE,
>         .use_dte = 1,
> diff --git a/configs/colibri-imx6ull_defconfig b/configs/colibri-imx6ull_defconfig
> index 69305323f2..0440b4ed94 100644
> --- a/configs/colibri-imx6ull_defconfig
> +++ b/configs/colibri-imx6ull_defconfig
> @@ -71,6 +71,7 @@ CONFIG_DM_REGULATOR_FIXED=y
>  CONFIG_DM_SERIAL=y
>  CONFIG_MXC_UART=y
>  CONFIG_USB=y
> +CONFIG_DM_USB=y
>  CONFIG_USB_GADGET=y
>  CONFIG_USB_GADGET_MANUFACTURER="Toradex"
>  CONFIG_USB_GADGET_VENDOR_NUM=0x1b67
> --
> 2.20.1
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> https://lists.denx.de/listinfo/u-boot
diff mbox series

Patch

diff --git a/arch/arm/dts/imx6ull-colibri.dts b/arch/arm/dts/imx6ull-colibri.dts
index 0d416ebd10..91e48aab61 100644
--- a/arch/arm/dts/imx6ull-colibri.dts
+++ b/arch/arm/dts/imx6ull-colibri.dts
@@ -13,6 +13,7 @@ 
 
 	aliases {
 		mmc0 = &usdhc1;
+		usb0 = &usbotg1; /* required for ums */
 	};
 
 	chosen {
@@ -35,6 +36,13 @@ 
 		regulator-max-microvolt = <3300000>;
 	};
 
+	reg_5v0: regulator-5v0 {
+		compatible = "regulator-fixed";
+		regulator-name = "5V";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+	};
+
 	reg_sd1_vmmc: regulator-sd1-vmmc {
 		compatible = "regulator-gpio";
 		gpio = <&gpio5 9 GPIO_ACTIVE_HIGH>;
@@ -47,6 +55,17 @@ 
 		states = <1800000 0x1 3300000 0x0>;
 		vin-supply = <&reg_module_3v3>;
 	};
+
+	reg_usbh_vbus: regulator-usbh-vbus {
+		compatible = "regulator-fixed";
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_usbh_reg>;
+		regulator-name = "VCC_USB[1-4]";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		gpio = <&gpio1 2 GPIO_ACTIVE_LOW>; /* USBH_PEN */
+		vin-supply = <&reg_5v0>;
+	};
 };
 
 &adc1 {
@@ -183,15 +202,20 @@ 
 	fsl,dte-mode;
 };
 
+/* Colibri USBC */
 &usbotg1 {
 	dr_mode = "otg";
 	srp-disable;
 	hnp-disable;
 	adp-disable;
+	status = "okay";
 };
 
+/* Colibri USBH */
 &usbotg2 {
 	dr_mode = "host";
+	vbus-supply = <&reg_usbh_vbus>;
+	status = "okay";
 };
 
 /* Colibri MMC */
diff --git a/board/toradex/colibri-imx6ull/colibri-imx6ull.c b/board/toradex/colibri-imx6ull/colibri-imx6ull.c
index c9af44e30e..21addaf6ed 100644
--- a/board/toradex/colibri-imx6ull/colibri-imx6ull.c
+++ b/board/toradex/colibri-imx6ull/colibri-imx6ull.c
@@ -24,8 +24,6 @@ 
 #include <miiphy.h>
 #include <mtd_node.h>
 #include <netdev.h>
-#include <usb.h>
-#include <usb/ehci-ci.h>
 
 #include "../common/tdx-common.h"
 #include "../common/tdx-cfg-block.h"
@@ -41,8 +39,6 @@  DECLARE_GLOBAL_DATA_PTR;
 
 #define NAND_PAD_READY0_CTRL (PAD_CTL_DSE_48ohm | PAD_CTL_PUS_22K_UP)
 
-#define USB_CDET_GPIO	IMX_GPIO_NR(7, 14)
-
 int dram_init(void)
 {
 	gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
@@ -50,10 +46,6 @@  int dram_init(void)
 	return 0;
 }
 
-static iomux_v3_cfg_t const usb_cdet_pads[] = {
-	MX6_PAD_SNVS_TAMPER2__GPIO5_IO02 | MUX_PAD_CTRL(NO_PAD_CTRL),
-};
-
 #ifdef CONFIG_NAND_MXS
 static void setup_gpmi_nand(void)
 {
@@ -163,11 +155,6 @@  int board_init(void)
 	setup_lcd();
 #endif
 
-#ifdef CONFIG_USB_EHCI_MX6
-	imx_iomux_v3_setup_multiple_pads(usb_cdet_pads, ARRAY_SIZE(usb_cdet_pads));
-	gpio_request(USB_CDET_GPIO, "usb-cdet-gpio");
-#endif
-
 	return 0;
 }
 
@@ -241,41 +228,6 @@  int ft_board_setup(void *blob, bd_t *bd)
 }
 #endif
 
-#ifdef CONFIG_USB_EHCI_MX6
-static iomux_v3_cfg_t const usb_otg2_pads[] = {
-		MX6_PAD_GPIO1_IO02__GPIO1_IO02 | MUX_PAD_CTRL(NO_PAD_CTRL),
-};
-
-int board_ehci_hcd_init(int port)
-{
-	switch (port) {
-	case 0:
-		break;
-	case 1:
-		imx_iomux_v3_setup_multiple_pads(usb_otg2_pads,
-						 ARRAY_SIZE(usb_otg2_pads));
-		break;
-	default:
-		return -EINVAL;
-	}
-	return 0;
-}
-
-int board_usb_phy_mode(int port)
-{
-	switch (port) {
-	case 0:
-		if (gpio_get_value(USB_CDET_GPIO))
-			return USB_INIT_DEVICE;
-		else
-			return USB_INIT_HOST;
-	case 1:
-	default:
-		return USB_INIT_HOST;
-	}
-}
-#endif
-
 static struct mxc_serial_platdata mxc_serial_plat = {
 	.reg = (struct mxc_uart *)UART1_BASE,
 	.use_dte = 1,
diff --git a/configs/colibri-imx6ull_defconfig b/configs/colibri-imx6ull_defconfig
index 69305323f2..0440b4ed94 100644
--- a/configs/colibri-imx6ull_defconfig
+++ b/configs/colibri-imx6ull_defconfig
@@ -71,6 +71,7 @@  CONFIG_DM_REGULATOR_FIXED=y
 CONFIG_DM_SERIAL=y
 CONFIG_MXC_UART=y
 CONFIG_USB=y
+CONFIG_DM_USB=y
 CONFIG_USB_GADGET=y
 CONFIG_USB_GADGET_MANUFACTURER="Toradex"
 CONFIG_USB_GADGET_VENDOR_NUM=0x1b67