usb: gadget: Add clock support
Subsystems (3)
v4 cover usb: gadget: Add clock support
Add clock support to udc xilinx.
v2:
Add the clock binding
v3:
Add a warn print
v4:
Update the clock binding
Shubhrajyoti Datta (2):
dt-binding: usb: xilinx: Add clocking node
usb: gadget: udc-xilinx: Add clock support
.../devicetree/bindings/usb/xlnx,usb2.yaml | 6 +++++ drivers/usb/gadget/udc/udc-xilinx.c | 25 +++++++++++++++++++ 2 files changed, 31 insertions(+)
Signature · 1 line
2.25.1
PATCH v4 1/2 dt-binding: usb: xilinx: Add clocking node
Add a clocking node for xilinx udc.
---
v3:
update clock description and names
Documentation/devicetree/bindings/usb/xlnx,usb2.yaml | 6 ++++++ 1 file changed, 6 insertions(+)
Documentation/devicetree/bindings/usb/xlnx,usb2.yaml +6 -0
@@ -24,6 +24,12 @@ properties: If present, hardware has dma capability. type: boolean + clocks: + minItems: 1 + + clock-names: + const: s_axi_aclk + required: - compatible - reg
Signature · 1 line
2.25.1
Re: [PATCH v4 1/2] dt-binding: usb: xilinx: Add clocking node
Quoted 10 lines · Shubhrajyoti Datta
Add a clocking node for xilinx udc.
Signed-off-by Shubhrajyoti Datta <[email protected]>---
v3:
update clock description and namesDocumentation/devicetree/bindings/usb/xlnx,usb2.yaml | 6 ++++++ 1 file changed, 6 insertions(+)
Re: [PATCH v4 1/2] dt-binding: usb: xilinx: Add clocking node
In reply to Shubhrajyoti DattaQuoted 8 lines · Shubhrajyoti Datta
Add a clocking node for xilinx udc.
Signed-off-by Shubhrajyoti Datta <[email protected]>---
v3:
update clock description and namesDocumentation/devicetree/bindings/usb/xlnx,usb2.yaml | 6 ++++++
This file is not in my tree, where does it come from?
thanks,
greg k-h
Re: [PATCH v4 1/2] dt-binding: usb: xilinx: Add clocking node
Quoted 11 lines · Greg KH
Quoted 8 lines · Shubhrajyoti Datta
Add a clocking node for xilinx udc.
Signed-off-by Shubhrajyoti Datta <[email protected]>---
v3:
update clock description and namesDocumentation/devicetree/bindings/usb/xlnx,usb2.yaml | 6 ++++++This file is not in my tree, where does it come from?
In linux-next I see that Rob has applied it to his tree as commit ecc4103f32e9 ("dt-binding: usb: xilinx: Convert binding to YAML")
Thanks,
Michal
Rob Herring
maintainerRe: [PATCH v4 1/2] dt-binding: usb: xilinx: Add clocking node
In reply to Shubhrajyoti DattaQuoted 10 lines · Shubhrajyoti Datta
Add a clocking node for xilinx udc.
Signed-off-by Shubhrajyoti Datta <[email protected]>---
v3:
update clock description and namesDocumentation/devicetree/bindings/usb/xlnx,usb2.yaml | 6 ++++++ 1 file changed, 6 insertions(+)
Since I picked up the conversion, applied. Thanks!
PATCH v4 2/2 usb: gadget: udc-xilinx: Add clock support
In reply to Shubhrajyoti DattaCurrently the driver depends on the bootloader to enable the clocks. Add support for clocking. The patch enables the clock at probe and disables them at remove.
---
v3:
Add dev_warn
drivers/usb/gadget/udc/udc-xilinx.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
drivers/usb/gadget/udc/udc-xilinx.c +25 -0
@@ -11,6 +11,7 @@* USB peripheral controller (at91_udc.c). */ +#include <linux/clk.h> #include <linux/delay.h> #include <linux/device.h> #include <linux/dma-mapping.h>
@@ -171,6 +172,7 @@ struct xusb_ep {* @addr: the usb device base address * @lock: instance of spinlock * @dma_enabled: flag indicating whether the dma is included in the system +* @clk: pointer to struct clk * @read_fn: function pointer to read device registers * @write_fn: function pointer to write to device registers */
@@ -188,6 +190,7 @@ struct xusb_udc {void __iomem *addr;spinlock_t lock;bool dma_enabled; +struct clk *clk;unsigned int (*read_fn)(void __iomem *);void (*write_fn)(void __iomem *,u32 ,u32 );
@@ -2092,6 +2095,27 @@ static int xudc_probe(struct platform_device *pdev) udc->gadget.ep0 = &udc->ep[XUSB_EP_NUMBER_ZERO ].ep_usb; udc->gadget.name = driver_name; + udc->clk =devm_clk_get (&pdev->dev,"s_axi_aclk" ); +if (IS_ERR (udc->clk)) { +if (PTR_ERR (udc->clk) != -ENOENT ) { + ret =PTR_ERR (udc->clk); + goto fail; + } + +/* +* Clock framework support is optional, continue on, +* anyways if we don't find a matching clock +*/ +dev_warn (&pdev->dev,"s_axi_aclk clock property is not found\n" ); + udc->clk =NULL ; + } + + ret =clk_prepare_enable (udc->clk); +if (ret) { +dev_err (&pdev->dev,"Unable to enable clock.\n" ); +return ret; + } +spin_lock_init (&udc->lock);/* Check for IP endianness */
@@ -2147,6 +2171,7 @@ static int xudc_remove(struct platform_device *pdev)struct xusb_udc *udc =platform_get_drvdata (pdev);usb_del_gadget_udc (&udc->gadget); +clk_disable_unprepare (udc->clk);return 0 ; }
Signature · 1 line
2.25.1