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

Commit c4a2a081 authored by Rafał Miłecki's avatar Rafał Miłecki Committed by John W. Linville
Browse files

b43: add helper for finding GPIO device

parent 05100a29
Loading
Loading
Loading
Loading
+21 −20
Original line number Original line Diff line number Diff line
@@ -2556,10 +2556,20 @@ static int b43_upload_initvals(struct b43_wldev *dev)
/* Initialize the GPIOs
/* Initialize the GPIOs
 * http://bcm-specs.sipsolutions.net/GPIO
 * http://bcm-specs.sipsolutions.net/GPIO
 */
 */
static int b43_gpio_init(struct b43_wldev *dev)
static struct ssb_device *b43_ssb_gpio_dev(struct b43_wldev *dev)
{
{
	struct ssb_bus *bus = dev->sdev->bus;
	struct ssb_bus *bus = dev->sdev->bus;
	struct ssb_device *gpiodev, *pcidev = NULL;

#ifdef CONFIG_SSB_DRIVER_PCICORE
	return (bus->chipco.dev ? bus->chipco.dev : bus->pcicore.dev);
#else
	return bus->chipco.dev;
#endif
}

static int b43_gpio_init(struct b43_wldev *dev)
{
	struct ssb_device *gpiodev;
	u32 mask, set;
	u32 mask, set;


	b43_write32(dev, B43_MMIO_MACCTL, b43_read32(dev, B43_MMIO_MACCTL)
	b43_write32(dev, B43_MMIO_MACCTL, b43_read32(dev, B43_MMIO_MACCTL)
@@ -2591,12 +2601,8 @@ static int b43_gpio_init(struct b43_wldev *dev)
	if (dev->sdev->id.revision >= 2)
	if (dev->sdev->id.revision >= 2)
		mask |= 0x0010;	/* FIXME: This is redundant. */
		mask |= 0x0010;	/* FIXME: This is redundant. */


#ifdef CONFIG_SSB_DRIVER_PCICORE
	gpiodev = b43_ssb_gpio_dev(dev);
	pcidev = bus->pcicore.dev;
	if (gpiodev)
#endif
	gpiodev = bus->chipco.dev ? : pcidev;
	if (!gpiodev)
		return 0;
		ssb_write32(gpiodev, B43_GPIO_CONTROL,
		ssb_write32(gpiodev, B43_GPIO_CONTROL,
			    (ssb_read32(gpiodev, B43_GPIO_CONTROL)
			    (ssb_read32(gpiodev, B43_GPIO_CONTROL)
			     & mask) | set);
			     & mask) | set);
@@ -2607,15 +2613,10 @@ static int b43_gpio_init(struct b43_wldev *dev)
/* Turn off all GPIO stuff. Call this on module unload, for example. */
/* Turn off all GPIO stuff. Call this on module unload, for example. */
static void b43_gpio_cleanup(struct b43_wldev *dev)
static void b43_gpio_cleanup(struct b43_wldev *dev)
{
{
	struct ssb_bus *bus = dev->sdev->bus;
	struct ssb_device *gpiodev;
	struct ssb_device *gpiodev, *pcidev = NULL;


#ifdef CONFIG_SSB_DRIVER_PCICORE
	gpiodev = b43_ssb_gpio_dev(dev);
	pcidev = bus->pcicore.dev;
	if (gpiodev)
#endif
	gpiodev = bus->chipco.dev ? : pcidev;
	if (!gpiodev)
		return;
		ssb_write32(gpiodev, B43_GPIO_CONTROL, 0);
		ssb_write32(gpiodev, B43_GPIO_CONTROL, 0);
}
}