From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.6 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C9B0BC2BA83 for ; Fri, 14 Feb 2020 15:10:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 905502467C for ; Fri, 14 Feb 2020 15:10:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581693021; bh=C4ruZYaMs1nYd0gqhHvdOmkB8OWOp8lsaC2jN1arpN4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:List-ID:From; b=V4EBgBQ3gIL3sSSsMuHDs6rmDqmjO7QyTCxIL1Bh5j6rtBLcalOcj0Sq72HOphf/y r0yoKkjU9CeRtM+h8pKJ0CfIgeOoEgjDF6UbdL9pFCo8/dq4Ok7XD26fBvZUV3b0/W I+mYX11EyiNp6LdnqHfG8ya7EErA8mLxPWGZ/B8Q= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729475AbgBNPKR (ORCPT ); Fri, 14 Feb 2020 10:10:17 -0500 Received: from mail.kernel.org ([198.145.29.99]:57198 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729278AbgBNPKR (ORCPT ); Fri, 14 Feb 2020 10:10:17 -0500 Received: from archlinux (cpc149474-cmbg20-2-0-cust94.5-4.cable.virginm.net [82.4.196.95]) (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 7BDA624670; Fri, 14 Feb 2020 15:10:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581693016; bh=C4ruZYaMs1nYd0gqhHvdOmkB8OWOp8lsaC2jN1arpN4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=MqGmGnJOi1zsbXYPrFEHiIwrN2I30wVnvtp2y/QcFlG6xq1uFuCM2B1R98BgAeMN1 G+AY1N+t4s4uwug0E1lKcUdbGsa8aLwXJMDSAPAO1HbB1FvNzDZ8nfSKBMG2qDZ9DI /eIC4B8BTkmwjE06SoLeKrYmO2wuvRPMo0x55uZM= Date: Fri, 14 Feb 2020 15:10:11 +0000 From: Jonathan Cameron To: Olivier MOYSAN Cc: "robh+dt@kernel.org" , "mark.rutland@arm.com" , "knaack.h@gmx.de" , "lars@metafoo.de" , "devicetree@vger.kernel.org" , "linux-iio@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "pmeerw@pmeerw.net" , "linux-stm32@st-md-mailman.stormreply.com" , "linux-arm-kernel@lists.infradead.org" Subject: Re: [PATCH 4/4] iio: adc: stm32-dfsdm: add scale and offset support Message-ID: <20200214151011.20111e8c@archlinux> In-Reply-To: <5b2e74a0-71bd-46d0-0096-b33ff17f780b@st.com> References: <20200204101008.11411-1-olivier.moysan@st.com> <20200204101008.11411-5-olivier.moysan@st.com> <20200208161847.76c7d6e8@archlinux> <8400827e-5f3d-ad3f-99c8-986934b1a7b8@st.com> <20200214131113.70aa36b8@archlinux> <5b2e74a0-71bd-46d0-0096-b33ff17f780b@st.com> X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org On Fri, 14 Feb 2020 14:49:18 +0000 Olivier MOYSAN wrote: > Hi Jonathan, >=20 > On 2/14/20 2:11 PM, Jonathan Cameron wrote: > > On Tue, 11 Feb 2020 15:19:01 +0000 > > Olivier MOYSAN wrote: > > =20 > >> Hi Jonathan, > >> > >> On 2/8/20 5:18 PM, Jonathan Cameron wrote: =20 > >>> On Tue, 4 Feb 2020 11:10:08 +0100 > >>> Olivier Moysan wrote: > >>> =20 > >>>> Add scale and offset attributes support to STM32 DFSDM. > >>>> > >>>> Signed-off-by: Olivier Moysan =20 > >>> Hmm. I can't remember this history of this but we've kind of > >>> ended up backwards wrt to other consumer drivers. > >>> > >>> In some sense this is similar to the analog gyroscopes. In those > >>> the consumer driver is the gyroscope which is consuming the raw > >>> readings from an ADC connected to the channel. This results > >>> in us getting readings reported by the gyroscope driver. > >>> > >>> Here we have a sigma delta convertor consuming the pulse train > >>> from a sigma delta device. So the channels are reported by > >>> the sigma delta receiver, whereas i think the nearest equivalent > >>> to the analog voltage outputing gyroscopes would have been if > >>> we had reported the channel values at the sigma delta converter. =20 > >> The DFSDM driver is currently used as a consumer of the sd modulator. > >> The scale and offset values of the channels are already computed by > >> the DFSDM driver, and provided by this driver to the IIO ABI. > >> However, the DFSDM has no voltage reference, so it has to retrieve > >> it from sd-modulator channels, for the scale factor computation. > >> > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 scale= =C2=A0 offset > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 ^=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^ > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 IIO ABI > >> +-------------------------------------------------------------+ > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 +---------------+= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 +-------------+ > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |sd driver=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 |DFSDM driver | > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 +---------------+= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 +-------------+ > >> +-------------------------------------------------------------+ > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 HW > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 +---------------+= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 +-------------+ > >> +------->+ sd-modulator=C2=A0 +--------->+ DFSDM +--------> > >> analog=C2=A0=C2=A0 +------+--------+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 +-------------+ output > >> input=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^ > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 | vref > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 + > >> > >> > >> Is it the topology your are expecting ? =20 > > It's not the one we'd expect if we are aligning with similar cases > > elsewhere in IIO. For example, if we attach an analog accelerometer > > to an ADC, we report the accel channels on the accelerometer not the > > ADC. The equivalent would be to see the DFSDM as providing a > > conversion service to the SD device which is actually executing > > the measurement and has the input channels. > > > > > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 scale=C2=A0 offset r= aw > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 ^ ^ > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0 | =C2=A0=C2=A0 = IIO ABI > > +-------------------------------------------------------------+ > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 +---------------+= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 +-------------+ > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |sd driver=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 |DFSDM driver | > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 +---------------+= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 +-------------+ > > +-------------------------------------------------------------+ > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 HW > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 +---------------+= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 +-------------+ > > +------->+ sd-modulator=C2=A0 +--------->+ DFSDM +--------> > > analog=C2=A0=C2=A0 +------+--------+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 +-------------+ output > > input=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^ > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 | vref =20 > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 + > >> =20 > Thanks for your clarification. > ok, moving to this logic is a significant change. > I need to evaluate further the impact on the dfsdm driver. Understood! If we can't do it without potentially breaking users then such is life. Jonathan >=20 > Regards > Olivier > >> If not, I probably missedsomething. Could you please clarify this poin= t ? > >> > >> Regards > >> Olivier =20 > >>> This wasn't really an issue when the only values available were > >>> raw, but if we are adding scale and offset, they are things that > >>> belong to the ad1201 for example, not the upstream stm32-dfsdm unit. > >>> > >>> Thinking of it another way, we don't report an SPI ADC output in > >>> the driver for the SPI master. > >>> > >>> Could we flip it around without breaking anything? > >>> > >>> Jonathan > >>> =20 > >>>> --- > >>>> drivers/iio/adc/stm32-dfsdm-adc.c | 105 +++++++++++++++++++++++++= ++++- > >>>> 1 file changed, 102 insertions(+), 3 deletions(-) > >>>> > >>>> diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm= 32-dfsdm-adc.c > >>>> index 07b9dfdf8e76..b85fd3e90496 100644 > >>>> --- a/drivers/iio/adc/stm32-dfsdm-adc.c > >>>> +++ b/drivers/iio/adc/stm32-dfsdm-adc.c > >>>> @@ -10,6 +10,7 @@ > >>>> #include > >>>> #include > >>>> #include > >>>> +#include > >>>> #include > >>>> #include > >>>> #include > >>>> @@ -67,6 +68,13 @@ struct stm32_dfsdm_dev_data { > >>>> const struct regmap_config *regmap_cfg; > >>>> }; > >>>> =20 > >>>> +struct stm32_dfsdm_sd_chan_info { > >>>> + int scale_val; > >>>> + int scale_val2; > >>>> + int offset; > >>>> + unsigned int differential; > >>>> +}; > >>>> + > >>>> struct stm32_dfsdm_adc { > >>>> struct stm32_dfsdm *dfsdm; > >>>> const struct stm32_dfsdm_dev_data *dev_data; > >>>> @@ -79,6 +87,7 @@ struct stm32_dfsdm_adc { > >>>> struct iio_hw_consumer *hwc; > >>>> struct completion completion; > >>>> u32 *buffer; > >>>> + struct stm32_dfsdm_sd_chan_info *sd_chan; > >>>> =20 > >>>> /* Audio specific */ > >>>> unsigned int spi_freq; /* SPI bus clock frequency */ > >>>> @@ -1271,7 +1280,10 @@ static int stm32_dfsdm_read_raw(struct iio_de= v *indio_dev, > >>>> int *val2, long mask) > >>>> { > >>>> struct stm32_dfsdm_adc *adc =3D iio_priv(indio_dev); > >>>> - int ret; > >>>> + struct stm32_dfsdm_filter *fl =3D &adc->dfsdm->fl_list[adc->fl_id]; > >>>> + struct stm32_dfsdm_filter_osr *flo =3D &fl->flo[fl->fast]; > >>>> + u32 max =3D flo->max << (flo->lshift - chan->scan_type.shift); > >>>> + int ret, idx =3D chan->scan_index; > >>>> =20 > >>>> switch (mask) { > >>>> case IIO_CHAN_INFO_RAW: > >>>> @@ -1307,6 +1319,41 @@ static int stm32_dfsdm_read_raw(struct iio_de= v *indio_dev, > >>>> *val =3D adc->sample_freq; > >>>> =20 > >>>> return IIO_VAL_INT; > >>>> + > >>>> + case IIO_CHAN_INFO_SCALE: > >>>> + /* > >>>> + * Scale is expressed in mV. > >>>> + * When fast mode is disabled, actual resolution may be lower > >>>> + * than 2^n, where n=3Drealbits-1. > >>>> + * This leads to underestimating input voltage. To > >>>> + * compensate this deviation, the voltage reference can be > >>>> + * corrected with a factor =3D realbits resolution / actual max > >>>> + */ > >>>> + *val =3D div_u64((u64)adc->sd_chan[idx].scale_val * > >>>> + (u64)BIT(DFSDM_DATA_RES - 1), max); > >>>> + *val2 =3D chan->scan_type.realbits; > >>>> + if (adc->sd_chan[idx].differential) > >>>> + *val *=3D 2; > >>>> + > >>>> + return IIO_VAL_FRACTIONAL_LOG2; > >>>> + > >>>> + case IIO_CHAN_INFO_OFFSET: > >>>> + /* > >>>> + * DFSDM output data are in the range [-2^n,2^n-1], > >>>> + * with n=3Drealbits-1. > >>>> + * - Differential modulator: > >>>> + * Offset correspond to SD modulator offset. > >>>> + * - Single ended modulator: > >>>> + * Input is in [0V,Vref] range, where 0V corresponds to -2^n. > >>>> + * Add 2^n to offset. (i.e. middle of input range) > >>>> + * offset =3D offset(sd) * vref / res(sd) * max / vref. > >>>> + */ > >>>> + *val =3D div_u64((u64)max * adc->sd_chan[idx].offset, > >>>> + BIT(adc->sd_chan[idx].scale_val2 - 1)); > >>>> + if (!adc->sd_chan[idx].differential) > >>>> + *val +=3D max; > >>>> + > >>>> + return IIO_VAL_INT; > >>>> } > >>>> =20 > >>>> return -EINVAL; > >>>> @@ -1430,7 +1477,9 @@ static int stm32_dfsdm_adc_chan_init_one(struc= t iio_dev *indio_dev, > >>>> * IIO_CHAN_INFO_RAW: used to compute regular conversion > >>>> * IIO_CHAN_INFO_OVERSAMPLING_RATIO: used to set oversampling > >>>> */ > >>>> - ch->info_mask_separate =3D BIT(IIO_CHAN_INFO_RAW); > >>>> + ch->info_mask_separate =3D BIT(IIO_CHAN_INFO_RAW) | > >>>> + BIT(IIO_CHAN_INFO_SCALE) | > >>>> + BIT(IIO_CHAN_INFO_OFFSET); > >>>> ch->info_mask_shared_by_all =3D BIT(IIO_CHAN_INFO_OVERSAMPLING_R= ATIO) | > >>>> BIT(IIO_CHAN_INFO_SAMP_FREQ); > >>>> =20 > >>>> @@ -1481,8 +1530,10 @@ static int stm32_dfsdm_adc_init(struct iio_de= v *indio_dev) > >>>> { > >>>> struct iio_chan_spec *ch; > >>>> struct stm32_dfsdm_adc *adc =3D iio_priv(indio_dev); > >>>> + struct iio_channel *channels, *chan; > >>>> + struct stm32_dfsdm_sd_chan_info *sd_chan; > >>>> int num_ch; > >>>> - int ret, chan_idx; > >>>> + int ret, chan_idx, val2; > >>>> =20 > >>>> adc->oversamp =3D DFSDM_DEFAULT_OVERSAMPLING; > >>>> ret =3D stm32_dfsdm_compute_all_osrs(indio_dev, adc->oversamp); > >>>> @@ -1506,6 +1557,22 @@ static int stm32_dfsdm_adc_init(struct iio_de= v *indio_dev) > >>>> if (!ch) > >>>> return -ENOMEM; > >>>> =20 > >>>> + /* Get SD modulator channels */ > >>>> + channels =3D iio_channel_get_all(&indio_dev->dev); > >>>> + if (IS_ERR(channels)) { > >>>> + dev_err(&indio_dev->dev, "Failed to get channel %ld\n", > >>>> + PTR_ERR(channels)); > >>>> + return PTR_ERR(channels); > >>>> + } > >>>> + chan =3D &channels[0]; > >>>> + > >>>> + adc->sd_chan =3D devm_kzalloc(&indio_dev->dev, > >>>> + sizeof(*adc->sd_chan) * num_ch, GFP_KERNEL); > >>>> + if (!adc->sd_chan) > >>>> + return -ENOMEM; > >>>> + > >>>> + sd_chan =3D adc->sd_chan; > >>>> + > >>>> for (chan_idx =3D 0; chan_idx < num_ch; chan_idx++) { > >>>> ch[chan_idx].scan_index =3D chan_idx; > >>>> ret =3D stm32_dfsdm_adc_chan_init_one(indio_dev, &ch[chan_idx]); > >>>> @@ -1513,6 +1580,38 @@ static int stm32_dfsdm_adc_init(struct iio_de= v *indio_dev) > >>>> dev_err(&indio_dev->dev, "Channels init failed\n"); > >>>> return ret; > >>>> } > >>>> + > >>>> + if (!chan->indio_dev) > >>>> + return -EINVAL; > >>>> + > >>>> + ret =3D iio_read_channel_scale(chan, &sd_chan->scale_val, > >>>> + &sd_chan->scale_val2); > >>>> + if (ret < 0) { > >>>> + dev_err(&indio_dev->dev, > >>>> + "Failed to get channel %d scale\n", chan_idx); > >>>> + return ret; > >>>> + } > >>>> + > >>>> + if (iio_channel_has_info(chan->channel, IIO_CHAN_INFO_OFFSET)) { > >>>> + ret =3D iio_read_channel_offset(chan, &sd_chan->offset, > >>>> + &val2); > >>>> + if (ret < 0) { > >>>> + dev_err(&indio_dev->dev, > >>>> + "Failed to get channel %d offset\n", > >>>> + chan_idx); > >>>> + return ret; > >>>> + } > >>>> + } > >>>> + > >>>> + sd_chan->differential =3D chan->channel->differential; > >>>> + > >>>> + dev_dbg(&indio_dev->dev, "Channel %d %s scale ref=3D%d offset=3D%= d", > >>>> + chan_idx, chan->channel->differential ? > >>>> + "differential" : "single-ended", > >>>> + sd_chan->scale_val, sd_chan->offset); > >>>> + > >>>> + chan++; > >>>> + sd_chan++; > >>>> } > >>>> =20 > >>>> indio_dev->num_channels =3D num_ch; =20 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8C57C2BA83 for ; Fri, 14 Feb 2020 15:10:28 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9ADC324650 for ; Fri, 14 Feb 2020 15:10:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="F4dsTNGZ"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="MqGmGnJO" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9ADC324650 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=53oczAMD7PBmh8ij7xaXwHqT1tUYEs7do3oBJoXLkYg=; b=F4dsTNGZXJwMXC jshDbzM8zVEraCTb3TeCcLswanZZgnREyehcx7UpkAv209TlDBKPlZIB2yqS99fy2XjvjfWnSTuIg wprLzEPvWUg9VxF96ace5PPsuQnLGC7iYY9auE2kWkp6dnKrEBY+WQozCp6PDtOMrnV6Y3urc0Ccc 3amKzsIju7+TUZOFgkwsvzHiTyz58RgU+FvpNt3bqVjUJYUNHvor+YMnuM+HxuYYHTU4x3jfLDpVp JqN3vY8LHQu9OMy/CnqHKxmEuBApCC306V4JF0+FeLd+260roDalwTx+ZuqU6HACggzaySuqYZNZX jxBuxLAnihuN3ux/9VHQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2cbk-0003wl-Rz; Fri, 14 Feb 2020 15:10:20 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2cbg-0003wB-Sm for linux-arm-kernel@lists.infradead.org; Fri, 14 Feb 2020 15:10:18 +0000 Received: from archlinux (cpc149474-cmbg20-2-0-cust94.5-4.cable.virginm.net [82.4.196.95]) (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 7BDA624670; Fri, 14 Feb 2020 15:10:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581693016; bh=C4ruZYaMs1nYd0gqhHvdOmkB8OWOp8lsaC2jN1arpN4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=MqGmGnJOi1zsbXYPrFEHiIwrN2I30wVnvtp2y/QcFlG6xq1uFuCM2B1R98BgAeMN1 G+AY1N+t4s4uwug0E1lKcUdbGsa8aLwXJMDSAPAO1HbB1FvNzDZ8nfSKBMG2qDZ9DI /eIC4B8BTkmwjE06SoLeKrYmO2wuvRPMo0x55uZM= Date: Fri, 14 Feb 2020 15:10:11 +0000 From: Jonathan Cameron To: Olivier MOYSAN Subject: Re: [PATCH 4/4] iio: adc: stm32-dfsdm: add scale and offset support Message-ID: <20200214151011.20111e8c@archlinux> In-Reply-To: <5b2e74a0-71bd-46d0-0096-b33ff17f780b@st.com> References: <20200204101008.11411-1-olivier.moysan@st.com> <20200204101008.11411-5-olivier.moysan@st.com> <20200208161847.76c7d6e8@archlinux> <8400827e-5f3d-ad3f-99c8-986934b1a7b8@st.com> <20200214131113.70aa36b8@archlinux> <5b2e74a0-71bd-46d0-0096-b33ff17f780b@st.com> X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200214_071016_978971_73B97F64 X-CRM114-Status: GOOD ( 33.47 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "mark.rutland@arm.com" , "devicetree@vger.kernel.org" , "lars@metafoo.de" , "linux-iio@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "robh+dt@kernel.org" , "pmeerw@pmeerw.net" , "knaack.h@gmx.de" , "linux-stm32@st-md-mailman.stormreply.com" , "linux-arm-kernel@lists.infradead.org" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gRnJpLCAxNCBGZWIgMjAyMCAxNDo0OToxOCArMDAwMApPbGl2aWVyIE1PWVNBTiA8b2xpdmll ci5tb3lzYW5Ac3QuY29tPiB3cm90ZToKCj4gSGkgSm9uYXRoYW4sCj4gCj4gT24gMi8xNC8yMCAy OjExIFBNLCBKb25hdGhhbiBDYW1lcm9uIHdyb3RlOgo+ID4gT24gVHVlLCAxMSBGZWIgMjAyMCAx NToxOTowMSArMDAwMAo+ID4gT2xpdmllciBNT1lTQU4gPG9saXZpZXIubW95c2FuQHN0LmNvbT4g d3JvdGU6Cj4gPiAgCj4gPj4gSGkgSm9uYXRoYW4sCj4gPj4KPiA+PiBPbiAyLzgvMjAgNToxOCBQ TSwgSm9uYXRoYW4gQ2FtZXJvbiB3cm90ZTogIAo+ID4+PiBPbiBUdWUsIDQgRmViIDIwMjAgMTE6 MTA6MDggKzAxMDAKPiA+Pj4gT2xpdmllciBNb3lzYW4gPG9saXZpZXIubW95c2FuQHN0LmNvbT4g d3JvdGU6Cj4gPj4+ICAgICAKPiA+Pj4+IEFkZCBzY2FsZSBhbmQgb2Zmc2V0IGF0dHJpYnV0ZXMg c3VwcG9ydCB0byBTVE0zMiBERlNETS4KPiA+Pj4+Cj4gPj4+PiBTaWduZWQtb2ZmLWJ5OiBPbGl2 aWVyIE1veXNhbiA8b2xpdmllci5tb3lzYW5Ac3QuY29tPiAgCj4gPj4+IEhtbS4gSSBjYW4ndCBy ZW1lbWJlciB0aGlzIGhpc3Rvcnkgb2YgdGhpcyBidXQgd2UndmUga2luZCBvZgo+ID4+PiBlbmRl ZCB1cCBiYWNrd2FyZHMgd3J0IHRvIG90aGVyIGNvbnN1bWVyIGRyaXZlcnMuCj4gPj4+Cj4gPj4+ IEluIHNvbWUgc2Vuc2UgdGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBhbmFsb2cgZ3lyb3Njb3Blcy4g IEluIHRob3NlCj4gPj4+IHRoZSBjb25zdW1lciBkcml2ZXIgaXMgdGhlIGd5cm9zY29wZSB3aGlj aCBpcyBjb25zdW1pbmcgdGhlIHJhdwo+ID4+PiByZWFkaW5ncyBmcm9tIGFuIEFEQyBjb25uZWN0 ZWQgdG8gdGhlIGNoYW5uZWwuICBUaGlzIHJlc3VsdHMKPiA+Pj4gaW4gdXMgZ2V0dGluZyByZWFk aW5ncyByZXBvcnRlZCBieSB0aGUgZ3lyb3Njb3BlIGRyaXZlci4KPiA+Pj4KPiA+Pj4gSGVyZSB3 ZSBoYXZlIGEgc2lnbWEgZGVsdGEgY29udmVydG9yIGNvbnN1bWluZyB0aGUgcHVsc2UgdHJhaW4K PiA+Pj4gZnJvbSBhIHNpZ21hIGRlbHRhIGRldmljZS4gIFNvIHRoZSBjaGFubmVscyBhcmUgcmVw b3J0ZWQgYnkKPiA+Pj4gdGhlIHNpZ21hIGRlbHRhIHJlY2VpdmVyLCB3aGVyZWFzIGkgdGhpbmsg dGhlIG5lYXJlc3QgZXF1aXZhbGVudAo+ID4+PiB0byB0aGUgYW5hbG9nIHZvbHRhZ2Ugb3V0cHV0 aW5nIGd5cm9zY29wZXMgd291bGQgaGF2ZSBiZWVuIGlmCj4gPj4+IHdlIGhhZCByZXBvcnRlZCB0 aGUgY2hhbm5lbCB2YWx1ZXMgYXQgdGhlIHNpZ21hIGRlbHRhIGNvbnZlcnRlci4gIAo+ID4+IFRo ZSBERlNETSBkcml2ZXIgaXMgY3VycmVudGx5IHVzZWQgYXMgYSBjb25zdW1lciBvZiB0aGUgc2Qg bW9kdWxhdG9yLgo+ID4+IFRoZSBzY2FsZSBhbmQgb2Zmc2V0IHZhbHVlcyBvZiB0aGUgY2hhbm5l bHMgYXJlIGFscmVhZHkgY29tcHV0ZWQgYnkKPiA+PiB0aGUgREZTRE0gZHJpdmVyLCBhbmQgcHJv dmlkZWQgYnkgdGhpcyBkcml2ZXIgdG8gdGhlIElJTyBBQkkuCj4gPj4gSG93ZXZlciwgdGhlIERG U0RNIGhhcyBubyB2b2x0YWdlIHJlZmVyZW5jZSwgc28gaXQgaGFzIHRvIHJldHJpZXZlCj4gPj4g aXQgZnJvbSBzZC1tb2R1bGF0b3IgY2hhbm5lbHMsIGZvciB0aGUgc2NhbGUgZmFjdG9yIGNvbXB1 dGF0aW9uLgo+ID4+Cj4gPj4gICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNjYWxlwqAgb2Zmc2V0Cj4gPj4gICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBewqDCoMKgwqDCoCBeCj4gPj4gICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8 wqDCoMKgwqDCoCB8wqDCoMKgwqDCoMKgIElJTyBBQkkKPiA+PiArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiA+PiAgIMKgwqDC oMKgwqDCoMKgwqAgKy0tLS0tLS0tLS0tLS0tLSvCoMKgwqDCoMKgwqDCoMKgwqAgKy0tLS0tLS0t LS0tLS0rCj4gPj4gICDCoMKgwqDCoMKgwqDCoMKgIHxzZCBkcml2ZXLCoMKgwqDCoMKgIHzCoMKg wqDCoMKgwqDCoMKgwqAgfERGU0RNIGRyaXZlciB8Cj4gPj4gICDCoMKgwqDCoMKgwqDCoMKgICst LS0tLS0tLS0tLS0tLS0rwqDCoMKgwqDCoMKgwqDCoMKgICstLS0tLS0tLS0tLS0tKwo+ID4+ICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKwo+ID4+ICAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBIVwo+ID4+ICAgwqDCoMKgwqDCoMKgwqDCoCArLS0tLS0tLS0tLS0tLS0tK8Kg wqDCoMKgwqDCoMKgwqDCoCArLS0tLS0tLS0tLS0tLSsKPiA+PiArLS0tLS0tLT4rIHNkLW1vZHVs YXRvcsKgICstLS0tLS0tLS0+KyBERlNETSArLS0tLS0tLS0+Cj4gPj4gYW5hbG9nwqDCoCArLS0t LS0tKy0tLS0tLS0tK8KgwqDCoMKgwqDCoMKgwqDCoCArLS0tLS0tLS0tLS0tLSsgb3V0cHV0Cj4g Pj4gaW5wdXTCoMKgwqDCoMKgwqDCoMKgwqDCoCBeCj4gPj4gICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfCB2cmVmCj4gPj4gICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Kwo+ID4+Cj4gPj4KPiA+PiBJcyBpdCB0aGUgdG9wb2xvZ3kgeW91ciBhcmUgZXhwZWN0aW5nID8g IAo+ID4gSXQncyBub3QgdGhlIG9uZSB3ZSdkIGV4cGVjdCBpZiB3ZSBhcmUgYWxpZ25pbmcgd2l0 aCBzaW1pbGFyIGNhc2VzCj4gPiBlbHNld2hlcmUgaW4gSUlPLiAgRm9yIGV4YW1wbGUsIGlmIHdl IGF0dGFjaCBhbiBhbmFsb2cgYWNjZWxlcm9tZXRlcgo+ID4gdG8gYW4gQURDLCB3ZSByZXBvcnQg dGhlIGFjY2VsIGNoYW5uZWxzIG9uIHRoZSBhY2NlbGVyb21ldGVyIG5vdCB0aGUKPiA+IEFEQy4g IFRoZSBlcXVpdmFsZW50IHdvdWxkIGJlIHRvIHNlZSB0aGUgREZTRE0gYXMgcHJvdmlkaW5nIGEK PiA+IGNvbnZlcnNpb24gc2VydmljZSB0byB0aGUgU0QgZGV2aWNlIHdoaWNoIGlzIGFjdHVhbGx5 IGV4ZWN1dGluZwo+ID4gdGhlIG1lYXN1cmVtZW50IGFuZCBoYXMgdGhlIGlucHV0IGNoYW5uZWxz Lgo+ID4KPiA+Cj4gPiAgwqDCoMKgwqDCoMKgwqDCoCBzY2FsZcKgIG9mZnNldCAgcmF3Cj4gPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqAgXsKgwqDCoMKgwqAgXiAgICAgIF4KPiA+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoCB8wqDCoMKgwqDCoCB8wqDCoMKgwqAgIHwgIMKgwqAgICAgICAgICAgICAgICAg ICAgICAgICAgIElJTyBBQkkKPiA+ICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gPiAgICDCoMKgwqDCoMKgwqDCoMKgICst LS0tLS0tLS0tLS0tLS0rwqDCoMKgwqDCoMKgwqDCoMKgICstLS0tLS0tLS0tLS0tKwo+ID4gICAg wqDCoMKgwqDCoMKgwqDCoCB8c2QgZHJpdmVywqDCoMKgwqDCoCB8wqDCoMKgwqDCoMKgwqDCoMKg IHxERlNETSBkcml2ZXIgfAo+ID4gICAgwqDCoMKgwqDCoMKgwqDCoCArLS0tLS0tLS0tLS0tLS0t K8KgwqDCoMKgwqDCoMKgwqDCoCArLS0tLS0tLS0tLS0tLSsKPiA+ICAgKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gPiAgICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhX Cj4gPiAgICDCoMKgwqDCoMKgwqDCoMKgICstLS0tLS0tLS0tLS0tLS0rwqDCoMKgwqDCoMKgwqDC oMKgICstLS0tLS0tLS0tLS0tKwo+ID4gICArLS0tLS0tLT4rIHNkLW1vZHVsYXRvcsKgICstLS0t LS0tLS0+KyBERlNETSArLS0tLS0tLS0+Cj4gPiAgIGFuYWxvZ8KgwqAgKy0tLS0tLSstLS0tLS0t LSvCoMKgwqDCoMKgwqDCoMKgwqAgKy0tLS0tLS0tLS0tLS0rIG91dHB1dAo+ID4gICBpbnB1dMKg wqDCoMKgwqDCoMKgwqDCoMKgIF4KPiA+ICAgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB8IHZyZWYgIAo+ID4+ICAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICsKPiA+PiAg Cj4gVGhhbmtzIGZvciB5b3VyIGNsYXJpZmljYXRpb24uCj4gb2ssIG1vdmluZyB0byB0aGlzIGxv Z2ljIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLgo+IEkgbmVlZCB0byBldmFsdWF0ZSBmdXJ0aGVy IHRoZSBpbXBhY3Qgb24gdGhlIGRmc2RtIGRyaXZlci4KClVuZGVyc3Rvb2QhICBJZiB3ZSBjYW4n dCBkbyBpdCB3aXRob3V0IHBvdGVudGlhbGx5IGJyZWFraW5nIHVzZXJzIHRoZW4Kc3VjaCBpcyBs aWZlLgoKSm9uYXRoYW4KCj4gCj4gUmVnYXJkcwo+IE9saXZpZXIKPiA+PiBJZiBub3QsIEkgcHJv YmFibHkgbWlzc2Vkc29tZXRoaW5nLiBDb3VsZCB5b3UgcGxlYXNlIGNsYXJpZnkgdGhpcyBwb2lu dCA/Cj4gPj4KPiA+PiBSZWdhcmRzCj4gPj4gT2xpdmllciAgCj4gPj4+IFRoaXMgd2Fzbid0IHJl YWxseSBhbiBpc3N1ZSB3aGVuIHRoZSBvbmx5IHZhbHVlcyBhdmFpbGFibGUgd2VyZQo+ID4+PiBy YXcsIGJ1dCBpZiB3ZSBhcmUgYWRkaW5nIHNjYWxlIGFuZCBvZmZzZXQsIHRoZXkgYXJlIHRoaW5n cyB0aGF0Cj4gPj4+IGJlbG9uZyB0byB0aGUgYWQxMjAxIGZvciBleGFtcGxlLCBub3QgdGhlIHVw c3RyZWFtIHN0bTMyLWRmc2RtIHVuaXQuCj4gPj4+Cj4gPj4+IFRoaW5raW5nIG9mIGl0IGFub3Ro ZXIgd2F5LCB3ZSBkb24ndCByZXBvcnQgYW4gU1BJIEFEQyBvdXRwdXQgaW4KPiA+Pj4gdGhlIGRy aXZlciBmb3IgdGhlIFNQSSBtYXN0ZXIuCj4gPj4+Cj4gPj4+IENvdWxkIHdlIGZsaXAgaXQgYXJv dW5kIHdpdGhvdXQgYnJlYWtpbmcgYW55dGhpbmc/Cj4gPj4+Cj4gPj4+IEpvbmF0aGFuCj4gPj4+ ICAgICAKPiA+Pj4+IC0tLQo+ID4+Pj4gICAgZHJpdmVycy9paW8vYWRjL3N0bTMyLWRmc2RtLWFk Yy5jIHwgMTA1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ID4+Pj4gICAgMSBmaWxl IGNoYW5nZWQsIDEwMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+ID4+Pj4KPiA+Pj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvc3RtMzItZGZzZG0tYWRjLmMgYi9kcml2ZXJz L2lpby9hZGMvc3RtMzItZGZzZG0tYWRjLmMKPiA+Pj4+IGluZGV4IDA3YjlkZmRmOGU3Ni4uYjg1 ZmQzZTkwNDk2IDEwMDY0NAo+ID4+Pj4gLS0tIGEvZHJpdmVycy9paW8vYWRjL3N0bTMyLWRmc2Rt LWFkYy5jCj4gPj4+PiArKysgYi9kcml2ZXJzL2lpby9hZGMvc3RtMzItZGZzZG0tYWRjLmMKPiA+ Pj4+IEBAIC0xMCw2ICsxMCw3IEBACj4gPj4+PiAgICAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBp bmcuaD4KPiA+Pj4+ICAgICNpbmNsdWRlIDxsaW51eC9paW8vYWRjL3N0bTMyLWRmc2RtLWFkYy5o Pgo+ID4+Pj4gICAgI2luY2x1ZGUgPGxpbnV4L2lpby9idWZmZXIuaD4KPiA+Pj4+ICsjaW5jbHVk ZSA8bGludXgvaWlvL2NvbnN1bWVyLmg+Cj4gPj4+PiAgICAjaW5jbHVkZSA8bGludXgvaWlvL2h3 LWNvbnN1bWVyLmg+Cj4gPj4+PiAgICAjaW5jbHVkZSA8bGludXgvaWlvL3N5c2ZzLmg+Cj4gPj4+ PiAgICAjaW5jbHVkZSA8bGludXgvaWlvL3RpbWVyL3N0bTMyLWxwdGltLXRyaWdnZXIuaD4KPiA+ Pj4+IEBAIC02Nyw2ICs2OCwxMyBAQCBzdHJ1Y3Qgc3RtMzJfZGZzZG1fZGV2X2RhdGEgewo+ID4+ Pj4gICAgCWNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpyZWdtYXBfY2ZnOwo+ID4+Pj4gICAg fTsKPiA+Pj4+ICAgIAo+ID4+Pj4gK3N0cnVjdCBzdG0zMl9kZnNkbV9zZF9jaGFuX2luZm8gewo+ ID4+Pj4gKwlpbnQgc2NhbGVfdmFsOwo+ID4+Pj4gKwlpbnQgc2NhbGVfdmFsMjsKPiA+Pj4+ICsJ aW50IG9mZnNldDsKPiA+Pj4+ICsJdW5zaWduZWQgaW50IGRpZmZlcmVudGlhbDsKPiA+Pj4+ICt9 Owo+ID4+Pj4gKwo+ID4+Pj4gICAgc3RydWN0IHN0bTMyX2Rmc2RtX2FkYyB7Cj4gPj4+PiAgICAJ c3RydWN0IHN0bTMyX2Rmc2RtICpkZnNkbTsKPiA+Pj4+ICAgIAljb25zdCBzdHJ1Y3Qgc3RtMzJf ZGZzZG1fZGV2X2RhdGEgKmRldl9kYXRhOwo+ID4+Pj4gQEAgLTc5LDYgKzg3LDcgQEAgc3RydWN0 IHN0bTMyX2Rmc2RtX2FkYyB7Cj4gPj4+PiAgICAJc3RydWN0IGlpb19od19jb25zdW1lciAqaHdj Owo+ID4+Pj4gICAgCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247Cj4gPj4+PiAgICAJdTMy ICpidWZmZXI7Cj4gPj4+PiArCXN0cnVjdCBzdG0zMl9kZnNkbV9zZF9jaGFuX2luZm8gKnNkX2No YW47Cj4gPj4+PiAgICAKPiA+Pj4+ICAgIAkvKiBBdWRpbyBzcGVjaWZpYyAqLwo+ID4+Pj4gICAg CXVuc2lnbmVkIGludCBzcGlfZnJlcTsgIC8qIFNQSSBidXMgY2xvY2sgZnJlcXVlbmN5ICovCj4g Pj4+PiBAQCAtMTI3MSw3ICsxMjgwLDEwIEBAIHN0YXRpYyBpbnQgc3RtMzJfZGZzZG1fcmVhZF9y YXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKPiA+Pj4+ICAgIAkJCQlpbnQgKnZhbDIsIGxv bmcgbWFzaykKPiA+Pj4+ICAgIHsKPiA+Pj4+ICAgIAlzdHJ1Y3Qgc3RtMzJfZGZzZG1fYWRjICph ZGMgPSBpaW9fcHJpdihpbmRpb19kZXYpOwo+ID4+Pj4gLQlpbnQgcmV0Owo+ID4+Pj4gKwlzdHJ1 Y3Qgc3RtMzJfZGZzZG1fZmlsdGVyICpmbCA9ICZhZGMtPmRmc2RtLT5mbF9saXN0W2FkYy0+Zmxf aWRdOwo+ID4+Pj4gKwlzdHJ1Y3Qgc3RtMzJfZGZzZG1fZmlsdGVyX29zciAqZmxvID0gJmZsLT5m bG9bZmwtPmZhc3RdOwo+ID4+Pj4gKwl1MzIgbWF4ID0gZmxvLT5tYXggPDwgKGZsby0+bHNoaWZ0 IC0gY2hhbi0+c2Nhbl90eXBlLnNoaWZ0KTsKPiA+Pj4+ICsJaW50IHJldCwgaWR4ID0gY2hhbi0+ c2Nhbl9pbmRleDsKPiA+Pj4+ICAgIAo+ID4+Pj4gICAgCXN3aXRjaCAobWFzaykgewo+ID4+Pj4g ICAgCWNhc2UgSUlPX0NIQU5fSU5GT19SQVc6Cj4gPj4+PiBAQCAtMTMwNyw2ICsxMzE5LDQxIEBA IHN0YXRpYyBpbnQgc3RtMzJfZGZzZG1fcmVhZF9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rl diwKPiA+Pj4+ICAgIAkJKnZhbCA9IGFkYy0+c2FtcGxlX2ZyZXE7Cj4gPj4+PiAgICAKPiA+Pj4+ ICAgIAkJcmV0dXJuIElJT19WQUxfSU5UOwo+ID4+Pj4gKwo+ID4+Pj4gKwljYXNlIElJT19DSEFO X0lORk9fU0NBTEU6Cj4gPj4+PiArCQkvKgo+ID4+Pj4gKwkJICogU2NhbGUgaXMgZXhwcmVzc2Vk IGluIG1WLgo+ID4+Pj4gKwkJICogV2hlbiBmYXN0IG1vZGUgaXMgZGlzYWJsZWQsIGFjdHVhbCBy ZXNvbHV0aW9uIG1heSBiZSBsb3dlcgo+ID4+Pj4gKwkJICogdGhhbiAyXm4sIHdoZXJlIG49cmVh bGJpdHMtMS4KPiA+Pj4+ICsJCSAqIFRoaXMgbGVhZHMgdG8gdW5kZXJlc3RpbWF0aW5nIGlucHV0 IHZvbHRhZ2UuIFRvCj4gPj4+PiArCQkgKiBjb21wZW5zYXRlIHRoaXMgZGV2aWF0aW9uLCB0aGUg dm9sdGFnZSByZWZlcmVuY2UgY2FuIGJlCj4gPj4+PiArCQkgKiBjb3JyZWN0ZWQgd2l0aCBhIGZh Y3RvciA9IHJlYWxiaXRzIHJlc29sdXRpb24gLyBhY3R1YWwgbWF4Cj4gPj4+PiArCQkgKi8KPiA+ Pj4+ICsJCSp2YWwgPSBkaXZfdTY0KCh1NjQpYWRjLT5zZF9jaGFuW2lkeF0uc2NhbGVfdmFsICoK PiA+Pj4+ICsJCQkgICAgICAgKHU2NClCSVQoREZTRE1fREFUQV9SRVMgLSAxKSwgbWF4KTsKPiA+ Pj4+ICsJCSp2YWwyID0gY2hhbi0+c2Nhbl90eXBlLnJlYWxiaXRzOwo+ID4+Pj4gKwkJaWYgKGFk Yy0+c2RfY2hhbltpZHhdLmRpZmZlcmVudGlhbCkKPiA+Pj4+ICsJCQkqdmFsICo9IDI7Cj4gPj4+ PiArCj4gPj4+PiArCQlyZXR1cm4gSUlPX1ZBTF9GUkFDVElPTkFMX0xPRzI7Cj4gPj4+PiArCj4g Pj4+PiArCWNhc2UgSUlPX0NIQU5fSU5GT19PRkZTRVQ6Cj4gPj4+PiArCQkvKgo+ID4+Pj4gKwkJ ICogREZTRE0gb3V0cHV0IGRhdGEgYXJlIGluIHRoZSByYW5nZSBbLTJebiwyXm4tMV0sCj4gPj4+ PiArCQkgKiB3aXRoIG49cmVhbGJpdHMtMS4KPiA+Pj4+ICsJCSAqIC0gRGlmZmVyZW50aWFsIG1v ZHVsYXRvcjoKPiA+Pj4+ICsJCSAqIE9mZnNldCBjb3JyZXNwb25kIHRvIFNEIG1vZHVsYXRvciBv ZmZzZXQuCj4gPj4+PiArCQkgKiAtIFNpbmdsZSBlbmRlZCBtb2R1bGF0b3I6Cj4gPj4+PiArCQkg KiBJbnB1dCBpcyBpbiBbMFYsVnJlZl0gcmFuZ2UsIHdoZXJlIDBWIGNvcnJlc3BvbmRzIHRvIC0y Xm4uCj4gPj4+PiArCQkgKiBBZGQgMl5uIHRvIG9mZnNldC4gKGkuZS4gbWlkZGxlIG9mIGlucHV0 IHJhbmdlKQo+ID4+Pj4gKwkJICogb2Zmc2V0ID0gb2Zmc2V0KHNkKSAqIHZyZWYgLyByZXMoc2Qp ICogbWF4IC8gdnJlZi4KPiA+Pj4+ICsJCSAqLwo+ID4+Pj4gKwkJKnZhbCA9IGRpdl91NjQoKHU2 NCltYXggKiBhZGMtPnNkX2NoYW5baWR4XS5vZmZzZXQsCj4gPj4+PiArCQkJICAgICAgIEJJVChh ZGMtPnNkX2NoYW5baWR4XS5zY2FsZV92YWwyIC0gMSkpOwo+ID4+Pj4gKwkJaWYgKCFhZGMtPnNk X2NoYW5baWR4XS5kaWZmZXJlbnRpYWwpCj4gPj4+PiArCQkJKnZhbCArPSBtYXg7Cj4gPj4+PiAr Cj4gPj4+PiArCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7Cj4gPj4+PiAgICAJfQo+ID4+Pj4gICAgCj4g Pj4+PiAgICAJcmV0dXJuIC1FSU5WQUw7Cj4gPj4+PiBAQCAtMTQzMCw3ICsxNDc3LDkgQEAgc3Rh dGljIGludCBzdG0zMl9kZnNkbV9hZGNfY2hhbl9pbml0X29uZShzdHJ1Y3QgaWlvX2RldiAqaW5k aW9fZGV2LAo+ID4+Pj4gICAgCSAqIElJT19DSEFOX0lORk9fUkFXOiB1c2VkIHRvIGNvbXB1dGUg cmVndWxhciBjb252ZXJzaW9uCj4gPj4+PiAgICAJICogSUlPX0NIQU5fSU5GT19PVkVSU0FNUExJ TkdfUkFUSU86IHVzZWQgdG8gc2V0IG92ZXJzYW1wbGluZwo+ID4+Pj4gICAgCSAqLwo+ID4+Pj4g LQljaC0+aW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKTsKPiA+Pj4+ ICsJY2gtPmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVykgfAo+ID4+ Pj4gKwkJCQkgQklUKElJT19DSEFOX0lORk9fU0NBTEUpIHwKPiA+Pj4+ICsJCQkJIEJJVChJSU9f Q0hBTl9JTkZPX09GRlNFVCk7Cj4gPj4+PiAgICAJY2gtPmluZm9fbWFza19zaGFyZWRfYnlfYWxs ID0gQklUKElJT19DSEFOX0lORk9fT1ZFUlNBTVBMSU5HX1JBVElPKSB8Cj4gPj4+PiAgICAJCQkJ CUJJVChJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUSk7Cj4gPj4+PiAgICAKPiA+Pj4+IEBAIC0xNDgx LDggKzE1MzAsMTAgQEAgc3RhdGljIGludCBzdG0zMl9kZnNkbV9hZGNfaW5pdChzdHJ1Y3QgaWlv X2RldiAqaW5kaW9fZGV2KQo+ID4+Pj4gICAgewo+ID4+Pj4gICAgCXN0cnVjdCBpaW9fY2hhbl9z cGVjICpjaDsKPiA+Pj4+ICAgIAlzdHJ1Y3Qgc3RtMzJfZGZzZG1fYWRjICphZGMgPSBpaW9fcHJp dihpbmRpb19kZXYpOwo+ID4+Pj4gKwlzdHJ1Y3QgaWlvX2NoYW5uZWwgKmNoYW5uZWxzLCAqY2hh bjsKPiA+Pj4+ICsJc3RydWN0IHN0bTMyX2Rmc2RtX3NkX2NoYW5faW5mbyAqc2RfY2hhbjsKPiA+ Pj4+ICAgIAlpbnQgbnVtX2NoOwo+ID4+Pj4gLQlpbnQgcmV0LCBjaGFuX2lkeDsKPiA+Pj4+ICsJ aW50IHJldCwgY2hhbl9pZHgsIHZhbDI7Cj4gPj4+PiAgICAKPiA+Pj4+ICAgIAlhZGMtPm92ZXJz YW1wID0gREZTRE1fREVGQVVMVF9PVkVSU0FNUExJTkc7Cj4gPj4+PiAgICAJcmV0ID0gc3RtMzJf ZGZzZG1fY29tcHV0ZV9hbGxfb3NycyhpbmRpb19kZXYsIGFkYy0+b3ZlcnNhbXApOwo+ID4+Pj4g QEAgLTE1MDYsNiArMTU1NywyMiBAQCBzdGF0aWMgaW50IHN0bTMyX2Rmc2RtX2FkY19pbml0KHN0 cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCj4gPj4+PiAgICAJaWYgKCFjaCkKPiA+Pj4+ICAgIAkJ cmV0dXJuIC1FTk9NRU07Cj4gPj4+PiAgICAKPiA+Pj4+ICsJLyogR2V0IFNEIG1vZHVsYXRvciBj aGFubmVscyAqLwo+ID4+Pj4gKwljaGFubmVscyA9IGlpb19jaGFubmVsX2dldF9hbGwoJmluZGlv X2Rldi0+ZGV2KTsKPiA+Pj4+ICsJaWYgKElTX0VSUihjaGFubmVscykpIHsKPiA+Pj4+ICsJCWRl dl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBjaGFubmVsICVsZFxuIiwKPiA+ Pj4+ICsJCQlQVFJfRVJSKGNoYW5uZWxzKSk7Cj4gPj4+PiArCQlyZXR1cm4gUFRSX0VSUihjaGFu bmVscyk7Cj4gPj4+PiArCX0KPiA+Pj4+ICsJY2hhbiA9ICZjaGFubmVsc1swXTsKPiA+Pj4+ICsK PiA+Pj4+ICsJYWRjLT5zZF9jaGFuID0gZGV2bV9remFsbG9jKCZpbmRpb19kZXYtPmRldiwKPiA+ Pj4+ICsJCQkJICAgIHNpemVvZigqYWRjLT5zZF9jaGFuKSAqIG51bV9jaCwgR0ZQX0tFUk5FTCk7 Cj4gPj4+PiArCWlmICghYWRjLT5zZF9jaGFuKQo+ID4+Pj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4g Pj4+PiArCj4gPj4+PiArCXNkX2NoYW4gPSBhZGMtPnNkX2NoYW47Cj4gPj4+PiArCj4gPj4+PiAg ICAJZm9yIChjaGFuX2lkeCA9IDA7IGNoYW5faWR4IDwgbnVtX2NoOyBjaGFuX2lkeCsrKSB7Cj4g Pj4+PiAgICAJCWNoW2NoYW5faWR4XS5zY2FuX2luZGV4ID0gY2hhbl9pZHg7Cj4gPj4+PiAgICAJ CXJldCA9IHN0bTMyX2Rmc2RtX2FkY19jaGFuX2luaXRfb25lKGluZGlvX2RldiwgJmNoW2NoYW5f aWR4XSk7Cj4gPj4+PiBAQCAtMTUxMyw2ICsxNTgwLDM4IEBAIHN0YXRpYyBpbnQgc3RtMzJfZGZz ZG1fYWRjX2luaXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKPiA+Pj4+ICAgIAkJCWRldl9l cnIoJmluZGlvX2Rldi0+ZGV2LCAiQ2hhbm5lbHMgaW5pdCBmYWlsZWRcbiIpOwo+ID4+Pj4gICAg CQkJcmV0dXJuIHJldDsKPiA+Pj4+ICAgIAkJfQo+ID4+Pj4gKwo+ID4+Pj4gKwkJaWYgKCFjaGFu LT5pbmRpb19kZXYpCj4gPj4+PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPj4+PiArCj4gPj4+PiAr CQlyZXQgPSBpaW9fcmVhZF9jaGFubmVsX3NjYWxlKGNoYW4sICZzZF9jaGFuLT5zY2FsZV92YWws Cj4gPj4+PiArCQkJCQkgICAgICZzZF9jaGFuLT5zY2FsZV92YWwyKTsKPiA+Pj4+ICsJCWlmIChy ZXQgPCAwKSB7Cj4gPj4+PiArCQkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsCj4gPj4+PiArCQkJ CSJGYWlsZWQgdG8gZ2V0IGNoYW5uZWwgJWQgc2NhbGVcbiIsIGNoYW5faWR4KTsKPiA+Pj4+ICsJ CQlyZXR1cm4gcmV0Owo+ID4+Pj4gKwkJfQo+ID4+Pj4gKwo+ID4+Pj4gKwkJaWYgKGlpb19jaGFu bmVsX2hhc19pbmZvKGNoYW4tPmNoYW5uZWwsIElJT19DSEFOX0lORk9fT0ZGU0VUKSkgewo+ID4+ Pj4gKwkJCXJldCA9IGlpb19yZWFkX2NoYW5uZWxfb2Zmc2V0KGNoYW4sICZzZF9jaGFuLT5vZmZz ZXQsCj4gPj4+PiArCQkJCQkJICAgICAgJnZhbDIpOwo+ID4+Pj4gKwkJCWlmIChyZXQgPCAwKSB7 Cj4gPj4+PiArCQkJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LAo+ID4+Pj4gKwkJCQkJIkZhaWxl ZCB0byBnZXQgY2hhbm5lbCAlZCBvZmZzZXRcbiIsCj4gPj4+PiArCQkJCQljaGFuX2lkeCk7Cj4g Pj4+PiArCQkJCXJldHVybiByZXQ7Cj4gPj4+PiArCQkJfQo+ID4+Pj4gKwkJfQo+ID4+Pj4gKwo+ ID4+Pj4gKwkJc2RfY2hhbi0+ZGlmZmVyZW50aWFsID0gY2hhbi0+Y2hhbm5lbC0+ZGlmZmVyZW50 aWFsOwo+ID4+Pj4gKwo+ID4+Pj4gKwkJZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICJDaGFubmVs ICVkICVzIHNjYWxlIHJlZj0lZCBvZmZzZXQ9JWQiLAo+ID4+Pj4gKwkJCWNoYW5faWR4LCBjaGFu LT5jaGFubmVsLT5kaWZmZXJlbnRpYWwgPwo+ID4+Pj4gKwkJCSJkaWZmZXJlbnRpYWwiIDogInNp bmdsZS1lbmRlZCIsCj4gPj4+PiArCQkJc2RfY2hhbi0+c2NhbGVfdmFsLCBzZF9jaGFuLT5vZmZz ZXQpOwo+ID4+Pj4gKwo+ID4+Pj4gKwkJY2hhbisrOwo+ID4+Pj4gKwkJc2RfY2hhbisrOwo+ID4+ Pj4gICAgCX0KPiA+Pj4+ICAgIAo+ID4+Pj4gICAgCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0g bnVtX2NoOyAgCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=