Re: [PATCH] Generic platform device IDE driver




question: where is linux/ide-platform.h header?

On Oct 4, 2006, at 4:45 PM, Paul Mundt wrote:

Currently the platforms that have very simplistic needs for IDE devices
are forced to invent their own driver for adding the built-in devices.
At the moment ARM is the in-tree user in this category, h8300 could be
switched to something more generic, and SH is roughly in the same
category as ARM.

The only constant that really tends to change between these platforms
are the I/O base and the IRQ, with everything else rather constant. The
ctl base could also change, but everyone seems to keep it at 0x206, so
it's debatable whether it's worth leaving this configurable or not.

I've hacked together a quick driver, 'ide-platform' (for lack of a
better name), that allows for these specifics to be passed in via
platform device resources (registering a device per-port) rather than
having to add more of these things to drivers/ide.

With this we can remove ide_arm (and the h8300 driver can likely be
reworked to use this too), and I don't have to invent a new driver for
SH that does effectively the same thing.

This is intended purely for the simple NO_DMA ide_generic case.. nothing
complicated.

What do people think about this, is there a better way to do this?

Signed-off-by: Paul Mundt <lethal@xxxxxxxxxxxx>

--

drivers/ide/Makefile | 3 +-
drivers/ide/ide-platform.c | 60 +++++++++++++++++++++++++++++++++ ++++++++++++
drivers/ide/ide.c | 3 ++
3 files changed, 65 insertions(+), 1 deletion(-)

commit f2da2c8c9b5e648ca9a43d9d3fed9bcd356f0efd
Author: Paul Mundt <lethal@xxxxxxxxxxxx>
Date: Wed Oct 4 16:41:21 2006 +0900

ide: Simple platform device IDE driver.

This adds a trivial platform device IDE driver. Users are required to
register a couple of resources:

- I/O Base
- CTL Base
- IRQ

Signed-off-by: Paul Mundt <lethal@xxxxxxxxxxxx>

diff --git a/drivers/ide/Makefile b/drivers/ide/Makefile
index 569fae7..24c9a0f 100644
--- a/drivers/ide/Makefile
+++ b/drivers/ide/Makefile
@@ -13,7 +13,8 @@ EXTRA_CFLAGS += -Idrivers/ide

obj-$(CONFIG_BLK_DEV_IDE) += pci/

-ide-core-y += ide.o ide-io.o ide-iops.o ide-lib.o ide-probe.o ide- taskfile.o
+ide-core-y += ide.o ide-io.o ide-iops.o ide-lib.o ide-probe.o ide- taskfile.o \
+ ide-platform.o

ide-core-$(CONFIG_BLK_DEV_CMD640) += pci/cmd640.o

diff --git a/drivers/ide/ide-platform.c b/drivers/ide/ide-platform.c
new file mode 100644
index 0000000..6d89878
--- /dev/null
+++ b/drivers/ide/ide-platform.c
@@ -0,0 +1,60 @@
+/*
+ * Generic IDE platform device driver
+ *
+ * Copyright (C) 2006 Paul Mundt
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/init.h>
+#include <linux/ide.h>
+#include <linux/platform_device.h>
+
+/*
+ * Users use per-port registration with a simple set of 3 resources
+ * per port:
+ * - I/O Base (IORESOURCE_IO)
+ * - CTL Base (IORESOURCE_IO)
+ * - IRQ (IORESOURCE_IRQ)
+ */
+static int __devinit ide_platform_probe(struct platform_device *dev)
+{
+ struct resource *io_res, *ctl_res;
+ hw_regs_t hw;
+
+ if (unlikely(dev->num_resources != 3)) {
+ dev_err(&dev->dev, "invalid number of resources\n");
+ return -EINVAL;
+ }
+
+ io_res = platform_get_resource(dev, IORESOURCE_IO, 0);
+ if (unlikely(io_res == NULL))
+ return -EINVAL;
+
+ ctl_res = platform_get_resource(dev, IORESOURCE_IO, 1);
+ if (unlikely(ctl_res == NULL))
+ return -EINVAL;
+
+ memset(&hw, 0, sizeof(hw_regs_t));
+ ide_std_init_ports(&hw, io_res->start, ctl_res->start);
+
+ hw.irq = platform_get_irq(dev, 0);
+ hw.chipset = ide_generic;
+
+ return ide_register_hw(&hw, NULL);
+}
+
+static struct platform_driver ide_platform_driver = {
+ .probe = ide_platform_probe,
+ .driver = {
+ .name = "ide-platform",
+ .owner = THIS_MODULE,
+ },
+};
+
+void __init ide_platform_init(void)
+{
+ printk(KERN_INFO "ide-platform: platform device IDE interface\n");
+ platform_driver_register(&ide_platform_driver);
+}
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 287a662..994cdd4 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -1782,6 +1782,7 @@ done:
}

extern void pnpide_init(void);
+extern void ide_platform_init(void);
extern void h8300_ide_init(void);

/*
@@ -1793,6 +1794,8 @@ #ifdef CONFIG_BLK_DEV_IDEPCI
ide_scan_pcibus(ide_scan_direction);
#endif /* CONFIG_BLK_DEV_IDEPCI */

+ ide_platform_init();
+
#ifdef CONFIG_ETRAX_IDE
{
extern void init_e100_ide(void);
-
To unsubscribe from this list: send the line "unsubscribe linux- kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages

  • SM501: core (mfd) driver
    ... This is a proposed core driver for the Silicon Motion SM501 ... Included in the patch is a set of register defines for most of the ... +chips via the platform device and driver system. ...
    (Linux-Kernel)
  • Re: [PATCH 4/7] Alchemy: db1200/pb1200: register mmc platform device and board specific functions
    ... platform device is not registered in this case though and the driver ... I gathered that from the driver source... ... indicated by the board-level platform data, ... should check the sys_pinfunc register, ...
    (Linux-Kernel)
  • Re: [PATCH 4/7] Alchemy: db1200/pb1200: register mmc platform device and board specific functions
    ... The platform device is not registered in this case though and the driver is therefore unable to control it, however it was initially written for Au1100 as it seems. ... If however the board doesn't have the necessary resources to support the driver functionality, I think it can be indicated by the board-level platform data, so that the driver could decide whether it wants to support that controller or not. ... should check the sys_pinfunc register, and not blindly register all devices. ...
    (Linux-Kernel)
  • Re: [PATCH 3/3] Drop platform sysfs support
    ... Some of these issues with the compal-laptop work may come from copying ... job from a "good" driver. ... only drop the sysfs attributes but still create the platform device. ... return ret; ...
    (Linux-Kernel)
  • Re: [PATCH] UIO: Resend: Change driver name of uio_pdrv
    ... The generic UIO platform device driver should be given a unique driver ID and ... "standard way" how a UIO platform device driver should be done. ...
    (Linux-Kernel)