The BCM59056 supported by the bcm590xx driver is similar to the
BCM59054 MFD. Add a compatible for it in the driver, in preparation
for extending support of this chip in the bcm590xx regulator driver.
Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
---
Changes in v3:
- Fix compilation warning about device_type pointer cast type
- Name the device types enum and use it as the type in the MFD struct
---
drivers/mfd/bcm590xx.c | 6 +++++-
include/linux/mfd/bcm590xx.h | 7 +++++++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/drivers/mfd/bcm590xx.c b/drivers/mfd/bcm590xx.c
index 8b56786d85d0182acf91da203b5f943556c08422..23036157480e0116301bfa93932c92f5a80010ea 100644
--- a/drivers/mfd/bcm590xx.c
+++ b/drivers/mfd/bcm590xx.c
@@ -50,6 +50,9 @@ static int bcm590xx_i2c_probe(struct i2c_client *i2c_pri)
bcm590xx->dev = &i2c_pri->dev;
bcm590xx->i2c_pri = i2c_pri;
+ bcm590xx->device_type = \
+ (uintptr_t) of_device_get_match_data(bcm590xx->dev);
+
bcm590xx->regmap_pri = devm_regmap_init_i2c(i2c_pri,
&bcm590xx_regmap_config_pri);
if (IS_ERR(bcm590xx->regmap_pri)) {
@@ -91,7 +94,8 @@ static int bcm590xx_i2c_probe(struct i2c_client *i2c_pri)
}
static const struct of_device_id bcm590xx_of_match[] = {
- { .compatible = "brcm,bcm59056" },
+ { .compatible = "brcm,bcm59054", .data = (void *)BCM59054_TYPE },
+ { .compatible = "brcm,bcm59056", .data = (void *)BCM59056_TYPE },
{ }
};
MODULE_DEVICE_TABLE(of, bcm590xx_of_match);
diff --git a/include/linux/mfd/bcm590xx.h b/include/linux/mfd/bcm590xx.h
index 6b8791da6119b22514447bf1572238b71c8b0e97..b76fb57bf0dd17d51580e93db58ece4a4d6dc5e4 100644
--- a/include/linux/mfd/bcm590xx.h
+++ b/include/linux/mfd/bcm590xx.h
@@ -13,12 +13,19 @@
#include <linux/i2c.h>
#include <linux/regmap.h>
+/* device types */
+enum bcm590xx_device_type {
+ BCM59054_TYPE,
+ BCM59056_TYPE,
+};
+
/* max register address */
#define BCM590XX_MAX_REGISTER_PRI 0xe7
#define BCM590XX_MAX_REGISTER_SEC 0xf0
struct bcm590xx {
struct device *dev;
+ enum bcm590xx_device_type device_type;
struct i2c_client *i2c_pri;
struct i2c_client *i2c_sec;
struct regmap *regmap_pri;
--
2.48.1
On Fri, 31 Jan 2025, Artur Weber wrote:
> The BCM59056 supported by the bcm590xx driver is similar to the
> BCM59054 MFD. Add a compatible for it in the driver, in preparation
> for extending support of this chip in the bcm590xx regulator driver.
>
> Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
> ---
> Changes in v3:
> - Fix compilation warning about device_type pointer cast type
> - Name the device types enum and use it as the type in the MFD struct
> ---
> drivers/mfd/bcm590xx.c | 6 +++++-
> include/linux/mfd/bcm590xx.h | 7 +++++++
> 2 files changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mfd/bcm590xx.c b/drivers/mfd/bcm590xx.c
> index 8b56786d85d0182acf91da203b5f943556c08422..23036157480e0116301bfa93932c92f5a80010ea 100644
> --- a/drivers/mfd/bcm590xx.c
> +++ b/drivers/mfd/bcm590xx.c
> @@ -50,6 +50,9 @@ static int bcm590xx_i2c_probe(struct i2c_client *i2c_pri)
> bcm590xx->dev = &i2c_pri->dev;
> bcm590xx->i2c_pri = i2c_pri;
>
> + bcm590xx->device_type = \
> + (uintptr_t) of_device_get_match_data(bcm590xx->dev);
Why are you dividing pointers with each other?
> bcm590xx->regmap_pri = devm_regmap_init_i2c(i2c_pri,
> &bcm590xx_regmap_config_pri);
> if (IS_ERR(bcm590xx->regmap_pri)) {
> @@ -91,7 +94,8 @@ static int bcm590xx_i2c_probe(struct i2c_client *i2c_pri)
> }
>
> static const struct of_device_id bcm590xx_of_match[] = {
> - { .compatible = "brcm,bcm59056" },
> + { .compatible = "brcm,bcm59054", .data = (void *)BCM59054_TYPE },
> + { .compatible = "brcm,bcm59056", .data = (void *)BCM59056_TYPE },
> { }
> };
> MODULE_DEVICE_TABLE(of, bcm590xx_of_match);
> diff --git a/include/linux/mfd/bcm590xx.h b/include/linux/mfd/bcm590xx.h
> index 6b8791da6119b22514447bf1572238b71c8b0e97..b76fb57bf0dd17d51580e93db58ece4a4d6dc5e4 100644
> --- a/include/linux/mfd/bcm590xx.h
> +++ b/include/linux/mfd/bcm590xx.h
> @@ -13,12 +13,19 @@
> #include <linux/i2c.h>
> #include <linux/regmap.h>
>
> +/* device types */
> +enum bcm590xx_device_type {
> + BCM59054_TYPE,
> + BCM59056_TYPE,
> +};
> +
> /* max register address */
> #define BCM590XX_MAX_REGISTER_PRI 0xe7
> #define BCM590XX_MAX_REGISTER_SEC 0xf0
>
> struct bcm590xx {
> struct device *dev;
> + enum bcm590xx_device_type device_type;
> struct i2c_client *i2c_pri;
> struct i2c_client *i2c_sec;
> struct regmap *regmap_pri;
>
> --
> 2.48.1
>
--
Lee Jones [李琼斯]
On 7.02.2025 09:48, Lee Jones wrote: > On Fri, 31 Jan 2025, Artur Weber wrote: > >> The BCM59056 supported by the bcm590xx driver is similar to the >> BCM59054 MFD. Add a compatible for it in the driver, in preparation >> for extending support of this chip in the bcm590xx regulator driver. >> >> Signed-off-by: Artur Weber <aweber.kernel@gmail.com> >> --- >> Changes in v3: >> - Fix compilation warning about device_type pointer cast type >> - Name the device types enum and use it as the type in the MFD struct >> --- >> drivers/mfd/bcm590xx.c | 6 +++++- >> include/linux/mfd/bcm590xx.h | 7 +++++++ >> 2 files changed, 12 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/mfd/bcm590xx.c b/drivers/mfd/bcm590xx.c >> index 8b56786d85d0182acf91da203b5f943556c08422..23036157480e0116301bfa93932c92f5a80010ea 100644 >> --- a/drivers/mfd/bcm590xx.c >> +++ b/drivers/mfd/bcm590xx.c >> @@ -50,6 +50,9 @@ static int bcm590xx_i2c_probe(struct i2c_client *i2c_pri) >> bcm590xx->dev = &i2c_pri->dev; >> bcm590xx->i2c_pri = i2c_pri; >> >> + bcm590xx->device_type = \ >> + (uintptr_t) of_device_get_match_data(bcm590xx->dev); > > Why are you dividing pointers with each other? That's not division, it's a line continuation (note the space before "\") - had to insert it for the line to fit in 80 characters. Though admittedly, there's probably a better way to do this than to force it with "\"... I will clean this up in the next version. Best regards Artur
On Fri, 07 Feb 2025, Artur Weber wrote: > On 7.02.2025 09:48, Lee Jones wrote: > > On Fri, 31 Jan 2025, Artur Weber wrote: > > > > > The BCM59056 supported by the bcm590xx driver is similar to the > > > BCM59054 MFD. Add a compatible for it in the driver, in preparation > > > for extending support of this chip in the bcm590xx regulator driver. > > > > > > Signed-off-by: Artur Weber <aweber.kernel@gmail.com> > > > --- > > > Changes in v3: > > > - Fix compilation warning about device_type pointer cast type > > > - Name the device types enum and use it as the type in the MFD struct > > > --- > > > drivers/mfd/bcm590xx.c | 6 +++++- > > > include/linux/mfd/bcm590xx.h | 7 +++++++ > > > 2 files changed, 12 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/mfd/bcm590xx.c b/drivers/mfd/bcm590xx.c > > > index 8b56786d85d0182acf91da203b5f943556c08422..23036157480e0116301bfa93932c92f5a80010ea 100644 > > > --- a/drivers/mfd/bcm590xx.c > > > +++ b/drivers/mfd/bcm590xx.c > > > @@ -50,6 +50,9 @@ static int bcm590xx_i2c_probe(struct i2c_client *i2c_pri) > > > bcm590xx->dev = &i2c_pri->dev; > > > bcm590xx->i2c_pri = i2c_pri; > > > + bcm590xx->device_type = \ > > > + (uintptr_t) of_device_get_match_data(bcm590xx->dev); > > > > Why are you dividing pointers with each other? > > That's not division, it's a line continuation (note the space before The space is irrelevant in C. > "\") - had to insert it for the line to fit in 80 characters. Though > admittedly, there's probably a better way to do this than to force it > with "\"... You do not need to escape the line break in C-functions. > I will clean this up in the next version. You can use up to 100-chars these days, so you don't need the break at all. However, if you insist on keeping to the old 80-char rule, you can just omit the escape char. -- Lee Jones [李琼斯]
© 2016 - 2026 Red Hat, Inc.