[PATCH v2] USB: isp1760: Support board-specific hardware configurations

Sebastian Siewior sebastian at breakpoint.cc
Thu Jun 26 04:24:25 EST 2008


* Nate Case | 2008-06-17 11:11:38 [-0500]:

>This adds support for hardware configurations that don't match the
>chip default register settings (e.g., 16-bit data bus, DACK and
>DREQ pulled up instead of down, analog overcurrent mode).
>
>These settings are passed in via the OF device tree.  The PCI
>interface still assumes the same default values.
>
>Signed-off-by: Nate Case <ncase at xes-inc.com>
Acked-by: Sebastian Siewior <sebastian at breakpoint.cc>

>diff --git a/drivers/usb/host/isp1760-if.c b/drivers/usb/host/isp1760-if.c
>index 440bf94..56e2ad6 100644
>--- a/drivers/usb/host/isp1760-if.c
>+++ b/drivers/usb/host/isp1760-if.c
>@@ -35,6 +35,8 @@ static int of_isp1760_probe(struct of_device *dev,
> 	int virq;
> 	u64 res_len;
> 	int ret;
>+	const unsigned int *prop;
>+	unsigned int devflags = 0;
> 
> 	ret = of_address_to_resource(dp, 0, &memory);
> 	if (ret)
>@@ -55,8 +57,32 @@ static int of_isp1760_probe(struct of_device *dev,
> 	virq = irq_create_of_mapping(oirq.controller, oirq.specifier,
> 			oirq.size);
> 
>+	if (of_device_is_compatible(dp, "nxp,usb-isp1761"))
>+		devflags |= ISP1760_FLAG_ISP1761;
>+
>+	if (of_get_property(dp, "port1-disable", NULL) != NULL)
>+		devflags |= ISP1760_FLAG_PORT1_DIS;
>+
>+	/* Some systems wire up only 16 of the 32 data lines */
>+	prop = of_get_property(dp, "bus-width", NULL);
>+	if (prop && *prop == 16)
>+		devflags |= ISP1760_FLAG_BUS_WIDTH_16;

The only thing I'm not 100% sure is whether it is okey for bus-width to
be detected like that and of_device_is_compatible() vs a special data
entry in of_isp1760_match to distinguish the two chip from each other.
Since nobody of the linuxppc spoke up so far, then I guess it is okey.

Kumar / Josh: Should we describe those DT entries in
Documentation/powerpc/booting-without-of.txt? In the yes case: which
section do you recommend?

>+
>+	if (of_get_property(dp, "port1-otg", NULL) != NULL)
>+		devflags |= ISP1760_FLAG_OTG_EN;
>+
>+	if (of_get_property(dp, "analog-oc", NULL) != NULL)
>+		devflags |= ISP1760_FLAG_ANALOG_OC;
>+
>+	if (of_get_property(dp, "dack-polarity", NULL) != NULL)
>+		devflags |= ISP1760_FLAG_DACK_POL_HIGH;
>+
>+	if (of_get_property(dp, "dreq-polarity", NULL) != NULL)
>+		devflags |= ISP1760_FLAG_DREQ_POL_HIGH;
>+
> 	hcd = isp1760_register(memory.start, res_len, virq,
>-		IRQF_SHARED | IRQF_DISABLED, &dev->dev, dev->dev.bus_id);
>+		IRQF_SHARED | IRQF_DISABLED, &dev->dev, dev->dev.bus_id,
>+		devflags);
> 	if (IS_ERR(hcd)) {
> 		ret = PTR_ERR(hcd);
> 		goto release_reg;
>@@ -87,6 +113,9 @@ static struct of_device_id of_isp1760_match[] = {
> 	{
> 		.compatible = "nxp,usb-isp1760",
> 	},
>+	{
>+		.compatible = "nxp,usb-isp1761",
>+	},
> 	{ },
> };

Sebastian



More information about the Linuxppc-dev mailing list