Commit a090965b authored by Denis Ciocca's avatar Denis Ciocca Committed by Jonathan Cameron
Browse files

iio:common:st_sensors: add st_sensors_get_settings_index() helper function



Extract from st_sensors_check_device_support() function the code that
is used to get the specific settings for a device. This will be used
as generic extractor by each ST driver.

Signed-off-by: default avatarDenis Ciocca <denis.ciocca@st.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent f53199c0
Loading
Loading
Loading
Loading
+34 −15
Original line number Diff line number Diff line
@@ -633,28 +633,47 @@ static int st_sensors_init_interface_mode(struct iio_dev *indio_dev,
	return 0;
}

int st_sensors_check_device_support(struct iio_dev *indio_dev,
			int num_sensors_list,
			const struct st_sensor_settings *sensor_settings)
/*
 * st_sensors_get_settings_index() - get index of the sensor settings for a
 *				     specific device from list of settings
 * @name: device name buffer reference.
 * @list: sensor settings list.
 * @list_length: length of sensor settings list.
 *
 * Return: non negative number on success (valid index),
 *	   negative error code otherwise.
 */
int st_sensors_get_settings_index(const char *name,
				  const struct st_sensor_settings *list,
				  const int list_length)
{
	int i, n, err = 0;
	u8 wai;
	struct st_sensor_data *sdata = iio_priv(indio_dev);
	int i, n;

	for (i = 0; i < num_sensors_list; i++) {
	for (i = 0; i < list_length; i++) {
		for (n = 0; n < ST_SENSORS_MAX_4WAI; n++) {
			if (strcmp(indio_dev->name,
				sensor_settings[i].sensors_supported[n]) == 0) {
				break;
			if (strcmp(name, list[i].sensors_supported[n]) == 0)
				return i;
		}
	}
		if (n < ST_SENSORS_MAX_4WAI)
			break;

	return -ENODEV;
}
	if (i == num_sensors_list) {
EXPORT_SYMBOL(st_sensors_get_settings_index);

int st_sensors_check_device_support(struct iio_dev *indio_dev,
			int num_sensors_list,
			const struct st_sensor_settings *sensor_settings)
{
	struct st_sensor_data *sdata = iio_priv(indio_dev);
	int i, err;
	u8 wai;

	i = st_sensors_get_settings_index(indio_dev->name,
					  sensor_settings, num_sensors_list);
	if (i < 0) {
		dev_err(&indio_dev->dev, "device name %s not recognized.\n",
			indio_dev->name);
		return -ENODEV;
		return i;
	}

	err = st_sensors_init_interface_mode(indio_dev, &sensor_settings[i]);
+4 −0
Original line number Diff line number Diff line
@@ -334,6 +334,10 @@ int st_sensors_set_fullscale_by_gain(struct iio_dev *indio_dev, int scale);
int st_sensors_read_info_raw(struct iio_dev *indio_dev,
				struct iio_chan_spec const *ch, int *val);

int st_sensors_get_settings_index(const char *name,
				  const struct st_sensor_settings *list,
				  const int list_length);

int st_sensors_check_device_support(struct iio_dev *indio_dev,
	int num_sensors_list, const struct st_sensor_settings *sensor_settings);