All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Abbott <abbotti@mev.co.uk>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Ian Abbott <abbotti@mev.co.uk>,
	H Hartley Sweeten <hsweeten@visionengravers.com>,
	Arnd Bergmann <arnd@kernel.org>,
	Niklas Schnelle <schnelle@linux.ibm.com>
Subject: [PATCH v2 12/13] comedi: amplc_dio200_common: Conditionally remove I/O port support
Date: Wed, 13 Sep 2023 17:40:12 +0100	[thread overview]
Message-ID: <20230913164013.107520-13-abbotti@mev.co.uk> (raw)
In-Reply-To: <20230913164013.107520-1-abbotti@mev.co.uk>

In a future patch, the port I/O functions (`inb()`, `outb()`, and
friends will only be declared in the `HAS_IOPORT` configuration option
is enabled.

The amplc_dio200_common module is used by the amplc_dio200 module (for
ISA cards) and the amplc_dio200_pci module (for PCI and PCI Express
cards).  It supports both port I/O and memory-mapped I/O.

Port I/O and memory-mapped I/O is confined to the `dio200___read8()`,
`dio200___read32()`, `dio200___write8()` and `dio200___write32()`
functions.  Conditionally compile two versions of those functions.  If
the `CONFIG_HAS_IOPORT` macro is defined, call either the port I/O or
memory mapped I/O functions depending on the `mmio` member of the
`struct comedi_device`.  If the `CONFIG_HAS_IOPORT` macro is undefined
only call the memory-mapped I/O functions.

Add a run-time check to `amplc_dio200_common_attach()` to return an
error if the device wants to use port I/O when the `CONFIG_HAS_IOPORT`
macro is undefined.

The changes allow the module to be built even if the port I/O functions
have not been declared.

Cc: Arnd Bergmann <arnd@kernel.org>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
---
v2: Correct `CONFIG_HAS_PORTIO` to `CONFIG_HAS_IOPORT` in commit
description.
---
 drivers/comedi/drivers/amplc_dio200_common.c | 36 ++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/drivers/comedi/drivers/amplc_dio200_common.c b/drivers/comedi/drivers/amplc_dio200_common.c
index e6d63e89e7bf..b1a9b4c4a185 100644
--- a/drivers/comedi/drivers/amplc_dio200_common.c
+++ b/drivers/comedi/drivers/amplc_dio200_common.c
@@ -86,6 +86,8 @@ struct dio200_subdev_intr {
 	unsigned int active:1;
 };
 
+#ifdef CONFIG_HAS_IOPORT
+
 static unsigned char dio200___read8(struct comedi_device *dev,
 				    unsigned int offset)
 {
@@ -120,6 +122,34 @@ static void dio200___write32(struct comedi_device *dev,
 		outl(val, dev->iobase + offset);
 }
 
+#else /* CONFIG_HAS_IOPORT */
+
+static unsigned char dio200___read8(struct comedi_device *dev,
+				    unsigned int offset)
+{
+	return readb(dev->mmio + offset);
+}
+
+static void dio200___write8(struct comedi_device *dev,
+			    unsigned int offset, unsigned char val)
+{
+	writeb(val, dev->mmio + offset);
+}
+
+static unsigned int dio200___read32(struct comedi_device *dev,
+				    unsigned int offset)
+{
+	return readl(dev->mmio + offset);
+}
+
+static void dio200___write32(struct comedi_device *dev,
+			     unsigned int offset, unsigned int val)
+{
+	writel(val, dev->mmio + offset);
+}
+
+#endif /* CONFIG_HAS_IOPORT */
+
 static unsigned char dio200_read8(struct comedi_device *dev,
 				  unsigned int offset)
 {
@@ -803,6 +833,12 @@ int amplc_dio200_common_attach(struct comedi_device *dev, unsigned int irq,
 	unsigned int n;
 	int ret;
 
+	if (!IS_ENABLED(CONFIG_HAS_IOPORT) && !dev->mmio) {
+		dev_err(dev->class_dev,
+			"error! need I/O port support\n");
+		return -ENXIO;
+	}
+
 	ret = comedi_alloc_subdevices(dev, board->n_subdevs);
 	if (ret)
 		return ret;
-- 
2.40.1


  parent reply	other threads:[~2023-09-13 16:43 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <Message-Id: <20230913113247.91749-1-abbotti@mev.co.uk>
2023-09-13 16:40 ` [PATCH v2 00/13] comedi: Re-do HAS_IOPORT dependencies Ian Abbott
2023-09-13 16:40   ` [PATCH v2 01/13] comedi: Correct dependencies for COMEDI_NI_PCIDIO Ian Abbott
2023-09-13 16:40   ` [PATCH v2 02/13] comedi: comedi_8254: Use a call-back function for register access Ian Abbott
2023-09-13 16:40   ` [PATCH v2 03/13] comedi: comedi_8254: Replace comedi_8254_init() and comedi_8254_mm_init() Ian Abbott
2023-09-13 16:40   ` [PATCH v2 04/13] comedi: comedi_8254: Conditionally remove I/O port support Ian Abbott
2023-09-13 16:46     ` Ian Abbott
2023-09-13 16:40   ` [PATCH v2 05/13] comedi: 8255_pci: Conditionally remove devices that use port I/O Ian Abbott
2023-09-13 16:40   ` [PATCH v2 06/13] comedi: comedi_8255: Rework subdevice initialization functions Ian Abbott
2023-09-13 16:40   ` [PATCH v2 07/13] comedi: comedi_8255: Conditionally remove I/O port support Ian Abbott
2023-09-13 16:40   ` [PATCH v2 08/13] comedi: ni_labpc_common: " Ian Abbott
2023-09-13 16:40   ` [PATCH v2 09/13] comedi: ni_mio_common: Conditionally use I/O port or MMIO Ian Abbott
2023-09-13 16:40   ` [PATCH v2 10/13] comedi: amplc_dio200_pci: Conditionally remove devices that use port I/O Ian Abbott
2023-09-13 16:40   ` [PATCH v2 11/13] comedi: amplc_dio200_common: Refactor register access functions Ian Abbott
2023-09-13 16:40   ` Ian Abbott [this message]
2023-09-13 16:40   ` [PATCH v2 13/13] comedi: add HAS_IOPORT dependencies again Ian Abbott
2023-09-13 17:06   ` [PATCH v3 00/13] comedi: Re-do HAS_IOPORT dependencies Ian Abbott
2023-09-13 17:07     ` [PATCH v3 01/13] comedi: Correct dependencies for COMEDI_NI_PCIDIO Ian Abbott
2023-09-13 17:07     ` [PATCH v3 02/13] comedi: comedi_8254: Use a call-back function for register access Ian Abbott
2023-09-13 17:07     ` [PATCH v3 03/13] comedi: comedi_8254: Replace comedi_8254_init() and comedi_8254_mm_init() Ian Abbott
2023-09-13 17:07     ` [PATCH v3 04/13] comedi: comedi_8254: Conditionally remove I/O port support Ian Abbott
2023-09-13 17:07     ` [PATCH v3 05/13] comedi: 8255_pci: Conditionally remove devices that use port I/O Ian Abbott
2023-09-13 17:07     ` [PATCH v3 06/13] comedi: comedi_8255: Rework subdevice initialization functions Ian Abbott
2023-09-13 17:07     ` [PATCH v3 07/13] comedi: comedi_8255: Conditionally remove I/O port support Ian Abbott
2023-09-13 17:07     ` [PATCH v3 08/13] comedi: ni_labpc_common: " Ian Abbott
2023-09-13 17:07     ` [PATCH v3 09/13] comedi: ni_mio_common: Conditionally use I/O port or MMIO Ian Abbott
2023-09-13 17:07     ` [PATCH v3 10/13] comedi: amplc_dio200_pci: Conditionally remove devices that use port I/O Ian Abbott
2023-09-13 17:07     ` [PATCH v3 11/13] comedi: amplc_dio200_common: Refactor register access functions Ian Abbott
2023-09-13 17:07     ` [PATCH v3 12/13] comedi: amplc_dio200_common: Conditionally remove I/O port support Ian Abbott
2023-09-13 17:07     ` [PATCH v3 13/13] comedi: add HAS_IOPORT dependencies again Ian Abbott
2023-09-19 11:40       ` Niklas Schnelle
2023-09-19 11:54         ` Greg Kroah-Hartman
2023-09-13 17:15     ` [PATCH v3 00/13] comedi: Re-do HAS_IOPORT dependencies Ian Abbott
2023-09-13 17:16   ` [PATCH v2 " Ian Abbott

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230913164013.107520-13-abbotti@mev.co.uk \
    --to=abbotti@mev.co.uk \
    --cc=arnd@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=hsweeten@visionengravers.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=schnelle@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.