usb: usb gadget setting [1/1]

PD#138714: usb gadget setting
1.add rndis gadget for meson32 config
2.adjust dwc_otg_driver fifo for gadget
3.fix dwc_dma_free warning
4.dts: set otg switch for board q200,p400,p401
Change-Id: I29bba52bac85cecacf1e13c7cddbe5e280157fa2
Signed-off-by: Qi Duan <qi.duan@amlogic.com>
This commit is contained in:
Qi Duan
2017-05-08 20:59:11 +08:00
committed by Jianxin Pan
parent cf38651638
commit 8fae043a76
8 changed files with 49 additions and 17 deletions

View File

@@ -276,6 +276,7 @@ CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_OPTION=y
CONFIG_USB_GADGET=y
CONFIG_USB_CONFIGFS=y
CONFIG_USB_CONFIGFS_RNDIS=y
CONFIG_USB_CONFIGFS_F_FS=y
CONFIG_USB_CONFIGFS_F_MTP=y
CONFIG_USB_CONFIGFS_F_PTP=y

View File

@@ -404,6 +404,10 @@
compatible = "amlogic, amlogic-new-usb3";
portnum = <0>;
reg = <0x0 0xd0078080 0x0 0x20>;
interrupts = <0 16 4>;
otg = <1>;
gpio-vbus-power = "GPIOAO_5";
gpios = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
};
dwc2_a {
@@ -422,7 +426,7 @@
port-id-mode = <0>; /** 0: hardware, 1: sw_host, 2: sw_slave*/
usb-fifo = <728>;
cpu-type = "gxl";
controller-type = <1>; /** 0: normal, 1: host, 2: device*/
controller-type = <3>; /** 0: normal,1:host,2:device,3:otg*/
phy-reg = <0xd0078000>;
phy-reg-size = <0xa0>;
clocks = <&clkc CLKID_USB_GENERAL

View File

@@ -466,6 +466,10 @@
compatible = "amlogic, amlogic-new-usb3";
portnum = <0>;
reg = <0x0 0xd0078080 0x0 0x20>;
interrupts = <0 16 4>;
otg = <1>;
gpio-vbus-power = "GPIOAO_5";
gpios = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
};
dwc2_a {
@@ -484,7 +488,7 @@
port-id-mode = <0>; /** 0: hardware, 1: sw_host, 2: sw_slave*/
usb-fifo = <728>;
cpu-type = "gxl";
controller-type = <1>; /** 0: normal, 1: host, 2: device*/
controller-type = <3>; /** 0: normal,1:host,2:device,3:otg*/
phy-reg = <0xd0078000>;
phy-reg-size = <0xa0>;
clocks = <&clkc CLKID_USB_GENERAL

View File

@@ -601,6 +601,10 @@
compatible = "amlogic, amlogic-new-usb3";
portnum = <0>;
reg = <0x0 0xd0078080 0x0 0x20>;
interrupts = <0 16 4>;
otg = <1>;
gpio-vbus-power = "GPIOAO_5";
gpios = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
};
dwc2_a {
@@ -619,7 +623,7 @@
port-id-mode = <0>; /** 0: hardware, 1: sw_host, 2: sw_slave*/
usb-fifo = <728>;
cpu-type = "gxl";
controller-type = <1>; /** 0: normal, 1:host, 2:device*/
controller-type = <3>; /** 0: normal,1:host,2:device,3:otg*/
phy-reg = <0xd0078000>;
phy-reg-size = <0xa0>;
clocks = <&clkc CLKID_USB_GENERAL

View File

@@ -1200,11 +1200,13 @@ static int dwc_otg_driver_probe(struct platform_device *pdev)
dwc_otg_module_params.host_nperio_tx_fifo_size = -1;
dwc_otg_module_params.host_perio_tx_fifo_size = -1;
dwc_otg_module_params.host_channels = -1;
dwc_otg_module_params.dev_rx_fifo_size = 164;
dwc_otg_module_params.dev_nperio_tx_fifo_size = 144;
dwc_otg_module_params.dev_tx_fifo_size[0] = 144;
dwc_otg_module_params.dev_rx_fifo_size = 192;
dwc_otg_module_params.dev_nperio_tx_fifo_size = 128;
dwc_otg_module_params.dev_tx_fifo_size[0] = 128;
dwc_otg_module_params.dev_tx_fifo_size[1] = 128;
dwc_otg_module_params.dev_tx_fifo_size[2] = 128;
dwc_otg_module_params.dev_tx_fifo_size[3] = 16;
dwc_otg_module_params.dev_tx_fifo_size[4] = 16;
} else {
dwc_otg_module_params.data_fifo_size = -1;
dwc_otg_module_params.host_rx_fifo_size = -1;

View File

@@ -2198,9 +2198,25 @@ int dwc_otg_pcd_ep_queue(dwc_otg_pcd_t *pcd, void *ep_handle,
req->priv = req_handle;
req->dw_align_buf = NULL;
if ((dma_buf & 0x3) && GET_CORE_IF(pcd)->dma_enable
&& !GET_CORE_IF(pcd)->dma_desc_enable && buflen)
req->dw_align_buf = DWC_DMA_ALLOC_ATOMIC(buflen,
&req->dw_align_buf_dma);
&& !GET_CORE_IF(pcd)->dma_desc_enable && buflen) {
struct device *dev = &pcd->otg_dev->os_dep.pldev->dev;
if (atomic_alloc)
req->dw_align_buf = DWC_ALLOC_ATOMIC(buflen);
else
req->dw_align_buf = DWC_ALLOC(buflen);
if (!req->dw_align_buf) {
DWC_FREE(req);
return -DWC_E_NO_MEMORY;
}
if (ep->dwc_ep.is_in)
dwc_memcpy(req->dw_align_buf, buf, buflen);
req->dw_align_buf_dma = dma_map_single(dev,
req->dw_align_buf, buflen,
ep->dwc_ep.is_in ? DMA_TO_DEVICE :
DMA_FROM_DEVICE);
}
DWC_SPINLOCK_IRQSAVE(pcd->lock, &flags);
#if 0
/*
@@ -2300,8 +2316,6 @@ int dwc_otg_pcd_ep_queue(dwc_otg_pcd_t *pcd, void *ep_handle,
/* Setup and start the Transfer */
if (req->dw_align_buf) {
if (ep->dwc_ep.is_in)
dwc_memcpy(req->dw_align_buf, buf, buflen);
ep->dwc_ep.dma_addr = req->dw_align_buf_dma;
ep->dwc_ep.start_xfer_buff = req->dw_align_buf;
ep->dwc_ep.xfer_buff = req->dw_align_buf;

View File

@@ -2453,11 +2453,16 @@ static void complete_ep(dwc_otg_pcd_ep_t *ep)
req->actual = ep->dwc_ep.xfer_count;
if (req->dw_align_buf) {
struct device *dev = &ep->pcd->otg_dev->
os_dep.pldev->dev;
dma_unmap_single(dev,
req->dw_align_buf_dma, req->length,
ep->dwc_ep.is_in ? DMA_TO_DEVICE :
DMA_FROM_DEVICE);
if (!ep->dwc_ep.is_in)
dwc_memcpy(req->buf, req->dw_align_buf, req->length);
DWC_DMA_FREE(req->length, req->dw_align_buf,
req->dw_align_buf_dma);
DWC_FREE(req->dw_align_buf);
}
dwc_otg_request_done(ep, req, 0);

View File

@@ -252,13 +252,11 @@ static int amlogic_new_usb3_probe(struct platform_device *pdev)
gpio_name = of_get_property(dev->of_node, "gpio-vbus-power", NULL);
if (gpio_name) {
#if 0
gpio_vbus_power_pin = 1;
usb_gd = gpiod_get_index(&pdev->dev,
NULL, 0);
NULL, 0, GPIOD_OUT_LOW);
if (IS_ERR(usb_gd))
return -1;
#endif
}
prop = of_get_property(dev->of_node, "portnum", NULL);