From patchwork Fri Jun 6 14:20:11 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivek Gautam X-Patchwork-Id: 4312051 Return-Path: X-Original-To: patchwork-linux-samsung-soc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 7BC0CBEEAA for ; Fri, 6 Jun 2014 14:21:01 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 91BE2201CD for ; Fri, 6 Jun 2014 14:21:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AB1152018A for ; Fri, 6 Jun 2014 14:20:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751952AbaFFOU2 (ORCPT ); Fri, 6 Jun 2014 10:20:28 -0400 Received: from mail-pb0-f51.google.com ([209.85.160.51]:33676 "EHLO mail-pb0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751873AbaFFOUZ (ORCPT ); Fri, 6 Jun 2014 10:20:25 -0400 Received: by mail-pb0-f51.google.com with SMTP id ma3so2547821pbc.10 for ; Fri, 06 Jun 2014 07:20:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=eVarlPK1AsMMd+xc0UHCE5jK0ipScDSnwolXHdxZuNc=; b=bTgaV0HWVMxmefv9rbRJJ7HXwDTRKUDKdqX6eD5LvUOopCViEVotw3x+Ov9PK2wAv1 uQOSkrtsW6MrVCR3gXYMyiYWTkz2xbBHKm4N2v5oYuZFlXKHY+3L+gNGQZUqD/qSCr8X L0iVxKqGBfUR0OGLDvO3xu8EWY0sIUEbvPRn8+pecH8KcfOwCFyWRxMCpllf5/1iTCOy l6HuZpq1MoMjE0L+OIke2fDOzgMi/zu6BxGIHtgjij9gS4who8sruUitfgctuCVbHQdB 2wqte84pY0Li+2DyjgvznsaESvGhpjbQurdgcoXpcMnCCQfW2Gry/mw2ckx3ebcIxT5s 8hlg== X-Received: by 10.69.19.139 with SMTP id gu11mr7509325pbd.36.1402064424704; Fri, 06 Jun 2014 07:20:24 -0700 (PDT) Received: from vivek-linuxpc.sisodomain.com ([14.140.216.146]) by mx.google.com with ESMTPSA id no9sm36405569pbc.83.2014.06.06.07.20.21 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 06 Jun 2014 07:20:24 -0700 (PDT) From: Vivek Gautam To: linux-usb@vger.kernel.org, linux-samsung-soc@vger.kernel.org, gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, stern@rowland.harvard.edu, kgene.kim@samsung.com, Vivek Gautam , Jingoo Han Subject: [PATCH v2 2/2] usb: ohci-exynos: Make provision for vdd regulators Date: Fri, 6 Jun 2014 19:50:11 +0530 Message-Id: <1402064411-18244-2-git-send-email-gautam.vivek@samsung.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1402064411-18244-1-git-send-email-gautam.vivek@samsung.com> References: <1402064411-18244-1-git-send-email-gautam.vivek@samsung.com> Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Facilitate getting required 3.3V and 1.0V VDD supply for OHCI controller on Exynos. With patches for regulators' nodes merged in 3.15: c8c253f ARM: dts: Add regulator entries to smdk5420 275dcd2 ARM: dts: add max77686 pmic node for smdk5250, certain perripherals will now need to ensure that, they request VDD regulators in their drivers, and enable them so as to make them working. Signed-off-by: Vivek Gautam Cc: Jingoo Han --- Changes from v1: - Addressed review comments for making the regulators optional, and thus refactored the checks for the obtained regulators. drivers/usb/host/ohci-exynos.c | 59 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-exynos.c index 060a6a4..01f7c43 100644 --- a/drivers/usb/host/ohci-exynos.c +++ b/drivers/usb/host/ohci-exynos.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -41,6 +42,8 @@ struct exynos_ohci_hcd { struct usb_phy *phy; struct usb_otg *otg; struct phy *phy_g[PHY_NUMBER]; + struct regulator *vdd33; + struct regulator *vdd10; }; static int exynos_ohci_get_phy(struct device *dev, @@ -172,7 +175,31 @@ static int exynos_ohci_probe(struct platform_device *pdev) err = exynos_ohci_get_phy(&pdev->dev, exynos_ohci); if (err) - goto fail_clk; + goto fail_regulator1; + + exynos_ohci->vdd33 = devm_regulator_get(&pdev->dev, "vdd33"); + if (!IS_ERR(exynos_ohci->vdd33)) { + err = regulator_enable(exynos_ohci->vdd33); + if (err) { + dev_err(&pdev->dev, + "Failed to enable 3.3V Vdd supply\n"); + goto fail_regulator1; + } + } else { + dev_warn(&pdev->dev, "Regulator 3.3V Vdd supply not found\n"); + } + + exynos_ohci->vdd10 = devm_regulator_get(&pdev->dev, "vdd10"); + if (!IS_ERR(exynos_ohci->vdd10)) { + err = regulator_enable(exynos_ohci->vdd10); + if (err) { + dev_err(&pdev->dev, + "Failed to enable 1.0V Vdd supply\n"); + goto fail_regulator2; + } + } else { + dev_warn(&pdev->dev, "Regulator 1.0V Vdd supply not found\n"); + } skip_phy: exynos_ohci->clk = devm_clk_get(&pdev->dev, "usbhost"); @@ -233,6 +260,10 @@ fail_add_hcd: fail_io: clk_disable_unprepare(exynos_ohci->clk); fail_clk: + regulator_disable(exynos_ohci->vdd10); +fail_regulator2: + regulator_disable(exynos_ohci->vdd33); +fail_regulator1: usb_put_hcd(hcd); return err; } @@ -251,6 +282,11 @@ static int exynos_ohci_remove(struct platform_device *pdev) clk_disable_unprepare(exynos_ohci->clk); + if (!IS_ERR(exynos_ohci->vdd33)) + regulator_disable(exynos_ohci->vdd33); + if (!IS_ERR(exynos_ohci->vdd10)) + regulator_disable(exynos_ohci->vdd10); + usb_put_hcd(hcd); return 0; @@ -282,6 +318,11 @@ static int exynos_ohci_suspend(struct device *dev) clk_disable_unprepare(exynos_ohci->clk); + if (!IS_ERR(exynos_ohci->vdd33)) + regulator_disable(exynos_ohci->vdd33); + if (!IS_ERR(exynos_ohci->vdd10)) + regulator_disable(exynos_ohci->vdd10); + return 0; } @@ -291,6 +332,22 @@ static int exynos_ohci_resume(struct device *dev) struct exynos_ohci_hcd *exynos_ohci = to_exynos_ohci(hcd); int ret; + if (!IS_ERR(exynos_ohci->vdd33)) { + ret = regulator_enable(exynos_ohci->vdd33); + if (ret) { + dev_err(dev, "Failed to enable 3.3V Vdd supply\n"); + return ret; + } + } + + if (!IS_ERR(exynos_ohci->vdd10)) { + ret = regulator_enable(exynos_ohci->vdd10); + if (ret) { + dev_err(dev, "Failed to enable 1.0V Vdd supply\n"); + return ret; + } + } + clk_prepare_enable(exynos_ohci->clk); if (exynos_ohci->otg)