Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754161Ab3COLqX (ORCPT ); Fri, 15 Mar 2013 07:46:23 -0400 Received: from mail-pb0-f53.google.com ([209.85.160.53]:53486 "EHLO mail-pb0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753863Ab3COLqV (ORCPT ); Fri, 15 Mar 2013 07:46:21 -0400 MIME-Version: 1.0 In-Reply-To: <1363207202-10858-3-git-send-email-dianders@chromium.org> References: <1363129994-10438-1-git-send-email-dianders@chromium.org> <1363207202-10858-1-git-send-email-dianders@chromium.org> <1363207202-10858-3-git-send-email-dianders@chromium.org> From: Naveen Krishna Ch Date: Fri, 15 Mar 2013 17:15:59 +0530 Message-ID: Subject: Re: [PATCH v2 2/4] iio: adc: Add dt support for turning on the phy in exynos-adc To: Doug Anderson Cc: Jonathan Cameron , Kukjin Kim , Lars-Peter Clausen , Naveen Krishna Chatradhi , Olof Johansson , Guenter Roeck , Grant Likely , Rob Herring , Rob Landley , Jonathan Cameron , devicetree-discuss@lists.ozlabs.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4777 Lines: 123 On 14 March 2013 02:10, Doug Anderson wrote: > Without this change the exynos adc controller needed to have its phy > enabled in some out-of-driver C code. Add support for specifying the > phy enable register by listing it in the reg list. > > Signed-off-by: Doug Anderson Worked for me, Its needed for Exynos5250 and future versions too. Tested on SMDK5250. > --- > Changes in v2: None > > .../devicetree/bindings/arm/samsung/exynos-adc.txt | 4 ++-- > drivers/iio/adc/exynos_adc.c | 14 +++++++++++++- > 2 files changed, 15 insertions(+), 3 deletions(-) > > diff --git a/Documentation/devicetree/bindings/arm/samsung/exynos-adc.txt b/Documentation/devicetree/bindings/arm/samsung/exynos-adc.txt > index 96db940..05be151 100644 > --- a/Documentation/devicetree/bindings/arm/samsung/exynos-adc.txt > +++ b/Documentation/devicetree/bindings/arm/samsung/exynos-adc.txt > @@ -15,7 +15,7 @@ Required properties: > Must be "samsung,exynos-adc-v2" for > future controllers. > - reg: Contains ADC register address range (base address and > - length). > + length) and the address of the phy enable register. > - interrupts: Contains the interrupt information for the timer. The > format is being dependent on which interrupt controller > the Samsung device uses. > @@ -30,7 +30,7 @@ Example: adding device info in dtsi file > > adc: adc@12D10000 { > compatible = "samsung,exynos-adc-v1"; > - reg = <0x12D10000 0x100>; > + reg = <0x12D10000 0x100>, <0x10040718 0x4>; > interrupts = <0 106 0>; > #io-channel-cells = <1>; > io-channel-ranges; > diff --git a/drivers/iio/adc/exynos_adc.c b/drivers/iio/adc/exynos_adc.c > index ed6fdd7..5ab0dfd 100644 > --- a/drivers/iio/adc/exynos_adc.c > +++ b/drivers/iio/adc/exynos_adc.c > @@ -85,6 +85,7 @@ enum adc_version { > > struct exynos_adc { > void __iomem *regs; > + void __iomem *enable_reg; > struct clk *clk; > unsigned int irq; > struct regulator *vdd; > @@ -269,13 +270,19 @@ static int exynos_adc_probe(struct platform_device *pdev) > info = iio_priv(indio_dev); > > mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - > info->regs = devm_request_and_ioremap(&pdev->dev, mem); > if (!info->regs) { > ret = -ENOMEM; > goto err_iio; > } > > + mem = platform_get_resource(pdev, IORESOURCE_MEM, 1); > + info->enable_reg = devm_request_and_ioremap(&pdev->dev, mem); > + if (!info->enable_reg) { > + ret = -ENOMEM; > + goto err_iio; > + } > + > irq = platform_get_irq(pdev, 0); > if (irq < 0) { > dev_err(&pdev->dev, "no irq resource?\n"); > @@ -295,6 +302,8 @@ static int exynos_adc_probe(struct platform_device *pdev) > goto err_iio; > } > > + writel(1, info->enable_reg); > + > info->clk = devm_clk_get(&pdev->dev, "adc"); > if (IS_ERR(info->clk)) { > dev_err(&pdev->dev, "failed getting clock, err = %ld\n", > @@ -370,6 +379,7 @@ static int exynos_adc_remove(struct platform_device *pdev) > exynos_adc_remove_devices); > regulator_disable(info->vdd); > clk_disable_unprepare(info->clk); > + writel(0, info->enable_reg); > iio_device_unregister(indio_dev); > free_irq(info->irq, info); > iio_device_free(indio_dev); > @@ -395,6 +405,7 @@ static int exynos_adc_suspend(struct device *dev) > } > > clk_disable_unprepare(info->clk); > + writel(0, info->enable_reg); > regulator_disable(info->vdd); > > return 0; > @@ -410,6 +421,7 @@ static int exynos_adc_resume(struct device *dev) > if (ret) > return ret; > > + writel(1, info->enable_reg); > clk_prepare_enable(info->clk); > > exynos_adc_hw_init(info); > -- > 1.8.1.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- Shine bright, (: Nav :) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/