bcm47xx: prepare to support different buses
Prepare bcm47xx to support different System buses. Before adding support for bcma it should be possible to build bcm47xx without the need of ssb. With this patch bcm47xx does not directly contain a ssb_bus, but a union contain all the supported system buses. As a SoC just uses one system bus a union is a good choice. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Acked-by: Ralf Baechle <ralf@linux-mips.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
908debc8da
commit
08ccf57283
@@ -20,42 +20,54 @@ static DECLARE_BITMAP(gpio_in_use, BCM47XX_EXTIF_GPIO_LINES);
|
||||
|
||||
int gpio_request(unsigned gpio, const char *tag)
|
||||
{
|
||||
if (ssb_chipco_available(&ssb_bcm47xx.chipco) &&
|
||||
((unsigned)gpio >= BCM47XX_CHIPCO_GPIO_LINES))
|
||||
return -EINVAL;
|
||||
switch (bcm47xx_bus_type) {
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
if (ssb_chipco_available(&bcm47xx_bus.ssb.chipco) &&
|
||||
((unsigned)gpio >= BCM47XX_CHIPCO_GPIO_LINES))
|
||||
return -EINVAL;
|
||||
|
||||
if (ssb_extif_available(&ssb_bcm47xx.extif) &&
|
||||
((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
|
||||
return -EINVAL;
|
||||
if (ssb_extif_available(&bcm47xx_bus.ssb.extif) &&
|
||||
((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
|
||||
return -EINVAL;
|
||||
|
||||
if (test_and_set_bit(gpio, gpio_in_use))
|
||||
return -EBUSY;
|
||||
if (test_and_set_bit(gpio, gpio_in_use))
|
||||
return -EBUSY;
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
EXPORT_SYMBOL(gpio_request);
|
||||
|
||||
void gpio_free(unsigned gpio)
|
||||
{
|
||||
if (ssb_chipco_available(&ssb_bcm47xx.chipco) &&
|
||||
((unsigned)gpio >= BCM47XX_CHIPCO_GPIO_LINES))
|
||||
return;
|
||||
switch (bcm47xx_bus_type) {
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
if (ssb_chipco_available(&bcm47xx_bus.ssb.chipco) &&
|
||||
((unsigned)gpio >= BCM47XX_CHIPCO_GPIO_LINES))
|
||||
return;
|
||||
|
||||
if (ssb_extif_available(&ssb_bcm47xx.extif) &&
|
||||
((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
|
||||
return;
|
||||
if (ssb_extif_available(&bcm47xx_bus.ssb.extif) &&
|
||||
((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
|
||||
return;
|
||||
|
||||
clear_bit(gpio, gpio_in_use);
|
||||
clear_bit(gpio, gpio_in_use);
|
||||
return;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(gpio_free);
|
||||
|
||||
int gpio_to_irq(unsigned gpio)
|
||||
{
|
||||
if (ssb_chipco_available(&ssb_bcm47xx.chipco))
|
||||
return ssb_mips_irq(ssb_bcm47xx.chipco.dev) + 2;
|
||||
else if (ssb_extif_available(&ssb_bcm47xx.extif))
|
||||
return ssb_mips_irq(ssb_bcm47xx.extif.dev) + 2;
|
||||
else
|
||||
return -EINVAL;
|
||||
switch (bcm47xx_bus_type) {
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
if (ssb_chipco_available(&bcm47xx_bus.ssb.chipco))
|
||||
return ssb_mips_irq(bcm47xx_bus.ssb.chipco.dev) + 2;
|
||||
else if (ssb_extif_available(&bcm47xx_bus.ssb.extif))
|
||||
return ssb_mips_irq(bcm47xx_bus.ssb.extif.dev) + 2;
|
||||
else
|
||||
return -EINVAL;
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpio_to_irq);
|
||||
|
Reference in New Issue
Block a user