All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ondrej Zary <linux@rainbow-software.org>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: linux-media@vger.kernel.org
Subject: Re: PnP support for the new ISA radio framework?
Date: Wed, 22 Feb 2012 21:33:29 +0100	[thread overview]
Message-ID: <201202222133.34620.linux@rainbow-software.org> (raw)
In-Reply-To: <201202181733.34599.linux@rainbow-software.org>

On Saturday 18 February 2012 17:33:32 Ondrej Zary wrote:
> Hello,
> there are some ISA radio cards with PnP support (e.g. SF16-FMI) but the new
> ISA radio framework has no PnP support.
>
> I got AOpen FX-3D/Pro Radio card which is AD1816 with Gemtek radio - and
> with PnP. But radio-gemtek fails to load because the radio I/O port is not
> enabled (and the driver does not support PnP).
>
> Tried to add PnP support to radio-isa but failed. Splitted non-isa_driver
> related parts from radio_isa_probe() to a separate function and tried to
> create radio_isa_pnp_probe() only to realize that I'm not able to access
> struct radio_isa_driver.
>
> radio_isa_probe() relies on the fact that "driver" (struct isa_driver) is
> the first element of struct radio_isa_driver, so these two structs have the
> same pointer:
> HW radio driver registers the driver by calling:
>   isa_register_driver(&gemtek_driver.driver, GEMTEK_MAX);
> radio_isa_probe() in radio-isa.c does:
>   struct radio_isa_driver *drv = pdev->platform_data;
>
> So adding struct pnp_driver to struct radio_isa_driver does not seem to be
> possible.

Adding PnP support to original radio-gemtek (before conversion to ISA radio
framework) is easy. A patch like this (mostly copied from radio-cadet) allows
radio on AOpen FX-3D/Pro Radio card to work.
But how to do this with the new driver?


--- a/drivers/media/radio/radio-gemtek.c
+++ b/drivers/media/radio/radio-gemtek.c
@@ -23,6 +23,7 @@
 #include <linux/videodev2.h>	/* kernel radio structs		*/
 #include <linux/mutex.h>
 #include <linux/io.h>		/* outb, outb_p			*/
+#include <linux/pnp.h>
 #include <media/v4l2-ioctl.h>
 #include <media/v4l2-device.h>
 
@@ -329,6 +330,46 @@ static int gemtek_verify(struct gemtek *gt, int port)
 	return 1;
 }
 
+#ifdef CONFIG_PNP
+
+static struct pnp_device_id gemtek_pnp_devices[] = {
+	/* AOpen FX-3D/Pro Radio */
+	{.id = "ADS7183", .driver_data = 0},
+	{.id = ""}
+};
+
+MODULE_DEVICE_TABLE(pnp, gemtek_pnp_devices);
+
+static int gemtek_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id)
+{
+	if (!dev)
+		return -ENODEV;
+	/* only support one device */
+	if (io > 0)
+		return -EBUSY;
+
+	if (!pnp_port_valid(dev, 0))
+		return -ENODEV;
+
+	io = pnp_port_start(dev, 0);
+
+	printk(KERN_INFO "radio-gemtek: PnP reports device at %#x\n", io);
+
+	return io;
+}
+
+static struct pnp_driver gemtek_pnp_driver = {
+	.name		= "radio-gemtek",
+	.id_table	= gemtek_pnp_devices,
+	.probe		= gemtek_pnp_probe,
+	.remove		= NULL,
+};
+
+#else
+static struct pnp_driver gemtek_pnp_driver;
+#endif
+
+
 /*
  * Automatic probing for card.
  */
@@ -536,8 +577,11 @@ static int __init gemtek_init(void)
 	mutex_init(&gt->lock);
 
 	gt->verified = -1;
+	if (io < 0)
+		pnp_register_driver(&gemtek_pnp_driver);
+	else
+		gemtek_probe(gt);
 	gt->io = io;
-	gemtek_probe(gt);
 	if (gt->io) {
 		if (!request_region(gt->io, 1, "gemtek")) {
 			v4l2_err(v4l2_dev, "I/O port 0x%x already in use.\n", gt->io);
@@ -608,6 +652,7 @@ static void __exit gemtek_exit(void)
 	video_unregister_device(&gt->vdev);
 	v4l2_device_unregister(&gt->v4l2_dev);
 	release_region(gt->io, 1);
+	pnp_unregister_driver(&gemtek_pnp_driver);
 }
 
 module_init(gemtek_init);


-- 
Ondrej Zary

  reply	other threads:[~2012-02-22 20:34 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-18 16:33 PnP support for the new ISA radio framework? Ondrej Zary
2012-02-22 20:33 ` Ondrej Zary [this message]
2012-02-24  9:35   ` Hans Verkuil
2012-02-28 21:08     ` [RFC PATCH] PnP support for the new ISA radio framework Ondrej Zary

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=201202222133.34620.linux@rainbow-software.org \
    --to=linux@rainbow-software.org \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-media@vger.kernel.org \
    /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.