How to Configure USB host mode in IMX6

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to Configure USB host mode in IMX6

Jump to solution
24,638 Views
bandarulavanya
Contributor V

Hi All,

I am trying to operate my board is in USB host mode i configured the kernel config but my device is not detecting the any devices i am connecting and lsusb is showing only the root hubs.  I am using  ID 12d1:1c20 Huawei Technologies Co., Ltd.

can anyone please tell me how to do that.

FYR : Board :similar to imx6- sabresd

           Kernel version: 3.0.35

log is here

FEC Ethernet Driver

PPP generic driver version 2.4.2

PPP Deflate Compression module registered

PPP BSD Compression module registered

PPP MPPE Compression module registered

NET: Registered protocol family 24

SLIP: version 0.8.4-NET3.019-NEWTTY (dynamic channels, max=256).

usbcore: registered new interface driver asix

usbcore: registered new interface driver cdc_ether

usbcore: registered new interface driver cdc_eem

usbcore: registered new interface driver net1080

usbcore: registered new interface driver cdc_subset

usbcore: registered new interface driver zaurus

cdc_ncm: 04-Aug-2011

usbcore: registered new interface driver cdc_ncm

ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver

fsl-ehci fsl-ehci.0: Freescale On-Chip EHCI Host Controller

fsl-ehci fsl-ehci.0: new USB bus registered, assigned bus number 1

fsl-ehci fsl-ehci.0: irq 75, io base 0x02184000

fsl-ehci fsl-ehci.0: USB 2.0 started, EHCI 1.00

usb usb1: New USB device found, idVendor=1d6b, idProduct=0002

usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1

usb usb1: Product: Freescale On-Chip EHCI Host Controller

usb usb1: Manufacturer: Linux 3.0.35-2666-gbdde708-svn251 ehci_hcd

usb usb1: SerialNumber: fsl-ehci.0

hub 1-0:1.0: USB hub found

hub 1-0:1.0: 1 port detected

add wake up source irq 72

fsl-ehci fsl-ehci.1: Freescale On-Chip EHCI Host Controller

fsl-ehci fsl-ehci.1: new USB bus registered, assigned bus number 2

fsl-ehci fsl-ehci.1: irq 72, io base 0x02184200

fsl-ehci fsl-ehci.1: USB 2.0 started, EHCI 1.00

usb usb2: New USB device found, idVendor=1d6b, idProduct=0002

usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1

usb usb2: Product: Freescale On-Chip EHCI Host Controller

usb usb2: Manufacturer: Linux 3.0.35-2666-gbdde708-svn251 ehci_hcd

usb usb2: SerialNumber: fsl-ehci.1

hub 2-0:1.0: USB hub found

hub 2-0:1.0: 1 port detected

usbcore: registered new interface driver cdc_acm

cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

Initializing USB Mass Storage driver...

usbcore: registered new interface driver usb-storage

USB Mass Storage support registered.

usbcore: registered new interface driver usbserial

USB Serial support registered for generic

usbcore: registered new interface driver usbserial_generic

usbserial: USB Serial Driver core

USB Serial support registered for GSM modem (1-port)

usbcore: registered new interface driver option

option: v0.7.2:USB Driver for GSM modems

ARC USBOTG Device Controller driver (1 August 2005)

my_batt_ext_power_changed!

It is not usb supply!

input: gpio-keys as /devices/platform/gpio-keys/input/input0

snvs_rtc snvs_rtc.0: rtc core: registered snvs_rtc as rtc0

i2c /dev entries driver

Thanks & Regards,

Lavanya

0 Kudos
Reply
1 Solution
19,490 Views
bandarulavanya
Contributor V

Hi igorpadykov ,

I got that in board file in kernel menuconfig

CONFIG_USB_EHCI_ARC_OTG=y

CONFIG_USB_OTG = n

CONFIG_USB_GADGET = n (bcz we need to select either host mode or device mode only one)

and in board file i did below changes

   /* keep USB host1 VBUS always on */

/*      ret = gpio_request(SABRESD_USB_H1_PWR, "usb-h1-pwr");                  

        if (ret) {

                pr_err("failed to get GPIO SABRESD_USB_H1_PWR: %d\n",

                        ret);

                return;

        }

        gpio_direction_output(SABRESD_USB_H1_PWR, 0);

        if (board_is_mx6_reva()) {

                mxc_iomux_set_gpr_register(1, 13, 1, 1);

                printk("Lavanya: 1 value\n");

        }

        else {

                mxc_iomux_set_gpr_register(1, 13, 1, 0);

                printk("Lavanya: 0 value\n");

        }

        printk("Vishwa: USB power enable\n\n\n"); */

//              gpio_set_value(FS_USB_OTG_PWR, 1);                            

                mxc_iomux_set_gpr_register(1, 13, 1, 1);     (1 : USBOTG_ID)

                gpio_set_value(FS_USB_OTG_PWR,0);                            

//      mx6_set_otghost_vbus_func(imx6q_sabresd_usbotg_vbus);

//      mx6_set_host1_vbus_func(imx6q_sabresd_host1_vbus);                 

Now i am able to get my device details in lsusb.

Thanks & Regards,

Lavanya

View solution in original post

0 Kudos
Reply
5 Replies
19,490 Views
igorpadykov
NXP Employee
NXP Employee

Hi Bandaru

please check that usb ID signal is low, as for software please

check attached Linux Manual Chapter 40 CHIPIDEA USB Driver,

sect.40.2.6 Changing the Controller Operation Mode

Best regards

igor

-----------------------------------------------------------------------------------------------------------------------

Note: If this post answers your question, please click the Correct Answer button. Thank you!

-----------------------------------------------------------------------------------------------------------------------

0 Kudos
Reply
19,490 Views
bandarulavanya
Contributor V

Hi igorpadykov​ ,

I am working on 3.0.35 kernel version so i don't have DTS file support, so is there any other way .

0 Kudos
Reply
19,490 Views
igorpadykov
NXP Employee
NXP Employee

Hi Bandaru

attached 3.0.35 Linux Manual Chapter, refer to

Chapter 34 ARC USB Driver

~igor

0 Kudos
Reply
19,491 Views
bandarulavanya
Contributor V

Hi igorpadykov ,

I got that in board file in kernel menuconfig

CONFIG_USB_EHCI_ARC_OTG=y

CONFIG_USB_OTG = n

CONFIG_USB_GADGET = n (bcz we need to select either host mode or device mode only one)

and in board file i did below changes

   /* keep USB host1 VBUS always on */

/*      ret = gpio_request(SABRESD_USB_H1_PWR, "usb-h1-pwr");                  

        if (ret) {

                pr_err("failed to get GPIO SABRESD_USB_H1_PWR: %d\n",

                        ret);

                return;

        }

        gpio_direction_output(SABRESD_USB_H1_PWR, 0);

        if (board_is_mx6_reva()) {

                mxc_iomux_set_gpr_register(1, 13, 1, 1);

                printk("Lavanya: 1 value\n");

        }

        else {

                mxc_iomux_set_gpr_register(1, 13, 1, 0);

                printk("Lavanya: 0 value\n");

        }

        printk("Vishwa: USB power enable\n\n\n"); */

//              gpio_set_value(FS_USB_OTG_PWR, 1);                            

                mxc_iomux_set_gpr_register(1, 13, 1, 1);     (1 : USBOTG_ID)

                gpio_set_value(FS_USB_OTG_PWR,0);                            

//      mx6_set_otghost_vbus_func(imx6q_sabresd_usbotg_vbus);

//      mx6_set_host1_vbus_func(imx6q_sabresd_host1_vbus);                 

Now i am able to get my device details in lsusb.

Thanks & Regards,

Lavanya

0 Kudos
Reply
19,490 Views
sanjeevmore
Contributor I

Hi,

In which file we need to add below code

   /* keep USB host1 VBUS always on */

/*      ret = gpio_request(SABRESD_USB_H1_PWR, "usb-h1-pwr");                  

        if (ret) {

                pr_err("failed to get GPIO SABRESD_USB_H1_PWR: %d\n",

                        ret);

                return;

        }

        gpio_direction_output(SABRESD_USB_H1_PWR, 0);

        if (board_is_mx6_reva()) {

                mxc_iomux_set_gpr_register(1, 13, 1, 1);

                printk("Lavanya: 1 value\n");

        }

        else {

                mxc_iomux_set_gpr_register(1, 13, 1, 0);

                printk("Lavanya: 0 value\n");

        }

        printk("Vishwa: USB power enable\n\n\n"); */

//              gpio_set_value(FS_USB_OTG_PWR, 1);                            

                mxc_iomux_set_gpr_register(1, 13, 1, 1);     (1 : USBOTG_ID)

                gpio_set_value(FS_USB_OTG_PWR,0);                            

//      mx6_set_otghost_vbus_func(imx6q_sabresd_usbotg_vbus);

//      mx6_set_host1_vbus_func(imx6q_sabresd_host1_vbus);   

my board is imx6qdlsabreauto. Pls let me know path to add above code to make USB working.

Regards,

Sanjeev

0 Kudos
Reply