Commit deaecbef authored by Brian Masney's avatar Brian Masney Committed by Jonathan Cameron

staging: iio: tsl2x7x: migrate *_thresh_period sysfs attributes to iio_event_spec

The sysfs attributes in_intensity0_thresh_period and
in_proximity0_thresh_period are currently directly created by the driver.
This patch migrates the creation of these sysfs attributes from the driver
to using the IIO core via iio_event_spec.
Signed-off-by: default avatarBrian Masney <masneyb@onstation.org>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 59dba8fa
......@@ -932,108 +932,6 @@ static ssize_t in_illuminance0_target_input_store(struct device *dev,
return len;
}
/* persistence settings */
static ssize_t in_intensity0_thresh_period_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct tsl2X7X_chip *chip = iio_priv(dev_to_iio_dev(dev));
int y, z, filter_delay;
/* Determine integration time */
y = (TSL2X7X_MAX_TIMER_CNT - (u8)chip->settings.als_time) + 1;
z = y * TSL2X7X_MIN_ITIME;
filter_delay = z * (chip->settings.persistence & 0x0F);
y = filter_delay / 1000;
z = filter_delay % 1000;
return snprintf(buf, PAGE_SIZE, "%d.%03d\n", y, z);
}
static ssize_t in_intensity0_thresh_period_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
{
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
struct tsl2X7X_chip *chip = iio_priv(indio_dev);
struct tsl2x7x_parse_result result;
int y, z, filter_delay;
int ret;
ret = iio_str_to_fixpoint(buf, 100, &result.integer, &result.fract);
if (ret)
return ret;
y = (TSL2X7X_MAX_TIMER_CNT - (u8)chip->settings.als_time) + 1;
z = y * TSL2X7X_MIN_ITIME;
filter_delay =
DIV_ROUND_UP((result.integer * 1000) + result.fract, z);
chip->settings.persistence &= 0xF0;
chip->settings.persistence |= (filter_delay & 0x0F);
dev_info(&chip->client->dev, "%s: als persistence = %d",
__func__, filter_delay);
ret = tsl2x7x_invoke_change(indio_dev);
if (ret < 0)
return ret;
return IIO_VAL_INT_PLUS_MICRO;
}
static ssize_t in_proximity0_thresh_period_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct tsl2X7X_chip *chip = iio_priv(dev_to_iio_dev(dev));
int y, z, filter_delay;
/* Determine integration time */
y = (TSL2X7X_MAX_TIMER_CNT - (u8)chip->settings.prx_time) + 1;
z = y * TSL2X7X_MIN_ITIME;
filter_delay = z * ((chip->settings.persistence & 0xF0) >> 4);
y = filter_delay / 1000;
z = filter_delay % 1000;
return snprintf(buf, PAGE_SIZE, "%d.%03d\n", y, z);
}
static ssize_t in_proximity0_thresh_period_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
{
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
struct tsl2X7X_chip *chip = iio_priv(indio_dev);
struct tsl2x7x_parse_result result;
int y, z, filter_delay;
int ret;
ret = iio_str_to_fixpoint(buf, 100, &result.integer, &result.fract);
if (ret)
return ret;
y = (TSL2X7X_MAX_TIMER_CNT - (u8)chip->settings.prx_time) + 1;
z = y * TSL2X7X_MIN_ITIME;
filter_delay =
DIV_ROUND_UP((result.integer * 1000) + result.fract, z);
chip->settings.persistence &= 0x0F;
chip->settings.persistence |= ((filter_delay << 4) & 0xF0);
dev_info(&chip->client->dev, "%s: prox persistence = %d",
__func__, filter_delay);
ret = tsl2x7x_invoke_change(indio_dev);
if (ret < 0)
return ret;
return IIO_VAL_INT_PLUS_MICRO;
}
static ssize_t in_illuminance0_calibrate_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
......@@ -1198,7 +1096,8 @@ static int tsl2x7x_write_event_value(struct iio_dev *indio_dev,
int val, int val2)
{
struct tsl2X7X_chip *chip = iio_priv(indio_dev);
int ret = -EINVAL;
int ret = -EINVAL, y, z, filter_delay;
u8 time;
switch (info) {
case IIO_EV_INFO_VALUE:
......@@ -1230,6 +1129,33 @@ static int tsl2x7x_write_event_value(struct iio_dev *indio_dev,
}
}
break;
case IIO_EV_INFO_PERIOD:
if (chan->type == IIO_INTENSITY)
time = chip->settings.als_time;
else
time = chip->settings.prx_time;
y = (TSL2X7X_MAX_TIMER_CNT - time) + 1;
z = y * TSL2X7X_MIN_ITIME;
filter_delay = DIV_ROUND_UP((val * 1000) + val2, z);
if (chan->type == IIO_INTENSITY) {
chip->settings.persistence &= 0xF0;
chip->settings.persistence |=
(filter_delay & 0x0F);
dev_info(&chip->client->dev, "%s: ALS persistence = %d",
__func__, filter_delay);
} else {
chip->settings.persistence &= 0x0F;
chip->settings.persistence |=
((filter_delay << 4) & 0xF0);
dev_info(&chip->client->dev,
"%s: Proximity persistence = %d",
__func__, filter_delay);
}
ret = 0;
break;
default:
break;
}
......@@ -1248,7 +1174,8 @@ static int tsl2x7x_read_event_value(struct iio_dev *indio_dev,
int *val, int *val2)
{
struct tsl2X7X_chip *chip = iio_priv(indio_dev);
int ret = -EINVAL;
int ret = -EINVAL, filter_delay, mult;
u8 time;
switch (info) {
case IIO_EV_INFO_VALUE:
......@@ -1280,6 +1207,23 @@ static int tsl2x7x_read_event_value(struct iio_dev *indio_dev,
}
}
break;
case IIO_EV_INFO_PERIOD:
if (chan->type == IIO_INTENSITY) {
time = chip->settings.als_time;
mult = chip->settings.persistence & 0x0F;
} else {
time = chip->settings.prx_time;
mult = (chip->settings.persistence & 0xF0) >> 4;
}
/* Determine integration time */
*val = (TSL2X7X_MAX_TIMER_CNT - time) + 1;
*val2 = *val * TSL2X7X_MIN_ITIME;
filter_delay = *val2 * mult;
*val = filter_delay / 1000;
*val2 = filter_delay % 1000;
ret = IIO_VAL_INT_PLUS_MICRO;
break;
default:
break;
}
......@@ -1444,10 +1388,6 @@ static DEVICE_ATTR_WO(in_proximity0_calibrate);
static DEVICE_ATTR_RW(in_illuminance0_lux_table);
static DEVICE_ATTR_RW(in_intensity0_thresh_period);
static DEVICE_ATTR_RW(in_proximity0_thresh_period);
/* Use the default register values to identify the Taos device */
static int tsl2x7x_device_id(int *id, int target)
{
......@@ -1554,22 +1494,6 @@ static struct attribute *tsl2x7x_ALSPRX2_device_attrs[] = {
NULL
};
static struct attribute *tsl2X7X_ALS_event_attrs[] = {
&dev_attr_in_intensity0_thresh_period.attr,
NULL,
};
static struct attribute *tsl2X7X_PRX_event_attrs[] = {
&dev_attr_in_proximity0_thresh_period.attr,
NULL,
};
static struct attribute *tsl2X7X_ALSPRX_event_attrs[] = {
&dev_attr_in_intensity0_thresh_period.attr,
&dev_attr_in_proximity0_thresh_period.attr,
NULL,
};
static const struct attribute_group tsl2X7X_device_attr_group_tbl[] = {
[ALS] = {
.attrs = tsl2x7x_ALS_device_attrs,
......@@ -1588,25 +1512,9 @@ static const struct attribute_group tsl2X7X_device_attr_group_tbl[] = {
},
};
static const struct attribute_group tsl2X7X_event_attr_group_tbl[] = {
[ALS] = {
.attrs = tsl2X7X_ALS_event_attrs,
.name = "events",
},
[PRX] = {
.attrs = tsl2X7X_PRX_event_attrs,
.name = "events",
},
[ALSPRX] = {
.attrs = tsl2X7X_ALSPRX_event_attrs,
.name = "events",
},
};
static const struct iio_info tsl2X7X_device_info[] = {
[ALS] = {
.attrs = &tsl2X7X_device_attr_group_tbl[ALS],
.event_attrs = &tsl2X7X_event_attr_group_tbl[ALS],
.read_raw = &tsl2x7x_read_raw,
.write_raw = &tsl2x7x_write_raw,
.read_event_value = &tsl2x7x_read_event_value,
......@@ -1616,7 +1524,6 @@ static const struct iio_info tsl2X7X_device_info[] = {
},
[PRX] = {
.attrs = &tsl2X7X_device_attr_group_tbl[PRX],
.event_attrs = &tsl2X7X_event_attr_group_tbl[PRX],
.read_raw = &tsl2x7x_read_raw,
.write_raw = &tsl2x7x_write_raw,
.read_event_value = &tsl2x7x_read_event_value,
......@@ -1626,7 +1533,6 @@ static const struct iio_info tsl2X7X_device_info[] = {
},
[ALSPRX] = {
.attrs = &tsl2X7X_device_attr_group_tbl[ALSPRX],
.event_attrs = &tsl2X7X_event_attr_group_tbl[ALSPRX],
.read_raw = &tsl2x7x_read_raw,
.write_raw = &tsl2x7x_write_raw,
.read_event_value = &tsl2x7x_read_event_value,
......@@ -1636,7 +1542,6 @@ static const struct iio_info tsl2X7X_device_info[] = {
},
[PRX2] = {
.attrs = &tsl2X7X_device_attr_group_tbl[PRX2],
.event_attrs = &tsl2X7X_event_attr_group_tbl[PRX],
.read_raw = &tsl2x7x_read_raw,
.write_raw = &tsl2x7x_write_raw,
.read_event_value = &tsl2x7x_read_event_value,
......@@ -1646,7 +1551,6 @@ static const struct iio_info tsl2X7X_device_info[] = {
},
[ALSPRX2] = {
.attrs = &tsl2X7X_device_attr_group_tbl[ALSPRX2],
.event_attrs = &tsl2X7X_event_attr_group_tbl[ALSPRX],
.read_raw = &tsl2x7x_read_raw,
.write_raw = &tsl2x7x_write_raw,
.read_event_value = &tsl2x7x_read_event_value,
......@@ -1667,6 +1571,10 @@ static const struct iio_event_spec tsl2x7x_events[] = {
.dir = IIO_EV_DIR_FALLING,
.mask_separate = BIT(IIO_EV_INFO_VALUE) |
BIT(IIO_EV_INFO_ENABLE),
}, {
.type = IIO_EV_TYPE_THRESH,
.dir = IIO_EV_DIR_EITHER,
.mask_separate = BIT(IIO_EV_INFO_PERIOD),
},
};
......
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