Skip to contentSkip to conversation

mfd: Provide MACRO to declare commonly defined MFD cell attributes

PATCH Superseded Lee Jones 4 participants 11 messages Feb 9, 2016 – Feb 26, 2016

Subsystems (2)
lore
Share & tools
lore

Lee Jones

author
#0 lore raw

PATCH 1/1 mfd: Provide MACRO to declare commonly defined MFD cell attributes

Cc Laxman Dewangan <[email protected]>
---
 include/linux/mfd/core.h | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)
include/linux/mfd/core.h +32 -0
index 27dac3f..dacdc49 100644
@@ -16,6 +16,38 @@
 
 #include <linux/platform_device.h>
 
+#define MFD_CELL_ALL(_name, _res, _pdata, _id, _compat, _match)		\
+	{								\
+		.name = (_name),					\
+		.num_resources = ARRAY_SIZE((_res)),			\
+		.resources = (_res),					\
+		.platform_data = (_pdata),				\
+		.pdata_size = ARRAY_SIZE((_pdata)),			\
+		.of_compatible = (_compat),				\
+		.acpi_match = (_match),					\
+		.id = _id,						\
+	}
+
+#define OF_MFD_CELL(_name, _res, _pdata, _id, _compat)			\
+	{								\
+		MFD_CELL_ALL(_name, _res, _pdata, _id, _compat, NULL)	\
+	}
+
+#define ACPI_MFD_CELL(_name, _res, _pdata, _id, _match)			\
+	{								\
+		MFD_CELL_ALL(_name, _res, _pdata, _id, NULL, _match)	\
+	}
+
+#define MFD_CELL_BASIC(_name, _res, _pdata, _id)			\
+	{								\
+		MFD_CELL_ALL(_name, _res, _pdata, _id, NULL, NULL)	\
+	}
+
+#define MFD_CELL_NAME(_name)						\
+	{								\
+		MFD_CELL_ALL(_name, NULL, NULL, 0, NULL, NULL)		\
+	}
+
 struct irq_domain;
 
 /* Matches ACPI PNP id, either _HID or _CID, or ACPI _ADR */
Signature · 1 line
1.9.1
#1 lore raw

include/linux/mfd/core.h line 51

Quoted 7 lines · Lee Jones
include/linux/mfd/core.h +6 -0
+
+#define MFD_CELL_NAME(_name)						\
+	{								\
+		MFD_CELL_ALL(_name, NULL, NULL, 0, NULL, NULL)		\
+	}
+
  struct irq_domain;

It is failed in compilation as we can not use ARRAY_SIZE(NULL)

static struct mfd_cell max77620_children[] = {
         MFD_CELL_NAME("max77620-pinctrl"),
};

CC drivers/mfd/max77620.o
drivers/mfd/max77620.c:57:2: warning: braces around scalar initializer
MFD_CELL_NAME("max77620-pinctrl"),

include/linux/compiler-gcc.h:64:63: warning: taking address of expression of type 'void'

  #define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
                                                                ^
include/linux/bug.h:33:55: note: in definition of macro 'BUILD_BUG_ON_ZERO'
  #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
                                                        ^

include/linux/compiler-gcc.h:64:46: note: in expansion of macro '__same_type'
#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))

#2 lore raw
In reply to Lee Jones
Quoted 16 lines · Lee Jones
Cc Laxman Dewangan <[email protected]>
---
  include/linux/mfd/core.h | 32 ++++++++++++++++++++++++++++++++
  1 file changed, 32 insertions(+)
include/linux/mfd/core.h +2 -0
index 27dac3f..dacdc49 100644
@@ -16,6 +16,38 @@
 
  #include <linux/platform_device.h>
 
+#define MFD_CELL_ALL(_name, _res, _pdata, _id, _compat, _match)		\
+	{								\

include/linux/mfd/core.h line 30

Quoted 10 lines
include/linux/mfd/core.h +9 -0
+		.name = (_name),					\
+		.num_resources = ARRAY_SIZE((_res)),			\
+		.resources = (_res),					\
+		.platform_data = (_pdata),				\
+		.pdata_size = ARRAY_SIZE((_pdata)),			\
+		.of_compatible = (_compat),				\
+		.acpi_match = (_match),					\
+		.id = _id,						\
+	}
 

Should we add the _res_size and _pdata_size also in argument and use them instead of ARRA_SIZE and lets client set the size with help of ARRAY_SIZE based on type of data?

author
#3 lore raw

PATCH v2 1/1 mfd: Provide MACRO to declare commonly defined MFD cell attributes

In reply to Lee Jones

mfd: Provide MACRO to declare commonly defined MFD cell attributes

Cc Laxman Dewangan <[email protected]>
---
 include/linux/mfd/core.h | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)
include/linux/mfd/core.h +26 -0
index bc6f7e0..1a5a87f 100644
@@ -16,6 +16,32 @@
 
 #include <linux/platform_device.h>
 
+#define MFD_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
+
+#define MFD_CELL_ALL(_name, _res, _pdata, _id, _compat, _match)		\
+	{								\
+		.name = (_name),					\
+		.resources = (_res),					\
+		.num_resources = MFD_ARRAY_SIZE((_res)),		\
+		.platform_data = (_pdata),				\
+		.pdata_size = MFD_ARRAY_SIZE((_pdata)), 		\
+		.of_compatible = (_compat),				\
+		.acpi_match = (_match),					\
+		.id = _id,						\
+	}
+
+#define OF_MFD_CELL(_name, _res, _pdata, _id, _compat)			\
+		MFD_CELL_ALL(_name, _res, _pdata, _id, _compat, NULL)	\
+
+#define ACPI_MFD_CELL(_name, _res, _pdata, _id, _match)			\
+		MFD_CELL_ALL(_name, _res, _pdata, _id, NULL, _match)	\
+
+#define MFD_CELL_BASIC(_name, _res, _pdata, _id)			\
+		MFD_CELL_ALL(_name, _res, _pdata, _id, NULL, NULL)	\
+
+#define MFD_CELL_NAME(_name)						\
+		MFD_CELL_ALL(_name, NULL, NULL, 0, NULL, NULL)		\
+
 struct irq_domain;
 struct property_set;
author
#5 lore raw
Quoted 6 lines · Laxman Dewangan
Quoted 3 lines · Lee Jones

mfd: Provide MACRO to declare commonly defined MFD cell attributes

Cc Laxman Dewangan <[email protected]>
Quoted 6 lines

Build passed with this patch when using it.

Please let me know if you applying this. I am going to use the macro from this patch on max77620 series on next spin.

As you are the first user, just submit it as 0/1 of your set.

Signature · 4 lines
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
#6 lore raw
Quoted 6 lines · Lee Jones
Quoted 4 lines · Laxman Dewangan
Quoted 3 lines · Lee Jones

mfd: Provide MACRO to declare commonly defined MFD cell attributes

Cc Laxman Dewangan <[email protected]>
Quoted 8 lines
Quoted 6 lines

Build passed with this patch when using it.

Please let me know if you applying this. I am going to use the macro from this patch on max77620 series on next spin.

As you are the first user, just submit it as 0/1 of your set.

I saw that it is merged and available in linux-next 20160211. So it is fine to not submit this patch again and modify my patch assuming it is on tree.

author
#7 lore raw
Quoted 12 lines · Laxman Dewangan
Quoted 10 lines · Lee Jones
Quoted 8 lines · Laxman Dewangan
Quoted 3 lines · Lee Jones

mfd: Provide MACRO to declare commonly defined MFD cell attributes

Cc Laxman Dewangan <[email protected]>

Build passed with this patch when using it.

Quoted 8 lines
Quoted 4 lines
Quoted 2 lines

Please let me know if you applying this. I am going to use the macro from this patch on max77620 series on next spin.

As you are the first user, just submit it as 0/1 of your set.

I saw that it is merged and available in linux-next 20160211. So it is fine to not submit this patch again and modify my patch assuming it is on tree.

I was going to handle that, but as you wish, either way is fine by me.

Signature · 4 lines
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
#8 lore raw
In reply to Lee Jones
Quoted 2 lines · Lee Jones

mfd: Provide MACRO to declare commonly defined MFD cell attributes

Commit message?

Quoted 1 line

+#define MFD_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))

What's wrong with ARRAY_SIZE() ?

include/linux/mfd/core.h line 21

Quoted 2 lines
include/linux/mfd/core.h +2 -0
+
+#define MFD_CELL_ALL(_name, _res, _pdata, _id, _compat, _match)                \

It misses pset. Which makes below set of macros is not sufficient.

Quoted 22 lines
include/linux/mfd/core.h +22 -0
+       {                                                               \
+               .name = (_name),                                        \
+               .resources = (_res),                                    \
+               .num_resources = MFD_ARRAY_SIZE((_res)),                \
+               .platform_data = (_pdata),                              \
+               .pdata_size = MFD_ARRAY_SIZE((_pdata)),                 \
+               .of_compatible = (_compat),                             \
+               .acpi_match = (_match),                                 \
+               .id = _id,                                              \
+       }
+
+#define OF_MFD_CELL(_name, _res, _pdata, _id, _compat)                 \
+               MFD_CELL_ALL(_name, _res, _pdata, _id, _compat, NULL)   \
+
+#define ACPI_MFD_CELL(_name, _res, _pdata, _id, _match)                        \
+               MFD_CELL_ALL(_name, _res, _pdata, _id, NULL, _match)    \
+
+#define MFD_CELL_BASIC(_name, _res, _pdata, _id)                       \
+               MFD_CELL_ALL(_name, _res, _pdata, _id, NULL, NULL)      \
+
+#define MFD_CELL_NAME(_name)                                           \
+               MFD_CELL_ALL(_name, NULL, NULL, 0, NULL, NULL)          \
Signature · 2 lines
With Best Regards,
Andy Shevchenko
author
#9 lore raw

PATCH v2 1/1 mfd: ab8500: Provide a small example using new MFD cell MACROs

In reply to Lee Jones

mfd: ab8500: Provide a small example using new MFD cell MACROs

---
 drivers/mfd/ab8500-core.c | 106 +++++++++++++++-------------------------------
 1 file changed, 34 insertions(+), 72 deletions(-)
drivers/mfd/ab8500-core.c +34 -72
index f3d6891..c03a86e 100644
@@ -634,79 +634,41 @@ static const struct mfd_cell ab8500_bm_devs[] = {
 
 static const struct mfd_cell ab8500_devs[] = {
 #ifdef CONFIG_DEBUG_FS
-	{
-		.name = "ab8500-debug",
-		.of_compatible = "stericsson,ab8500-debug",
-	},
+	OF_MFD_CELL("ab8500-debug",
+		    NULL, NULL, 0, "stericsson,ab8500-debug"),
 #endif
-	{
-		.name = "ab8500-sysctrl",
-		.of_compatible = "stericsson,ab8500-sysctrl",
-	},
-	{
-		.name = "ab8500-ext-regulator",
-		.of_compatible = "stericsson,ab8500-ext-regulator",
-	},
-	{
-		.name = "ab8500-regulator",
-		.of_compatible = "stericsson,ab8500-regulator",
-	},
-	{
-		.name = "abx500-clk",
-		.of_compatible = "stericsson,abx500-clk",
-	},
-	{
-		.name = "ab8500-gpadc",
-		.of_compatible = "stericsson,ab8500-gpadc",
-	},
-	{
-		.name = "ab8500-rtc",
-		.of_compatible = "stericsson,ab8500-rtc",
-	},
-	{
-		.name = "ab8500-acc-det",
-		.of_compatible = "stericsson,ab8500-acc-det",
-	},
-	{
-
-		.name = "ab8500-poweron-key",
-		.of_compatible = "stericsson,ab8500-poweron-key",
-	},
-	{
-		.name = "ab8500-pwm",
-		.of_compatible = "stericsson,ab8500-pwm",
-		.id = 1,
-	},
-	{
-		.name = "ab8500-pwm",
-		.of_compatible = "stericsson,ab8500-pwm",
-		.id = 2,
-	},
-	{
-		.name = "ab8500-pwm",
-		.of_compatible = "stericsson,ab8500-pwm",
-		.id = 3,
-	},
-	{
-		.name = "ab8500-denc",
-		.of_compatible = "stericsson,ab8500-denc",
-	},
-	{
-		.name = "pinctrl-ab8500",
-		.of_compatible = "stericsson,ab8500-gpio",
-	},
-	{
-		.name = "abx500-temp",
-		.of_compatible = "stericsson,abx500-temp",
-	},
-	{
-		.name = "ab8500-usb",
-		.of_compatible = "stericsson,ab8500-usb",
-	},
-	{
-		.name = "ab8500-codec",
-		.of_compatible = "stericsson,ab8500-codec",
-	},
+	OF_MFD_CELL("ab8500-sysctrl",
+		    NULL, NULL, 0, "stericsson,ab8500-sysctrl"),
+	OF_MFD_CELL("ab8500-ext-regulator",
+		    NULL, NULL, 0, "stericsson,ab8500-ext-regulator"),
+	OF_MFD_CELL("ab8500-regulator",
+		    NULL, NULL, 0, "stericsson,ab8500-regulator"),
+	OF_MFD_CELL("abx500-clk",
+		    NULL, NULL, 0, "stericsson,abx500-clk"),
+	OF_MFD_CELL("ab8500-gpadc",
+		    NULL, NULL, 0, "stericsson,ab8500-gpadc"),
+	OF_MFD_CELL("ab8500-rtc",
+		    NULL, NULL, 0, "stericsson,ab8500-rtc"),
+	OF_MFD_CELL("ab8500-acc-det",
+		    NULL, NULL, 0, "stericsson,ab8500-acc-det"),
+	OF_MFD_CELL("ab8500-poweron-key",
+		    NULL, NULL, 0, "stericsson,ab8500-poweron-key"),
+	OF_MFD_CELL("ab8500-pwm",
+		    NULL, NULL, 1, "stericsson,ab8500-pwm"),
+	OF_MFD_CELL("ab8500-pwm",
+		    NULL, NULL, 2, "stericsson,ab8500-pwm"),
+	OF_MFD_CELL("ab8500-pwm",
+		    NULL, NULL, 3, "stericsson,ab8500-pwm"),
+	OF_MFD_CELL("ab8500-denc",
+		    NULL, NULL, 0, "stericsson,ab8500-denc"),
+	OF_MFD_CELL("pinctrl-ab8500",
+		    NULL, NULL, 0, "stericsson,ab8500-gpio"),
+	OF_MFD_CELL("abx500-temp",
+		    NULL, NULL, 0, "stericsson,abx500-temp"),
+	OF_MFD_CELL("ab8500-usb",
+		    NULL, NULL, 0, "stericsson,ab8500-usb"),
+	OF_MFD_CELL("ab8500-codec",
+		    NULL, NULL, 0, "stericsson,ab8500-codec"),
 };
 
 static const struct mfd_cell ab9540_devs[] = {