Commit 250bbbdb authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Jonathan Cameron
Browse files

iio: common: st_sensors: move st_sensors_of_i2c_probe() in common code



Move st_sensors_of_i2c_probe() in st_sensors_core and rename it in
st_sensors_of_name_probe(). That change is necessary to add device-tree
support in spi code otherwise the rest of the autodetection will fail
since spi->modalias (and indio_dev->name) will be set using compatible
string value that differs from standard sensor name

Signed-off-by: default avatarLorenzo Bianconi <lorenzo.bianconi@st.com>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 13718564
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -144,7 +144,8 @@ static int st_accel_i2c_probe(struct i2c_client *client,
	adata = iio_priv(indio_dev);

	if (client->dev.of_node) {
		st_sensors_of_i2c_probe(client, st_accel_of_match);
		st_sensors_of_name_probe(&client->dev, st_accel_of_match,
					 client->name, sizeof(client->name));
	} else if (ACPI_HANDLE(&client->dev)) {
		ret = st_sensors_match_acpi_device(&client->dev);
		if ((ret < 0) || (ret >= ST_ACCEL_MAX))
+31 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#include <linux/iio/iio.h>
#include <linux/regulator/consumer.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <asm/unaligned.h>
#include <linux/iio/common/st_sensors.h>

@@ -345,6 +346,36 @@ static struct st_sensors_platform_data *st_sensors_of_probe(struct device *dev,

	return pdata;
}

/**
 * st_sensors_of_name_probe() - device tree probe for ST sensor name
 * @dev: driver model representation of the device.
 * @match: the OF match table for the device, containing compatible strings
 *	but also a .data field with the corresponding internal kernel name
 *	used by this sensor.
 * @name: device name buffer reference.
 * @len: device name buffer length.
 *
 * In effect this function matches a compatible string to an internal kernel
 * name for a certain sensor device, so that the rest of the autodetection can
 * rely on that name from this point on. I2C/SPI devices will be renamed
 * to match the internal kernel convention.
 */
void st_sensors_of_name_probe(struct device *dev,
			      const struct of_device_id *match,
			      char *name, int len)
{
	const struct of_device_id *of_id;

	of_id = of_match_device(match, dev);
	if (!of_id || !of_id->data)
		return;

	/* The name from the OF match takes precedence if present */
	strncpy(name, of_id->data, len);
	name[len - 1] = '\0';
}
EXPORT_SYMBOL(st_sensors_of_name_probe);
#else
static struct st_sensors_platform_data *st_sensors_of_probe(struct device *dev,
		struct st_sensors_platform_data *defdata)
+0 −29
Original line number Diff line number Diff line
@@ -79,35 +79,6 @@ void st_sensors_i2c_configure(struct iio_dev *indio_dev,
}
EXPORT_SYMBOL(st_sensors_i2c_configure);

#ifdef CONFIG_OF
/**
 * st_sensors_of_i2c_probe() - device tree probe for ST I2C sensors
 * @client: the I2C client device for the sensor
 * @match: the OF match table for the device, containing compatible strings
 *	but also a .data field with the corresponding internal kernel name
 *	used by this sensor.
 *
 * In effect this function matches a compatible string to an internal kernel
 * name for a certain sensor device, so that the rest of the autodetection can
 * rely on that name from this point on. I2C client devices will be renamed
 * to match the internal kernel convention.
 */
void st_sensors_of_i2c_probe(struct i2c_client *client,
			     const struct of_device_id *match)
{
	const struct of_device_id *of_id;

	of_id = of_match_device(match, &client->dev);
	if (!of_id)
		return;

	/* The name from the OF match takes precedence if present */
	strncpy(client->name, of_id->data, sizeof(client->name));
	client->name[sizeof(client->name) - 1] = '\0';
}
EXPORT_SYMBOL(st_sensors_of_i2c_probe);
#endif

#ifdef CONFIG_ACPI
int st_sensors_match_acpi_device(struct device *dev)
{
+2 −1
Original line number Diff line number Diff line
@@ -75,7 +75,8 @@ static int st_gyro_i2c_probe(struct i2c_client *client,
		return -ENOMEM;

	gdata = iio_priv(indio_dev);
	st_sensors_of_i2c_probe(client, st_gyro_of_match);
	st_sensors_of_name_probe(&client->dev, st_gyro_of_match,
				 client->name, sizeof(client->name));

	st_sensors_i2c_configure(indio_dev, client, gdata);

+2 −1
Original line number Diff line number Diff line
@@ -59,7 +59,8 @@ static int st_magn_i2c_probe(struct i2c_client *client,
		return -ENOMEM;

	mdata = iio_priv(indio_dev);
	st_sensors_of_i2c_probe(client, st_magn_of_match);
	st_sensors_of_name_probe(&client->dev, st_magn_of_match,
				 client->name, sizeof(client->name));

	st_sensors_i2c_configure(indio_dev, client, mdata);

Loading