Commit 59e05272 authored by Vladimir Zapolskiy's avatar Vladimir Zapolskiy Committed by Felipe Balbi

usb: udc: lpc32xx: remove USB PLL and USB OTG clock management

LPC32xx common clock framework driver correctly manages parent clocks
of USB device clock, so there is no need to manually enable and
disable them from the driver, which now depends only on a single USB
device clock.
Signed-off-by: default avatarVladimir Zapolskiy <vz@mleia.com>
Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
parent c9083dd3
...@@ -146,9 +146,7 @@ struct lpc32xx_udc { ...@@ -146,9 +146,7 @@ struct lpc32xx_udc {
u32 io_p_size; u32 io_p_size;
void __iomem *udp_baseaddr; void __iomem *udp_baseaddr;
int udp_irq[4]; int udp_irq[4];
struct clk *usb_pll_clk;
struct clk *usb_slv_clk; struct clk *usb_slv_clk;
struct clk *usb_otg_clk;
/* DMA support */ /* DMA support */
u32 *udca_v_base; u32 *udca_v_base;
...@@ -966,21 +964,13 @@ static void udc_clk_set(struct lpc32xx_udc *udc, int enable) ...@@ -966,21 +964,13 @@ static void udc_clk_set(struct lpc32xx_udc *udc, int enable)
return; return;
udc->clocked = 1; udc->clocked = 1;
clk_prepare_enable(udc->usb_slv_clk);
/* 48MHz PLL up */
clk_prepare_enable(udc->usb_pll_clk);
clk_prepare_enable(udc->usb_otg_clk);
} else { } else {
if (!udc->clocked) if (!udc->clocked)
return; return;
udc->clocked = 0; udc->clocked = 0;
clk_disable_unprepare(udc->usb_slv_clk);
/* Never disable the USB_HCLK during normal operation */
/* 48MHz PLL dpwn */
clk_disable_unprepare(udc->usb_pll_clk);
clk_disable_unprepare(udc->usb_otg_clk);
} }
} }
...@@ -3101,38 +3091,13 @@ static int lpc32xx_udc_probe(struct platform_device *pdev) ...@@ -3101,38 +3091,13 @@ static int lpc32xx_udc_probe(struct platform_device *pdev)
goto io_map_fail; goto io_map_fail;
} }
/* Get required clocks */ /* Get USB device clock */
udc->usb_pll_clk = clk_get(&pdev->dev, "ck_pll5"); udc->usb_slv_clk = clk_get(&pdev->dev, NULL);
if (IS_ERR(udc->usb_pll_clk)) {
dev_err(udc->dev, "failed to acquire USB PLL\n");
retval = PTR_ERR(udc->usb_pll_clk);
goto pll_get_fail;
}
udc->usb_slv_clk = clk_get(&pdev->dev, "ck_usbd");
if (IS_ERR(udc->usb_slv_clk)) { if (IS_ERR(udc->usb_slv_clk)) {
dev_err(udc->dev, "failed to acquire USB device clock\n"); dev_err(udc->dev, "failed to acquire USB device clock\n");
retval = PTR_ERR(udc->usb_slv_clk); retval = PTR_ERR(udc->usb_slv_clk);
goto usb_clk_get_fail; goto usb_clk_get_fail;
} }
udc->usb_otg_clk = clk_get(&pdev->dev, "ck_usb_otg");
if (IS_ERR(udc->usb_otg_clk)) {
dev_err(udc->dev, "failed to acquire USB otg clock\n");
retval = PTR_ERR(udc->usb_otg_clk);
goto usb_otg_clk_get_fail;
}
/* Setup PLL clock to 48MHz */
retval = clk_prepare_enable(udc->usb_pll_clk);
if (retval < 0) {
dev_err(udc->dev, "failed to start USB PLL\n");
goto pll_enable_fail;
}
retval = clk_set_rate(udc->usb_pll_clk, 48000);
if (retval < 0) {
dev_err(udc->dev, "failed to set USB clock rate\n");
goto pll_set_fail;
}
/* Enable USB device clock */ /* Enable USB device clock */
retval = clk_prepare_enable(udc->usb_slv_clk); retval = clk_prepare_enable(udc->usb_slv_clk);
...@@ -3141,13 +3106,6 @@ static int lpc32xx_udc_probe(struct platform_device *pdev) ...@@ -3141,13 +3106,6 @@ static int lpc32xx_udc_probe(struct platform_device *pdev)
goto usb_clk_enable_fail; goto usb_clk_enable_fail;
} }
/* Enable USB OTG clock */
retval = clk_prepare_enable(udc->usb_otg_clk);
if (retval < 0) {
dev_err(udc->dev, "failed to start USB otg clock\n");
goto usb_otg_clk_enable_fail;
}
/* Setup deferred workqueue data */ /* Setup deferred workqueue data */
udc->poweron = udc->pullup = 0; udc->poweron = udc->pullup = 0;
INIT_WORK(&udc->pullup_job, pullup_work); INIT_WORK(&udc->pullup_job, pullup_work);
...@@ -3258,19 +3216,10 @@ static int lpc32xx_udc_probe(struct platform_device *pdev) ...@@ -3258,19 +3216,10 @@ static int lpc32xx_udc_probe(struct platform_device *pdev)
dma_free_coherent(&pdev->dev, UDCA_BUFF_SIZE, dma_free_coherent(&pdev->dev, UDCA_BUFF_SIZE,
udc->udca_v_base, udc->udca_p_base); udc->udca_v_base, udc->udca_p_base);
i2c_fail: i2c_fail:
clk_disable_unprepare(udc->usb_otg_clk);
usb_otg_clk_enable_fail:
clk_disable_unprepare(udc->usb_slv_clk); clk_disable_unprepare(udc->usb_slv_clk);
usb_clk_enable_fail: usb_clk_enable_fail:
pll_set_fail:
clk_disable_unprepare(udc->usb_pll_clk);
pll_enable_fail:
clk_put(udc->usb_otg_clk);
usb_otg_clk_get_fail:
clk_put(udc->usb_slv_clk); clk_put(udc->usb_slv_clk);
usb_clk_get_fail: usb_clk_get_fail:
clk_put(udc->usb_pll_clk);
pll_get_fail:
iounmap(udc->udp_baseaddr); iounmap(udc->udp_baseaddr);
io_map_fail: io_map_fail:
release_mem_region(udc->io_p_start, udc->io_p_size); release_mem_region(udc->io_p_start, udc->io_p_size);
...@@ -3307,12 +3256,9 @@ static int lpc32xx_udc_remove(struct platform_device *pdev) ...@@ -3307,12 +3256,9 @@ static int lpc32xx_udc_remove(struct platform_device *pdev)
free_irq(udc->udp_irq[IRQ_USB_HP], udc); free_irq(udc->udp_irq[IRQ_USB_HP], udc);
free_irq(udc->udp_irq[IRQ_USB_LP], udc); free_irq(udc->udp_irq[IRQ_USB_LP], udc);
clk_disable_unprepare(udc->usb_otg_clk);
clk_put(udc->usb_otg_clk);
clk_disable_unprepare(udc->usb_slv_clk); clk_disable_unprepare(udc->usb_slv_clk);
clk_put(udc->usb_slv_clk); clk_put(udc->usb_slv_clk);
clk_disable_unprepare(udc->usb_pll_clk);
clk_put(udc->usb_pll_clk);
iounmap(udc->udp_baseaddr); iounmap(udc->udp_baseaddr);
release_mem_region(udc->io_p_start, udc->io_p_size); release_mem_region(udc->io_p_start, udc->io_p_size);
kfree(udc); kfree(udc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment