All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v8 00/22] Introduce the Counter character device interface
@ 2021-02-12 12:13 ` William Breathitt Gray
  0 siblings, 0 replies; 140+ messages in thread
From: William Breathitt Gray @ 2021-02-12 12:13 UTC (permalink / raw)
  To: jic23
  Cc: kernel, linux-stm32, a.fatoum, kamel.bouhara, gwendal,
	alexandre.belloni, david, linux-iio, linux-kernel,
	linux-arm-kernel, syednwaris, patrick.havelange, fabrice.gasnier,
	mcoquelin.stm32, alexandre.torgue, o.rempel,
	William Breathitt Gray

Changes in v8:
 - Consolidated Counter sysfs ABI documentation to single file
 - Added events_queue_size sysfs attribute to allow users to dynamically
   resize the events queue
 - Fixed markup syntax and typos in generic-counter.rst
 - Improved documentation in include/uapi/linux/counter.h and friends
 - Renamed COUNTER_LOAD_WATCHES_IOCTL to COUNTER_ENABLE_EVENTS_IOCTL;
   Renamed COUNTER_CLEAR_WATCHES_IOCTL to COUNTER_DISABLE_EVENTS_IOCTL
 - Renamed the struct counter_event "errno" member to "status"
 - Dropped the "irq_trigger" 104-QUAD-8 sysfs attribute; this
   functionality now occurs implicitly via the Counter chrdev interface
 - Return -ERANGE where appropriate instead of -EINVAL
 - Simplified switch exit paths; return early when possible
 - Call devm_request_irq() before devm_counter_register() for 104-quad-8
 - Renamed devm_counter_unregister() to more apt devm_counter_release()
 - Use enum counter_scope for scope values in counter-sysfs.c
 - Use sysfs_emit() instead of sprintf() where appropriate
 - Renamed find_in_string_array() to more apt counter_find_enum()
 - Renamed *_action_get() and *_action_write() to *_action_read() and
   *_action_write() to match new naming convention of Counter callbacks
 - Use "Counter function" naming convention instead of "Counter count
   function" to avoid confusion about scope

I pulled out a lot of bits and pieces to their own patches; hopefully
that makes reviewing this patchset much simpler than before. This
patchset is also available on my personal public git repo for anyone who
wants a quick way to clone:
https://gitlab.com/vilhelmgray/iio/-/tree/counter_chrdev_v8

The patches preceding "counter: Internalize sysfs interface code" are
primarily cleanup and fixes that can be picked up and applied now to the
IIO tree if so desired. The "counter: Internalize sysfs interface code"
patch as well may be considered for pickup because it is relatively safe
and makes no changes to the userspace interface.

To summarize the main points of this patchset: there are no changes to
the existing Counter sysfs userspace interface; a Counter character
device interface is introduced that allows Counter events and associated
data to be read() by userspace; the events_configure() and
watch_validate() driver callbacks are introduced to support Counter
events; and IRQ support is added to the 104-QUAD-8 driver, serving as an
example of how to support the new Counter events functionality.

Something that should still be discussed: should the struct
counter_event "status" member be 8 bits or 32 bits wide? This member
will provide the return status (system error number) of an event
operation.

William Breathitt Gray (22):
  docs: counter: Consolidate Counter sysfs attributes documentation
  docs: counter: Fix spelling
  counter: 104-quad-8: Return error when invalid mode during
    ceiling_write
  counter: 104-quad-8: Annotate hardware config module parameter
  counter: 104-quad-8: Add const qualifiers for
    quad8_preset_register_set
  counter: 104-quad-8: Add const qualifier for functions_list array
  counter: 104-quad-8: Add const qualifier for actions_list array
  counter: ftm-quaddec: Add const qualifier for actions_list array
  counter: Return error code on invalid modes
  counter: Standardize to ERANGE for limit exceeded errors
  counter: Rename counter_signal_value to counter_signal_level
  counter: Rename counter_count_function to counter_function
  counter: Internalize sysfs interface code
  counter: Update counter.h comments to reflect sysfs internalization
  docs: counter: Update to reflect sysfs internalization
  counter: Move counter enums to uapi header
  counter: Add character device interface
  docs: counter: Document character device interface
  counter: Implement extension*_name sysfs attributes
  counter: Implement events_queue_size sysfs attribute
  counter: 104-quad-8: Replace mutex with spinlock
  counter: 104-quad-8: Add IRQ support for the ACCES 104-QUAD-8

 Documentation/ABI/testing/sysfs-bus-counter   |  100 +-
 .../ABI/testing/sysfs-bus-counter-104-quad-8  |   61 -
 .../ABI/testing/sysfs-bus-counter-ftm-quaddec |   16 -
 Documentation/driver-api/generic-counter.rst  |  426 ++++-
 .../userspace-api/ioctl/ioctl-number.rst      |    1 +
 MAINTAINERS                                   |    6 +-
 drivers/counter/104-quad-8.c                  |  751 +++++----
 drivers/counter/Kconfig                       |    6 +-
 drivers/counter/Makefile                      |    1 +
 drivers/counter/counter-chrdev.c              |  519 ++++++
 drivers/counter/counter-chrdev.h              |   18 +
 drivers/counter/counter-core.c                |  185 ++
 drivers/counter/counter-sysfs.c               |  889 ++++++++++
 drivers/counter/counter-sysfs.h               |   13 +
 drivers/counter/counter.c                     | 1496 -----------------
 drivers/counter/ftm-quaddec.c                 |   69 +-
 drivers/counter/microchip-tcb-capture.c       |  105 +-
 drivers/counter/stm32-lptimer-cnt.c           |  186 +-
 drivers/counter/stm32-timer-cnt.c             |  187 +--
 drivers/counter/ti-eqep.c                     |  226 ++-
 include/linux/counter.h                       |  716 ++++----
 include/linux/counter_enum.h                  |   45 -
 include/uapi/linux/counter.h                  |  126 ++
 23 files changed, 3363 insertions(+), 2785 deletions(-)
 delete mode 100644 Documentation/ABI/testing/sysfs-bus-counter-104-quad-8
 delete mode 100644 Documentation/ABI/testing/sysfs-bus-counter-ftm-quaddec
 create mode 100644 drivers/counter/counter-chrdev.c
 create mode 100644 drivers/counter/counter-chrdev.h
 create mode 100644 drivers/counter/counter-core.c
 create mode 100644 drivers/counter/counter-sysfs.c
 create mode 100644 drivers/counter/counter-sysfs.h
 delete mode 100644 drivers/counter/counter.c
 delete mode 100644 include/linux/counter_enum.h
 create mode 100644 include/uapi/linux/counter.h


base-commit: b72d4f6a5122a78941ce5a3147685d6a44939a75
-- 
2.30.0


^ permalink raw reply	[flat|nested] 140+ messages in thread
* Re: [PATCH v8 13/22] counter: Internalize sysfs interface code
@ 2021-02-12 23:14 kernel test robot
  0 siblings, 0 replies; 140+ messages in thread
From: kernel test robot @ 2021-02-12 23:14 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 18699 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <3fc2580af0efd6312a64a0e107bd6fa758f0d466.1613131238.git.vilhelm.gray@gmail.com>
References: <3fc2580af0efd6312a64a0e107bd6fa758f0d466.1613131238.git.vilhelm.gray@gmail.com>
TO: William Breathitt Gray <vilhelm.gray@gmail.com>

Hi William,

I love your patch! Perhaps something to improve:

[auto build test WARNING on b72d4f6a5122a78941ce5a3147685d6a44939a75]

url:    https://github.com/0day-ci/linux/commits/William-Breathitt-Gray/Introduce-the-Counter-character-device-interface/20210212-202458
base:   b72d4f6a5122a78941ce5a3147685d6a44939a75
:::::: branch date: 11 hours ago
:::::: commit date: 11 hours ago
config: x86_64-randconfig-m001-20210211 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
drivers/counter/counter-sysfs.c:104 counter_comp_u8_show() error: uninitialized symbol 'err'.
drivers/counter/counter-sysfs.c:172 counter_comp_u32_show() error: uninitialized symbol 'err'.
drivers/counter/counter-sysfs.c:286 counter_comp_u64_show() error: uninitialized symbol 'err'.

vim +/err +104 drivers/counter/counter-sysfs.c

74e69a717541f2 William Breathitt Gray 2021-02-12   84  
74e69a717541f2 William Breathitt Gray 2021-02-12   85  static ssize_t counter_comp_u8_show(struct device *dev,
74e69a717541f2 William Breathitt Gray 2021-02-12   86  				    struct device_attribute *attr, char *buf)
74e69a717541f2 William Breathitt Gray 2021-02-12   87  {
74e69a717541f2 William Breathitt Gray 2021-02-12   88  	const struct counter_attribute *const a = to_counter_attribute(attr);
74e69a717541f2 William Breathitt Gray 2021-02-12   89  	struct counter_device *const counter = dev_get_drvdata(dev);
74e69a717541f2 William Breathitt Gray 2021-02-12   90  	int err;
74e69a717541f2 William Breathitt Gray 2021-02-12   91  	u8 data = 0;
74e69a717541f2 William Breathitt Gray 2021-02-12   92  
74e69a717541f2 William Breathitt Gray 2021-02-12   93  	switch (a->scope) {
74e69a717541f2 William Breathitt Gray 2021-02-12   94  	case COUNTER_SCOPE_DEVICE:
74e69a717541f2 William Breathitt Gray 2021-02-12   95  		err = a->comp.device_u8_read(counter, &data);
74e69a717541f2 William Breathitt Gray 2021-02-12   96  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12   97  	case COUNTER_SCOPE_SIGNAL:
74e69a717541f2 William Breathitt Gray 2021-02-12   98  		err = a->comp.signal_u8_read(counter, a->parent, &data);
74e69a717541f2 William Breathitt Gray 2021-02-12   99  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  100  	case COUNTER_SCOPE_COUNT:
74e69a717541f2 William Breathitt Gray 2021-02-12  101  		err = a->comp.count_u8_read(counter, a->parent, &data);
74e69a717541f2 William Breathitt Gray 2021-02-12  102  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  103  	}
74e69a717541f2 William Breathitt Gray 2021-02-12 @104  	if (err < 0)
74e69a717541f2 William Breathitt Gray 2021-02-12  105  		return err;
74e69a717541f2 William Breathitt Gray 2021-02-12  106  
74e69a717541f2 William Breathitt Gray 2021-02-12  107  	if (a->comp.type == COUNTER_COMP_BOOL)
74e69a717541f2 William Breathitt Gray 2021-02-12  108  		data = !!data;
74e69a717541f2 William Breathitt Gray 2021-02-12  109  
74e69a717541f2 William Breathitt Gray 2021-02-12  110  	return sprintf(buf, "%u\n", (unsigned int)data);
74e69a717541f2 William Breathitt Gray 2021-02-12  111  }
74e69a717541f2 William Breathitt Gray 2021-02-12  112  
74e69a717541f2 William Breathitt Gray 2021-02-12  113  static ssize_t counter_comp_u8_store(struct device *dev,
74e69a717541f2 William Breathitt Gray 2021-02-12  114  				     struct device_attribute *attr,
74e69a717541f2 William Breathitt Gray 2021-02-12  115  				     const char *buf, size_t len)
74e69a717541f2 William Breathitt Gray 2021-02-12  116  {
74e69a717541f2 William Breathitt Gray 2021-02-12  117  	const struct counter_attribute *const a = to_counter_attribute(attr);
74e69a717541f2 William Breathitt Gray 2021-02-12  118  	struct counter_device *const counter = dev_get_drvdata(dev);
74e69a717541f2 William Breathitt Gray 2021-02-12  119  	int err;
74e69a717541f2 William Breathitt Gray 2021-02-12  120  	bool bool_data = 0;
74e69a717541f2 William Breathitt Gray 2021-02-12  121  	u8 data = 0;
74e69a717541f2 William Breathitt Gray 2021-02-12  122  
74e69a717541f2 William Breathitt Gray 2021-02-12  123  	if (a->comp.type == COUNTER_COMP_BOOL) {
74e69a717541f2 William Breathitt Gray 2021-02-12  124  		err = kstrtobool(buf, &bool_data);
74e69a717541f2 William Breathitt Gray 2021-02-12  125  		data = bool_data;
74e69a717541f2 William Breathitt Gray 2021-02-12  126  	} else
74e69a717541f2 William Breathitt Gray 2021-02-12  127  		err = kstrtou8(buf, 0, &data);
74e69a717541f2 William Breathitt Gray 2021-02-12  128  	if (err < 0)
74e69a717541f2 William Breathitt Gray 2021-02-12  129  		return err;
74e69a717541f2 William Breathitt Gray 2021-02-12  130  
74e69a717541f2 William Breathitt Gray 2021-02-12  131  	switch (a->scope) {
74e69a717541f2 William Breathitt Gray 2021-02-12  132  	case COUNTER_SCOPE_DEVICE:
74e69a717541f2 William Breathitt Gray 2021-02-12  133  		err = a->comp.device_u8_write(counter, data);
74e69a717541f2 William Breathitt Gray 2021-02-12  134  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  135  	case COUNTER_SCOPE_SIGNAL:
74e69a717541f2 William Breathitt Gray 2021-02-12  136  		err = a->comp.signal_u8_write(counter, a->parent, data);
74e69a717541f2 William Breathitt Gray 2021-02-12  137  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  138  	case COUNTER_SCOPE_COUNT:
74e69a717541f2 William Breathitt Gray 2021-02-12  139  		err = a->comp.count_u8_write(counter, a->parent, data);
74e69a717541f2 William Breathitt Gray 2021-02-12  140  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  141  	}
74e69a717541f2 William Breathitt Gray 2021-02-12  142  	if (err < 0)
74e69a717541f2 William Breathitt Gray 2021-02-12  143  		return err;
74e69a717541f2 William Breathitt Gray 2021-02-12  144  
74e69a717541f2 William Breathitt Gray 2021-02-12  145  	return len;
74e69a717541f2 William Breathitt Gray 2021-02-12  146  }
74e69a717541f2 William Breathitt Gray 2021-02-12  147  
74e69a717541f2 William Breathitt Gray 2021-02-12  148  static ssize_t counter_comp_u32_show(struct device *dev,
74e69a717541f2 William Breathitt Gray 2021-02-12  149  				     struct device_attribute *attr, char *buf)
74e69a717541f2 William Breathitt Gray 2021-02-12  150  {
74e69a717541f2 William Breathitt Gray 2021-02-12  151  	const struct counter_attribute *const a = to_counter_attribute(attr);
74e69a717541f2 William Breathitt Gray 2021-02-12  152  	struct counter_device *const counter = dev_get_drvdata(dev);
74e69a717541f2 William Breathitt Gray 2021-02-12  153  	const struct counter_available *const avail = a->comp.priv;
74e69a717541f2 William Breathitt Gray 2021-02-12  154  	int err;
74e69a717541f2 William Breathitt Gray 2021-02-12  155  	u32 data = 0;
74e69a717541f2 William Breathitt Gray 2021-02-12  156  
74e69a717541f2 William Breathitt Gray 2021-02-12  157  	switch (a->scope) {
74e69a717541f2 William Breathitt Gray 2021-02-12  158  	case COUNTER_SCOPE_DEVICE:
74e69a717541f2 William Breathitt Gray 2021-02-12  159  		err = a->comp.device_u32_read(counter, &data);
74e69a717541f2 William Breathitt Gray 2021-02-12  160  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  161  	case COUNTER_SCOPE_SIGNAL:
74e69a717541f2 William Breathitt Gray 2021-02-12  162  		err = a->comp.signal_u32_read(counter, a->parent, &data);
74e69a717541f2 William Breathitt Gray 2021-02-12  163  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  164  	case COUNTER_SCOPE_COUNT:
74e69a717541f2 William Breathitt Gray 2021-02-12  165  		if (a->comp.type == COUNTER_COMP_SYNAPSE_ACTION)
74e69a717541f2 William Breathitt Gray 2021-02-12  166  			err = a->comp.action_read(counter, a->parent,
74e69a717541f2 William Breathitt Gray 2021-02-12  167  						  a->comp.priv, &data);
74e69a717541f2 William Breathitt Gray 2021-02-12  168  		else
74e69a717541f2 William Breathitt Gray 2021-02-12  169  			err = a->comp.count_u32_read(counter, a->parent, &data);
74e69a717541f2 William Breathitt Gray 2021-02-12  170  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  171  	}
74e69a717541f2 William Breathitt Gray 2021-02-12 @172  	if (err < 0)
74e69a717541f2 William Breathitt Gray 2021-02-12  173  		return err;
74e69a717541f2 William Breathitt Gray 2021-02-12  174  
74e69a717541f2 William Breathitt Gray 2021-02-12  175  	switch (a->comp.type) {
74e69a717541f2 William Breathitt Gray 2021-02-12  176  	case COUNTER_COMP_FUNCTION:
74e69a717541f2 William Breathitt Gray 2021-02-12  177  		return sysfs_emit(buf, "%s\n", counter_function_str[data]);
74e69a717541f2 William Breathitt Gray 2021-02-12  178  	case COUNTER_COMP_SIGNAL_LEVEL:
74e69a717541f2 William Breathitt Gray 2021-02-12  179  		return sysfs_emit(buf, "%s\n", counter_signal_value_str[data]);
74e69a717541f2 William Breathitt Gray 2021-02-12  180  	case COUNTER_COMP_SYNAPSE_ACTION:
74e69a717541f2 William Breathitt Gray 2021-02-12  181  		return sysfs_emit(buf, "%s\n", counter_synapse_action_str[data]);
74e69a717541f2 William Breathitt Gray 2021-02-12  182  	case COUNTER_COMP_ENUM:
74e69a717541f2 William Breathitt Gray 2021-02-12  183  		return sysfs_emit(buf, "%s\n", avail->strs[data]);
74e69a717541f2 William Breathitt Gray 2021-02-12  184  	case COUNTER_COMP_COUNT_DIRECTION:
74e69a717541f2 William Breathitt Gray 2021-02-12  185  		return sysfs_emit(buf, "%s\n", counter_count_direction_str[data]);
74e69a717541f2 William Breathitt Gray 2021-02-12  186  	case COUNTER_COMP_COUNT_MODE:
74e69a717541f2 William Breathitt Gray 2021-02-12  187  		return sysfs_emit(buf, "%s\n", counter_count_mode_str[data]);
74e69a717541f2 William Breathitt Gray 2021-02-12  188  	default:
74e69a717541f2 William Breathitt Gray 2021-02-12  189  		return sprintf(buf, "%u\n", (unsigned int)data);
74e69a717541f2 William Breathitt Gray 2021-02-12  190  	}
74e69a717541f2 William Breathitt Gray 2021-02-12  191  }
74e69a717541f2 William Breathitt Gray 2021-02-12  192  
74e69a717541f2 William Breathitt Gray 2021-02-12  193  static int counter_find_enum(u32 *const enum_item, const u32 *const enums,
74e69a717541f2 William Breathitt Gray 2021-02-12  194  			     const size_t num_enums, const char *const buf,
74e69a717541f2 William Breathitt Gray 2021-02-12  195  			     const char *const string_array[])
74e69a717541f2 William Breathitt Gray 2021-02-12  196  {
74e69a717541f2 William Breathitt Gray 2021-02-12  197  	size_t index;
74e69a717541f2 William Breathitt Gray 2021-02-12  198  
74e69a717541f2 William Breathitt Gray 2021-02-12  199  	for (index = 0; index < num_enums; index++) {
74e69a717541f2 William Breathitt Gray 2021-02-12  200  		*enum_item = enums[index];
74e69a717541f2 William Breathitt Gray 2021-02-12  201  		if (sysfs_streq(buf, string_array[*enum_item]))
74e69a717541f2 William Breathitt Gray 2021-02-12  202  			return 0;
74e69a717541f2 William Breathitt Gray 2021-02-12  203  	}
74e69a717541f2 William Breathitt Gray 2021-02-12  204  
74e69a717541f2 William Breathitt Gray 2021-02-12  205  	return -EINVAL;
74e69a717541f2 William Breathitt Gray 2021-02-12  206  }
74e69a717541f2 William Breathitt Gray 2021-02-12  207  
74e69a717541f2 William Breathitt Gray 2021-02-12  208  static ssize_t counter_comp_u32_store(struct device *dev,
74e69a717541f2 William Breathitt Gray 2021-02-12  209  				      struct device_attribute *attr,
74e69a717541f2 William Breathitt Gray 2021-02-12  210  				      const char *buf, size_t len)
74e69a717541f2 William Breathitt Gray 2021-02-12  211  {
74e69a717541f2 William Breathitt Gray 2021-02-12  212  	const struct counter_attribute *const a = to_counter_attribute(attr);
74e69a717541f2 William Breathitt Gray 2021-02-12  213  	struct counter_device *const counter = dev_get_drvdata(dev);
74e69a717541f2 William Breathitt Gray 2021-02-12  214  	struct counter_count *const count = a->parent;
74e69a717541f2 William Breathitt Gray 2021-02-12  215  	struct counter_synapse *const synapse = a->comp.priv;
74e69a717541f2 William Breathitt Gray 2021-02-12  216  	const struct counter_available *const avail = a->comp.priv;
74e69a717541f2 William Breathitt Gray 2021-02-12  217  	int err;
74e69a717541f2 William Breathitt Gray 2021-02-12  218  	u32 data = 0;
74e69a717541f2 William Breathitt Gray 2021-02-12  219  
74e69a717541f2 William Breathitt Gray 2021-02-12  220  	switch (a->comp.type) {
74e69a717541f2 William Breathitt Gray 2021-02-12  221  	case COUNTER_COMP_FUNCTION:
74e69a717541f2 William Breathitt Gray 2021-02-12  222  		err = counter_find_enum(&data, count->functions_list,
74e69a717541f2 William Breathitt Gray 2021-02-12  223  					count->num_functions, buf,
74e69a717541f2 William Breathitt Gray 2021-02-12  224  					counter_function_str);
74e69a717541f2 William Breathitt Gray 2021-02-12  225  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  226  	case COUNTER_COMP_SYNAPSE_ACTION:
74e69a717541f2 William Breathitt Gray 2021-02-12  227  		err = counter_find_enum(&data, synapse->actions_list,
74e69a717541f2 William Breathitt Gray 2021-02-12  228  					synapse->num_actions, buf,
74e69a717541f2 William Breathitt Gray 2021-02-12  229  					counter_synapse_action_str);
74e69a717541f2 William Breathitt Gray 2021-02-12  230  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  231  	case COUNTER_COMP_ENUM:
74e69a717541f2 William Breathitt Gray 2021-02-12  232  		err = __sysfs_match_string(avail->strs, avail->num_items, buf);
74e69a717541f2 William Breathitt Gray 2021-02-12  233  		data = err;
74e69a717541f2 William Breathitt Gray 2021-02-12  234  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  235  	case COUNTER_COMP_COUNT_MODE:
74e69a717541f2 William Breathitt Gray 2021-02-12  236  		err = counter_find_enum(&data, avail->enums, avail->num_items,
74e69a717541f2 William Breathitt Gray 2021-02-12  237  					buf, counter_count_mode_str);
74e69a717541f2 William Breathitt Gray 2021-02-12  238  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  239  	default:
74e69a717541f2 William Breathitt Gray 2021-02-12  240  		err = kstrtou32(buf, 0, &data);
74e69a717541f2 William Breathitt Gray 2021-02-12  241  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  242  	}
74e69a717541f2 William Breathitt Gray 2021-02-12  243  	if (err < 0)
74e69a717541f2 William Breathitt Gray 2021-02-12  244  		return err;
74e69a717541f2 William Breathitt Gray 2021-02-12  245  
74e69a717541f2 William Breathitt Gray 2021-02-12  246  	switch (a->scope) {
74e69a717541f2 William Breathitt Gray 2021-02-12  247  	case COUNTER_SCOPE_DEVICE:
74e69a717541f2 William Breathitt Gray 2021-02-12  248  		err = a->comp.device_u32_write(counter, data);
74e69a717541f2 William Breathitt Gray 2021-02-12  249  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  250  	case COUNTER_SCOPE_SIGNAL:
74e69a717541f2 William Breathitt Gray 2021-02-12  251  		err = a->comp.signal_u32_write(counter, a->parent, data);
74e69a717541f2 William Breathitt Gray 2021-02-12  252  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  253  	case COUNTER_SCOPE_COUNT:
74e69a717541f2 William Breathitt Gray 2021-02-12  254  		if (a->comp.type == COUNTER_COMP_SYNAPSE_ACTION)
74e69a717541f2 William Breathitt Gray 2021-02-12  255  			err = a->comp.action_write(counter, count, synapse,
74e69a717541f2 William Breathitt Gray 2021-02-12  256  						   data);
74e69a717541f2 William Breathitt Gray 2021-02-12  257  		else
74e69a717541f2 William Breathitt Gray 2021-02-12  258  			err = a->comp.count_u32_write(counter, count, data);
74e69a717541f2 William Breathitt Gray 2021-02-12  259  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  260  	}
74e69a717541f2 William Breathitt Gray 2021-02-12  261  	if (err < 0)
74e69a717541f2 William Breathitt Gray 2021-02-12  262  		return err;
74e69a717541f2 William Breathitt Gray 2021-02-12  263  
74e69a717541f2 William Breathitt Gray 2021-02-12  264  	return len;
74e69a717541f2 William Breathitt Gray 2021-02-12  265  }
74e69a717541f2 William Breathitt Gray 2021-02-12  266  
74e69a717541f2 William Breathitt Gray 2021-02-12  267  static ssize_t counter_comp_u64_show(struct device *dev,
74e69a717541f2 William Breathitt Gray 2021-02-12  268  				     struct device_attribute *attr, char *buf)
74e69a717541f2 William Breathitt Gray 2021-02-12  269  {
74e69a717541f2 William Breathitt Gray 2021-02-12  270  	const struct counter_attribute *const a = to_counter_attribute(attr);
74e69a717541f2 William Breathitt Gray 2021-02-12  271  	struct counter_device *const counter = dev_get_drvdata(dev);
74e69a717541f2 William Breathitt Gray 2021-02-12  272  	int err;
74e69a717541f2 William Breathitt Gray 2021-02-12  273  	u64 data = 0;
74e69a717541f2 William Breathitt Gray 2021-02-12  274  
74e69a717541f2 William Breathitt Gray 2021-02-12  275  	switch (a->scope) {
74e69a717541f2 William Breathitt Gray 2021-02-12  276  	case COUNTER_SCOPE_DEVICE:
74e69a717541f2 William Breathitt Gray 2021-02-12  277  		err = a->comp.device_u64_read(counter, &data);
74e69a717541f2 William Breathitt Gray 2021-02-12  278  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  279  	case COUNTER_SCOPE_SIGNAL:
74e69a717541f2 William Breathitt Gray 2021-02-12  280  		err = a->comp.signal_u64_read(counter, a->parent, &data);
74e69a717541f2 William Breathitt Gray 2021-02-12  281  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  282  	case COUNTER_SCOPE_COUNT:
74e69a717541f2 William Breathitt Gray 2021-02-12  283  		err = a->comp.count_u64_read(counter, a->parent, &data);
74e69a717541f2 William Breathitt Gray 2021-02-12  284  		break;
74e69a717541f2 William Breathitt Gray 2021-02-12  285  	}
74e69a717541f2 William Breathitt Gray 2021-02-12 @286  	if (err < 0)
74e69a717541f2 William Breathitt Gray 2021-02-12  287  		return err;
74e69a717541f2 William Breathitt Gray 2021-02-12  288  
74e69a717541f2 William Breathitt Gray 2021-02-12  289  	return sprintf(buf, "%llu\n", (unsigned long long)data);
74e69a717541f2 William Breathitt Gray 2021-02-12  290  }
74e69a717541f2 William Breathitt Gray 2021-02-12  291  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 37872 bytes --]

^ permalink raw reply	[flat|nested] 140+ messages in thread

end of thread, other threads:[~2021-02-28  2:49 UTC | newest]

Thread overview: 140+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-12 12:13 [PATCH v8 00/22] Introduce the Counter character device interface William Breathitt Gray
2021-02-12 12:13 ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 01/22] docs: counter: Consolidate Counter sysfs attributes documentation William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-14 16:57   ` Jonathan Cameron
2021-02-14 16:57     ` Jonathan Cameron
2021-02-15 11:05     ` William Breathitt Gray
2021-02-15 11:05       ` William Breathitt Gray
2021-02-20 16:25   ` David Lechner
2021-02-20 16:25     ` David Lechner
2021-02-12 12:13 ` [PATCH v8 02/22] docs: counter: Fix spelling William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-20 16:26   ` David Lechner
2021-02-20 16:26     ` David Lechner
2021-02-12 12:13 ` [PATCH v8 03/22] counter: 104-quad-8: Return error when invalid mode during ceiling_write William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-20 16:30   ` David Lechner
2021-02-20 16:30     ` David Lechner
2021-02-22  2:06     ` William Breathitt Gray
2021-02-22  2:06       ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 04/22] counter: 104-quad-8: Annotate hardware config module parameter William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 05/22] counter: 104-quad-8: Add const qualifiers for quad8_preset_register_set William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 06/22] counter: 104-quad-8: Add const qualifier for functions_list array William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 07/22] counter: 104-quad-8: Add const qualifier for actions_list array William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 08/22] counter: ftm-quaddec: " William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 09/22] counter: Return error code on invalid modes William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-14 17:07   ` Jonathan Cameron
2021-02-14 17:07     ` Jonathan Cameron
2021-02-20 16:43   ` David Lechner
2021-02-20 16:43     ` David Lechner
2021-02-22  4:42     ` William Breathitt Gray
2021-02-22  4:42       ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 10/22] counter: Standardize to ERANGE for limit exceeded errors William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-14 17:10   ` Jonathan Cameron
2021-02-14 17:10     ` Jonathan Cameron
2021-02-16  1:26     ` William Breathitt Gray
2021-02-16  1:26       ` William Breathitt Gray
2021-02-21 14:03       ` Jonathan Cameron
2021-02-21 14:03         ` Jonathan Cameron
2021-02-20 16:48   ` David Lechner
2021-02-20 16:48     ` David Lechner
2021-02-12 12:13 ` [PATCH v8 11/22] counter: Rename counter_signal_value to counter_signal_level William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-20 16:52   ` David Lechner
2021-02-20 16:52     ` David Lechner
2021-02-12 12:13 ` [PATCH v8 12/22] counter: Rename counter_count_function to counter_function William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-14 17:13   ` Jonathan Cameron
2021-02-14 17:13     ` Jonathan Cameron
2021-02-20 16:56     ` David Lechner
2021-02-20 16:56       ` David Lechner
2021-02-23  5:14       ` William Breathitt Gray
2021-02-23  5:14         ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 13/22] counter: Internalize sysfs interface code William Breathitt Gray
2021-02-14 17:32   ` Jonathan Cameron
2021-02-14 17:32     ` Jonathan Cameron
2021-02-20 17:50   ` David Lechner
2021-02-20 17:50     ` David Lechner
2021-02-12 12:13 ` [PATCH v8 14/22] counter: Update counter.h comments to reflect sysfs internalization William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 15/22] docs: counter: Update " William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 16/22] counter: Move counter enums to uapi header William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-20 23:55   ` David Lechner
2021-02-20 23:55     ` David Lechner
2021-02-12 12:13 ` [PATCH v8 17/22] counter: Add character device interface William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-14 18:06   ` Jonathan Cameron
2021-02-14 18:06     ` Jonathan Cameron
2021-02-24  5:34     ` William Breathitt Gray
2021-02-24  5:34       ` William Breathitt Gray
2021-02-15  9:24   ` Oleksij Rempel
2021-02-15  9:24     ` Oleksij Rempel
2021-02-16  1:53     ` William Breathitt Gray
2021-02-16  1:53       ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 18/22] docs: counter: Document " William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-14 17:48   ` Jonathan Cameron
2021-02-14 17:48     ` Jonathan Cameron
2021-02-22 10:11     ` Pavel Machek
2021-02-22 10:11       ` Pavel Machek
2021-02-26  0:27       ` William Breathitt Gray
2021-02-26  0:27         ` William Breathitt Gray
2021-02-26  0:22     ` William Breathitt Gray
2021-02-26  0:22       ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 19/22] counter: Implement extension*_name sysfs attributes William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-14 18:09   ` Jonathan Cameron
2021-02-14 18:09     ` Jonathan Cameron
2021-02-19  8:51     ` William Breathitt Gray
2021-02-19  8:51       ` William Breathitt Gray
2021-02-21 14:05       ` Jonathan Cameron
2021-02-21 14:05         ` Jonathan Cameron
2021-02-25 23:32         ` William Breathitt Gray
2021-02-25 23:32           ` William Breathitt Gray
2021-02-27 15:14           ` Jonathan Cameron
2021-02-27 15:14             ` Jonathan Cameron
2021-02-12 12:13 ` [PATCH v8 20/22] counter: Implement events_queue_size sysfs attribute William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-14 18:11   ` Jonathan Cameron
2021-02-14 18:11     ` Jonathan Cameron
2021-02-18 10:32     ` William Breathitt Gray
2021-02-18 10:32       ` William Breathitt Gray
2021-02-21 15:51       ` Jonathan Cameron
2021-02-21 15:51         ` Jonathan Cameron
2021-02-26  0:03         ` William Breathitt Gray
2021-02-26  0:03           ` William Breathitt Gray
2021-02-27  0:14           ` David Lechner
2021-02-27  0:14             ` David Lechner
2021-02-27  0:20             ` William Breathitt Gray
2021-02-27  0:20               ` William Breathitt Gray
2021-02-27 15:18           ` Jonathan Cameron
2021-02-27 15:18             ` Jonathan Cameron
2021-02-28  2:46             ` William Breathitt Gray
2021-02-28  2:46               ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 21/22] counter: 104-quad-8: Replace mutex with spinlock William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-14 18:19   ` Jonathan Cameron
2021-02-14 18:19     ` Jonathan Cameron
2021-02-16  2:16     ` William Breathitt Gray
2021-02-16  2:16       ` William Breathitt Gray
2021-02-16 19:27       ` Jonathan Cameron
2021-02-16 19:27         ` Jonathan Cameron
2021-02-18 10:16         ` William Breathitt Gray
2021-02-18 10:16           ` William Breathitt Gray
2021-02-12 12:13 ` [PATCH v8 22/22] counter: 104-quad-8: Add IRQ support for the ACCES 104-QUAD-8 William Breathitt Gray
2021-02-12 12:13   ` William Breathitt Gray
2021-02-14 18:24   ` Jonathan Cameron
2021-02-14 18:24     ` Jonathan Cameron
2021-02-19  9:21     ` William Breathitt Gray
2021-02-19  9:21       ` William Breathitt Gray
2021-02-12 23:14 [PATCH v8 13/22] counter: Internalize sysfs interface code kernel test robot

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.