[PATCH 5.15 72/76] regmap: allow to define reg_update_bits for no bus configuration

Sasha Levin posted 76 patches 1 year, 9 months ago
[PATCH 5.15 72/76] regmap: allow to define reg_update_bits for no bus configuration
Posted by Sasha Levin 1 year, 9 months ago
From: Ansuel Smith <ansuelsmth@gmail.com>

[ Upstream commit 02d6fdecb9c38de19065f6bed8d5214556fd061d ]

Some device requires a special handling for reg_update_bits and can't use
the normal regmap read write logic. An example is when locking is
handled by the device and rmw operations requires to do atomic operations.
Allow to declare a dedicated function in regmap_config for
reg_update_bits in no bus configuration.

Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Link: https://lore.kernel.org/r/20211104150040.1260-1-ansuelsmth@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Stable-dep-of: 3f42b142ea11 ("serial: max310x: fix IO data corruption in batched operations")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/base/regmap/regmap.c | 1 +
 include/linux/regmap.h       | 7 +++++++
 2 files changed, 8 insertions(+)

diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index 7621b54975b57..ab924127e0aef 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -877,6 +877,7 @@ struct regmap *__regmap_init(struct device *dev,
 	if (!bus) {
 		map->reg_read  = config->reg_read;
 		map->reg_write = config->reg_write;
+		map->reg_update_bits = config->reg_update_bits;
 
 		map->defer_caching = false;
 		goto skip_format_initialization;
diff --git a/include/linux/regmap.h b/include/linux/regmap.h
index e3c9a25a853a8..22652e5fbc380 100644
--- a/include/linux/regmap.h
+++ b/include/linux/regmap.h
@@ -290,6 +290,11 @@ typedef void (*regmap_unlock)(void *);
  *		  read operation on a bus such as SPI, I2C, etc. Most of the
  *		  devices do not need this.
  * @reg_write:	  Same as above for writing.
+ * @reg_update_bits: Optional callback that if filled will be used to perform
+ *		     all the update_bits(rmw) operation. Should only be provided
+ *		     if the function require special handling with lock and reg
+ *		     handling and the operation cannot be represented as a simple
+ *		     update_bits operation on a bus such as SPI, I2C, etc.
  * @fast_io:	  Register IO is fast. Use a spinlock instead of a mutex
  *	     	  to perform locking. This field is ignored if custom lock/unlock
  *	     	  functions are used (see fields lock/unlock of struct regmap_config).
@@ -372,6 +377,8 @@ struct regmap_config {
 
 	int (*reg_read)(void *context, unsigned int reg, unsigned int *val);
 	int (*reg_write)(void *context, unsigned int reg, unsigned int val);
+	int (*reg_update_bits)(void *context, unsigned int reg,
+			       unsigned int mask, unsigned int val);
 
 	bool fast_io;
 
-- 
2.43.0
Re: [PATCH 5.15 72/76] regmap: allow to define reg_update_bits for no bus configuration
Posted by Mark Brown 1 year, 9 months ago
On Wed, Mar 13, 2024 at 12:42:19PM -0400, Sasha Levin wrote:
> From: Ansuel Smith <ansuelsmth@gmail.com>
> 
> [ Upstream commit 02d6fdecb9c38de19065f6bed8d5214556fd061d ]
> 
> Some device requires a special handling for reg_update_bits and can't use
> the normal regmap read write logic. An example is when locking is
> handled by the device and rmw operations requires to do atomic operations.
> Allow to declare a dedicated function in regmap_config for
> reg_update_bits in no bus configuration.

This is fairly clearly new functionality?
Re: [PATCH 5.15 72/76] regmap: allow to define reg_update_bits for no bus configuration
Posted by Sasha Levin 1 year, 9 months ago
On Wed, Mar 13, 2024 at 04:46:04PM +0000, Mark Brown wrote:
>On Wed, Mar 13, 2024 at 12:42:19PM -0400, Sasha Levin wrote:
>> From: Ansuel Smith <ansuelsmth@gmail.com>
>>
>> [ Upstream commit 02d6fdecb9c38de19065f6bed8d5214556fd061d ]
>>
>> Some device requires a special handling for reg_update_bits and can't use
>> the normal regmap read write logic. An example is when locking is
>> handled by the device and rmw operations requires to do atomic operations.
>> Allow to declare a dedicated function in regmap_config for
>> reg_update_bits in no bus configuration.
>
>This is fairly clearly new functionality?

It is, but like the other commit, this new functionality is needed for a
later fix. We indicate this in the commit message by adding a trailer:

	Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
	Link: https://lore.kernel.org/r/20211104150040.1260-1-ansuelsmth@gmail.com
	Signed-off-by: Mark Brown <broonie@kernel.org>
	Stable-dep-of: 3f42b142ea11 ("serial: max310x: fix IO data corruption in batched operations")
	  ^^^^^^^^^
	Signed-off-by: Sasha Levin <sashal@kernel.org>

-- 
Thanks,
Sasha