Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp4490097ybg; Mon, 21 Oct 2019 09:46:25 -0700 (PDT) X-Google-Smtp-Source: APXvYqxFUBT41hPvXgfxBPQjxOvkYlBTS64h3X01PQbYYuBpk+L1+uk18PiurRzq4YZWsAnpWBya X-Received: by 2002:a05:6402:13d6:: with SMTP id a22mr26218576edx.165.1571676385024; Mon, 21 Oct 2019 09:46:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571676385; cv=none; d=google.com; s=arc-20160816; b=qltlBYtsyXvI+T22i3NakATaOGGGacuad0sb8FORs5rijhn83puD0yrNKpW0gpuBBw Yl48DTDGtbNUB6O6yPCULoaoFSvZnrKWkOuH0rcEJeu4iQURW/sV5Jnusrs9Lz22EyxY QJKJ6X1IpBWpEmhQurq7BD+c2JSxQYa8rVQBo3FovMBHH9iEGP/Vx00/diCfQuSKWhiW eKg1ghg1yYXFxJp54nzuwfSA4lkilsAPr/g112P/zlVc3eZeEk/VoOaWLqyekzvAzP2Y nu3RL5P9vVRiGE+BSXrwwrIcTZbj+h9ktDNVj+Zagc/j9hY4SxpVDRMd2IZQVxxjmWFb TmOg== 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 :dkim-signature; bh=Dza6qsyLhHie1rQFTXpb23IelgcRN1/k3snZShFfp7c=; b=Mapbm90Q24U3vo9bzhDD+bdK26pUrf1vOHUql0c1WKKfB8y3Es6eNs2ImbKye9eKme CKjFNtrtukFUxk8NycZUMF0SMBAGcWXzr6fN3tjnMjaiUe4ExVq9fk+UsIxqZ+yrRFGa iUYn9+VaUeMjJIxVLRJii8lnZFXosIhGQHYEJXn0jgn2fWsIutBFQfEm/9bGExo6Fwd8 JTkd/rJuNgVoDTPbPqDRUxWpn1UVi/vGjVrK+sjyF0kdLoKztuIQEdMW+vIJcAzi0g4X lux5jeU/zKJyoh+mrnkpjTAZ/FDzQBVh6YIu97yOgGp5seEYpqAzi2sn3UHaxvkm4KPD MaNA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=RNtWxjaq; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r26si11983007edx.61.2019.10.21.09.46.02; Mon, 21 Oct 2019 09:46:25 -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; dkim=pass header.i=@kernel.org header.s=default header.b=RNtWxjaq; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728490AbfJUQpP (ORCPT + 99 others); Mon, 21 Oct 2019 12:45:15 -0400 Received: from mail.kernel.org ([198.145.29.99]:45786 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726847AbfJUQpO (ORCPT ); Mon, 21 Oct 2019 12:45:14 -0400 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 EB54820882; Mon, 21 Oct 2019 16:45:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1571676313; bh=QpBb8tPVc2TG+6Byr+wrOln8lhBuf1DFpqNHng8GEy4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=RNtWxjaqYST8aS+SWhAft9y+3l/7i4iUaWgI5bBDz2G8OynNjeKrFCKu7vRvydFTz UFJ/4Q1iCFNUkTsB60BhXYLF+v/0wrOXwDBI+L0Ei35Xx/v7aNKjKtWP5mfN9ym4c4 SOQK/SrvQN0bCyNVrAc9Anu8VX0CtRSODfMzu4eg= Date: Mon, 21 Oct 2019 17:45:07 +0100 From: Jonathan Cameron To: Gwendal Grignou Cc: briannorris@chromium.org, knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net, lee.jones@linaro.org, bleung@chromium.org, enric.balletbo@collabora.com, dianders@chromium.org, groeck@chromium.org, fabien.lahoudere@collabora.com, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org Subject: Re: [PATCH v2 18/18] iio: cros_ec: Use Hertz as unit for sampling frequency Message-ID: <20191021174507.72f2b777@archlinux> In-Reply-To: <20191021055403.67849-19-gwendal@chromium.org> References: <20191021055403.67849-1-gwendal@chromium.org> <20191021055403.67849-19-gwendal@chromium.org> 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=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 Sun, 20 Oct 2019 22:54:03 -0700 Gwendal Grignou wrote: > To be compliant with other sensors, set and get sensor sampling > frequency in Hz, not mHz. > > Fixes: ae7b02ad2f32 ("iio: common: cros_ec_sensors: Expose > cros_ec_sensors frequency range via iio sysfs") > > Signed-off-by: Gwendal Grignou Do we need to look at back porting this? Acked-by: Jonathan Cameron Not sure which path this set will take in, hence I've given acks for various patches incase it's not via me. Whole set is in general good to have, but I do worry a bit about people noticing ABI breakage. *crosses fingers* Jonathan > --- > No changes in v2. > > .../cros_ec_sensors/cros_ec_sensors_core.c | 32 +++++++++++-------- > .../linux/iio/common/cros_ec_sensors_core.h | 6 ++-- > 2 files changed, 22 insertions(+), 16 deletions(-) > > diff --git a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c > index f50e239f9a1e9..76dc8cad1b4b5 100644 > --- a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c > +++ b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c > @@ -256,6 +256,7 @@ int cros_ec_sensors_core_init(struct platform_device *pdev, > struct cros_ec_dev *ec = sensor_hub->ec; > struct cros_ec_sensor_platform *sensor_platform = dev_get_platdata(dev); > u32 ver_mask; > + int frequencies[ARRAY_SIZE(state->frequencies) / 2] = { 0 }; > int ret, i; > > platform_set_drvdata(pdev, indio_dev); > @@ -304,20 +305,22 @@ int cros_ec_sensors_core_init(struct platform_device *pdev, > state->calib[i].scale = MOTION_SENSE_DEFAULT_SCALE; > > /* 0 is a correct value used to stop the device */ > - state->frequencies[0] = 0; > if (state->msg->version < 3) { > get_default_min_max_freq(state->resp->info.type, > - &state->frequencies[1], > - &state->frequencies[2], > + &frequencies[1], > + &frequencies[2], > &state->fifo_max_event_count); > } else { > - state->frequencies[1] = > - state->resp->info_3.min_frequency; > - state->frequencies[2] = > - state->resp->info_3.max_frequency; > + frequencies[1] = state->resp->info_3.min_frequency; > + frequencies[2] = state->resp->info_3.max_frequency; > state->fifo_max_event_count = > state->resp->info_3.fifo_max_event_count; > } > + for (i = 0; i < ARRAY_SIZE(frequencies); i++) { > + state->frequencies[2 * i] = frequencies[i] / 1000; > + state->frequencies[2 * i + 1] = > + (frequencies[i] % 1000) * 1000; > + } > > ret = devm_iio_triggered_buffer_setup( > dev, indio_dev, NULL, > @@ -707,7 +710,7 @@ int cros_ec_sensors_core_read(struct cros_ec_sensors_core_state *st, > struct iio_chan_spec const *chan, > int *val, int *val2, long mask) > { > - int ret; > + int ret, frequency; > > switch (mask) { > case IIO_CHAN_INFO_SAMP_FREQ: > @@ -719,8 +722,10 @@ int cros_ec_sensors_core_read(struct cros_ec_sensors_core_state *st, > if (ret) > break; > > - *val = st->resp->sensor_odr.ret; > - ret = IIO_VAL_INT; > + frequency = st->resp->sensor_odr.ret; > + *val = frequency / 1000; > + *val2 = (frequency % 1000) * 1000; > + ret = IIO_VAL_INT_PLUS_MICRO; > break; > default: > ret = -EINVAL; > @@ -755,7 +760,7 @@ int cros_ec_sensors_core_read_avail(struct iio_dev *indio_dev, > case IIO_CHAN_INFO_SAMP_FREQ: > *length = ARRAY_SIZE(state->frequencies); > *vals = (const int *)&state->frequencies; > - *type = IIO_VAL_INT; > + *type = IIO_VAL_INT_PLUS_MICRO; > return IIO_AVAIL_LIST; > } > > @@ -777,12 +782,13 @@ int cros_ec_sensors_core_write(struct cros_ec_sensors_core_state *st, > struct iio_chan_spec const *chan, > int val, int val2, long mask) > { > - int ret; > + int ret, frequency; > > switch (mask) { > case IIO_CHAN_INFO_SAMP_FREQ: > + frequency = val * 1000 + val2 / 1000; > st->param.cmd = MOTIONSENSE_CMD_SENSOR_ODR; > - st->param.sensor_odr.data = val; > + st->param.sensor_odr.data = frequency; > > /* Always roundup, so caller gets at least what it asks for. */ > st->param.sensor_odr.roundup = 1; > diff --git a/include/linux/iio/common/cros_ec_sensors_core.h b/include/linux/iio/common/cros_ec_sensors_core.h > index 4df3abd151fbf..256447b136296 100644 > --- a/include/linux/iio/common/cros_ec_sensors_core.h > +++ b/include/linux/iio/common/cros_ec_sensors_core.h > @@ -52,6 +52,8 @@ typedef irqreturn_t (*cros_ec_sensors_capture_t)(int irq, void *p); > * is always 8-byte aligned. > * @read_ec_sensors_data: function used for accessing sensors values > * @fifo_max_event_count: Size of the EC sensor FIFO > + * @frequencies: Table of known available frequencies: > + * 0, Min and Max in mHz. > */ > struct cros_ec_sensors_core_state { > struct cros_ec_device *ec; > @@ -75,9 +77,7 @@ struct cros_ec_sensors_core_state { > unsigned long scan_mask, s16 *data); > > u32 fifo_max_event_count; > - > - /* Table of known available frequencies : 0, Min and Max in mHz */ > - int frequencies[3]; > + int frequencies[6]; > }; > > int cros_ec_sensors_read_lpc(struct iio_dev *indio_dev, unsigned long scan_mask,