Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp3837739ybg; Sun, 20 Oct 2019 22:55:36 -0700 (PDT) X-Google-Smtp-Source: APXvYqx4cWRSGWhRkwuPz2Bv9DDJ0rOGNByI9niHhvfS9zDxR1Wroo4QbJQQe+PyP0lWLGTbZivs X-Received: by 2002:aa7:cfd4:: with SMTP id r20mr23074057edy.268.1571637335997; Sun, 20 Oct 2019 22:55:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571637335; cv=none; d=google.com; s=arc-20160816; b=gsmJfZMxmXoI1MVGXse8YWfC/2NCOwl/QTX7B5Awf/DEkvQBK024wcPeA6KzpTvDh5 w1iI8iGh7ZfdKfMHUIHFxr/OfRoT+KD01HG+NK2tzXt7rHThtSSh4P7+jw7//nZAYjRJ f3Tw51Rtoo7Esx9zTVyfR1RgSszaT4QphOkyNjkQ0CGs2i7xbBXObD0RRjSxqo5oXD3z naIqRAo4MP4XCRRDeCrBOHgeTqPRiPh3Tovxf7dg8ERdmUkyVv4xAc3Bm9yK9nCb6ynZ AOC+WJt469VZoG+c5B2j1Q6z7ulhgDlgG1RvgtxxVlWLGlPmRitAYFBsSxJVdEVmfmIV TKBQ== 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:date:subject:cc:to:from :dkim-signature; bh=y8VvIDEUzgzOMc6xpWZ3lCTYzI69DQPFZmVj3lTRNRw=; b=ivkCtu/AdWzVHbqi6KWsw/m2LwhH6vNyZRmX+X7mkYzSDNjTed2Czgf0RWpPSupi+1 IpBwzcMW0+oLIacsasW9FpxM79hj/eBNzIUTaxVFlBKDQBS59zKw6et+rHhVQxgVv8EA yIPt4PFgy5nIKFM4yTyDp0PdebYFnaEPFaxLyLYfW2KQB7KQMDkGEnurLQsvqYWD5WNk djFF0u3M/rHhTeu0YZQ+rtUX6mlXIJsEcVYjJSSpaW1yPmkjMb02woNkzv+62zjtlv7s REQHyCOu11pYCjE9siEJqUpHXIcTOVgSuJpEJYxP9tMh86e9b0uZ7q4aRsv4bc5NpHBI Jp0g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=bjYbwrM0; 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=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p19si205786ejj.85.2019.10.20.22.55.12; Sun, 20 Oct 2019 22:55:35 -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=@chromium.org header.s=google header.b=bjYbwrM0; 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=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727365AbfJUFyl (ORCPT + 99 others); Mon, 21 Oct 2019 01:54:41 -0400 Received: from mail-pg1-f196.google.com ([209.85.215.196]:41341 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727357AbfJUFyj (ORCPT ); Mon, 21 Oct 2019 01:54:39 -0400 Received: by mail-pg1-f196.google.com with SMTP id t3so7066027pga.8 for ; Sun, 20 Oct 2019 22:54:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=y8VvIDEUzgzOMc6xpWZ3lCTYzI69DQPFZmVj3lTRNRw=; b=bjYbwrM0vAFomwWAxnewGnzfPMxYI7qz90WNYhoErZZ2KaPma2q9lAVzN6YR4esmfq 8OhInS6RGIdaSNObOM4//0A3vpF2PMLse2i6Lzt1sQQfW87868lyaZreKtHwGjL0lDdm yEJPWUqk8vUQDWcosvYF0+a6oIMBtCgJ2Cd+0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=y8VvIDEUzgzOMc6xpWZ3lCTYzI69DQPFZmVj3lTRNRw=; b=fovjmNF5YVirmcEsWEsywxgHXOBDN1UHi3M3y6zX5Djh/cTV8TuslPuVDLelH0AQNW aWPrDKuT7ycqqXqRAS+5wJsj/p7l4qwLGjTv0AsKpvnfG2KOyf4obh2ZCDdqfjwSklgX 9nLQK17gx34hBpHN0gWwWZxJmq8hZmKlHYv83qAyhqMhDUfWuHdAwbKCGZoyZKjiCu2Q QR2bdNERITN7Wt5lYblAHU3O+7t79dQCdfiiqN2gU3H1eliQ7CnTflq86hjhx6E2/IOf 3FeitMUdHz+oacawjYOQd5BA3Io55d4nefcqW6xXRSOVcXFw9B+DhZOQ61Z85BaQRxlJ aSpA== X-Gm-Message-State: APjAAAX/Wwm45pdcQ8u299dzheRxIicooXQ4F7QcARfgAIZJoilvoywD y202MjKaNgylSXgfl5XB/JDrkA== X-Received: by 2002:a63:6d0:: with SMTP id 199mr23068156pgg.96.1571637278614; Sun, 20 Oct 2019 22:54:38 -0700 (PDT) Received: from localhost ([2620:15c:202:1:3c8f:512b:3522:dfaf]) by smtp.gmail.com with ESMTPSA id h66sm22633572pjb.0.2019.10.20.22.54.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 20 Oct 2019 22:54:37 -0700 (PDT) From: Gwendal Grignou To: briannorris@chromium.org, jic23@kernel.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 Cc: linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, Gwendal Grignou Subject: [PATCH v2 17/18] iio: cros_ec: Report hwfifo_watermark_max Date: Sun, 20 Oct 2019 22:54:02 -0700 Message-Id: <20191021055403.67849-18-gwendal@chromium.org> X-Mailer: git-send-email 2.23.0.866.gb869b98d4c-goog In-Reply-To: <20191021055403.67849-1-gwendal@chromium.org> References: <20191021055403.67849-1-gwendal@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Report the maximum amount of sample the EC can hold. This is not tunable, but can be useful for application to find out the maximum amount of time it can sleep when hwfifo_timeout is set to a large number. Signed-off-by: Gwendal Grignou --- Changes in v2: - Remove double lines, add line before return for visibility. .../cros_ec_sensors/cros_ec_sensors_core.c | 34 +++++++++++++++++-- .../linux/iio/common/cros_ec_sensors_core.h | 3 ++ 2 files changed, 35 insertions(+), 2 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 92128c67a166e..f50e239f9a1e9 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 @@ -23,6 +23,12 @@ #include #include +/* + * Hard coded to the first device to support sensor fifo. The EC has a 2048 + * byte fifo and will trigger an interrupt when fifo is 2/3 full. + */ +#define CROS_EC_FIFO_SIZE (2048 * 2 / 3) + static char *cros_ec_loc[] = { [MOTIONSENSE_LOC_BASE] = "base", [MOTIONSENSE_LOC_LID] = "lid", @@ -56,8 +62,15 @@ static int cros_ec_get_host_cmd_version_mask(struct cros_ec_device *ec_dev, static void get_default_min_max_freq(enum motionsensor_type type, u32 *min_freq, - u32 *max_freq) + u32 *max_freq, + u32 *max_fifo_events) { + /* + * We don't know fifo size, set to size previously used by older + * hardware. + */ + *max_fifo_events = CROS_EC_FIFO_SIZE; + switch (type) { case MOTIONSENSE_TYPE_ACCEL: case MOTIONSENSE_TYPE_GYRO: @@ -150,8 +163,22 @@ static IIO_DEVICE_ATTR(hwfifo_timeout, 0644, cros_ec_sensor_get_report_latency, cros_ec_sensor_set_report_latency, 0); +static ssize_t hwfifo_watermark_max_show( + struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_to_iio_dev(dev); + struct cros_ec_sensors_core_state *st = iio_priv(indio_dev); + + return sprintf(buf, "%d\n", st->fifo_max_event_count); +} + +static IIO_DEVICE_ATTR_RO(hwfifo_watermark_max, 0); + const struct attribute *cros_ec_sensor_fifo_attributes[] = { &iio_dev_attr_hwfifo_timeout.dev_attr.attr, + &iio_dev_attr_hwfifo_watermark_max.dev_attr.attr, NULL, }; EXPORT_SYMBOL_GPL(cros_ec_sensor_fifo_attributes); @@ -281,12 +308,15 @@ int cros_ec_sensors_core_init(struct platform_device *pdev, if (state->msg->version < 3) { get_default_min_max_freq(state->resp->info.type, &state->frequencies[1], - &state->frequencies[2]); + &state->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; + state->fifo_max_event_count = + state->resp->info_3.fifo_max_event_count; } ret = devm_iio_triggered_buffer_setup( diff --git a/include/linux/iio/common/cros_ec_sensors_core.h b/include/linux/iio/common/cros_ec_sensors_core.h index 387ca9e61dac8..4df3abd151fbf 100644 --- a/include/linux/iio/common/cros_ec_sensors_core.h +++ b/include/linux/iio/common/cros_ec_sensors_core.h @@ -51,6 +51,7 @@ typedef irqreturn_t (*cros_ec_sensors_capture_t)(int irq, void *p); * the timestamp. The timestamp is always last and * 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 */ struct cros_ec_sensors_core_state { struct cros_ec_device *ec; @@ -73,6 +74,8 @@ struct cros_ec_sensors_core_state { int (*read_ec_sensors_data)(struct iio_dev *indio_dev, 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]; }; -- 2.23.0.866.gb869b98d4c-goog