]> git.itanic.dy.fi Git - linux-stable/commitdiff
nvmem: core: provide own priv pointer in post process callback
authorMichael Walle <michael@walle.cc>
Tue, 4 Apr 2023 17:21:28 +0000 (18:21 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 5 Apr 2023 17:41:11 +0000 (19:41 +0200)
It doesn't make any more sense to have a opaque pointer set up by the
nvmem device. Usually, the layout isn't associated with a particular
nvmem device. Instead, let the caller who set the post process callback
provide the priv pointer.

Signed-off-by: Michael Walle <michael@walle.cc>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20230404172148.82422-21-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/nvmem/core.c
include/linux/nvmem-provider.h

index fccb2728193acd5c5b193295bb54cbce45118be5..212c5ba5789ffbda8f3668a04db2f3b220eb8026 100644 (file)
@@ -54,6 +54,7 @@ struct nvmem_cell_entry {
        int                     bit_offset;
        int                     nbits;
        nvmem_cell_post_process_t read_post_process;
+       void                    *priv;
        struct device_node      *np;
        struct nvmem_device     *nvmem;
        struct list_head        node;
@@ -471,6 +472,7 @@ static int nvmem_cell_info_to_nvmem_cell_entry_nodup(struct nvmem_device *nvmem,
        cell->bytes = info->bytes;
        cell->name = info->name;
        cell->read_post_process = info->read_post_process;
+       cell->priv = info->priv;
 
        cell->bit_offset = info->bit_offset;
        cell->nbits = info->nbits;
@@ -1568,7 +1570,7 @@ static int __nvmem_cell_read(struct nvmem_device *nvmem,
                nvmem_shift_read_buffer_in_place(cell, buf);
 
        if (cell->read_post_process) {
-               rc = cell->read_post_process(nvmem->priv, id, index,
+               rc = cell->read_post_process(cell->priv, id, index,
                                             cell->offset, buf, cell->bytes);
                if (rc)
                        return rc;
index d3d7af86a2835c84cd4122710c1ecf8b28a38ee6..0cf9f9490514cae39d853e07cc2e5e75243ae900 100644 (file)
@@ -20,7 +20,8 @@ typedef int (*nvmem_reg_write_t)(void *priv, unsigned int offset,
                                 void *val, size_t bytes);
 /* used for vendor specific post processing of cell data */
 typedef int (*nvmem_cell_post_process_t)(void *priv, const char *id, int index,
-                                        unsigned int offset, void *buf, size_t bytes);
+                                        unsigned int offset, void *buf,
+                                        size_t bytes);
 
 enum nvmem_type {
        NVMEM_TYPE_UNKNOWN = 0,
@@ -56,6 +57,7 @@ struct nvmem_keepout {
  * @np:                Optional device_node pointer.
  * @read_post_process: Callback for optional post processing of cell data
  *                     on reads.
+ * @priv:      Opaque data passed to the read_post_process hook.
  */
 struct nvmem_cell_info {
        const char              *name;
@@ -65,6 +67,7 @@ struct nvmem_cell_info {
        unsigned int            nbits;
        struct device_node      *np;
        nvmem_cell_post_process_t read_post_process;
+       void                    *priv;
 };
 
 /**