• William Breathitt Gray's avatar
    counter: Internalize sysfs interface code · aaec1a0f
    William Breathitt Gray authored
    This is a reimplementation of the Generic Counter driver interface.
    There are no modifications to the Counter subsystem userspace interface,
    so existing userspace applications should continue to run seamlessly.
    
    The purpose of this patch is to internalize the sysfs interface code
    among the various counter drivers into a shared module. Counter drivers
    pass and take data natively (i.e. u8, u64, etc.) and the shared counter
    module handles the translation between the sysfs interface and the
    device drivers. This guarantees a standard userspace interface for all
    counter drivers, and helps generalize the Generic Counter driver ABI in
    order to support the Generic Counter chrdev interface (introduced in a
    subsequent patch) without significant changes to the existing counter
    drivers.
    
    Note, Counter device registration is the same as before: drivers
    populate a struct counter_device with components and callbacks, then
    pass the structure to the devm_counter_register function. However,
    what's different now is how the Counter subsystem code handles this
    registration internally.
    
    Whereas before callbacks would interact directly with sysfs data, this
    interaction is now abstracted and instead callbacks interact with native
    C data types. The counter_comp structure forms the basis for Counter
    extensions.
    
    The counter-sysfs.c file contains the code to parse through the
    counter_device structure and register the requested components and
    extensions. Attributes are created and populated based on type, with
    respective translation functions to handle the mapping between sysfs and
    the counter driver callbacks.
    
    The translation performed for each attribute is straightforward: the
    attribute type and data is parsed from the counter_attribute structure,
    the respective counter driver read/write callback is called, and sysfs
    I/O is handled before or after the driver read/write function is called.
    
    Cc: Jarkko Nikula <jarkko.nikula@linux.intel.com>
    Cc: Patrick Havelange <patrick.havelange@essensium.com>
    Cc: Kamel Bouhara <kamel.bouhara@bootlin.com>
    Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
    Cc: Alexandre Torgue <alexandre.torgue@st.com>
    Cc: Dan Carpenter <dan.carpenter@oracle.com>
    Acked-by: default avatarSyed Nayyar Waris <syednwaris@gmail.com>
    Reviewed-by: default avatarDavid Lechner <david@lechnology.com>
    Tested-by: default avatarDavid Lechner <david@lechnology.com>
    Signed-off-by: default avatarWilliam Breathitt Gray <vilhelm.gray@gmail.com>
    Reviewed-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com> # for stm32
    Link: https://lore.kernel.org/r/c68b4a1ffb195c1a2f65e8dd5ad7b7c14e79c6ef.1630031207.git.vilhelm.gray@gmail.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
    aaec1a0f
counter-sysfs.h 292 Bytes