Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 97b414e1 authored by Andrew Lunn's avatar Andrew Lunn
Browse files

ATA: sata_mv: Add device tree support



Add support for instantiating this driver from device tree, and add
the necassary DT information to the kirkwood.dtsi file.

This is based on previous work by Michael Walle and Jason Cooper.

Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
Tested-by: default avatarJosh Coombs <josh.coombs@gmail.com>
parent 1e7bad0f
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
* Marvell Orion SATA

Required Properties:
- compatibility : "marvell,orion-sata"
- reg           : Address range of controller
- interrupts    : Interrupt controller is using
- nr-ports      : Number of SATA ports in use.

Example:

	sata@80000 {
		compatible = "marvell,orion-sata";
		reg = <0x80000 0x5000>;
		interrupts = <21>;
		nr-ports = <2>;
	}
+7 −0
Original line number Diff line number Diff line
@@ -76,6 +76,13 @@
			status = "okay";
		};

		sata@80000 {
			compatible = "marvell,orion-sata";
			reg = <0x80000 0x5000>;
			interrupts = <21>;
			status = "disabled";
		};

		nand@3000000 {
			#address-cells = <1>;
			#size-cells = <1>;
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ struct of_dev_auxdata kirkwood_auxdata_lookup[] __initdata = {
	OF_DEV_AUXDATA("marvell,mv64xxx-i2c", 0xf1011000, "mv64xxx_i2c.0",
		       NULL),
	OF_DEV_AUXDATA("marvell,orion-wdt", 0xf1020300, "orion_wdt", NULL),
	OF_DEV_AUXDATA("marvell,orion-sata", 0xf1080000, "sata_mv.0", NULL),
	{},
};

+29 −13
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@
#include <linux/mbus.h>
#include <linux/bitops.h>
#include <linux/gfp.h>
#include <linux/of.h>
#include <linux/of_irq.h>
#include <scsi/scsi_host.h>
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_device.h>
@@ -4026,7 +4028,7 @@ static int mv_platform_probe(struct platform_device *pdev)
	struct ata_host *host;
	struct mv_host_priv *hpriv;
	struct resource *res;
	int n_ports = 0;
	int n_ports = 0, irq = 0;
	int rc;
#if defined(CONFIG_HAVE_CLK)
	int port;
@@ -4050,8 +4052,14 @@ static int mv_platform_probe(struct platform_device *pdev)
		return -EINVAL;

	/* allocate host */
	if (pdev->dev.of_node) {
		of_property_read_u32(pdev->dev.of_node, "nr-ports", &n_ports);
		irq = irq_of_parse_and_map(pdev->dev.of_node, 0);
	} else {
		mv_platform_data = pdev->dev.platform_data;
		n_ports = mv_platform_data->n_ports;
		irq = platform_get_irq(pdev, 0);
	}

	host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
	hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
@@ -4109,8 +4117,7 @@ static int mv_platform_probe(struct platform_device *pdev)
	dev_info(&pdev->dev, "slots %u ports %d\n",
		 (unsigned)MV_MAX_Q_DEPTH, host->n_ports);

	rc = ata_host_activate(host, platform_get_irq(pdev, 0), mv_interrupt,
			       IRQF_SHARED, &mv6_sht);
	rc = ata_host_activate(host, irq, mv_interrupt, IRQF_SHARED, &mv6_sht);
	if (!rc)
		return 0;

@@ -4205,6 +4212,14 @@ static int mv_platform_resume(struct platform_device *pdev)
#define mv_platform_resume NULL
#endif

#ifdef CONFIG_OF
static struct of_device_id mv_sata_dt_ids[] __devinitdata = {
	{ .compatible = "marvell,orion-sata", },
	{},
};
MODULE_DEVICE_TABLE(of, mv_sata_dt_ids);
#endif

static struct platform_driver mv_platform_driver = {
	.probe		= mv_platform_probe,
	.remove		= __devexit_p(mv_platform_remove),
@@ -4213,6 +4228,7 @@ static struct platform_driver mv_platform_driver = {
	.driver		= {
		.name = DRV_NAME,
		.owner = THIS_MODULE,
		.of_match_table = of_match_ptr(mv_sata_dt_ids),
	},
};