Commit efc78983 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Jonathan Cameron

iio: st_sensors: Drop redundant parameter from st_sensors_of_name_probe()

Since we have access to the struct device_driver and thus to the ID table,
there is no need to supply special parameters to st_sensors_of_name_probe().

Besides that we have a common API to get driver match data, there is
no need to do matching separately for OF and ACPI.

Taking into consideration above, simplify the ST sensors code.
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent e825070f
...@@ -107,8 +107,7 @@ static int st_accel_spi_probe(struct spi_device *spi) ...@@ -107,8 +107,7 @@ static int st_accel_spi_probe(struct spi_device *spi)
struct iio_dev *indio_dev; struct iio_dev *indio_dev;
int err; int err;
st_sensors_of_name_probe(&spi->dev, st_accel_of_match, st_sensors_dev_name_probe(&spi->dev, spi->modalias, sizeof(spi->modalias));
spi->modalias, sizeof(spi->modalias));
settings = st_accel_get_settings(spi->modalias); settings = st_accel_get_settings(spi->modalias);
if (!settings) { if (!settings) {
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/iio/iio.h> #include <linux/iio/iio.h>
#include <linux/property.h>
#include <linux/regulator/consumer.h> #include <linux/regulator/consumer.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_device.h> #include <linux/of_device.h>
...@@ -340,42 +341,37 @@ static struct st_sensors_platform_data *st_sensors_of_probe(struct device *dev, ...@@ -340,42 +341,37 @@ static struct st_sensors_platform_data *st_sensors_of_probe(struct device *dev,
return pdata; return pdata;
} }
#else
static struct st_sensors_platform_data *st_sensors_of_probe(struct device *dev,
struct st_sensors_platform_data *defdata)
{
return NULL;
}
#endif
/** /**
* st_sensors_of_name_probe() - device tree probe for ST sensor name * st_sensors_dev_name_probe() - device probe for ST sensor name
* @dev: driver model representation of the device. * @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. * @name: device name buffer reference.
* @len: device name buffer length. * @len: device name buffer length.
* *
* In effect this function matches a compatible string to an internal kernel * In effect this function matches an ID to an internal kernel
* name for a certain sensor device, so that the rest of the autodetection can * 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 * rely on that name from this point on. I2C/SPI devices will be renamed
* to match the internal kernel convention. * to match the internal kernel convention.
*/ */
void st_sensors_of_name_probe(struct device *dev, void st_sensors_dev_name_probe(struct device *dev, char *name, int len)
const struct of_device_id *match,
char *name, int len)
{ {
const struct of_device_id *of_id; const void *match;
of_id = of_match_device(match, dev); match = device_get_match_data(dev);
if (!of_id || !of_id->data) if (!match)
return; return;
/* The name from the OF match takes precedence if present */ /* The name from the match takes precedence if present */
strlcpy(name, of_id->data, len); strlcpy(name, match, len);
} }
EXPORT_SYMBOL(st_sensors_of_name_probe); EXPORT_SYMBOL(st_sensors_dev_name_probe);
#else
static struct st_sensors_platform_data *st_sensors_of_probe(struct device *dev,
struct st_sensors_platform_data *defdata)
{
return NULL;
}
#endif
int st_sensors_init_sensor(struct iio_dev *indio_dev, int st_sensors_init_sensor(struct iio_dev *indio_dev,
struct st_sensors_platform_data *pdata) struct st_sensors_platform_data *pdata)
......
...@@ -11,8 +11,6 @@ ...@@ -11,8 +11,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/iio/iio.h> #include <linux/iio/iio.h>
#include <linux/of_device.h>
#include <linux/acpi.h>
#include <linux/regmap.h> #include <linux/regmap.h>
#include <linux/iio/common/st_sensors_i2c.h> #include <linux/iio/common/st_sensors_i2c.h>
...@@ -68,25 +66,6 @@ int st_sensors_i2c_configure(struct iio_dev *indio_dev, ...@@ -68,25 +66,6 @@ int st_sensors_i2c_configure(struct iio_dev *indio_dev,
} }
EXPORT_SYMBOL(st_sensors_i2c_configure); EXPORT_SYMBOL(st_sensors_i2c_configure);
#ifdef CONFIG_ACPI
int st_sensors_match_acpi_device(struct device *dev)
{
const struct acpi_device_id *acpi_id;
kernel_ulong_t driver_data = 0;
if (ACPI_HANDLE(dev)) {
acpi_id = acpi_match_device(dev->driver->acpi_match_table, dev);
if (!acpi_id) {
dev_err(dev, "No driver data\n");
return -EINVAL;
}
driver_data = acpi_id->driver_data;
}
return driver_data;
}
EXPORT_SYMBOL(st_sensors_match_acpi_device);
#endif
MODULE_AUTHOR("Denis Ciocca <denis.ciocca@st.com>"); MODULE_AUTHOR("Denis Ciocca <denis.ciocca@st.com>");
MODULE_DESCRIPTION("STMicroelectronics ST-sensors i2c driver"); MODULE_DESCRIPTION("STMicroelectronics ST-sensors i2c driver");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
...@@ -70,8 +70,7 @@ static int st_gyro_i2c_probe(struct i2c_client *client, ...@@ -70,8 +70,7 @@ static int st_gyro_i2c_probe(struct i2c_client *client,
struct iio_dev *indio_dev; struct iio_dev *indio_dev;
int err; int err;
st_sensors_of_name_probe(&client->dev, st_gyro_of_match, st_sensors_dev_name_probe(&client->dev, client->name, sizeof(client->name));
client->name, sizeof(client->name));
settings = st_gyro_get_settings(client->name); settings = st_gyro_get_settings(client->name);
if (!settings) { if (!settings) {
......
...@@ -74,8 +74,7 @@ static int st_gyro_spi_probe(struct spi_device *spi) ...@@ -74,8 +74,7 @@ static int st_gyro_spi_probe(struct spi_device *spi)
struct iio_dev *indio_dev; struct iio_dev *indio_dev;
int err; int err;
st_sensors_of_name_probe(&spi->dev, st_gyro_of_match, st_sensors_dev_name_probe(&spi->dev, spi->modalias, sizeof(spi->modalias));
spi->modalias, sizeof(spi->modalias));
settings = st_gyro_get_settings(spi->modalias); settings = st_gyro_get_settings(spi->modalias);
if (!settings) { if (!settings) {
......
...@@ -62,8 +62,7 @@ static int st_magn_i2c_probe(struct i2c_client *client, ...@@ -62,8 +62,7 @@ static int st_magn_i2c_probe(struct i2c_client *client,
struct iio_dev *indio_dev; struct iio_dev *indio_dev;
int err; int err;
st_sensors_of_name_probe(&client->dev, st_magn_of_match, st_sensors_dev_name_probe(&client->dev, client->name, sizeof(client->name));
client->name, sizeof(client->name));
settings = st_magn_get_settings(client->name); settings = st_magn_get_settings(client->name);
if (!settings) { if (!settings) {
......
...@@ -56,8 +56,7 @@ static int st_magn_spi_probe(struct spi_device *spi) ...@@ -56,8 +56,7 @@ static int st_magn_spi_probe(struct spi_device *spi)
struct iio_dev *indio_dev; struct iio_dev *indio_dev;
int err; int err;
st_sensors_of_name_probe(&spi->dev, st_magn_of_match, st_sensors_dev_name_probe(&spi->dev, spi->modalias, sizeof(spi->modalias));
spi->modalias, sizeof(spi->modalias));
settings = st_magn_get_settings(spi->modalias); settings = st_magn_get_settings(spi->modalias);
if (!settings) { if (!settings) {
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/acpi.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/iio/iio.h> #include <linux/iio/iio.h>
...@@ -83,18 +82,7 @@ static int st_press_i2c_probe(struct i2c_client *client, ...@@ -83,18 +82,7 @@ static int st_press_i2c_probe(struct i2c_client *client,
struct iio_dev *indio_dev; struct iio_dev *indio_dev;
int ret; int ret;
if (client->dev.of_node) { st_sensors_dev_name_probe(&client->dev, client->name, sizeof(client->name));
st_sensors_of_name_probe(&client->dev, st_press_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_PRESS_MAX))
return -ENODEV;
strlcpy(client->name, st_press_id_table[ret].name,
sizeof(client->name));
} else if (!id)
return -ENODEV;
settings = st_press_get_settings(client->name); settings = st_press_get_settings(client->name);
if (!settings) { if (!settings) {
......
...@@ -66,8 +66,7 @@ static int st_press_spi_probe(struct spi_device *spi) ...@@ -66,8 +66,7 @@ static int st_press_spi_probe(struct spi_device *spi)
struct iio_dev *indio_dev; struct iio_dev *indio_dev;
int err; int err;
st_sensors_of_name_probe(&spi->dev, st_press_of_match, st_sensors_dev_name_probe(&spi->dev, spi->modalias, sizeof(spi->modalias));
spi->modalias, sizeof(spi->modalias));
settings = st_press_get_settings(spi->modalias); settings = st_press_get_settings(spi->modalias);
if (!settings) { if (!settings) {
......
...@@ -315,16 +315,6 @@ ssize_t st_sensors_sysfs_sampling_frequency_avail(struct device *dev, ...@@ -315,16 +315,6 @@ ssize_t st_sensors_sysfs_sampling_frequency_avail(struct device *dev,
ssize_t st_sensors_sysfs_scale_avail(struct device *dev, ssize_t st_sensors_sysfs_scale_avail(struct device *dev,
struct device_attribute *attr, char *buf); struct device_attribute *attr, char *buf);
#ifdef CONFIG_OF void st_sensors_dev_name_probe(struct device *dev, char *name, int len);
void st_sensors_of_name_probe(struct device *dev,
const struct of_device_id *match,
char *name, int len);
#else
static inline void st_sensors_of_name_probe(struct device *dev,
const struct of_device_id *match,
char *name, int len)
{
}
#endif
#endif /* ST_SENSORS_H */ #endif /* ST_SENSORS_H */
...@@ -12,18 +12,8 @@ ...@@ -12,18 +12,8 @@
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/iio/common/st_sensors.h> #include <linux/iio/common/st_sensors.h>
#include <linux/of.h>
int st_sensors_i2c_configure(struct iio_dev *indio_dev, int st_sensors_i2c_configure(struct iio_dev *indio_dev,
struct i2c_client *client); struct i2c_client *client);
#ifdef CONFIG_ACPI
int st_sensors_match_acpi_device(struct device *dev);
#else
static inline int st_sensors_match_acpi_device(struct device *dev)
{
return -ENODEV;
}
#endif
#endif /* ST_SENSORS_I2C_H */ #endif /* ST_SENSORS_I2C_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment