Hi Felipe, On 13-09-2014 01:50 AM, Felipe Balbi wrote: > On Sat, Sep 13, 2014 at 01:44:25AM +0530, Pramod Gurav wrote: >> Andy, >> Couple of minor comments. >> >> On Sat, Sep 13, 2014 at 12:58 AM, Andy Gross <agross@xxxxxxxxxxxxxx> wrote: >> >>> From: "Ivan T. Ivanov" <iivanov@xxxxxxxxxx> >>> >>> DWC3 glue layer is hardware layer around Synopsys DesignWare >>> USB3 core. Its purpose is to supply Synopsys IP with required >>> clocks, voltages and interface it with the rest of the SoC. >>> >>> Signed-off-by: Ivan T. Ivanov <iivanov@xxxxxxxxxx> >>> Signed-off-by: Andy Gross <agross@xxxxxxxxxxxxxx> >>> --- >>> drivers/usb/dwc3/Kconfig | 8 +++ >>> drivers/usb/dwc3/Makefile | 1 + >>> drivers/usb/dwc3/dwc3-qcom.c | 131 >>> ++++++++++++++++++++++++++++++++++++++++++ >>> 3 files changed, 140 insertions(+) >>> create mode 100644 drivers/usb/dwc3/dwc3-qcom.c >>> >>> >> <..> >> >> >>> +#include <linux/platform_device.h> >>> + >>> +struct dwc3_qcom { >>> + struct device *dev; >>> + >>> >> Extra new line here. > > that's not an issue however. > >>> + struct clk *core_clk; >>> + struct clk *iface_clk; >>> + struct clk *sleep_clk; >>> +}; >>> + >>> +static int dwc3_qcom_probe(struct platform_device *pdev) >>> +{ >>> + struct device_node *node = pdev->dev.of_node; >>> + struct dwc3_qcom *qdwc; >>> + int ret = 0; >>> >> Initialization not required. > > I'll fix this one as I'm already applying this patch. > >>> + >>> + qdwc = devm_kzalloc(&pdev->dev, sizeof(*qdwc), GFP_KERNEL); >>> + if (!qdwc) >>> + return -ENOMEM; >>> + >>> + platform_set_drvdata(pdev, qdwc); >>> + >>> + qdwc->dev = &pdev->dev; >>> + >>> + qdwc->core_clk = devm_clk_get(qdwc->dev, "core"); >>> + if (IS_ERR(qdwc->core_clk)) { >>> + dev_err(qdwc->dev, "failed to get core clock\n"); >>> + return PTR_ERR(qdwc->core_clk); >>> + } >>> + >>> + qdwc->iface_clk = devm_clk_get(qdwc->dev, "iface"); >>> + if (IS_ERR(qdwc->iface_clk)) { >>> + dev_dbg(qdwc->dev, "failed to get optional iface clock\n"); >>> + qdwc->iface_clk = NULL; >>> + } >>> + >>> + qdwc->sleep_clk = devm_clk_get(qdwc->dev, "sleep"); >>> + if (IS_ERR(qdwc->sleep_clk)) { >>> + dev_dbg(qdwc->dev, "failed to get optional sleep clock\n"); >>> + qdwc->sleep_clk = NULL; >>> + } >>> + >>> + ret = clk_prepare_enable(qdwc->core_clk); >>> + if (ret) { >>> + dev_err(qdwc->dev, "failed to enable core clock\n"); >>> + goto err_core; >>> + } >>> + >>> + ret = clk_prepare_enable(qdwc->iface_clk); >>> >> Should not we check if qdwc->iface_clk is valid? > > read the sources luke. Now I read that its initialized to NULL in fail case but should we call prepare_enable at all if its NULL? > >>> +err_clks: >>> + clk_disable_unprepare(qdwc->sleep_clk); >>> >> IS_ERR check before above statement not needed as we have continued with >> probe even after failure og devm_clk_get? > > read more carefully, there's a detail which you're missing. > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html