@@ -1,3 +1,15 @@
+What: /sys/bus/counter/devices/counterX/cable_status
+KernelVersion: 5.7
+Contact: linux-iio@vger.kernel.org
+Description:
+ Differential encoder cable status; bits 0 through 7
+ correspond to channels 1 through 8. Writing a 0 to the
+ corresponding bit will enable the status of the
+ respective channel.
+
+ Logic 0 = cable fault (not connected or loose wires)
+ Logic 1 = cable connection good or cable fault disabled
+
What: /sys/bus/counter/devices/counterX/signalY/index_polarity
KernelVersion: 5.2
Contact: linux-iio@vger.kernel.org
@@ -56,6 +56,7 @@ struct quad8_iio {
#define QUAD8_REG_CHAN_OP 0x11
#define QUAD8_REG_INDEX_INPUT_LEVELS 0x16
+#define QUAD8_DIFF_ENCODER_CABLE_STATUS 0x17
/* Borrow Toggle flip-flop */
#define QUAD8_FLAG_BT BIT(0)
/* Carry Toggle flip-flop */
@@ -1268,6 +1269,42 @@ static struct counter_count quad8_counts[] = {
QUAD8_COUNT(7, "Channel 8 Count")
};
+static ssize_t quad8_cable_status_read(struct counter_device *counter,
+ void *private, char *buf)
+{
+ const struct quad8_iio *const priv = counter->priv;
+ unsigned int status;
+
+ status = inb(priv->base + QUAD8_DIFF_ENCODER_CABLE_STATUS);
+
+ return sprintf(buf, "0x%X\n", status);
+}
+
+static ssize_t quad8_cable_status_write(struct counter_device *counter,
+ void *private, const char *buf,
+ size_t len)
+{
+ struct quad8_iio *const priv = counter->priv;
+ u8 enable;
+ int ret;
+
+ ret = kstrtou8(buf, 0, &enable);
+ if (ret)
+ return ret;
+
+ outb(enable, priv->base + QUAD8_DIFF_ENCODER_CABLE_STATUS);
+
+ return len;
+}
+
+static const struct counter_device_ext quad8_device_ext[] = {
+ {
+ .name = "cable_status",
+ .read = quad8_cable_status_read,
+ .write = quad8_cable_status_write
+ }
+};
+
static int quad8_probe(struct device *dev, unsigned int id)
{
struct iio_dev *indio_dev;
@@ -1304,6 +1341,8 @@ static int quad8_probe(struct device *dev, unsigned int id)
quad8iio->counter.num_counts = ARRAY_SIZE(quad8_counts);
quad8iio->counter.signals = quad8_signals;
quad8iio->counter.num_signals = ARRAY_SIZE(quad8_signals);
+ quad8iio->counter.ext = quad8_device_ext;
+ quad8iio->counter.num_ext = ARRAY_SIZE(quad8_device_ext);
quad8iio->counter.priv = quad8iio;
quad8iio->base = base[id];
The ACCES 104-QUAD-8 series provides status information about the connection state of the differential encoder cable inputs. This patch implements support to expose such information from these devices. Signed-off-by: William Breathitt Gray <vilhelm.gray@gmail.com> --- Changes in v2: - Set num_ext so quad8_device_ext is actually read .../ABI/testing/sysfs-bus-counter-104-quad-8 | 12 ++++++ drivers/counter/104-quad-8.c | 39 +++++++++++++++++++ 2 files changed, 51 insertions(+)