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=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 636AEC2BA83 for ; Fri, 14 Feb 2020 13:11:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 22F3A2086A for ; Fri, 14 Feb 2020 13:11:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581685880; bh=FHsHZRJpZHbKmcpb1fTmxc1K9yq4sJ5NuR3hevlbaW4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:List-ID:From; b=jC1CpJXdadvxiBUNZIp5OSdrHKV0+Y31kPJlVWcALJvlTrN6dW0okOz3mTaTbvski L1vlNSmNJ9+C4Lgr54UelVWJgeXqhB+I5DfJ6+yFUFQA1oCy1gcIEayppkfwlp9ELT yp3opMohoqiR65EVG+0P7Oe+9r7UTSHJKUqBwrZ4= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729239AbgBNNLT (ORCPT ); Fri, 14 Feb 2020 08:11:19 -0500 Received: from mail.kernel.org ([198.145.29.99]:45784 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728895AbgBNNLT (ORCPT ); Fri, 14 Feb 2020 08:11:19 -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 59065222C2; Fri, 14 Feb 2020 13:11:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581685878; bh=FHsHZRJpZHbKmcpb1fTmxc1K9yq4sJ5NuR3hevlbaW4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=ygQq8IAtKw3LAcHJLq59h8acwMxo2J7sJ7lCjry/BupYVvC81YvKaJqkyGWVEmVcI cH+QrE8Qy4Lwe3Huh9NrQDGHzNQ+n33qEbzwMhCVCgYzWRwM6r2ZoLGIOsgswONpde dDwpCmU2gyhlMdOQX7rhjOYdwxme/j5SlBDnbkmk= Date: Fri, 14 Feb 2020 13:11:13 +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: <20200214131113.70aa36b8@archlinux> In-Reply-To: <8400827e-5f3d-ad3f-99c8-986934b1a7b8@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> 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 Tue, 11 Feb 2020 15:19:01 +0000 Olivier MOYSAN wrote: > Hi Jonathan, >=20 > On 2/8/20 5:18 PM, Jonathan Cameron wrote: > > 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. >=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=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=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 + >=20 >=20 > Is it the topology your are expecting ? 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 raw =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 ^ ^ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=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 + >=20 > If not, I probably missedsomething. Could you please clarify this point ? >=20 > Regards > Olivier > > 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/stm32= -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_dev = *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_dev = *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(struct = 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_RATI= O) | > >> BIT(IIO_CHAN_INFO_SAMP_FREQ); > >> =20 > >> @@ -1481,8 +1530,10 @@ static int stm32_dfsdm_adc_init(struct iio_dev = *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_dev = *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_dev = *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 8C1C5C2BA83 for ; Fri, 14 Feb 2020 13:11:23 +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 57DC32086A for ; Fri, 14 Feb 2020 13:11:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="oSihxE06"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="ygQq8IAt" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 57DC32086A 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=vI+saLuOyxow+8xkmHiJbVLIZL3GFiVw2A1NvQbtbhE=; b=oSihxE06fPnE0U e1KLMoLUunwgQ8DPXgU0VGaN34OBnJUnZzw/MGPUJdkzcsdjyyo1dN9K9IaPJKBnCteBRi23VwGnx v7PBZYFk4EN7u1HbR7VnY8WHEwhIxrqWy/E12VvBV4jsWC9i9WzoG/bk8Z9M2e2qZZaNh2kydZlWL fVUR36g19nRSpMxd7sJfVGMdxPltzgaeijdTKbWJm0I24z/g64intc9ohjxZE3IhERsLfwninGO/B wJW1u6/6+0YwenUllGorJCAQN7libvLqpAm/fM1WvakX7XSFZG0XU2uJNNI51njKAbI4RmVHxwPXu w2TdN3KNrpXGLzn41IKg==; 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 1j2akc-0005uF-Rk; Fri, 14 Feb 2020 13:11:22 +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 1j2akY-0005t1-K7 for linux-arm-kernel@lists.infradead.org; Fri, 14 Feb 2020 13:11:20 +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 59065222C2; Fri, 14 Feb 2020 13:11:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581685878; bh=FHsHZRJpZHbKmcpb1fTmxc1K9yq4sJ5NuR3hevlbaW4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=ygQq8IAtKw3LAcHJLq59h8acwMxo2J7sJ7lCjry/BupYVvC81YvKaJqkyGWVEmVcI cH+QrE8Qy4Lwe3Huh9NrQDGHzNQ+n33qEbzwMhCVCgYzWRwM6r2ZoLGIOsgswONpde dDwpCmU2gyhlMdOQX7rhjOYdwxme/j5SlBDnbkmk= Date: Fri, 14 Feb 2020 13:11:13 +0000 From: Jonathan Cameron To: Olivier MOYSAN Subject: Re: [PATCH 4/4] iio: adc: stm32-dfsdm: add scale and offset support Message-ID: <20200214131113.70aa36b8@archlinux> In-Reply-To: <8400827e-5f3d-ad3f-99c8-986934b1a7b8@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> 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_051118_706048_F93F7524 X-CRM114-Status: GOOD ( 32.60 ) 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 T24gVHVlLCAxMSBGZWIgMjAyMCAxNToxOTowMSArMDAwMApPbGl2aWVyIE1PWVNBTiA8b2xpdmll ci5tb3lzYW5Ac3QuY29tPiB3cm90ZToKCj4gSGkgSm9uYXRoYW4sCj4gCj4gT24gMi84LzIwIDU6 MTggUE0sIEpvbmF0aGFuIENhbWVyb24gd3JvdGU6Cj4gPiBPbiBUdWUsIDQgRmViIDIwMjAgMTE6 MTA6MDggKzAxMDAKPiA+IE9saXZpZXIgTW95c2FuIDxvbGl2aWVyLm1veXNhbkBzdC5jb20+IHdy b3RlOgo+ID4gIAo+ID4+IEFkZCBzY2FsZSBhbmQgb2Zmc2V0IGF0dHJpYnV0ZXMgc3VwcG9ydCB0 byBTVE0zMiBERlNETS4KPiA+Pgo+ID4+IFNpZ25lZC1vZmYtYnk6IE9saXZpZXIgTW95c2FuIDxv bGl2aWVyLm1veXNhbkBzdC5jb20+ICAKPiA+IEhtbS4gSSBjYW4ndCByZW1lbWJlciB0aGlzIGhp c3Rvcnkgb2YgdGhpcyBidXQgd2UndmUga2luZCBvZgo+ID4gZW5kZWQgdXAgYmFja3dhcmRzIHdy dCB0byBvdGhlciBjb25zdW1lciBkcml2ZXJzLgo+ID4KPiA+IEluIHNvbWUgc2Vuc2UgdGhpcyBp cyBzaW1pbGFyIHRvIHRoZSBhbmFsb2cgZ3lyb3Njb3Blcy4gIEluIHRob3NlCj4gPiB0aGUgY29u c3VtZXIgZHJpdmVyIGlzIHRoZSBneXJvc2NvcGUgd2hpY2ggaXMgY29uc3VtaW5nIHRoZSByYXcK PiA+IHJlYWRpbmdzIGZyb20gYW4gQURDIGNvbm5lY3RlZCB0byB0aGUgY2hhbm5lbC4gIFRoaXMg cmVzdWx0cwo+ID4gaW4gdXMgZ2V0dGluZyByZWFkaW5ncyByZXBvcnRlZCBieSB0aGUgZ3lyb3Nj b3BlIGRyaXZlci4KPiA+Cj4gPiBIZXJlIHdlIGhhdmUgYSBzaWdtYSBkZWx0YSBjb252ZXJ0b3Ig Y29uc3VtaW5nIHRoZSBwdWxzZSB0cmFpbgo+ID4gZnJvbSBhIHNpZ21hIGRlbHRhIGRldmljZS4g IFNvIHRoZSBjaGFubmVscyBhcmUgcmVwb3J0ZWQgYnkKPiA+IHRoZSBzaWdtYSBkZWx0YSByZWNl aXZlciwgd2hlcmVhcyBpIHRoaW5rIHRoZSBuZWFyZXN0IGVxdWl2YWxlbnQKPiA+IHRvIHRoZSBh bmFsb2cgdm9sdGFnZSBvdXRwdXRpbmcgZ3lyb3Njb3BlcyB3b3VsZCBoYXZlIGJlZW4gaWYKPiA+ IHdlIGhhZCByZXBvcnRlZCB0aGUgY2hhbm5lbCB2YWx1ZXMgYXQgdGhlIHNpZ21hIGRlbHRhIGNv bnZlcnRlci4gIAo+IFRoZSBERlNETSBkcml2ZXIgaXMgY3VycmVudGx5IHVzZWQgYXMgYSBjb25z dW1lciBvZiB0aGUgc2QgbW9kdWxhdG9yLgo+IFRoZSBzY2FsZSBhbmQgb2Zmc2V0IHZhbHVlcyBv ZiB0aGUgY2hhbm5lbHMgYXJlIGFscmVhZHkgY29tcHV0ZWQgYnkKPiB0aGUgREZTRE0gZHJpdmVy LCBhbmQgcHJvdmlkZWQgYnkgdGhpcyBkcml2ZXIgdG8gdGhlIElJTyBBQkkuCj4gSG93ZXZlciwg dGhlIERGU0RNIGhhcyBubyB2b2x0YWdlIHJlZmVyZW5jZSwgc28gaXQgaGFzIHRvIHJldHJpZXZl Cj4gaXQgZnJvbSBzZC1tb2R1bGF0b3IgY2hhbm5lbHMsIGZvciB0aGUgc2NhbGUgZmFjdG9yIGNv bXB1dGF0aW9uLgo+IAo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNjYWxlwqAgb2Zmc2V0Cj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIF7CoMKgwqDCoMKgIF4KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKgwqAg fMKgwqDCoMKgwqDCoCBJSU8gQUJJCj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gIMKgwqDCoMKgwqDCoMKgwqAgKy0tLS0t LS0tLS0tLS0tLSvCoMKgwqDCoMKgwqDCoMKgwqAgKy0tLS0tLS0tLS0tLS0rCj4gIMKgwqDCoMKg wqDCoMKgwqAgfHNkIGRyaXZlcsKgwqDCoMKgwqAgfMKgwqDCoMKgwqDCoMKgwqDCoCB8REZTRE0g ZHJpdmVyIHwKPiAgwqDCoMKgwqDCoMKgwqDCoCArLS0tLS0tLS0tLS0tLS0tK8KgwqDCoMKgwqDC oMKgwqDCoCArLS0tLS0tLS0tLS0tLSsKPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBIVwo+ICDCoMKgwqDCoMKgwqDCoMKg ICstLS0tLS0tLS0tLS0tLS0rwqDCoMKgwqDCoMKgwqDCoMKgICstLS0tLS0tLS0tLS0tKwo+ICst LS0tLS0tPisgc2QtbW9kdWxhdG9ywqAgKy0tLS0tLS0tLT4rIERGU0RNICstLS0tLS0tLT4KPiBh bmFsb2fCoMKgICstLS0tLS0rLS0tLS0tLS0rwqDCoMKgwqDCoMKgwqDCoMKgICstLS0tLS0tLS0t LS0tKyBvdXRwdXQKPiBpbnB1dMKgwqDCoMKgwqDCoMKgwqDCoMKgIF4KPiAgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHwgdnJlZgo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKwo+IAo+IAo+IElzIGl0IHRoZSB0b3BvbG9neSB5b3VyIGFyZSBleHBlY3RpbmcgPwoKSXQn cyBub3QgdGhlIG9uZSB3ZSdkIGV4cGVjdCBpZiB3ZSBhcmUgYWxpZ25pbmcgd2l0aCBzaW1pbGFy IGNhc2VzCmVsc2V3aGVyZSBpbiBJSU8uICBGb3IgZXhhbXBsZSwgaWYgd2UgYXR0YWNoIGFuIGFu YWxvZyBhY2NlbGVyb21ldGVyCnRvIGFuIEFEQywgd2UgcmVwb3J0IHRoZSBhY2NlbCBjaGFubmVs cyBvbiB0aGUgYWNjZWxlcm9tZXRlciBub3QgdGhlCkFEQy4gIFRoZSBlcXVpdmFsZW50IHdvdWxk IGJlIHRvIHNlZSB0aGUgREZTRE0gYXMgcHJvdmlkaW5nIGEKY29udmVyc2lvbiBzZXJ2aWNlIHRv IHRoZSBTRCBkZXZpY2Ugd2hpY2ggaXMgYWN0dWFsbHkgZXhlY3V0aW5nCnRoZSBtZWFzdXJlbWVu dCBhbmQgaGFzIHRoZSBpbnB1dCBjaGFubmVscy4KCgrCoMKgwqDCoMKgwqDCoMKgIHNjYWxlwqAg b2Zmc2V0ICByYXcKwqDCoMKgwqDCoMKgwqDCoMKgwqAgXsKgwqDCoMKgwqAgXiAgICAgIF4KwqDC oMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKgwqAgfMKgwqDCoMKgICB8ICDCoMKgICAgICAgICAg ICAgICAgICAgICAgICAgICBJSU8gQUJJCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICDCoMKgwqDCoMKgwqDCoMKgICstLS0t LS0tLS0tLS0tLS0rwqDCoMKgwqDCoMKgwqDCoMKgICstLS0tLS0tLS0tLS0tKwogIMKgwqDCoMKg wqDCoMKgwqAgfHNkIGRyaXZlcsKgwqDCoMKgwqAgfMKgwqDCoMKgwqDCoMKgwqDCoCB8REZTRE0g ZHJpdmVyIHwKICDCoMKgwqDCoMKgwqDCoMKgICstLS0tLS0tLS0tLS0tLS0rwqDCoMKgwqDCoMKg wqDCoMKgICstLS0tLS0tLS0tLS0tKwogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBIVwogIMKgwqDCoMKgwqDCoMKgwqAgKy0t LS0tLS0tLS0tLS0tLSvCoMKgwqDCoMKgwqDCoMKgwqAgKy0tLS0tLS0tLS0tLS0rCiArLS0tLS0t LT4rIHNkLW1vZHVsYXRvcsKgICstLS0tLS0tLS0+KyBERlNETSArLS0tLS0tLS0+CiBhbmFsb2fC oMKgICstLS0tLS0rLS0tLS0tLS0rwqDCoMKgwqDCoMKgwqDCoMKgICstLS0tLS0tLS0tLS0tKyBv dXRwdXQKIGlucHV0wqDCoMKgwqDCoMKgwqDCoMKgwqAgXgogIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB8IHZyZWYKPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICsKPiAK Cj4gSWYgbm90LCBJIHByb2JhYmx5IG1pc3NlZHNvbWV0aGluZy4gQ291bGQgeW91IHBsZWFzZSBj bGFyaWZ5IHRoaXMgcG9pbnQgPwo+IAo+IFJlZ2FyZHMKPiBPbGl2aWVyCj4gPiBUaGlzIHdhc24n dCByZWFsbHkgYW4gaXNzdWUgd2hlbiB0aGUgb25seSB2YWx1ZXMgYXZhaWxhYmxlIHdlcmUKPiA+ IHJhdywgYnV0IGlmIHdlIGFyZSBhZGRpbmcgc2NhbGUgYW5kIG9mZnNldCwgdGhleSBhcmUgdGhp bmdzIHRoYXQKPiA+IGJlbG9uZyB0byB0aGUgYWQxMjAxIGZvciBleGFtcGxlLCBub3QgdGhlIHVw c3RyZWFtIHN0bTMyLWRmc2RtIHVuaXQuCj4gPgo+ID4gVGhpbmtpbmcgb2YgaXQgYW5vdGhlciB3 YXksIHdlIGRvbid0IHJlcG9ydCBhbiBTUEkgQURDIG91dHB1dCBpbgo+ID4gdGhlIGRyaXZlciBm b3IgdGhlIFNQSSBtYXN0ZXIuCj4gPgo+ID4gQ291bGQgd2UgZmxpcCBpdCBhcm91bmQgd2l0aG91 dCBicmVha2luZyBhbnl0aGluZz8KPiA+Cj4gPiBKb25hdGhhbgo+ID4gIAo+ID4+IC0tLQo+ID4+ ICAgZHJpdmVycy9paW8vYWRjL3N0bTMyLWRmc2RtLWFkYy5jIHwgMTA1ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrLQo+ID4+ICAgMSBmaWxlIGNoYW5nZWQsIDEwMiBpbnNlcnRpb25zKCsp LCAzIGRlbGV0aW9ucygtKQo+ID4+Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FkYy9z dG0zMi1kZnNkbS1hZGMuYyBiL2RyaXZlcnMvaWlvL2FkYy9zdG0zMi1kZnNkbS1hZGMuYwo+ID4+ IGluZGV4IDA3YjlkZmRmOGU3Ni4uYjg1ZmQzZTkwNDk2IDEwMDY0NAo+ID4+IC0tLSBhL2RyaXZl cnMvaWlvL2FkYy9zdG0zMi1kZnNkbS1hZGMuYwo+ID4+ICsrKyBiL2RyaXZlcnMvaWlvL2FkYy9z dG0zMi1kZnNkbS1hZGMuYwo+ID4+IEBAIC0xMCw2ICsxMCw3IEBACj4gPj4gICAjaW5jbHVkZSA8 bGludXgvZG1hLW1hcHBpbmcuaD4KPiA+PiAgICNpbmNsdWRlIDxsaW51eC9paW8vYWRjL3N0bTMy LWRmc2RtLWFkYy5oPgo+ID4+ICAgI2luY2x1ZGUgPGxpbnV4L2lpby9idWZmZXIuaD4KPiA+PiAr I2luY2x1ZGUgPGxpbnV4L2lpby9jb25zdW1lci5oPgo+ID4+ICAgI2luY2x1ZGUgPGxpbnV4L2lp by9ody1jb25zdW1lci5oPgo+ID4+ICAgI2luY2x1ZGUgPGxpbnV4L2lpby9zeXNmcy5oPgo+ID4+ ICAgI2luY2x1ZGUgPGxpbnV4L2lpby90aW1lci9zdG0zMi1scHRpbS10cmlnZ2VyLmg+Cj4gPj4g QEAgLTY3LDYgKzY4LDEzIEBAIHN0cnVjdCBzdG0zMl9kZnNkbV9kZXZfZGF0YSB7Cj4gPj4gICAJ Y29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKnJlZ21hcF9jZmc7Cj4gPj4gICB9Owo+ID4+ICAg Cj4gPj4gK3N0cnVjdCBzdG0zMl9kZnNkbV9zZF9jaGFuX2luZm8gewo+ID4+ICsJaW50IHNjYWxl X3ZhbDsKPiA+PiArCWludCBzY2FsZV92YWwyOwo+ID4+ICsJaW50IG9mZnNldDsKPiA+PiArCXVu c2lnbmVkIGludCBkaWZmZXJlbnRpYWw7Cj4gPj4gK307Cj4gPj4gKwo+ID4+ICAgc3RydWN0IHN0 bTMyX2Rmc2RtX2FkYyB7Cj4gPj4gICAJc3RydWN0IHN0bTMyX2Rmc2RtICpkZnNkbTsKPiA+PiAg IAljb25zdCBzdHJ1Y3Qgc3RtMzJfZGZzZG1fZGV2X2RhdGEgKmRldl9kYXRhOwo+ID4+IEBAIC03 OSw2ICs4Nyw3IEBAIHN0cnVjdCBzdG0zMl9kZnNkbV9hZGMgewo+ID4+ICAgCXN0cnVjdCBpaW9f aHdfY29uc3VtZXIgKmh3YzsKPiA+PiAgIAlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uOwo+ ID4+ICAgCXUzMiAqYnVmZmVyOwo+ID4+ICsJc3RydWN0IHN0bTMyX2Rmc2RtX3NkX2NoYW5faW5m byAqc2RfY2hhbjsKPiA+PiAgIAo+ID4+ICAgCS8qIEF1ZGlvIHNwZWNpZmljICovCj4gPj4gICAJ dW5zaWduZWQgaW50IHNwaV9mcmVxOyAgLyogU1BJIGJ1cyBjbG9jayBmcmVxdWVuY3kgKi8KPiA+ PiBAQCAtMTI3MSw3ICsxMjgwLDEwIEBAIHN0YXRpYyBpbnQgc3RtMzJfZGZzZG1fcmVhZF9yYXco c3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKPiA+PiAgIAkJCQlpbnQgKnZhbDIsIGxvbmcgbWFz aykKPiA+PiAgIHsKPiA+PiAgIAlzdHJ1Y3Qgc3RtMzJfZGZzZG1fYWRjICphZGMgPSBpaW9fcHJp dihpbmRpb19kZXYpOwo+ID4+IC0JaW50IHJldDsKPiA+PiArCXN0cnVjdCBzdG0zMl9kZnNkbV9m aWx0ZXIgKmZsID0gJmFkYy0+ZGZzZG0tPmZsX2xpc3RbYWRjLT5mbF9pZF07Cj4gPj4gKwlzdHJ1 Y3Qgc3RtMzJfZGZzZG1fZmlsdGVyX29zciAqZmxvID0gJmZsLT5mbG9bZmwtPmZhc3RdOwo+ID4+ ICsJdTMyIG1heCA9IGZsby0+bWF4IDw8IChmbG8tPmxzaGlmdCAtIGNoYW4tPnNjYW5fdHlwZS5z aGlmdCk7Cj4gPj4gKwlpbnQgcmV0LCBpZHggPSBjaGFuLT5zY2FuX2luZGV4Owo+ID4+ICAgCj4g Pj4gICAJc3dpdGNoIChtYXNrKSB7Cj4gPj4gICAJY2FzZSBJSU9fQ0hBTl9JTkZPX1JBVzoKPiA+ PiBAQCAtMTMwNyw2ICsxMzE5LDQxIEBAIHN0YXRpYyBpbnQgc3RtMzJfZGZzZG1fcmVhZF9yYXco c3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKPiA+PiAgIAkJKnZhbCA9IGFkYy0+c2FtcGxlX2Zy ZXE7Cj4gPj4gICAKPiA+PiAgIAkJcmV0dXJuIElJT19WQUxfSU5UOwo+ID4+ICsKPiA+PiArCWNh c2UgSUlPX0NIQU5fSU5GT19TQ0FMRToKPiA+PiArCQkvKgo+ID4+ICsJCSAqIFNjYWxlIGlzIGV4 cHJlc3NlZCBpbiBtVi4KPiA+PiArCQkgKiBXaGVuIGZhc3QgbW9kZSBpcyBkaXNhYmxlZCwgYWN0 dWFsIHJlc29sdXRpb24gbWF5IGJlIGxvd2VyCj4gPj4gKwkJICogdGhhbiAyXm4sIHdoZXJlIG49 cmVhbGJpdHMtMS4KPiA+PiArCQkgKiBUaGlzIGxlYWRzIHRvIHVuZGVyZXN0aW1hdGluZyBpbnB1 dCB2b2x0YWdlLiBUbwo+ID4+ICsJCSAqIGNvbXBlbnNhdGUgdGhpcyBkZXZpYXRpb24sIHRoZSB2 b2x0YWdlIHJlZmVyZW5jZSBjYW4gYmUKPiA+PiArCQkgKiBjb3JyZWN0ZWQgd2l0aCBhIGZhY3Rv ciA9IHJlYWxiaXRzIHJlc29sdXRpb24gLyBhY3R1YWwgbWF4Cj4gPj4gKwkJICovCj4gPj4gKwkJ KnZhbCA9IGRpdl91NjQoKHU2NClhZGMtPnNkX2NoYW5baWR4XS5zY2FsZV92YWwgKgo+ID4+ICsJ CQkgICAgICAgKHU2NClCSVQoREZTRE1fREFUQV9SRVMgLSAxKSwgbWF4KTsKPiA+PiArCQkqdmFs MiA9IGNoYW4tPnNjYW5fdHlwZS5yZWFsYml0czsKPiA+PiArCQlpZiAoYWRjLT5zZF9jaGFuW2lk eF0uZGlmZmVyZW50aWFsKQo+ID4+ICsJCQkqdmFsICo9IDI7Cj4gPj4gKwo+ID4+ICsJCXJldHVy biBJSU9fVkFMX0ZSQUNUSU9OQUxfTE9HMjsKPiA+PiArCj4gPj4gKwljYXNlIElJT19DSEFOX0lO Rk9fT0ZGU0VUOgo+ID4+ICsJCS8qCj4gPj4gKwkJICogREZTRE0gb3V0cHV0IGRhdGEgYXJlIGlu IHRoZSByYW5nZSBbLTJebiwyXm4tMV0sCj4gPj4gKwkJICogd2l0aCBuPXJlYWxiaXRzLTEuCj4g Pj4gKwkJICogLSBEaWZmZXJlbnRpYWwgbW9kdWxhdG9yOgo+ID4+ICsJCSAqIE9mZnNldCBjb3Jy ZXNwb25kIHRvIFNEIG1vZHVsYXRvciBvZmZzZXQuCj4gPj4gKwkJICogLSBTaW5nbGUgZW5kZWQg bW9kdWxhdG9yOgo+ID4+ICsJCSAqIElucHV0IGlzIGluIFswVixWcmVmXSByYW5nZSwgd2hlcmUg MFYgY29ycmVzcG9uZHMgdG8gLTJebi4KPiA+PiArCQkgKiBBZGQgMl5uIHRvIG9mZnNldC4gKGku ZS4gbWlkZGxlIG9mIGlucHV0IHJhbmdlKQo+ID4+ICsJCSAqIG9mZnNldCA9IG9mZnNldChzZCkg KiB2cmVmIC8gcmVzKHNkKSAqIG1heCAvIHZyZWYuCj4gPj4gKwkJICovCj4gPj4gKwkJKnZhbCA9 IGRpdl91NjQoKHU2NCltYXggKiBhZGMtPnNkX2NoYW5baWR4XS5vZmZzZXQsCj4gPj4gKwkJCSAg ICAgICBCSVQoYWRjLT5zZF9jaGFuW2lkeF0uc2NhbGVfdmFsMiAtIDEpKTsKPiA+PiArCQlpZiAo IWFkYy0+c2RfY2hhbltpZHhdLmRpZmZlcmVudGlhbCkKPiA+PiArCQkJKnZhbCArPSBtYXg7Cj4g Pj4gKwo+ID4+ICsJCXJldHVybiBJSU9fVkFMX0lOVDsKPiA+PiAgIAl9Cj4gPj4gICAKPiA+PiAg IAlyZXR1cm4gLUVJTlZBTDsKPiA+PiBAQCAtMTQzMCw3ICsxNDc3LDkgQEAgc3RhdGljIGludCBz dG0zMl9kZnNkbV9hZGNfY2hhbl9pbml0X29uZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAo+ ID4+ICAgCSAqIElJT19DSEFOX0lORk9fUkFXOiB1c2VkIHRvIGNvbXB1dGUgcmVndWxhciBjb252 ZXJzaW9uCj4gPj4gICAJICogSUlPX0NIQU5fSU5GT19PVkVSU0FNUExJTkdfUkFUSU86IHVzZWQg dG8gc2V0IG92ZXJzYW1wbGluZwo+ID4+ICAgCSAqLwo+ID4+IC0JY2gtPmluZm9fbWFza19zZXBh cmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyk7Cj4gPj4gKwljaC0+aW5mb19tYXNrX3NlcGFy YXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSB8Cj4gPj4gKwkJCQkgQklUKElJT19DSEFOX0lO Rk9fU0NBTEUpIHwKPiA+PiArCQkJCSBCSVQoSUlPX0NIQU5fSU5GT19PRkZTRVQpOwo+ID4+ICAg CWNoLT5pbmZvX21hc2tfc2hhcmVkX2J5X2FsbCA9IEJJVChJSU9fQ0hBTl9JTkZPX09WRVJTQU1Q TElOR19SQVRJTykgfAo+ID4+ICAgCQkJCQlCSVQoSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVEpOwo+ ID4+ICAgCj4gPj4gQEAgLTE0ODEsOCArMTUzMCwxMCBAQCBzdGF0aWMgaW50IHN0bTMyX2Rmc2Rt X2FkY19pbml0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCj4gPj4gICB7Cj4gPj4gICAJc3Ry dWN0IGlpb19jaGFuX3NwZWMgKmNoOwo+ID4+ICAgCXN0cnVjdCBzdG0zMl9kZnNkbV9hZGMgKmFk YyA9IGlpb19wcml2KGluZGlvX2Rldik7Cj4gPj4gKwlzdHJ1Y3QgaWlvX2NoYW5uZWwgKmNoYW5u ZWxzLCAqY2hhbjsKPiA+PiArCXN0cnVjdCBzdG0zMl9kZnNkbV9zZF9jaGFuX2luZm8gKnNkX2No YW47Cj4gPj4gICAJaW50IG51bV9jaDsKPiA+PiAtCWludCByZXQsIGNoYW5faWR4Owo+ID4+ICsJ aW50IHJldCwgY2hhbl9pZHgsIHZhbDI7Cj4gPj4gICAKPiA+PiAgIAlhZGMtPm92ZXJzYW1wID0g REZTRE1fREVGQVVMVF9PVkVSU0FNUExJTkc7Cj4gPj4gICAJcmV0ID0gc3RtMzJfZGZzZG1fY29t cHV0ZV9hbGxfb3NycyhpbmRpb19kZXYsIGFkYy0+b3ZlcnNhbXApOwo+ID4+IEBAIC0xNTA2LDYg KzE1NTcsMjIgQEAgc3RhdGljIGludCBzdG0zMl9kZnNkbV9hZGNfaW5pdChzdHJ1Y3QgaWlvX2Rl diAqaW5kaW9fZGV2KQo+ID4+ICAgCWlmICghY2gpCj4gPj4gICAJCXJldHVybiAtRU5PTUVNOwo+ ID4+ICAgCj4gPj4gKwkvKiBHZXQgU0QgbW9kdWxhdG9yIGNoYW5uZWxzICovCj4gPj4gKwljaGFu bmVscyA9IGlpb19jaGFubmVsX2dldF9hbGwoJmluZGlvX2Rldi0+ZGV2KTsKPiA+PiArCWlmIChJ U19FUlIoY2hhbm5lbHMpKSB7Cj4gPj4gKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJGYWls ZWQgdG8gZ2V0IGNoYW5uZWwgJWxkXG4iLAo+ID4+ICsJCQlQVFJfRVJSKGNoYW5uZWxzKSk7Cj4g Pj4gKwkJcmV0dXJuIFBUUl9FUlIoY2hhbm5lbHMpOwo+ID4+ICsJfQo+ID4+ICsJY2hhbiA9ICZj aGFubmVsc1swXTsKPiA+PiArCj4gPj4gKwlhZGMtPnNkX2NoYW4gPSBkZXZtX2t6YWxsb2MoJmlu ZGlvX2Rldi0+ZGV2LAo+ID4+ICsJCQkJICAgIHNpemVvZigqYWRjLT5zZF9jaGFuKSAqIG51bV9j aCwgR0ZQX0tFUk5FTCk7Cj4gPj4gKwlpZiAoIWFkYy0+c2RfY2hhbikKPiA+PiArCQlyZXR1cm4g LUVOT01FTTsKPiA+PiArCj4gPj4gKwlzZF9jaGFuID0gYWRjLT5zZF9jaGFuOwo+ID4+ICsKPiA+ PiAgIAlmb3IgKGNoYW5faWR4ID0gMDsgY2hhbl9pZHggPCBudW1fY2g7IGNoYW5faWR4KyspIHsK PiA+PiAgIAkJY2hbY2hhbl9pZHhdLnNjYW5faW5kZXggPSBjaGFuX2lkeDsKPiA+PiAgIAkJcmV0 ID0gc3RtMzJfZGZzZG1fYWRjX2NoYW5faW5pdF9vbmUoaW5kaW9fZGV2LCAmY2hbY2hhbl9pZHhd KTsKPiA+PiBAQCAtMTUxMyw2ICsxNTgwLDM4IEBAIHN0YXRpYyBpbnQgc3RtMzJfZGZzZG1fYWRj X2luaXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKPiA+PiAgIAkJCWRldl9lcnIoJmluZGlv X2Rldi0+ZGV2LCAiQ2hhbm5lbHMgaW5pdCBmYWlsZWRcbiIpOwo+ID4+ICAgCQkJcmV0dXJuIHJl dDsKPiA+PiAgIAkJfQo+ID4+ICsKPiA+PiArCQlpZiAoIWNoYW4tPmluZGlvX2RldikKPiA+PiAr CQkJcmV0dXJuIC1FSU5WQUw7Cj4gPj4gKwo+ID4+ICsJCXJldCA9IGlpb19yZWFkX2NoYW5uZWxf c2NhbGUoY2hhbiwgJnNkX2NoYW4tPnNjYWxlX3ZhbCwKPiA+PiArCQkJCQkgICAgICZzZF9jaGFu LT5zY2FsZV92YWwyKTsKPiA+PiArCQlpZiAocmV0IDwgMCkgewo+ID4+ICsJCQlkZXZfZXJyKCZp bmRpb19kZXYtPmRldiwKPiA+PiArCQkJCSJGYWlsZWQgdG8gZ2V0IGNoYW5uZWwgJWQgc2NhbGVc biIsIGNoYW5faWR4KTsKPiA+PiArCQkJcmV0dXJuIHJldDsKPiA+PiArCQl9Cj4gPj4gKwo+ID4+ ICsJCWlmIChpaW9fY2hhbm5lbF9oYXNfaW5mbyhjaGFuLT5jaGFubmVsLCBJSU9fQ0hBTl9JTkZP X09GRlNFVCkpIHsKPiA+PiArCQkJcmV0ID0gaWlvX3JlYWRfY2hhbm5lbF9vZmZzZXQoY2hhbiwg JnNkX2NoYW4tPm9mZnNldCwKPiA+PiArCQkJCQkJICAgICAgJnZhbDIpOwo+ID4+ICsJCQlpZiAo cmV0IDwgMCkgewo+ID4+ICsJCQkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsCj4gPj4gKwkJCQkJ IkZhaWxlZCB0byBnZXQgY2hhbm5lbCAlZCBvZmZzZXRcbiIsCj4gPj4gKwkJCQkJY2hhbl9pZHgp Owo+ID4+ICsJCQkJcmV0dXJuIHJldDsKPiA+PiArCQkJfQo+ID4+ICsJCX0KPiA+PiArCj4gPj4g KwkJc2RfY2hhbi0+ZGlmZmVyZW50aWFsID0gY2hhbi0+Y2hhbm5lbC0+ZGlmZmVyZW50aWFsOwo+ ID4+ICsKPiA+PiArCQlkZXZfZGJnKCZpbmRpb19kZXYtPmRldiwgIkNoYW5uZWwgJWQgJXMgc2Nh bGUgcmVmPSVkIG9mZnNldD0lZCIsCj4gPj4gKwkJCWNoYW5faWR4LCBjaGFuLT5jaGFubmVsLT5k aWZmZXJlbnRpYWwgPwo+ID4+ICsJCQkiZGlmZmVyZW50aWFsIiA6ICJzaW5nbGUtZW5kZWQiLAo+ ID4+ICsJCQlzZF9jaGFuLT5zY2FsZV92YWwsIHNkX2NoYW4tPm9mZnNldCk7Cj4gPj4gKwo+ID4+ ICsJCWNoYW4rKzsKPiA+PiArCQlzZF9jaGFuKys7Cj4gPj4gICAJfQo+ID4+ICAgCj4gPj4gICAJ aW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBudW1fY2g7ICAKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==