linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/4] iio: adc: xilinx: XADC driver Enhancements and bug fixes
@ 2018-07-23 15:01 Manish Narani
  2018-07-23 15:02 ` [PATCH v2 1/4] iio: adc: xilinx: Check for return values in clk related functions Manish Narani
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Manish Narani @ 2018-07-23 15:01 UTC (permalink / raw)
  To: lakshmi.sai.krishna.potthuri, manish.narani, michal.simek,
	pmeerw, lars, knaack.h, jic23
  Cc: anirudh, sgoud, linux-kernel, linux-arm-kernel, linux-iio

This patch series resolves code style problems as reported by code analysis
tools.

Changes in v2:
	- From the first version of patches, 2 patches are dropped in this
	  series.
	- In the v1 patch set, 1/4 was not required as the issue is in
	  checkpatch.pl script and not in the code.
	- In the v1 patch set 2/4 was applied on togreg branch of iio.git
	- for 3/4 patch in v1 patch set, the patch is broken up in 2 patches
	  in this series as per review comments. They are now 1/4 and 2/4 in
	  this series.
	- 4/4 patch in the v1 patch set was basically to resolve coverity
	  warning for platform_get_irq() in xadc_remove function, but that was
	  causing potential race condition. Fixed that in this series (3/4).
	- A new patch is added in this series for moving request_irq() before
	  enabling interrupts.


Manish Narani (4):
  iio: adc: xilinx: Check for return values in clk related functions
  iio: adc: xilinx: limit pcap clock frequency value
  iio: adc: xilinx: Remove platform_get_irq from xadc_remove function
  iio: adc: xilinx: Move request_irq before enabling interrupts

 drivers/iio/adc/xilinx-xadc-core.c | 40 +++++++++++++++++++++++++++++---------
 drivers/iio/adc/xilinx-xadc.h      |  1 +
 2 files changed, 32 insertions(+), 9 deletions(-)

-- 
2.1.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2 1/4] iio: adc: xilinx: Check for return values in clk related functions
  2018-07-23 15:01 [PATCH v2 0/4] iio: adc: xilinx: XADC driver Enhancements and bug fixes Manish Narani
@ 2018-07-23 15:02 ` Manish Narani
  2018-07-29 11:48   ` Jonathan Cameron
  2018-07-23 15:02 ` [PATCH v2 2/4] iio: adc: xilinx: limit pcap clock frequency value Manish Narani
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: Manish Narani @ 2018-07-23 15:02 UTC (permalink / raw)
  To: lakshmi.sai.krishna.potthuri, manish.narani, michal.simek,
	pmeerw, lars, knaack.h, jic23
  Cc: anirudh, sgoud, linux-kernel, linux-arm-kernel, linux-iio

This patch adds check for return values from clock related functions.
This was reported by static code analysis tool.

Signed-off-by: Manish Narani <manish.narani@xilinx.com>
---
 drivers/iio/adc/xilinx-xadc-core.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c
index 0127e85..23395fc 100644
--- a/drivers/iio/adc/xilinx-xadc-core.c
+++ b/drivers/iio/adc/xilinx-xadc-core.c
@@ -340,6 +340,8 @@ static int xadc_zynq_setup(struct platform_device *pdev,
 	xadc->zynq_intmask = ~0;
 
 	pcap_rate = clk_get_rate(xadc->clk);
+	if (!pcap_rate)
+		return -EINVAL;
 
 	if (tck_rate > pcap_rate / 2) {
 		div = 2;
@@ -887,6 +889,9 @@ static int xadc_write_raw(struct iio_dev *indio_dev,
 	unsigned long clk_rate = xadc_get_dclk_rate(xadc);
 	unsigned int div;
 
+	if (!clk_rate)
+		return -EINVAL;
+
 	if (info != IIO_CHAN_INFO_SAMP_FREQ)
 		return -EINVAL;
 
@@ -1237,8 +1242,10 @@ static int xadc_probe(struct platform_device *pdev)
 		goto err_free_irq;
 
 	/* Disable all alarms */
-	xadc_update_adc_reg(xadc, XADC_REG_CONF1, XADC_CONF1_ALARM_MASK,
-		XADC_CONF1_ALARM_MASK);
+	ret = xadc_update_adc_reg(xadc, XADC_REG_CONF1, XADC_CONF1_ALARM_MASK,
+				  XADC_CONF1_ALARM_MASK);
+	if (ret)
+		goto err_free_irq;
 
 	/* Set thresholds to min/max */
 	for (i = 0; i < 16; i++) {
-- 
2.1.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v2 2/4] iio: adc: xilinx: limit pcap clock frequency value
  2018-07-23 15:01 [PATCH v2 0/4] iio: adc: xilinx: XADC driver Enhancements and bug fixes Manish Narani
  2018-07-23 15:02 ` [PATCH v2 1/4] iio: adc: xilinx: Check for return values in clk related functions Manish Narani
@ 2018-07-23 15:02 ` Manish Narani
  2018-07-29 11:51   ` Jonathan Cameron
  2018-07-23 15:02 ` [PATCH v2 3/4] iio: adc: xilinx: Remove platform_get_irq from xadc_remove function Manish Narani
  2018-07-23 15:02 ` [PATCH v2 4/4] iio: adc: xilinx: Move request_irq before enabling interrupts Manish Narani
  3 siblings, 1 reply; 10+ messages in thread
From: Manish Narani @ 2018-07-23 15:02 UTC (permalink / raw)
  To: lakshmi.sai.krishna.potthuri, manish.narani, michal.simek,
	pmeerw, lars, knaack.h, jic23
  Cc: anirudh, sgoud, linux-kernel, linux-arm-kernel, linux-iio

This patch limits the xadc pcap clock frequency value to be less than
200MHz. This fixes the issue when zynq is booted at higher frequency
values, pcap crosses the maximum limit of 200MHz(Fmax) as it is derived
from IOPLL.
If this limit is crossed it is required to alter the WEDGE and REDGE
bits of XADC_CFG register to make timings better in the interface. So to
avoid alteration of these bits every time, the pcap value should not
cross the Fmax limit.

Signed-off-by: Manish Narani <manish.narani@xilinx.com>
---
 drivers/iio/adc/xilinx-xadc-core.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c
index 23395fc..0dd306d 100644
--- a/drivers/iio/adc/xilinx-xadc-core.c
+++ b/drivers/iio/adc/xilinx-xadc-core.c
@@ -322,6 +322,7 @@ static irqreturn_t xadc_zynq_interrupt_handler(int irq, void *devid)
 
 #define XADC_ZYNQ_TCK_RATE_MAX 50000000
 #define XADC_ZYNQ_IGAP_DEFAULT 20
+#define XADC_ZYNQ_PCAP_RATE_MAX 200000000
 
 static int xadc_zynq_setup(struct platform_device *pdev,
 	struct iio_dev *indio_dev, int irq)
@@ -332,6 +333,7 @@ static int xadc_zynq_setup(struct platform_device *pdev,
 	unsigned int div;
 	unsigned int igap;
 	unsigned int tck_rate;
+	int ret;
 
 	/* TODO: Figure out how to make igap and tck_rate configurable */
 	igap = XADC_ZYNQ_IGAP_DEFAULT;
@@ -343,6 +345,13 @@ static int xadc_zynq_setup(struct platform_device *pdev,
 	if (!pcap_rate)
 		return -EINVAL;
 
+	if (pcap_rate > XADC_ZYNQ_PCAP_RATE_MAX) {
+		ret = clk_set_rate(xadc->clk,
+				   (unsigned long)XADC_ZYNQ_PCAP_RATE_MAX);
+		if (ret)
+			return ret;
+	}
+
 	if (tck_rate > pcap_rate / 2) {
 		div = 2;
 	} else {
@@ -368,6 +377,12 @@ static int xadc_zynq_setup(struct platform_device *pdev,
 			XADC_ZYNQ_CFG_REDGE | XADC_ZYNQ_CFG_WEDGE |
 			tck_div | XADC_ZYNQ_CFG_IGAP(igap));
 
+	if (pcap_rate > XADC_ZYNQ_PCAP_RATE_MAX) {
+		ret = clk_set_rate(xadc->clk, pcap_rate);
+		if (ret)
+			return ret;
+	}
+
 	return 0;
 }
 
-- 
2.1.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v2 3/4] iio: adc: xilinx: Remove platform_get_irq from xadc_remove function
  2018-07-23 15:01 [PATCH v2 0/4] iio: adc: xilinx: XADC driver Enhancements and bug fixes Manish Narani
  2018-07-23 15:02 ` [PATCH v2 1/4] iio: adc: xilinx: Check for return values in clk related functions Manish Narani
  2018-07-23 15:02 ` [PATCH v2 2/4] iio: adc: xilinx: limit pcap clock frequency value Manish Narani
@ 2018-07-23 15:02 ` Manish Narani
  2018-07-29 12:29   ` Jonathan Cameron
  2018-07-23 15:02 ` [PATCH v2 4/4] iio: adc: xilinx: Move request_irq before enabling interrupts Manish Narani
  3 siblings, 1 reply; 10+ messages in thread
From: Manish Narani @ 2018-07-23 15:02 UTC (permalink / raw)
  To: lakshmi.sai.krishna.potthuri, manish.narani, michal.simek,
	pmeerw, lars, knaack.h, jic23
  Cc: anirudh, sgoud, linux-kernel, linux-arm-kernel, linux-iio

This patch avoids getting irq number in xadc_remove function. Instead
store 'irq' in xadc struct and use xadc->irq wherever needed.
This patch also resolves a warning reported by coverity where it asks to
check return value of platform_get_irq() for any errors in xadc_remove.

Signed-off-by: Manish Narani <manish.narani@xilinx.com>
---
 drivers/iio/adc/xilinx-xadc-core.c | 10 +++++-----
 drivers/iio/adc/xilinx-xadc.h      |  1 +
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c
index 0dd306d..44a2519 100644
--- a/drivers/iio/adc/xilinx-xadc-core.c
+++ b/drivers/iio/adc/xilinx-xadc-core.c
@@ -1175,6 +1175,7 @@ static int xadc_probe(struct platform_device *pdev)
 
 	xadc = iio_priv(indio_dev);
 	xadc->ops = id->data;
+	xadc->irq = irq;
 	init_completion(&xadc->completion);
 	mutex_init(&xadc->mutex);
 	spin_lock_init(&xadc->lock);
@@ -1225,11 +1226,11 @@ static int xadc_probe(struct platform_device *pdev)
 	if (ret)
 		goto err_free_samplerate_trigger;
 
-	ret = xadc->ops->setup(pdev, indio_dev, irq);
+	ret = xadc->ops->setup(pdev, indio_dev, xadc->irq);
 	if (ret)
 		goto err_clk_disable_unprepare;
 
-	ret = request_irq(irq, xadc->ops->interrupt_handler, 0,
+	ret = request_irq(xadc->irq, xadc->ops->interrupt_handler, 0,
 			dev_name(&pdev->dev), indio_dev);
 	if (ret)
 		goto err_clk_disable_unprepare;
@@ -1288,7 +1289,7 @@ static int xadc_probe(struct platform_device *pdev)
 	return 0;
 
 err_free_irq:
-	free_irq(irq, indio_dev);
+	free_irq(xadc->irq, indio_dev);
 err_clk_disable_unprepare:
 	clk_disable_unprepare(xadc->clk);
 err_free_samplerate_trigger:
@@ -1310,7 +1311,6 @@ static int xadc_remove(struct platform_device *pdev)
 {
 	struct iio_dev *indio_dev = platform_get_drvdata(pdev);
 	struct xadc *xadc = iio_priv(indio_dev);
-	int irq = platform_get_irq(pdev, 0);
 
 	iio_device_unregister(indio_dev);
 	if (xadc->ops->flags & XADC_FLAGS_BUFFERED) {
@@ -1318,7 +1318,7 @@ static int xadc_remove(struct platform_device *pdev)
 		iio_trigger_free(xadc->convst_trigger);
 		iio_triggered_buffer_cleanup(indio_dev);
 	}
-	free_irq(irq, indio_dev);
+	free_irq(xadc->irq, indio_dev);
 	clk_disable_unprepare(xadc->clk);
 	cancel_delayed_work(&xadc->zynq_unmask_work);
 	kfree(xadc->data);
diff --git a/drivers/iio/adc/xilinx-xadc.h b/drivers/iio/adc/xilinx-xadc.h
index 62edbda..8c00095 100644
--- a/drivers/iio/adc/xilinx-xadc.h
+++ b/drivers/iio/adc/xilinx-xadc.h
@@ -68,6 +68,7 @@ struct xadc {
 	spinlock_t lock;
 
 	struct completion completion;
+	int irq;
 };
 
 struct xadc_ops {
-- 
2.1.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v2 4/4] iio: adc: xilinx: Move request_irq before enabling interrupts
  2018-07-23 15:01 [PATCH v2 0/4] iio: adc: xilinx: XADC driver Enhancements and bug fixes Manish Narani
                   ` (2 preceding siblings ...)
  2018-07-23 15:02 ` [PATCH v2 3/4] iio: adc: xilinx: Remove platform_get_irq from xadc_remove function Manish Narani
@ 2018-07-23 15:02 ` Manish Narani
  2018-07-29 12:30   ` Jonathan Cameron
  3 siblings, 1 reply; 10+ messages in thread
From: Manish Narani @ 2018-07-23 15:02 UTC (permalink / raw)
  To: lakshmi.sai.krishna.potthuri, manish.narani, michal.simek,
	pmeerw, lars, knaack.h, jic23
  Cc: anirudh, sgoud, linux-kernel, linux-arm-kernel, linux-iio

Enabling the Interrupts before registering the irq handler is a bad
idea. This patch corrects the same for XADC driver.

Signed-off-by: Manish Narani <manish.narani@xilinx.com>
---
 drivers/iio/adc/xilinx-xadc-core.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c
index 44a2519..3f6be5a 100644
--- a/drivers/iio/adc/xilinx-xadc-core.c
+++ b/drivers/iio/adc/xilinx-xadc-core.c
@@ -1226,15 +1226,15 @@ static int xadc_probe(struct platform_device *pdev)
 	if (ret)
 		goto err_free_samplerate_trigger;
 
-	ret = xadc->ops->setup(pdev, indio_dev, xadc->irq);
-	if (ret)
-		goto err_clk_disable_unprepare;
-
 	ret = request_irq(xadc->irq, xadc->ops->interrupt_handler, 0,
 			dev_name(&pdev->dev), indio_dev);
 	if (ret)
 		goto err_clk_disable_unprepare;
 
+	ret = xadc->ops->setup(pdev, indio_dev, xadc->irq);
+	if (ret)
+		goto err_free_irq;
+
 	for (i = 0; i < 16; i++)
 		xadc_read_adc_reg(xadc, XADC_REG_THRESHOLD(i),
 			&xadc->threshold[i]);
-- 
2.1.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 1/4] iio: adc: xilinx: Check for return values in clk related functions
  2018-07-23 15:02 ` [PATCH v2 1/4] iio: adc: xilinx: Check for return values in clk related functions Manish Narani
@ 2018-07-29 11:48   ` Jonathan Cameron
  0 siblings, 0 replies; 10+ messages in thread
From: Jonathan Cameron @ 2018-07-29 11:48 UTC (permalink / raw)
  To: Manish Narani
  Cc: lakshmi.sai.krishna.potthuri, michal.simek, pmeerw, lars,
	knaack.h, anirudh, sgoud, linux-kernel, linux-arm-kernel,
	linux-iio

On Mon, 23 Jul 2018 20:32:00 +0530
Manish Narani <manish.narani@xilinx.com> wrote:

> This patch adds check for return values from clock related functions.
> This was reported by static code analysis tool.
> 
> Signed-off-by: Manish Narani <manish.narani@xilinx.com>
Applied to the togreg branch of iio.git and pushed out as testing for
the autobuilders to play with it.

Thanks,

Jonathan

> ---
>  drivers/iio/adc/xilinx-xadc-core.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c
> index 0127e85..23395fc 100644
> --- a/drivers/iio/adc/xilinx-xadc-core.c
> +++ b/drivers/iio/adc/xilinx-xadc-core.c
> @@ -340,6 +340,8 @@ static int xadc_zynq_setup(struct platform_device *pdev,
>  	xadc->zynq_intmask = ~0;
>  
>  	pcap_rate = clk_get_rate(xadc->clk);
> +	if (!pcap_rate)
> +		return -EINVAL;
>  
>  	if (tck_rate > pcap_rate / 2) {
>  		div = 2;
> @@ -887,6 +889,9 @@ static int xadc_write_raw(struct iio_dev *indio_dev,
>  	unsigned long clk_rate = xadc_get_dclk_rate(xadc);
>  	unsigned int div;
>  
> +	if (!clk_rate)
> +		return -EINVAL;
> +
>  	if (info != IIO_CHAN_INFO_SAMP_FREQ)
>  		return -EINVAL;
>  
> @@ -1237,8 +1242,10 @@ static int xadc_probe(struct platform_device *pdev)
>  		goto err_free_irq;
>  
>  	/* Disable all alarms */
> -	xadc_update_adc_reg(xadc, XADC_REG_CONF1, XADC_CONF1_ALARM_MASK,
> -		XADC_CONF1_ALARM_MASK);
> +	ret = xadc_update_adc_reg(xadc, XADC_REG_CONF1, XADC_CONF1_ALARM_MASK,
> +				  XADC_CONF1_ALARM_MASK);
> +	if (ret)
> +		goto err_free_irq;
>  
>  	/* Set thresholds to min/max */
>  	for (i = 0; i < 16; i++) {


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 2/4] iio: adc: xilinx: limit pcap clock frequency value
  2018-07-23 15:02 ` [PATCH v2 2/4] iio: adc: xilinx: limit pcap clock frequency value Manish Narani
@ 2018-07-29 11:51   ` Jonathan Cameron
  2018-07-30 10:13     ` Manish Narani
  0 siblings, 1 reply; 10+ messages in thread
From: Jonathan Cameron @ 2018-07-29 11:51 UTC (permalink / raw)
  To: Manish Narani
  Cc: lakshmi.sai.krishna.potthuri, michal.simek, pmeerw, lars,
	knaack.h, anirudh, sgoud, linux-kernel, linux-arm-kernel,
	linux-iio

On Mon, 23 Jul 2018 20:32:01 +0530
Manish Narani <manish.narani@xilinx.com> wrote:

> This patch limits the xadc pcap clock frequency value to be less than
> 200MHz. This fixes the issue when zynq is booted at higher frequency
> values, pcap crosses the maximum limit of 200MHz(Fmax) as it is derived
> from IOPLL.
> If this limit is crossed it is required to alter the WEDGE and REDGE
> bits of XADC_CFG register to make timings better in the interface. So to
> avoid alteration of these bits every time, the pcap value should not
> cross the Fmax limit.
> 
> Signed-off-by: Manish Narani <manish.narani@xilinx.com>

Applied, to the togreg branch of iio.git.  If you want this backported
to stable, then request it once this patch is upstream.  It may be
sometime given we've probably just missed the coming merge window.

If you do need it faster then let me know and I'll look at moving
it over to the branch of fixes during the RC phases.

Jonathan

> ---
>  drivers/iio/adc/xilinx-xadc-core.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c
> index 23395fc..0dd306d 100644
> --- a/drivers/iio/adc/xilinx-xadc-core.c
> +++ b/drivers/iio/adc/xilinx-xadc-core.c
> @@ -322,6 +322,7 @@ static irqreturn_t xadc_zynq_interrupt_handler(int irq, void *devid)
>  
>  #define XADC_ZYNQ_TCK_RATE_MAX 50000000
>  #define XADC_ZYNQ_IGAP_DEFAULT 20
> +#define XADC_ZYNQ_PCAP_RATE_MAX 200000000
>  
>  static int xadc_zynq_setup(struct platform_device *pdev,
>  	struct iio_dev *indio_dev, int irq)
> @@ -332,6 +333,7 @@ static int xadc_zynq_setup(struct platform_device *pdev,
>  	unsigned int div;
>  	unsigned int igap;
>  	unsigned int tck_rate;
> +	int ret;
>  
>  	/* TODO: Figure out how to make igap and tck_rate configurable */
>  	igap = XADC_ZYNQ_IGAP_DEFAULT;
> @@ -343,6 +345,13 @@ static int xadc_zynq_setup(struct platform_device *pdev,
>  	if (!pcap_rate)
>  		return -EINVAL;
>  
> +	if (pcap_rate > XADC_ZYNQ_PCAP_RATE_MAX) {
> +		ret = clk_set_rate(xadc->clk,
> +				   (unsigned long)XADC_ZYNQ_PCAP_RATE_MAX);
> +		if (ret)
> +			return ret;
> +	}
> +
>  	if (tck_rate > pcap_rate / 2) {
>  		div = 2;
>  	} else {
> @@ -368,6 +377,12 @@ static int xadc_zynq_setup(struct platform_device *pdev,
>  			XADC_ZYNQ_CFG_REDGE | XADC_ZYNQ_CFG_WEDGE |
>  			tck_div | XADC_ZYNQ_CFG_IGAP(igap));
>  
> +	if (pcap_rate > XADC_ZYNQ_PCAP_RATE_MAX) {
> +		ret = clk_set_rate(xadc->clk, pcap_rate);
> +		if (ret)
> +			return ret;
> +	}
> +
>  	return 0;
>  }
>  


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 3/4] iio: adc: xilinx: Remove platform_get_irq from xadc_remove function
  2018-07-23 15:02 ` [PATCH v2 3/4] iio: adc: xilinx: Remove platform_get_irq from xadc_remove function Manish Narani
@ 2018-07-29 12:29   ` Jonathan Cameron
  0 siblings, 0 replies; 10+ messages in thread
From: Jonathan Cameron @ 2018-07-29 12:29 UTC (permalink / raw)
  To: Manish Narani
  Cc: lakshmi.sai.krishna.potthuri, michal.simek, pmeerw, lars,
	knaack.h, anirudh, sgoud, linux-kernel, linux-arm-kernel,
	linux-iio

On Mon, 23 Jul 2018 20:32:02 +0530
Manish Narani <manish.narani@xilinx.com> wrote:

> This patch avoids getting irq number in xadc_remove function. Instead
> store 'irq' in xadc struct and use xadc->irq wherever needed.
> This patch also resolves a warning reported by coverity where it asks to
> check return value of platform_get_irq() for any errors in xadc_remove.
> 
> Signed-off-by: Manish Narani <manish.narani@xilinx.com>
Applied. 

Thanks,

Jonathan

> ---
>  drivers/iio/adc/xilinx-xadc-core.c | 10 +++++-----
>  drivers/iio/adc/xilinx-xadc.h      |  1 +
>  2 files changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c
> index 0dd306d..44a2519 100644
> --- a/drivers/iio/adc/xilinx-xadc-core.c
> +++ b/drivers/iio/adc/xilinx-xadc-core.c
> @@ -1175,6 +1175,7 @@ static int xadc_probe(struct platform_device *pdev)
>  
>  	xadc = iio_priv(indio_dev);
>  	xadc->ops = id->data;
> +	xadc->irq = irq;
>  	init_completion(&xadc->completion);
>  	mutex_init(&xadc->mutex);
>  	spin_lock_init(&xadc->lock);
> @@ -1225,11 +1226,11 @@ static int xadc_probe(struct platform_device *pdev)
>  	if (ret)
>  		goto err_free_samplerate_trigger;
>  
> -	ret = xadc->ops->setup(pdev, indio_dev, irq);
> +	ret = xadc->ops->setup(pdev, indio_dev, xadc->irq);
>  	if (ret)
>  		goto err_clk_disable_unprepare;
>  
> -	ret = request_irq(irq, xadc->ops->interrupt_handler, 0,
> +	ret = request_irq(xadc->irq, xadc->ops->interrupt_handler, 0,
>  			dev_name(&pdev->dev), indio_dev);
>  	if (ret)
>  		goto err_clk_disable_unprepare;
> @@ -1288,7 +1289,7 @@ static int xadc_probe(struct platform_device *pdev)
>  	return 0;
>  
>  err_free_irq:
> -	free_irq(irq, indio_dev);
> +	free_irq(xadc->irq, indio_dev);
>  err_clk_disable_unprepare:
>  	clk_disable_unprepare(xadc->clk);
>  err_free_samplerate_trigger:
> @@ -1310,7 +1311,6 @@ static int xadc_remove(struct platform_device *pdev)
>  {
>  	struct iio_dev *indio_dev = platform_get_drvdata(pdev);
>  	struct xadc *xadc = iio_priv(indio_dev);
> -	int irq = platform_get_irq(pdev, 0);
>  
>  	iio_device_unregister(indio_dev);
>  	if (xadc->ops->flags & XADC_FLAGS_BUFFERED) {
> @@ -1318,7 +1318,7 @@ static int xadc_remove(struct platform_device *pdev)
>  		iio_trigger_free(xadc->convst_trigger);
>  		iio_triggered_buffer_cleanup(indio_dev);
>  	}
> -	free_irq(irq, indio_dev);
> +	free_irq(xadc->irq, indio_dev);
>  	clk_disable_unprepare(xadc->clk);
>  	cancel_delayed_work(&xadc->zynq_unmask_work);
>  	kfree(xadc->data);
> diff --git a/drivers/iio/adc/xilinx-xadc.h b/drivers/iio/adc/xilinx-xadc.h
> index 62edbda..8c00095 100644
> --- a/drivers/iio/adc/xilinx-xadc.h
> +++ b/drivers/iio/adc/xilinx-xadc.h
> @@ -68,6 +68,7 @@ struct xadc {
>  	spinlock_t lock;
>  
>  	struct completion completion;
> +	int irq;
>  };
>  
>  struct xadc_ops {


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 4/4] iio: adc: xilinx: Move request_irq before enabling interrupts
  2018-07-23 15:02 ` [PATCH v2 4/4] iio: adc: xilinx: Move request_irq before enabling interrupts Manish Narani
@ 2018-07-29 12:30   ` Jonathan Cameron
  0 siblings, 0 replies; 10+ messages in thread
From: Jonathan Cameron @ 2018-07-29 12:30 UTC (permalink / raw)
  To: Manish Narani
  Cc: lakshmi.sai.krishna.potthuri, michal.simek, pmeerw, lars,
	knaack.h, anirudh, sgoud, linux-kernel, linux-arm-kernel,
	linux-iio

On Mon, 23 Jul 2018 20:32:03 +0530
Manish Narani <manish.narani@xilinx.com> wrote:

> Enabling the Interrupts before registering the irq handler is a bad
> idea. This patch corrects the same for XADC driver.
> 
> Signed-off-by: Manish Narani <manish.narani@xilinx.com>
Applied to the togreg branch of iio.git and pushed out as testing
for the autobuilders to play with it.

Thanks,

Jonathan
> ---
>  drivers/iio/adc/xilinx-xadc-core.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c
> index 44a2519..3f6be5a 100644
> --- a/drivers/iio/adc/xilinx-xadc-core.c
> +++ b/drivers/iio/adc/xilinx-xadc-core.c
> @@ -1226,15 +1226,15 @@ static int xadc_probe(struct platform_device *pdev)
>  	if (ret)
>  		goto err_free_samplerate_trigger;
>  
> -	ret = xadc->ops->setup(pdev, indio_dev, xadc->irq);
> -	if (ret)
> -		goto err_clk_disable_unprepare;
> -
>  	ret = request_irq(xadc->irq, xadc->ops->interrupt_handler, 0,
>  			dev_name(&pdev->dev), indio_dev);
>  	if (ret)
>  		goto err_clk_disable_unprepare;
>  
> +	ret = xadc->ops->setup(pdev, indio_dev, xadc->irq);
> +	if (ret)
> +		goto err_free_irq;
> +
>  	for (i = 0; i < 16; i++)
>  		xadc_read_adc_reg(xadc, XADC_REG_THRESHOLD(i),
>  			&xadc->threshold[i]);


^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH v2 2/4] iio: adc: xilinx: limit pcap clock frequency value
  2018-07-29 11:51   ` Jonathan Cameron
@ 2018-07-30 10:13     ` Manish Narani
  0 siblings, 0 replies; 10+ messages in thread
From: Manish Narani @ 2018-07-30 10:13 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Sai Krishna Potthuri, Michal Simek, pmeerw, lars, knaack.h,
	Anirudha Sarangi, Srinivas Goud, linux-kernel, linux-arm-kernel,
	linux-iio

Hi Jonathan,


> -----Original Message-----
> From: Jonathan Cameron [mailto:jic23@kernel.org]
> Sent: Sunday, July 29, 2018 5:21 PM
> To: Manish Narani <MNARANI@xilinx.com>
> Cc: Sai Krishna Potthuri <lakshmis@xilinx.com>; Michal Simek
> <michals@xilinx.com>; pmeerw@pmeerw.net; lars@metafoo.de;
> knaack.h@gmx.de; Anirudha Sarangi <anirudh@xilinx.com>; Srinivas Goud
> <sgoud@xilinx.com>; linux-kernel@vger.kernel.org; linux-arm-
> kernel@lists.infradead.org; linux-iio@vger.kernel.org
> Subject: Re: [PATCH v2 2/4] iio: adc: xilinx: limit pcap clock frequency value
> 
> On Mon, 23 Jul 2018 20:32:01 +0530
> Manish Narani <manish.narani@xilinx.com> wrote:
> 
> > This patch limits the xadc pcap clock frequency value to be less than
> > 200MHz. This fixes the issue when zynq is booted at higher frequency
> > values, pcap crosses the maximum limit of 200MHz(Fmax) as it is
> > derived from IOPLL.
> > If this limit is crossed it is required to alter the WEDGE and REDGE
> > bits of XADC_CFG register to make timings better in the interface. So
> > to avoid alteration of these bits every time, the pcap value should
> > not cross the Fmax limit.
> >
> > Signed-off-by: Manish Narani <manish.narani@xilinx.com>
> 
> Applied, to the togreg branch of iio.git.  If you want this backported to stable,
> then request it once this patch is upstream.  It may be sometime given we've
> probably just missed the coming merge window.
> 
> If you do need it faster then let me know and I'll look at moving it over to the
> branch of fixes during the RC phases.
Thanks for getting this applied. There is no concern for this to be in the stable
ASAP. I can wait.

Thanks & Regards,
Manish Narani

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2018-07-30 10:13 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-23 15:01 [PATCH v2 0/4] iio: adc: xilinx: XADC driver Enhancements and bug fixes Manish Narani
2018-07-23 15:02 ` [PATCH v2 1/4] iio: adc: xilinx: Check for return values in clk related functions Manish Narani
2018-07-29 11:48   ` Jonathan Cameron
2018-07-23 15:02 ` [PATCH v2 2/4] iio: adc: xilinx: limit pcap clock frequency value Manish Narani
2018-07-29 11:51   ` Jonathan Cameron
2018-07-30 10:13     ` Manish Narani
2018-07-23 15:02 ` [PATCH v2 3/4] iio: adc: xilinx: Remove platform_get_irq from xadc_remove function Manish Narani
2018-07-29 12:29   ` Jonathan Cameron
2018-07-23 15:02 ` [PATCH v2 4/4] iio: adc: xilinx: Move request_irq before enabling interrupts Manish Narani
2018-07-29 12:30   ` Jonathan Cameron

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).