From: William Breathitt Gray <vilhelm.gray@gmail.com> To: jic23@jic23.retrosnub.co.uk Cc: linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, patrick.havelange@essensium.com, fabrice.gasnier@st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@st.com, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, William Breathitt Gray <vilhelm.gray@gmail.com> Subject: [PATCH v2 0/7] counter: Simplify count_read/count_write/signal_read Date: Wed, 18 Sep 2019 16:52:41 +0900 [thread overview] Message-ID: <cover.1568792697.git.vilhelm.gray@gmail.com> (raw) Changes in v2: - Update the rest of the drivers under drivers/counter The changes in this patchset will not affect the userspace interface. Rather, these changes are intended to simplify the kernelspace Counter callbacks for counter device driver authors. The following main changes are proposed: * Retire the opaque counter_count_read_value/counter_count_write_value structures and simply represent count data as an unsigned integer. * Retire the opaque counter_signal_read_value structure and represent Signal data as a counter_signal_value enum. These changes should reduce some complexity and code in the use and implementation of the count_read, count_write, and signal_read callbacks. The opaque structures for Count data and Signal data were introduced originally in anticipation of supporting various representations of counter data (e.g. arbitrary-precision tallies, floating-point spherical coordinate positions, etc). However, with the counter device drivers that have appeared, it's become apparent that utilizing opaque structures in kernelspace is not the best approach to take. I believe it is best to let userspace applications decide how to interpret the count data they receive. There are a couple of reasons why it would be good to do so: * Users use their devices in unexpected ways. For example, a quadrature encoder counter device is typically used to keep track of the position of a motor, but a user could set the device in a pulse-direction mode and instead use it to count sporadic rising edges from an arbitrary signal line unrelated to positioning. Users should have the freedom to decide what their data represents. * Most counter devices represent data as unsigned integers anyway. For example, whether the device is a tally counter or position counter, the count data is represented to the user as an unsigned integer value. So specifying that one device is representing tallies while the other specifies positions does not provide much utility from an interface perspective. For these reasons, the count_read and count_write callbacks have been redefined to pass count data directly as unsigned long instead of passed via opaque structures: count_read(struct counter_device *counter, struct counter_count *count, unsigned long *val); count_write(struct counter_device *counter, struct counter_count *count, unsigned long val); Similarly, the signal_read is redefined to pass Signal data directly as a counter_signal_value enum instead of via an opaque structure: signal_read(struct counter_device *counter, struct counter_signal *signal, enum counter_signal_value *val); The counter_signal_value enum is simply the counter_signal_level enum redefined to remove the references to the Signal data "level" data type. William Breathitt Gray (7): counter: Simplify the count_read and count_write callbacks counter: Simplify the signal_read callback docs: driver-api: generic-counter: Update Count and Signal data types counter: 104-quad-8: Update count_read/count_write/signal_read callbacks counter: ftm-quaddec: Update count_read and count_write callbacks counter: stm32-lptimer-cnt: Update count_read callback counter: stm32-timer-cnt: Update count_read and count_write callbacks Documentation/driver-api/generic-counter.rst | 22 ++-- drivers/counter/104-quad-8.c | 33 ++---- drivers/counter/counter.c | 101 +++---------------- drivers/counter/ftm-quaddec.c | 14 +-- drivers/counter/stm32-lptimer-cnt.c | 5 +- drivers/counter/stm32-timer-cnt.c | 17 +--- include/linux/counter.h | 74 ++------------ 7 files changed, 53 insertions(+), 213 deletions(-) -- 2.23.0
WARNING: multiple messages have this Message-ID (diff)
From: William Breathitt Gray <vilhelm.gray@gmail.com> To: jic23@jic23.retrosnub.co.uk Cc: alexandre.torgue@st.com, linux-iio@vger.kernel.org, patrick.havelange@essensium.com, linux-kernel@vger.kernel.org, William Breathitt Gray <vilhelm.gray@gmail.com>, mcoquelin.stm32@gmail.com, fabrice.gasnier@st.com, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 0/7] counter: Simplify count_read/count_write/signal_read Date: Wed, 18 Sep 2019 16:52:41 +0900 [thread overview] Message-ID: <cover.1568792697.git.vilhelm.gray@gmail.com> (raw) Changes in v2: - Update the rest of the drivers under drivers/counter The changes in this patchset will not affect the userspace interface. Rather, these changes are intended to simplify the kernelspace Counter callbacks for counter device driver authors. The following main changes are proposed: * Retire the opaque counter_count_read_value/counter_count_write_value structures and simply represent count data as an unsigned integer. * Retire the opaque counter_signal_read_value structure and represent Signal data as a counter_signal_value enum. These changes should reduce some complexity and code in the use and implementation of the count_read, count_write, and signal_read callbacks. The opaque structures for Count data and Signal data were introduced originally in anticipation of supporting various representations of counter data (e.g. arbitrary-precision tallies, floating-point spherical coordinate positions, etc). However, with the counter device drivers that have appeared, it's become apparent that utilizing opaque structures in kernelspace is not the best approach to take. I believe it is best to let userspace applications decide how to interpret the count data they receive. There are a couple of reasons why it would be good to do so: * Users use their devices in unexpected ways. For example, a quadrature encoder counter device is typically used to keep track of the position of a motor, but a user could set the device in a pulse-direction mode and instead use it to count sporadic rising edges from an arbitrary signal line unrelated to positioning. Users should have the freedom to decide what their data represents. * Most counter devices represent data as unsigned integers anyway. For example, whether the device is a tally counter or position counter, the count data is represented to the user as an unsigned integer value. So specifying that one device is representing tallies while the other specifies positions does not provide much utility from an interface perspective. For these reasons, the count_read and count_write callbacks have been redefined to pass count data directly as unsigned long instead of passed via opaque structures: count_read(struct counter_device *counter, struct counter_count *count, unsigned long *val); count_write(struct counter_device *counter, struct counter_count *count, unsigned long val); Similarly, the signal_read is redefined to pass Signal data directly as a counter_signal_value enum instead of via an opaque structure: signal_read(struct counter_device *counter, struct counter_signal *signal, enum counter_signal_value *val); The counter_signal_value enum is simply the counter_signal_level enum redefined to remove the references to the Signal data "level" data type. William Breathitt Gray (7): counter: Simplify the count_read and count_write callbacks counter: Simplify the signal_read callback docs: driver-api: generic-counter: Update Count and Signal data types counter: 104-quad-8: Update count_read/count_write/signal_read callbacks counter: ftm-quaddec: Update count_read and count_write callbacks counter: stm32-lptimer-cnt: Update count_read callback counter: stm32-timer-cnt: Update count_read and count_write callbacks Documentation/driver-api/generic-counter.rst | 22 ++-- drivers/counter/104-quad-8.c | 33 ++---- drivers/counter/counter.c | 101 +++---------------- drivers/counter/ftm-quaddec.c | 14 +-- drivers/counter/stm32-lptimer-cnt.c | 5 +- drivers/counter/stm32-timer-cnt.c | 17 +--- include/linux/counter.h | 74 ++------------ 7 files changed, 53 insertions(+), 213 deletions(-) -- 2.23.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next reply other threads:[~2019-09-18 7:53 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-09-18 7:52 William Breathitt Gray [this message] 2019-09-18 7:52 ` [PATCH v2 0/7] counter: Simplify count_read/count_write/signal_read William Breathitt Gray 2019-09-18 7:52 ` [PATCH v2 1/7] counter: Simplify the count_read and count_write callbacks William Breathitt Gray 2019-09-18 7:52 ` William Breathitt Gray 2019-09-18 8:48 ` Benjamin Gaignard 2019-09-18 8:48 ` Benjamin Gaignard 2019-09-18 7:52 ` [PATCH v2 2/7] counter: Simplify the signal_read callback William Breathitt Gray 2019-09-18 7:52 ` William Breathitt Gray 2019-09-18 7:52 ` [PATCH v2 3/7] docs: driver-api: generic-counter: Update Count and Signal data types William Breathitt Gray 2019-09-18 7:52 ` William Breathitt Gray 2019-09-18 7:52 ` [PATCH v2 4/7] counter: 104-quad-8: Update count_read/count_write/signal_read callbacks William Breathitt Gray 2019-09-18 7:52 ` William Breathitt Gray 2019-09-18 7:52 ` [PATCH v2 5/7] counter: ftm-quaddec: Update count_read and count_write callbacks William Breathitt Gray 2019-09-18 7:52 ` William Breathitt Gray 2019-09-18 7:52 ` [PATCH v2 6/7] counter: stm32-lptimer-cnt: Update count_read callback William Breathitt Gray 2019-09-18 7:52 ` William Breathitt Gray 2019-09-18 7:52 ` [PATCH v2 7/7] counter: stm32-timer-cnt: Update count_read and count_write callbacks William Breathitt Gray 2019-09-18 7:52 ` William Breathitt Gray 2019-09-18 12:16 ` Fabrice Gasnier 2019-09-18 12:16 ` Fabrice Gasnier 2019-09-18 8:11 ` [PATCH v2 0/7] counter: Simplify count_read/count_write/signal_read William Breathitt Gray 2019-09-18 8:11 ` William Breathitt Gray
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=cover.1568792697.git.vilhelm.gray@gmail.com \ --to=vilhelm.gray@gmail.com \ --cc=alexandre.torgue@st.com \ --cc=fabrice.gasnier@st.com \ --cc=jic23@jic23.retrosnub.co.uk \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-iio@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-stm32@st-md-mailman.stormreply.com \ --cc=mcoquelin.stm32@gmail.com \ --cc=patrick.havelange@essensium.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.