LKML Archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/3] device property: Introduce device_is_compatible()
@ 2023-06-09 15:25 Andy Shevchenko
  2023-06-09 15:25 ` [PATCH v1 1/3] ACPI: Move ACPI_DEVICE_CLASS() to mod_devicetable.h Andy Shevchenko
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Andy Shevchenko @ 2023-06-09 15:25 UTC (permalink / raw)
  To: Serge Semin, Damien Le Moal, Andy Shevchenko, Greg Kroah-Hartman,
	linux-ide, linux-kernel, linux-acpi
  Cc: Hans de Goede, Jens Axboe, Rafael J. Wysocki, Len Brown,
	Daniel Scally, Heikki Krogerus, Sakari Ailus

Introduce a new helper to tell if device (node) is compatible to the
given string value. This will help some drivers to get rid of unneeded
OF APIs/etc and in may help others to be agnostic to OF/ACPI.

While doing it, I have noticed that ACPI_DEVICE_CLASS() macro seems
defined in unsuitable location. Move it to the better one.

Last patch is an example of what the first two are doing.

The entire series can go, I believe, via ACPI (linux-pm) tree in case
the last patch gets tag from the respective maintainer.

Andy Shevchenko (3):
  ACPI: Move ACPI_DEVICE_CLASS() to mod_devicetable.h
  device property: Implement device_is_compatible()
  ata: ahci_platform: Make code agnostic to OF/ACPI

 drivers/ata/ahci_platform.c     |  6 +++---
 include/linux/acpi.h            | 14 --------------
 include/linux/mod_devicetable.h | 13 +++++++++++++
 include/linux/property.h        |  5 +++++
 4 files changed, 21 insertions(+), 17 deletions(-)

-- 
2.40.0.1.gaa8946217a0b


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v1 1/3] ACPI: Move ACPI_DEVICE_CLASS() to mod_devicetable.h
  2023-06-09 15:25 [PATCH v1 0/3] device property: Introduce device_is_compatible() Andy Shevchenko
@ 2023-06-09 15:25 ` Andy Shevchenko
  2023-06-09 15:25 ` [PATCH v1 2/3] device property: Implement device_is_compatible() Andy Shevchenko
  2023-06-09 15:25 ` [PATCH v1 3/3] ata: ahci_platform: Make code agnostic to OF/ACPI Andy Shevchenko
  2 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2023-06-09 15:25 UTC (permalink / raw)
  To: Serge Semin, Damien Le Moal, Andy Shevchenko, Greg Kroah-Hartman,
	linux-ide, linux-kernel, linux-acpi
  Cc: Hans de Goede, Jens Axboe, Rafael J. Wysocki, Len Brown,
	Daniel Scally, Heikki Krogerus, Sakari Ailus

The data type of struct acpi_device_id is defined in the
mod_devicetable.h. It's suboptimal to require user with
the almost agnostic code to include acpi.h solely for the
macro that affects the data type defined elsewhere.

Taking into account the above and for the sake of consistency
move ACPI_DEVICE_CLASS() to mod_devicetable.h.

Note, that with CONFIG_ACPI=n the ID table will be filed with data
but it does not really matter because either it won't be used, or
won't be compiled in some cases (when guarded by respective ifdeffery).

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 include/linux/acpi.h            | 14 --------------
 include/linux/mod_devicetable.h | 13 +++++++++++++
 2 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index d41a05d68166..640f1c07c894 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -70,19 +70,6 @@ static inline void acpi_free_fwnode_static(struct fwnode_handle *fwnode)
 	kfree(fwnode);
 }
 
-/**
- * ACPI_DEVICE_CLASS - macro used to describe an ACPI device with
- * the PCI-defined class-code information
- *
- * @_cls : the class, subclass, prog-if triple for this device
- * @_msk : the class mask for this device
- *
- * This macro is used to create a struct acpi_device_id that matches a
- * specific PCI class. The .id and .driver_data fields will be left
- * initialized with the default value.
- */
-#define ACPI_DEVICE_CLASS(_cls, _msk)	.cls = (_cls), .cls_msk = (_msk),
-
 static inline bool has_acpi_companion(struct device *dev)
 {
 	return is_acpi_device_node(dev->fwnode);
@@ -782,7 +769,6 @@ const char *acpi_get_subsystem_id(acpi_handle handle);
 #define ACPI_COMPANION_SET(dev, adev)	do { } while (0)
 #define ACPI_HANDLE(dev)		(NULL)
 #define ACPI_HANDLE_FWNODE(fwnode)	(NULL)
-#define ACPI_DEVICE_CLASS(_cls, _msk)	.cls = (0), .cls_msk = (0),
 
 #include <acpi/acpi_numa.h>
 
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index ccaaeda792c0..486747518aae 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -221,6 +221,19 @@ struct acpi_device_id {
 	__u32 cls_msk;
 };
 
+/**
+ * ACPI_DEVICE_CLASS - macro used to describe an ACPI device with
+ * the PCI-defined class-code information
+ *
+ * @_cls : the class, subclass, prog-if triple for this device
+ * @_msk : the class mask for this device
+ *
+ * This macro is used to create a struct acpi_device_id that matches a
+ * specific PCI class. The .id and .driver_data fields will be left
+ * initialized with the default value.
+ */
+#define ACPI_DEVICE_CLASS(_cls, _msk)	.cls = (_cls), .cls_msk = (_msk),
+
 #define PNP_ID_LEN	8
 #define PNP_MAX_DEVICES	8
 
-- 
2.40.0.1.gaa8946217a0b


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v1 2/3] device property: Implement device_is_compatible()
  2023-06-09 15:25 [PATCH v1 0/3] device property: Introduce device_is_compatible() Andy Shevchenko
  2023-06-09 15:25 ` [PATCH v1 1/3] ACPI: Move ACPI_DEVICE_CLASS() to mod_devicetable.h Andy Shevchenko
@ 2023-06-09 15:25 ` Andy Shevchenko
  2023-06-09 15:33   ` Greg Kroah-Hartman
  2023-06-09 15:25 ` [PATCH v1 3/3] ata: ahci_platform: Make code agnostic to OF/ACPI Andy Shevchenko
  2 siblings, 1 reply; 7+ messages in thread
From: Andy Shevchenko @ 2023-06-09 15:25 UTC (permalink / raw)
  To: Serge Semin, Damien Le Moal, Andy Shevchenko, Greg Kroah-Hartman,
	linux-ide, linux-kernel, linux-acpi
  Cc: Hans de Goede, Jens Axboe, Rafael J. Wysocki, Len Brown,
	Daniel Scally, Heikki Krogerus, Sakari Ailus

Some users want to use the struct device pointer to see if
the device is compatible. Provide inline helpers for them.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 include/linux/property.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/include/linux/property.h b/include/linux/property.h
index 695053c60306..8de2c707818a 100644
--- a/include/linux/property.h
+++ b/include/linux/property.h
@@ -85,6 +85,11 @@ bool fwnode_device_is_compatible(const struct fwnode_handle *fwnode, const char
 	return fwnode_property_match_string(fwnode, "compatible", compat) >= 0;
 }
 
+static inline bool device_is_compatible(const struct device *dev, const char *compat)
+{
+	return fwnode_device_is_compatible(dev_fwnode(dev), compat);
+}
+
 int fwnode_property_get_reference_args(const struct fwnode_handle *fwnode,
 				       const char *prop, const char *nargs_prop,
 				       unsigned int nargs, unsigned int index,
-- 
2.40.0.1.gaa8946217a0b


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v1 3/3] ata: ahci_platform: Make code agnostic to OF/ACPI
  2023-06-09 15:25 [PATCH v1 0/3] device property: Introduce device_is_compatible() Andy Shevchenko
  2023-06-09 15:25 ` [PATCH v1 1/3] ACPI: Move ACPI_DEVICE_CLASS() to mod_devicetable.h Andy Shevchenko
  2023-06-09 15:25 ` [PATCH v1 2/3] device property: Implement device_is_compatible() Andy Shevchenko
@ 2023-06-09 15:25 ` Andy Shevchenko
  2023-06-12 13:20   ` Andy Shevchenko
  2 siblings, 1 reply; 7+ messages in thread
From: Andy Shevchenko @ 2023-06-09 15:25 UTC (permalink / raw)
  To: Serge Semin, Damien Le Moal, Andy Shevchenko, Greg Kroah-Hartman,
	linux-ide, linux-kernel, linux-acpi
  Cc: Hans de Goede, Jens Axboe, Rafael J. Wysocki, Len Brown,
	Daniel Scally, Heikki Krogerus, Sakari Ailus

With the help of a new device_is_compatible() make
the driver code agnostic to the OF/ACPI. This makes
it neater. As a side effect the header inclusions is
corrected (seems mod_devicetable.h was implicitly
included).

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/ata/ahci_platform.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
index ab30c7138d73..71a18344a0c8 100644
--- a/drivers/ata/ahci_platform.c
+++ b/drivers/ata/ahci_platform.c
@@ -12,11 +12,11 @@
 #include <linux/module.h>
 #include <linux/pm.h>
 #include <linux/device.h>
-#include <linux/of_device.h>
+#include <linux/mod_devicetable.h>
+#include <linux/property.h>
 #include <linux/platform_device.h>
 #include <linux/libata.h>
 #include <linux/ahci_platform.h>
-#include <linux/acpi.h>
 #include <linux/pci_ids.h>
 #include "ahci.h"
 
@@ -56,7 +56,7 @@ static int ahci_probe(struct platform_device *pdev)
 	if (rc)
 		return rc;
 
-	if (of_device_is_compatible(dev->of_node, "hisilicon,hisi-ahci"))
+	if (device_is_compatible(dev, "hisilicon,hisi-ahci"))
 		hpriv->flags |= AHCI_HFLAG_NO_FBS | AHCI_HFLAG_NO_NCQ;
 
 	port = acpi_device_get_match_data(dev);
-- 
2.40.0.1.gaa8946217a0b


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v1 2/3] device property: Implement device_is_compatible()
  2023-06-09 15:25 ` [PATCH v1 2/3] device property: Implement device_is_compatible() Andy Shevchenko
@ 2023-06-09 15:33   ` Greg Kroah-Hartman
  2023-06-09 15:38     ` Andy Shevchenko
  0 siblings, 1 reply; 7+ messages in thread
From: Greg Kroah-Hartman @ 2023-06-09 15:33 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Serge Semin, Damien Le Moal, linux-ide, linux-kernel, linux-acpi,
	Hans de Goede, Jens Axboe, Rafael J. Wysocki, Len Brown,
	Daniel Scally, Heikki Krogerus, Sakari Ailus

On Fri, Jun 09, 2023 at 06:25:06PM +0300, Andy Shevchenko wrote:
> Some users want to use the struct device pointer to see if
> the device is compatible. Provide inline helpers for them.

What do you mean by "compatible"?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v1 2/3] device property: Implement device_is_compatible()
  2023-06-09 15:33   ` Greg Kroah-Hartman
@ 2023-06-09 15:38     ` Andy Shevchenko
  0 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2023-06-09 15:38 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Serge Semin, Damien Le Moal, linux-ide, linux-kernel, linux-acpi,
	Hans de Goede, Jens Axboe, Rafael J. Wysocki, Len Brown,
	Daniel Scally, Heikki Krogerus, Sakari Ailus

On Fri, Jun 09, 2023 at 05:33:25PM +0200, Greg Kroah-Hartman wrote:
> On Fri, Jun 09, 2023 at 06:25:06PM +0300, Andy Shevchenko wrote:
> > Some users want to use the struct device pointer to see if
> > the device is compatible. Provide inline helpers for them.
> What do you mean by "compatible"?

In terms of how OF defines it (note that ACPI may also utilize it,
so it's wider than there).

I will elaborate this in v2.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v1 3/3] ata: ahci_platform: Make code agnostic to OF/ACPI
  2023-06-09 15:25 ` [PATCH v1 3/3] ata: ahci_platform: Make code agnostic to OF/ACPI Andy Shevchenko
@ 2023-06-12 13:20   ` Andy Shevchenko
  0 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2023-06-12 13:20 UTC (permalink / raw)
  To: Serge Semin, Damien Le Moal, Greg Kroah-Hartman, linux-ide,
	linux-kernel, linux-acpi
  Cc: Hans de Goede, Jens Axboe, Rafael J. Wysocki, Len Brown,
	Daniel Scally, Heikki Krogerus, Sakari Ailus

On Fri, Jun 09, 2023 at 06:25:07PM +0300, Andy Shevchenko wrote:
> With the help of a new device_is_compatible() make
> the driver code agnostic to the OF/ACPI. This makes
> it neater. As a side effect the header inclusions is
> corrected (seems mod_devicetable.h was implicitly
> included).

...

> -	if (of_device_is_compatible(dev->of_node, "hisilicon,hisi-ahci"))
> +	if (device_is_compatible(dev, "hisilicon,hisi-ahci"))
>  		hpriv->flags |= AHCI_HFLAG_NO_FBS | AHCI_HFLAG_NO_NCQ;
>  
>  	port = acpi_device_get_match_data(dev);

Oops, missed this one, will send a v2. This is Friday :-)

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-06-12 13:20 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-09 15:25 [PATCH v1 0/3] device property: Introduce device_is_compatible() Andy Shevchenko
2023-06-09 15:25 ` [PATCH v1 1/3] ACPI: Move ACPI_DEVICE_CLASS() to mod_devicetable.h Andy Shevchenko
2023-06-09 15:25 ` [PATCH v1 2/3] device property: Implement device_is_compatible() Andy Shevchenko
2023-06-09 15:33   ` Greg Kroah-Hartman
2023-06-09 15:38     ` Andy Shevchenko
2023-06-09 15:25 ` [PATCH v1 3/3] ata: ahci_platform: Make code agnostic to OF/ACPI Andy Shevchenko
2023-06-12 13:20   ` Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).