linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Enric Balletbo i Serra <enric.balletbo@collabora.com>,
	linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org
Cc: Olof Johansson <olof@lixom.net>, Lee Jones <lee.jones@linaro.org>,
	Hartmut Knaack <knaack.h@gmx.de>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
	Guenter Roeck <groeck@chromium.org>,
	Gwendal Grignou <gwendal@chromium.org>
Subject: Re: [PATCH v4 4/4] platform/chrome: cros_ec_dev - Register cros-ec sensors
Date: Sat, 3 Sep 2016 18:20:28 +0100	[thread overview]
Message-ID: <e006874c-2960-f795-ef2a-2418b9381e48@kernel.org> (raw)
In-Reply-To: <94104b85-6dd7-01fa-85dc-ae1f16e47869@kernel.org>

On 15/08/16 16:31, Jonathan Cameron wrote:
> On 01/08/16 10:54, Enric Balletbo i Serra wrote:
>> Check whether the ChromeOS Embedded Controller is a sensor hub and in
>> such case issue a command to get the number of sensors and register them
>> all.
>>
>> Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>> Reviewed-by: Guenter Roeck <groeck@chromium.org>
Just realised I don't have an Ack from Olof for these.

Olof - after much back and forth I'm taking the rest of
this series via the IIO tree. If you are happy with the below
then I'll pick this one up.

There will be an immutable branch needed for dependencies from
mfd and getting the changes back to them (it's a mess).

Jonathan
>> ---
>>
>> Changes since v3:
>>  - Remove Unnecessary ( ) around 'ret < 0'.
>>  - Add Reviewed-by tag
>>
>>  .../iio/common/cros_ec_sensors/cros_ec_sensors.c   |   4 +-
>>  drivers/platform/chrome/cros_ec_dev.c              | 122 +++++++++++++++++++++
>>  2 files changed, 124 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c
>> index 48edeba..d6c372b 100644
>> --- a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c
>> +++ b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c
>> @@ -51,7 +51,7 @@ static int cros_ec_sensors_read(struct iio_dev *indio_dev,
>>  	s16 data = 0;
>>  	s64 val64;
>>  	int i;
>> -	int ret = IIO_VAL_INT;
>> +	int ret;
>>  	int idx = chan->scan_index;
>>  
>>  	mutex_lock(&st->core.cmd_lock);
>> @@ -137,7 +137,7 @@ static int cros_ec_sensors_write(struct iio_dev *indio_dev,
>>  {
>>  	struct cros_ec_sensors_state *st = iio_priv(indio_dev);
>>  	int i;
>> -	int ret = 0;
>> +	int ret;
>>  	int idx = chan->scan_index;
> *raises eyebrows*
> 
> Enough said?
> 
> Was wondering why this patch had strayed into the IIO files.
> 
I moved this to patch 2.
> 
>>  
>>  	mutex_lock(&st->core.cmd_lock);
>> diff --git a/drivers/platform/chrome/cros_ec_dev.c b/drivers/platform/chrome/cros_ec_dev.c
>> index 7eb5307..47268ec 100644
>> --- a/drivers/platform/chrome/cros_ec_dev.c
>> +++ b/drivers/platform/chrome/cros_ec_dev.c
>> @@ -18,6 +18,7 @@
>>   */
>>  
>>  #include <linux/fs.h>
>> +#include <linux/mfd/core.h>
>>  #include <linux/module.h>
>>  #include <linux/platform_device.h>
>>  #include <linux/slab.h>
>> @@ -265,6 +266,123 @@ static void __remove(struct device *dev)
>>  	kfree(ec);
>>  }
>>  
>> +static void cros_ec_sensors_register(struct cros_ec_dev *ec)
>> +{
>> +	/*
>> +	 * Issue a command to get the number of sensor reported.
>> +	 * Build an array of sensors driver and register them all.
>> +	 */
>> +	int ret, i, id, sensor_num;
>> +	struct mfd_cell *sensor_cells;
>> +	struct cros_ec_sensor_platform *sensor_platforms;
>> +	int sensor_type[MOTIONSENSE_TYPE_MAX];
>> +	struct ec_params_motion_sense *params;
>> +	struct ec_response_motion_sense *resp;
>> +	struct cros_ec_command *msg;
>> +
>> +	msg = kzalloc(sizeof(struct cros_ec_command) +
>> +		      max(sizeof(*params), sizeof(*resp)), GFP_KERNEL);
>> +	if (msg == NULL)
>> +		return;
>> +
>> +	msg->version = 2;
>> +	msg->command = EC_CMD_MOTION_SENSE_CMD + ec->cmd_offset;
>> +	msg->outsize = sizeof(*params);
>> +	msg->insize = sizeof(*resp);
>> +
>> +	params = (struct ec_params_motion_sense *)msg->data;
>> +	params->cmd = MOTIONSENSE_CMD_DUMP;
>> +
>> +	ret = cros_ec_cmd_xfer(ec->ec_dev, msg);
>> +	if (ret < 0 || msg->result != EC_RES_SUCCESS) {
>> +		dev_warn(ec->dev, "cannot get EC sensor information: %d/%d\n",
>> +			 ret, msg->result);
>> +		goto error;
>> +	}
>> +
>> +	resp = (struct ec_response_motion_sense *)msg->data;
>> +	sensor_num = resp->dump.sensor_count;
>> +	/* Allocate 2 extra sensors in case lid angle or FIFO are needed */
>> +	sensor_cells = kzalloc(sizeof(struct mfd_cell) * (sensor_num + 2),
>> +			       GFP_KERNEL);
>> +	if (sensor_cells == NULL)
>> +		goto error;
>> +
>> +	sensor_platforms = kzalloc(sizeof(struct cros_ec_sensor_platform) *
>> +		  (sensor_num + 1), GFP_KERNEL);
>> +	if (sensor_platforms == NULL)
>> +		goto error_platforms;
>> +
>> +	memset(sensor_type, 0, sizeof(sensor_type));
>> +	id = 0;
>> +	for (i = 0; i < sensor_num; i++) {
>> +		params->cmd = MOTIONSENSE_CMD_INFO;
>> +		params->info.sensor_num = i;
>> +		ret = cros_ec_cmd_xfer(ec->ec_dev, msg);
>> +		if (ret < 0 || msg->result != EC_RES_SUCCESS) {
>> +			dev_warn(ec->dev, "no info for EC sensor %d : %d/%d\n",
>> +				 i, ret, msg->result);
>> +			continue;
>> +		}
>> +		switch (resp->info.type) {
>> +		case MOTIONSENSE_TYPE_ACCEL:
>> +			sensor_cells[id].name = "cros-ec-accel";
>> +			break;
>> +		case MOTIONSENSE_TYPE_GYRO:
>> +			sensor_cells[id].name = "cros-ec-gyro";
>> +			break;
>> +		case MOTIONSENSE_TYPE_MAG:
>> +			sensor_cells[id].name = "cros-ec-mag";
>> +			break;
>> +		case MOTIONSENSE_TYPE_PROX:
>> +			sensor_cells[id].name = "cros-ec-prox";
>> +			break;
>> +		case MOTIONSENSE_TYPE_LIGHT:
>> +			sensor_cells[id].name = "cros-ec-light";
>> +			break;
>> +		case MOTIONSENSE_TYPE_ACTIVITY:
>> +			sensor_cells[id].name = "cros-ec-activity";
>> +			break;
>> +		default:
>> +			dev_warn(ec->dev, "unknown type %d\n", resp->info.type);
>> +			continue;
>> +		}
>> +		sensor_platforms[id].sensor_num = i;
>> +		sensor_cells[id].id = sensor_type[resp->info.type];
>> +		sensor_cells[id].platform_data = &sensor_platforms[id];
>> +		sensor_cells[id].pdata_size =
>> +			sizeof(struct cros_ec_sensor_platform);
>> +
>> +		sensor_type[resp->info.type]++;
>> +		id++;
>> +	}
>> +	if (sensor_type[MOTIONSENSE_TYPE_ACCEL] >= 2) {
>> +		sensor_platforms[id].sensor_num = sensor_num;
>> +
>> +		sensor_cells[id].name = "cros-ec-angle";
>> +		sensor_cells[id].id = 0;
>> +		sensor_cells[id].platform_data = &sensor_platforms[id];
>> +		sensor_cells[id].pdata_size =
>> +			sizeof(struct cros_ec_sensor_platform);
>> +		id++;
>> +	}
>> +	if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE_FIFO)) {
>> +		sensor_cells[id].name = "cros-ec-ring";
>> +		id++;
>> +	}
>> +
>> +	ret = mfd_add_devices(ec->dev, 0, sensor_cells, id,
>> +			      NULL, 0, NULL);
>> +	if (ret)
>> +		dev_err(ec->dev, "failed to add EC sensors\n");
>> +
>> +	kfree(sensor_platforms);
>> +error_platforms:
>> +	kfree(sensor_cells);
>> +error:
>> +	kfree(msg);
>> +}
>> +
>>  static int ec_device_probe(struct platform_device *pdev)
>>  {
>>  	int retval = -ENOMEM;
>> @@ -319,6 +437,10 @@ static int ec_device_probe(struct platform_device *pdev)
>>  		goto dev_reg_failed;
>>  	}
>>  
>> +	/* check whether this EC is a sensor hub. */
>> +	if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE))
>> +		cros_ec_sensors_register(ec);
>> +
>>  	return 0;
>>  
>>  dev_reg_failed:
>>
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

  reply	other threads:[~2016-09-03 17:20 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-01  9:54 [PATCH v4 0/4] Add support for cros-ec-sensors Enric Balletbo i Serra
2016-08-01  9:54 ` [PATCH v4 1/4] iio: cros_ec_sensors_core: Add common functions for the ChromeOS EC Sensor Hub Enric Balletbo i Serra
2016-08-01 16:57   ` Guenter Roeck
2016-08-15 15:28   ` Jonathan Cameron
2016-09-03 17:07     ` Jonathan Cameron
2016-10-25 17:12       ` Jonathan Cameron
2016-08-01  9:54 ` [PATCH v4 2/4] iio: cros_ec_sensors: add ChromeOS EC Contiguous Sensors driver Enric Balletbo i Serra
2016-08-15 15:28   ` Jonathan Cameron
2016-09-03 17:12     ` Jonathan Cameron
2016-10-25 17:12       ` Jonathan Cameron
2016-08-01  9:54 ` [PATCH v4 3/4] platform/chrome: Introduce a new function to check EC features Enric Balletbo i Serra
2016-08-09 13:59   ` Lee Jones
2016-10-25 17:14     ` Jonathan Cameron
2016-08-01  9:54 ` [PATCH v4 4/4] platform/chrome: cros_ec_dev - Register cros-ec sensors Enric Balletbo i Serra
2016-08-15 15:31   ` Jonathan Cameron
2016-09-03 17:20     ` Jonathan Cameron [this message]
2016-10-25 17:27       ` Jonathan Cameron
2016-08-15 15:24 ` [PATCH v4 0/4] Add support for cros-ec-sensors Jonathan Cameron
2016-08-16 12:49   ` Lee Jones
2016-08-21 19:57     ` Jonathan Cameron
2016-08-29 15:14       ` Jonathan Cameron
2016-08-30  8:57         ` Lee Jones
2016-08-31 20:06           ` Jonathan Cameron
2016-09-01  7:24             ` Lee Jones
2016-09-03 17:21               ` Jonathan Cameron
2016-10-18  8:35                 ` Enric Balletbo Serra
2016-10-18  8:56                   ` Jonathan Cameron
2016-10-22 17:49                     ` Olof Johansson
2016-10-22 18:47 ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e006874c-2960-f795-ef2a-2418b9381e48@kernel.org \
    --to=jic23@kernel.org \
    --cc=enric.balletbo@collabora.com \
    --cc=groeck@chromium.org \
    --cc=gwendal@chromium.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=lee.jones@linaro.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=olof@lixom.net \
    --cc=pmeerw@pmeerw.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).