From: Nenghua Cao <[email protected]>
In some cases, we need regmap's format parse_val function
to do be/le translation according to the bus configuration.
For example, snd_soc_bytes_put() uses regmap to write/read values,
and use cpu_to_be() directly to covert MASK into big endian. This
is a defect, and should use regmap's format function to do it according
to bus configuration.
Signed-off-by: Nenghua Cao <[email protected]>
---
drivers/base/regmap/regmap.c | 12 ++++++++++++
include/linux/regmap.h | 9 +++++++++
2 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index 6a19515..4b2ed0c 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -2240,6 +2240,18 @@ int regmap_get_val_bytes(struct regmap *map)
}
EXPORT_SYMBOL_GPL(regmap_get_val_bytes);
+int regmap_parse_val(struct regmap *map, const void *buf,
+ unsigned int *val)
+{
+ if (!map->format.parse_val)
+ return -EINVAL;
+
+ *val = map->format.parse_val(buf);
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(regmap_parse_val);
+
static int __init regmap_initcall(void)
{
regmap_debugfs_initcall();
diff --git a/include/linux/regmap.h b/include/linux/regmap.h
index 4149f1a..3e1a2e4 100644
--- a/include/linux/regmap.h
+++ b/include/linux/regmap.h
@@ -423,6 +423,8 @@ bool regmap_check_range_table(struct regmap *map, unsigned int reg,
int regmap_register_patch(struct regmap *map, const struct reg_default *regs,
int num_regs);
+int regmap_parse_val(struct regmap *map, const void *buf,
+ unsigned int *val);
static inline bool regmap_reg_in_range(unsigned int reg,
const struct regmap_range *range)
@@ -695,6 +697,13 @@ static inline int regmap_register_patch(struct regmap *map,
return -EINVAL;
}
+static inline int regmap_parse_val(struct regmap *map, const void *buf,
+ unsigned int *val)
+{
+ WARN_ONCE(1, "regmap API is disabled");
+ return -EINVAL;
+}
+
static inline struct regmap *dev_get_regmap(struct device *dev,
const char *name)
{
--
1.7.0.4
Hi, Mark:
Do you still have any other problem which have impact on evaluating
these two patches?
BR
Nenghua
On 02/19/2014 06:44 PM, Nenghua Cao wrote:
> From: Nenghua Cao <[email protected]>
>
> In some cases, we need regmap's format parse_val function
> to do be/le translation according to the bus configuration.
> For example, snd_soc_bytes_put() uses regmap to write/read values,
> and use cpu_to_be() directly to covert MASK into big endian. This
> is a defect, and should use regmap's format function to do it according
> to bus configuration.
>
> Signed-off-by: Nenghua Cao <[email protected]>
> ---
> drivers/base/regmap/regmap.c | 12 ++++++++++++
> include/linux/regmap.h | 9 +++++++++
> 2 files changed, 21 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
> index 6a19515..4b2ed0c 100644
> --- a/drivers/base/regmap/regmap.c
> +++ b/drivers/base/regmap/regmap.c
> @@ -2240,6 +2240,18 @@ int regmap_get_val_bytes(struct regmap *map)
> }
> EXPORT_SYMBOL_GPL(regmap_get_val_bytes);
>
> +int regmap_parse_val(struct regmap *map, const void *buf,
> + unsigned int *val)
> +{
> + if (!map->format.parse_val)
> + return -EINVAL;
> +
> + *val = map->format.parse_val(buf);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(regmap_parse_val);
> +
> static int __init regmap_initcall(void)
> {
> regmap_debugfs_initcall();
> diff --git a/include/linux/regmap.h b/include/linux/regmap.h
> index 4149f1a..3e1a2e4 100644
> --- a/include/linux/regmap.h
> +++ b/include/linux/regmap.h
> @@ -423,6 +423,8 @@ bool regmap_check_range_table(struct regmap *map, unsigned int reg,
>
> int regmap_register_patch(struct regmap *map, const struct reg_default *regs,
> int num_regs);
> +int regmap_parse_val(struct regmap *map, const void *buf,
> + unsigned int *val);
>
> static inline bool regmap_reg_in_range(unsigned int reg,
> const struct regmap_range *range)
> @@ -695,6 +697,13 @@ static inline int regmap_register_patch(struct regmap *map,
> return -EINVAL;
> }
>
> +static inline int regmap_parse_val(struct regmap *map, const void *buf,
> + unsigned int *val)
> +{
> + WARN_ONCE(1, "regmap API is disabled");
> + return -EINVAL;
> +}
> +
> static inline struct regmap *dev_get_regmap(struct device *dev,
> const char *name)
> {
>
On Thu, Feb 20, 2014 at 04:24:06PM +0800, Nenghua Cao wrote:
> Do you still have any other problem which have impact on evaluating
> these two patches?
You're chasing me for a reply after a day - that's way too soon, please
allow a reasonable time for a response. A week or so is usually a good
minimum.
On 02/20/2014 04:55 PM, Mark Brown wrote:
> On Thu, Feb 20, 2014 at 04:24:06PM +0800, Nenghua Cao wrote:
>
>> Do you still have any other problem which have impact on evaluating
>> these two patches?
>
> You're chasing me for a reply after a day - that's way too soon, please
> allow a reasonable time for a response. A week or so is usually a good
> minimum.
>
Hi, Mark:
My intention is not chasing you. I am just afraid if there is any
other mistake when submitting this patch to open source. Please do what
you want to do. Thanks!
BR
Nenghua
On Thu, Feb 20, 2014 at 08:09:51PM +0800, Nenghua Cao wrote:
> My intention is not chasing you. I am just afraid if there is any
> other mistake when submitting this patch to open source. Please do what
> you want to do. Thanks!
It's certainly fine in terms of submission, no problems there!