diff options
Diffstat (limited to 'drivers/usb/gadget/s3c-hsotg.c')
| -rw-r--r-- | drivers/usb/gadget/s3c-hsotg.c | 78 | 
1 files changed, 6 insertions, 72 deletions
diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c index c26564f29a2..a3cdc32115d 100644 --- a/drivers/usb/gadget/s3c-hsotg.c +++ b/drivers/usb/gadget/s3c-hsotg.c @@ -39,8 +39,6 @@  #include "s3c-hsotg.h" -#define DMA_ADDR_INVALID (~((dma_addr_t)0)) -  static const char * const s3c_hsotg_supply_names[] = {  	"vusb_d",		/* digital USB supply, 1.2V */  	"vusb_a",		/* analog USB supply, 1.1V */ @@ -405,7 +403,6 @@ static struct usb_request *s3c_hsotg_ep_alloc_request(struct usb_ep *ep,  	INIT_LIST_HEAD(&req->queue); -	req->req.dma = DMA_ADDR_INVALID;  	return &req->req;  } @@ -435,24 +432,12 @@ static void s3c_hsotg_unmap_dma(struct s3c_hsotg *hsotg,  				struct s3c_hsotg_req *hs_req)  {  	struct usb_request *req = &hs_req->req; -	enum dma_data_direction dir; - -	dir = hs_ep->dir_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE;  	/* ignore this if we're not moving any data */  	if (hs_req->req.length == 0)  		return; -	if (hs_req->mapped) { -		/* we mapped this, so unmap and remove the dma */ - -		dma_unmap_single(hsotg->dev, req->dma, req->length, dir); - -		req->dma = DMA_ADDR_INVALID; -		hs_req->mapped = 0; -	} else { -		dma_sync_single_for_cpu(hsotg->dev, req->dma, req->length, dir); -	} +	usb_gadget_unmap_request(&hsotg->gadget, hs_req, hs_ep->dir_in);  }  /** @@ -852,37 +837,16 @@ static int s3c_hsotg_map_dma(struct s3c_hsotg *hsotg,  			     struct s3c_hsotg_ep *hs_ep,  			     struct usb_request *req)  { -	enum dma_data_direction dir;  	struct s3c_hsotg_req *hs_req = our_req(req); - -	dir = hs_ep->dir_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE; +	int ret;  	/* if the length is zero, ignore the DMA data */  	if (hs_req->req.length == 0)  		return 0; -	if (req->dma == DMA_ADDR_INVALID) { -		dma_addr_t dma; - -		dma = dma_map_single(hsotg->dev, req->buf, req->length, dir); - -		if (unlikely(dma_mapping_error(hsotg->dev, dma))) -			goto dma_error; - -		if (dma & 3) { -			dev_err(hsotg->dev, "%s: unaligned dma buffer\n", -				__func__); - -			dma_unmap_single(hsotg->dev, dma, req->length, dir); -			return -EINVAL; -		} - -		hs_req->mapped = 1; -		req->dma = dma; -	} else { -		dma_sync_single_for_cpu(hsotg->dev, req->dma, req->length, dir); -		hs_req->mapped = 0; -	} +	ret = usb_gadget_map_request(&hsotg->gadget, req, hs_ep->dir_in); +	if (ret) +		goto dma_error;  	return 0; @@ -2961,9 +2925,7 @@ static int s3c_hsotg_udc_start(struct usb_gadget *gadget,  	driver->driver.bus = NULL;  	hsotg->driver = driver; -	hsotg->gadget.dev.driver = &driver->driver;  	hsotg->gadget.dev.of_node = hsotg->dev->of_node; -	hsotg->gadget.dev.dma_mask = hsotg->dev->dma_mask;  	hsotg->gadget.speed = USB_SPEED_UNKNOWN;  	ret = regulator_bulk_enable(ARRAY_SIZE(hsotg->supplies), @@ -2979,7 +2941,6 @@ static int s3c_hsotg_udc_start(struct usb_gadget *gadget,  err:  	hsotg->driver = NULL; -	hsotg->gadget.dev.driver = NULL;  	return ret;  } @@ -3014,7 +2975,6 @@ static int s3c_hsotg_udc_stop(struct usb_gadget *gadget,  	hsotg->driver = NULL;  	hsotg->gadget.speed = USB_SPEED_UNKNOWN; -	hsotg->gadget.dev.driver = NULL;  	spin_unlock_irqrestore(&hsotg->lock, flags); @@ -3484,16 +3444,6 @@ static void s3c_hsotg_delete_debug(struct s3c_hsotg *hsotg)  }  /** - * s3c_hsotg_release - release callback for hsotg device - * @dev: Device to for which release is called - * - * Nothing to do as the resource is allocated using devm_ API. - */ -static void s3c_hsotg_release(struct device *dev) -{ -} - -/**   * s3c_hsotg_probe - probe function for hsotg driver   * @pdev: The platform information for the driver   */ @@ -3517,7 +3467,7 @@ static int s3c_hsotg_probe(struct platform_device *pdev)  	}  	phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2); -	if (IS_ERR_OR_NULL(phy)) { +	if (IS_ERR(phy)) {  		/* Fallback for pdata */  		plat = pdev->dev.platform_data;  		if (!plat) { @@ -3567,18 +3517,10 @@ static int s3c_hsotg_probe(struct platform_device *pdev)  	dev_info(dev, "regs %p, irq %d\n", hsotg->regs, hsotg->irq); -	device_initialize(&hsotg->gadget.dev); - -	dev_set_name(&hsotg->gadget.dev, "gadget"); -  	hsotg->gadget.max_speed = USB_SPEED_HIGH;  	hsotg->gadget.ops = &s3c_hsotg_gadget_ops;  	hsotg->gadget.name = dev_name(dev); -	hsotg->gadget.dev.parent = dev; -	hsotg->gadget.dev.dma_mask = dev->dma_mask; -	hsotg->gadget.dev.release = s3c_hsotg_release; -  	/* reset the system */  	clk_prepare_enable(hsotg->clk); @@ -3658,12 +3600,6 @@ static int s3c_hsotg_probe(struct platform_device *pdev)  	s3c_hsotg_phy_disable(hsotg); -	ret = device_add(&hsotg->gadget.dev); -	if (ret) { -		put_device(&hsotg->gadget.dev); -		goto err_ep_mem; -	} -  	ret = usb_add_gadget_udc(&pdev->dev, &hsotg->gadget);  	if (ret)  		goto err_ep_mem; @@ -3702,10 +3638,8 @@ static int s3c_hsotg_remove(struct platform_device *pdev)  	}  	s3c_hsotg_phy_disable(hsotg); -  	clk_disable_unprepare(hsotg->clk); -	device_unregister(&hsotg->gadget.dev);  	return 0;  }  |