/* No direct ABI for persistence and threshold, so eventing */ staticint vcnl4035_read_thresh(struct iio_dev *indio_dev, conststruct iio_chan_spec *chan, enum iio_event_type type, enum iio_event_direction dir, enum iio_event_info info, int *val, int *val2)
{ struct vcnl4035_data *data = iio_priv(indio_dev);
switch (info) { case IIO_EV_INFO_VALUE: switch (dir) { case IIO_EV_DIR_RISING:
*val = data->als_thresh_high; return IIO_VAL_INT; case IIO_EV_DIR_FALLING:
*val = data->als_thresh_low; return IIO_VAL_INT; default: return -EINVAL;
} break; case IIO_EV_INFO_PERIOD:
*val = data->als_persistence; return IIO_VAL_INT; default: return -EINVAL;
}
}
staticint vcnl4035_write_thresh(struct iio_dev *indio_dev, conststruct iio_chan_spec *chan, enum iio_event_type type, enum iio_event_direction dir, enum iio_event_info info, int val, int val2)
{ struct vcnl4035_data *data = iio_priv(indio_dev); int ret;
switch (info) { case IIO_EV_INFO_VALUE: /* 16 bit threshold range 0 - 65535 */ if (val < 0 || val > 65535) return -EINVAL; if (dir == IIO_EV_DIR_RISING) { if (val < data->als_thresh_low) return -EINVAL;
ret = regmap_write(data->regmap, VCNL4035_ALS_THDH,
val); if (ret) return ret;
data->als_thresh_high = val;
} else { if (val > data->als_thresh_high) return -EINVAL;
ret = regmap_write(data->regmap, VCNL4035_ALS_THDL,
val); if (ret) return ret;
data->als_thresh_low = val;
} return ret; case IIO_EV_INFO_PERIOD: /* allow only 1 2 4 8 as persistence value */ if (val < 0 || val > 8 || hweight8(val) != 1) return -EINVAL;
ret = regmap_update_bits(data->regmap, VCNL4035_ALS_CONF,
VCNL4035_ALS_PERS_MASK, val); if (!ret)
data->als_persistence = val; return ret; default: return -EINVAL;
}
}
staticint vcnl4035_init(struct vcnl4035_data *data)
{ int ret; int id;
ret = regmap_read(data->regmap, VCNL4035_DEV_ID, &id); if (ret < 0) {
dev_err(&data->client->dev, "Failed to read DEV_ID register\n"); return ret;
}
id = FIELD_GET(VCNL4035_DEV_ID_MASK, id); if (id != VCNL4035_DEV_ID_VAL) {
dev_err(&data->client->dev, "Wrong id, got %x, expected %x\n",
id, VCNL4035_DEV_ID_VAL); return -ENODEV;
}
ret = vcnl4035_set_als_power_state(data, VCNL4035_MODE_ALS_ENABLE); if (ret < 0) return ret;
/* ALS white channel enable */
ret = regmap_update_bits(data->regmap, VCNL4035_ALS_CONF,
VCNL4035_MODE_ALS_WHITE_CHAN, 1); if (ret) {
dev_err(&data->client->dev, "set white channel enable %d\n",
ret); return ret;
}
/* set default integration time - 100 ms for ALS */
ret = regmap_update_bits(data->regmap, VCNL4035_ALS_CONF,
VCNL4035_ALS_IT_MASK,
VCNL4035_ALS_IT_DEFAULT); if (ret) {
dev_err(&data->client->dev, "set default ALS IT returned %d\n",
ret); return ret;
}
data->als_it_val = VCNL4035_ALS_IT_DEFAULT;
/* set default persistence time - 1 for ALS */
ret = regmap_update_bits(data->regmap, VCNL4035_ALS_CONF,
VCNL4035_ALS_PERS_MASK,
VCNL4035_ALS_PERS_DEFAULT); if (ret) {
dev_err(&data->client->dev, "set default PERS returned %d\n",
ret); return ret;
}
data->als_persistence = VCNL4035_ALS_PERS_DEFAULT;
/* set default HIGH threshold for ALS */
ret = regmap_write(data->regmap, VCNL4035_ALS_THDH,
VCNL4035_ALS_THDH_DEFAULT); if (ret) {
dev_err(&data->client->dev, "set default THDH returned %d\n",
ret); return ret;
}
data->als_thresh_high = VCNL4035_ALS_THDH_DEFAULT;
/* set default LOW threshold for ALS */
ret = regmap_write(data->regmap, VCNL4035_ALS_THDL,
VCNL4035_ALS_THDL_DEFAULT); if (ret) {
dev_err(&data->client->dev, "set default THDL returned %d\n",
ret); return ret;
}
data->als_thresh_low = VCNL4035_ALS_THDL_DEFAULT;
return0;
}
staticbool vcnl4035_is_volatile_reg(struct device *dev, unsignedint reg)
{ switch (reg) { case VCNL4035_ALS_CONF: case VCNL4035_DEV_ID: returnfalse; default: returntrue;
}
}
ret = vcnl4035_set_als_power_state(iio_priv(indio_dev),
VCNL4035_MODE_ALS_DISABLE); if (ret)
dev_warn(&client->dev, "Failed to put device into standby (%pe)\n",
ERR_PTR(ret));
}
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.15Bemerkung:
(vorverarbeitet am 2026-09-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.