[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