All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Abbott <abbotti@mev.co.uk>
To: Peter Huewe <peterhuewe@gmx.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	H Hartley Sweeten <hsweeten@visionengravers.com>,
	Ian Abbott <ian.abbott@mev.co.uk>,
	Mori Hess <fmhess@users.sourceforge.net>,
	YAMANE Toshiaki <yamanetoshi@gmail.com>,
	"devel@driverdev.osuosl.org" <devel@driverdev.osuosl.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/8] staging/comedi: Add macro for registering a comedi PCMCIA driver
Date: Mon, 14 Jan 2013 11:19:42 +0000	[thread overview]
Message-ID: <50F3E9CE.8060005@mev.co.uk> (raw)
In-Reply-To: <1358043073-12328-1-git-send-email-peterhuewe@gmx.de>

On 2013-01-13 02:11, Peter Huewe wrote:
> This patch introduces a new macro 'module_comedi_pcmcia_driver'
> for comedi PCMCIA drivers which do not do anything special in module
> init/exit. This eliminates a lot of boilerplate.
>
> Adapted from 'module_comedi_pci_driver'
>
> Signed-off-by: Peter Huewe <peterhuewe@gmx.de>
> ---
>   drivers/staging/comedi/comedidev.h |   22 ++++++++++++++++++++++
>   drivers/staging/comedi/drivers.c   |   34 ++++++++++++++++++++++++++++++++++
>   2 files changed, 56 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h
> index 692e1e6..ccb22dd 100644
> --- a/drivers/staging/comedi/comedidev.h
> +++ b/drivers/staging/comedi/comedidev.h
> @@ -41,6 +41,9 @@
>   #include <linux/io.h>
>   #include <linux/timer.h>
>   #include <linux/pci.h>
> +#include <pcmcia/cistpl.h>
> +#include <pcmcia/cisreg.h>
> +#include <pcmcia/ds.h>

Do you need all those #includes?  Perhaps you could just have an 
incomplete declaration of struct pcmcia_driver as follows:

struct pcmcia_driver;

comedidev.h already does the same thing for struct usb_driver.

>   #include <linux/usb.h>
>
>   #include "comedi.h"
> @@ -342,6 +345,25 @@ void comedi_pci_driver_unregister(struct comedi_driver *, struct pci_driver *);
>   	module_driver(__comedi_driver, comedi_pci_driver_register, \
>   			comedi_pci_driver_unregister, &(__pci_driver))
>
> +int comedi_pcmcia_driver_register(struct comedi_driver *,
> +					struct pcmcia_driver *);
> +void comedi_pcmcia_driver_unregister(struct comedi_driver *,
> +					struct pcmcia_driver *);
> +
> +/**
> + * module_comedi_pcmcia_driver() - Helper macro for registering a comedi PCMCIA driver
> + * @__comedi_driver: comedi_driver struct
> + * @__pcmcia_driver: pcmcia_driver struct
> + *
> + * Helper macro for comedi PCMCIA drivers which do not do anything special
> + * in module init/exit. This eliminates a lot of boilerplate. Each
> + * module may only use this macro once, and calling it replaces
> + * module_init() and module_exit()
> + */
> +#define module_comedi_pcmcia_driver(__comedi_driver, __pcmcia_driver) \
> +	module_driver(__comedi_driver, comedi_pcmcia_driver_register, \
> +			comedi_pcmcia_driver_unregister, &(__pcmcia_driver))
> +
>   struct usb_driver;
>
>   int comedi_usb_driver_register(struct comedi_driver *, struct usb_driver *);
> diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c
> index 50cf498..17a9e35 100644
> --- a/drivers/staging/comedi/drivers.c
> +++ b/drivers/staging/comedi/drivers.c
> @@ -24,6 +24,9 @@
>   #include <linux/device.h>
>   #include <linux/module.h>
>   #include <linux/pci.h>
> +#include <pcmcia/cistpl.h>
> +#include <pcmcia/cisreg.h>
> +#include <pcmcia/ds.h>
>   #include <linux/usb.h>
>   #include <linux/errno.h>
>   #include <linux/kconfig.h>
> @@ -958,6 +961,37 @@ void comedi_pci_driver_unregister(struct comedi_driver *comedi_driver,
>   }
>   EXPORT_SYMBOL_GPL(comedi_pci_driver_unregister);
>
> +int comedi_pcmcia_driver_register(struct comedi_driver *comedi_driver,
> +		struct pcmcia_driver *pcmcia_driver)
> +{
> +	int ret;
> +
> +	ret = comedi_driver_register(comedi_driver);
> +	if (ret < 0)
> +		return ret;
> +
> +	/* FIXME: Remove this test after auditing all comedi pci drivers */

That comment was cut-n-pasted, but needs editing for PCMCIA!

> +	if (!pcmcia_driver->name)
> +		pcmcia_driver->name = comedi_driver->driver_name;
> +
> +	ret = pcmcia_register_driver(pcmcia_driver);
> +	if (ret < 0) {
> +		comedi_driver_unregister(comedi_driver);
> +		return ret;
> +	}
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL_GPL(comedi_pcmcia_driver_register);
> +
> +void comedi_pcmcia_driver_unregister(struct comedi_driver *comedi_driver,
> +		struct pcmcia_driver *pcmcia_driver)
> +{
> +	pcmcia_unregister_driver(pcmcia_driver);
> +	comedi_driver_unregister(comedi_driver);
> +}
> +EXPORT_SYMBOL_GPL(comedi_pcmcia_driver_unregister);
> +

I'm pretty sure you'll need to enclose the above function definitions 
form comedi_pcmcia_driver_register() and 
comedi_pcmcia_driver_unregister() with the lines

#if IS_ENABLED(CONFIG_PCMCIA)

...

#endif

Otherwise it will fail to compile when PCMCIA is disabled in the kernel 
config.  (This was also necessary for USB.)

>   #if IS_ENABLED(CONFIG_USB)
>
>   int comedi_usb_driver_register(struct comedi_driver *comedi_driver,
>

-- 
-=( Ian Abbott @ MEV Ltd.    E-mail: <abbotti@mev.co.uk>        )=-
-=( Tel: +44 (0)161 477 1898   FAX: +44 (0)161 718 3587         )=-

  parent reply	other threads:[~2013-01-14 11:19 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-13  2:11 [PATCH 1/8] staging/comedi: Add macro for registering a comedi PCMCIA driver Peter Huewe
2013-01-13  2:11 ` [PATCH 2/8] staging/comedi/ni_daq_dio24: Convert to module_comedi_pcmcia_driver Peter Huewe
2013-01-13  2:11 ` [PATCH 3/8] staging/comedi/ni_mio_cs: " Peter Huewe
2013-01-13  2:11 ` [PATCH 4/8] staging/comedi/quatech_daqp_cs: " Peter Huewe
2013-01-13  2:11 ` [PATCH 5/8] staging/comedi/cb_das16_cs: " Peter Huewe
2013-01-13  2:11 ` [PATCH 6/8] staging/comedi/das08_cs: " Peter Huewe
2013-01-13  2:11 ` [PATCH 7/8] staging/comedi/ni_daq_700: " Peter Huewe
2013-01-13  2:11 ` [PATCH 8/8] staging/comedi/ni_labpc_cs: " Peter Huewe
2013-01-14 11:19 ` Ian Abbott [this message]
2013-01-14 16:44 ` [PATCH 1/8] staging/comedi: Add macro for registering a comedi PCMCIA driver H Hartley Sweeten
2013-01-14 21:00   ` [PATCH 1/8 v2] " Peter Huewe
2013-01-14 21:00     ` [PATCH 2/8] staging/comedi/ni_daq_dio24: Convert to module_comedi_pcmcia_driver Peter Huewe
2013-01-14 21:00     ` [PATCH 3/8] staging/comedi/ni_mio_cs: " Peter Huewe
2013-01-14 21:00     ` [PATCH 4/8] staging/comedi/quatech_daqp_cs: " Peter Huewe
2013-01-14 21:00     ` [PATCH 5/8] staging/comedi/cb_das16_cs: " Peter Huewe
2013-01-14 21:00     ` [PATCH 6/8] staging/comedi/das08_cs: " Peter Huewe
2013-01-14 21:00     ` [PATCH 7/8] staging/comedi/ni_daq_700: " Peter Huewe
2013-01-14 21:00     ` [PATCH 8/8] staging/comedi/ni_labpc_cs: " Peter Huewe
2013-01-15 10:36     ` [PATCH 1/8 v2] staging/comedi: Add macro for registering a comedi PCMCIA driver 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=50F3E9CE.8060005@mev.co.uk \
    --to=abbotti@mev.co.uk \
    --cc=devel@driverdev.osuosl.org \
    --cc=fmhess@users.sourceforge.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=hsweeten@visionengravers.com \
    --cc=ian.abbott@mev.co.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterhuewe@gmx.de \
    --cc=yamanetoshi@gmail.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.