Received: by 10.213.65.68 with SMTP id h4csp270038imn; Fri, 30 Mar 2018 05:18:44 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+C/+pTKkO+Czr2aTCfMPeaDL8KDCMHUGJ+EKV3NAuxomJ+JUHETdg43/pV/eikIfQW8uK4 X-Received: by 10.99.101.198 with SMTP id z189mr8271946pgb.97.1522412324580; Fri, 30 Mar 2018 05:18:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522412324; cv=none; d=google.com; s=arc-20160816; b=TJCHEmbRoxnIFVuiPJWyvl29IOhqzRGUpENwu9O0emBCzkCPbjweqdxcXAk+Z6do12 oCjLeMCnemw54fVRf/eXu6jy0Qdfhmhyckrpn14HAms9p35vuf7fsSiZGXMq5gE5vLc1 YmFAL7ln2veQiixJFzL84cXq+j0NwIKOF7B0QP+DRXcKjWWuYWjeCSE8ywQRWnRuYt+F 32mX5o49NX53gaAa7V9ZUdVLTUBqQ8jiiNZeM6HXHHfOfGUcwn0Zc8K560urs9bH6WeA g0z2WyMz+jtV/SqbyyJahuq6bFxI127Fd6sgGxA47JlXXk9eO4s9nFWHSJBleHJA2JIZ WwTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date :dmarc-filter:arc-authentication-results; bh=CL1u4MhefkoIbYTQ6IxWJJVPCbIWxVRsP/MNvXsUUAk=; b=lfjxI1YeGVPoq4Y/bTq9kMLidCiWs6NSvg64ADeJJuKvohlxWWcHkhr/XGnc+slSdL f6JCAFVLQBALUGxkn3DJMSHspZvY++mRwirGVQWHf/xqmOcvl/0Hn1O6T8aP6dk11eZx k7LlsHTTz+V1NzJJTEPBesDRwVl92voeKXkIiSl/W6WBy4nWSZm6Sbr8KkVZBp5KJOwY ozBU3vLUR7s46EuAXu72R2N+0SmdubhxmRRz7hrlLhM0m/O4R4cxqgzGG7cY7ic5HFmO BKja1Rlr7Qw+g5qnyTzXhDk9bQox+en4eWQ4+pogUoUuEp6G2A+jLSBan3U2xKrASl77 X8aA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r22si6086399pfh.174.2018.03.30.05.18.27; Fri, 30 Mar 2018 05:18:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751281AbeC3MRO (ORCPT + 99 others); Fri, 30 Mar 2018 08:17:14 -0400 Received: from mail.kernel.org ([198.145.29.99]:53770 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751203AbeC3MRN (ORCPT ); Fri, 30 Mar 2018 08:17:13 -0400 Received: from archlinux (cpc91196-cmbg18-2-0-cust659.5-4.cable.virginm.net [81.96.234.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5F14A2175B; Fri, 30 Mar 2018 12:17:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5F14A2175B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=jic23@kernel.org Date: Fri, 30 Mar 2018 13:17:07 +0100 From: Jonathan Cameron To: Eugen Hristev Cc: , , , , , , , , Subject: Re: [PATCH v2 05/10] iio: adc: at91-sama5d2_adc: fix channel configuration for differential channels Message-ID: <20180330131707.21bc3845@archlinux> In-Reply-To: <1522153963-1121-6-git-send-email-eugen.hristev@microchip.com> References: <1522153963-1121-1-git-send-email-eugen.hristev@microchip.com> <1522153963-1121-6-git-send-email-eugen.hristev@microchip.com> X-Mailer: Claws Mail 3.16.0 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 27 Mar 2018 15:32:38 +0300 Eugen Hristev wrote: > When iterating through the channels, the index in the array is not the > scan index. Added an xlate function to translate to the proper index. > This will be used also for devicetree channel xlate > > Signed-off-by: Eugen Hristev So, this is a fix for an existing bug? Please move this to the front of your set (to make it easier to backport). Describe the result of the bug as well. Fixes tag would be good. Thanks, Jonathan > --- > drivers/iio/adc/at91-sama5d2_adc.c | 41 ++++++++++++++++++++++++++++++++++---- > 1 file changed, 37 insertions(+), 4 deletions(-) > > diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c > index 4eff835..8729d65 100644 > --- a/drivers/iio/adc/at91-sama5d2_adc.c > +++ b/drivers/iio/adc/at91-sama5d2_adc.c > @@ -333,6 +333,27 @@ static const struct iio_chan_spec at91_adc_channels[] = { > + AT91_SAMA5D2_DIFF_CHAN_CNT + 1), > }; > > +static int at91_adc_chan_xlate(struct iio_dev *indio_dev, int chan) > +{ > + int i; > + > + for (i = 0; i < indio_dev->num_channels; i++) { > + if (indio_dev->channels[i].scan_index == chan) > + return i; > + } > + return -EINVAL; > +} > + > +static inline struct iio_chan_spec const * > +at91_adc_chan_get(struct iio_dev *indio_dev, int chan) > +{ > + int index = at91_adc_chan_xlate(indio_dev, chan); > + > + if (index < 0) > + return NULL; > + return indio_dev->channels + index; > +} > + > static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) > { > struct iio_dev *indio = iio_trigger_get_drvdata(trig); > @@ -350,8 +371,10 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) > at91_adc_writel(st, AT91_SAMA5D2_TRGR, status); > > for_each_set_bit(bit, indio->active_scan_mask, indio->num_channels) { > - struct iio_chan_spec const *chan = indio->channels + bit; > + struct iio_chan_spec const *chan = at91_adc_chan_get(indio, bit); > > + if (!chan) > + continue; > if (state) { > at91_adc_writel(st, AT91_SAMA5D2_CHER, > BIT(chan->channel)); > @@ -448,7 +471,11 @@ static int at91_adc_dma_start(struct iio_dev *indio_dev) > > for_each_set_bit(bit, indio_dev->active_scan_mask, > indio_dev->num_channels) { > - struct iio_chan_spec const *chan = indio_dev->channels + bit; > + struct iio_chan_spec const *chan = > + at91_adc_chan_get(indio_dev, bit); > + > + if (!chan) > + continue; > > st->dma_st.rx_buf_sz += chan->scan_type.storagebits / 8; > } > @@ -526,8 +553,11 @@ static int at91_adc_buffer_predisable(struct iio_dev *indio_dev) > */ > for_each_set_bit(bit, indio_dev->active_scan_mask, > indio_dev->num_channels) { > - struct iio_chan_spec const *chan = indio_dev->channels + bit; > + struct iio_chan_spec const *chan = > + at91_adc_chan_get(indio_dev, bit); > > + if (!chan) > + continue; > if (st->dma_st.dma_chan) > at91_adc_readl(st, chan->address); > } > @@ -587,8 +617,11 @@ static void at91_adc_trigger_handler_nodma(struct iio_dev *indio_dev, > > for_each_set_bit(bit, indio_dev->active_scan_mask, > indio_dev->num_channels) { > - struct iio_chan_spec const *chan = indio_dev->channels + bit; > + struct iio_chan_spec const *chan = > + at91_adc_chan_get(indio_dev, bit); > > + if (!chan) > + continue; > st->buffer[i] = at91_adc_readl(st, chan->address); > i++; > }