Commit 42bfad4f authored by Michael Buesch's avatar Michael Buesch Committed by John W. Linville
Browse files

ssb: Fix watchdog access for devices without a chipcommon



This fixes the SSB watchdog access for devices without a chipcommon.
These devices have the watchdog on the extif.

Signed-off-by: default avatarMichael Buesch <mb@bu3sch.de>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 58ff70d4
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -105,6 +105,12 @@ config SSB_DRIVER_MIPS

	  If unsure, say N

# Assumption: We are on embedded, if we compile the MIPS core.
config SSB_EMBEDDED
	bool
	depends on SSB_DRIVER_MIPS
	default y

config SSB_DRIVER_EXTIF
	bool "SSB Broadcom EXTIF core driver (EXPERIMENTAL)"
	depends on SSB_DRIVER_MIPS && EXPERIMENTAL
+1 −0
Original line number Diff line number Diff line
# core
ssb-y					+= main.o scan.o
ssb-$(CONFIG_SSB_EMBEDDED)		+= embedded.o

# host support
ssb-$(CONFIG_SSB_PCIHOST)		+= pci.o pcihost_wrapper.o
+6 −0
Original line number Diff line number Diff line
@@ -110,6 +110,12 @@ void ssb_extif_get_clockcontrol(struct ssb_extif *extif,
	*m = extif_read32(extif, SSB_EXTIF_CLOCK_SB);
}

void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
				  u32 ticks)
{
	extif_write32(extif, SSB_EXTIF_WATCHDOG, ticks);
}

u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask)
{
	return extif_read32(extif, SSB_EXTIF_GPIO_IN) & mask;

drivers/ssb/embedded.c

0 → 100644
+26 −0
Original line number Diff line number Diff line
/*
 * Sonics Silicon Backplane
 * Embedded systems support code
 *
 * Copyright 2005-2008, Broadcom Corporation
 * Copyright 2006-2008, Michael Buesch <mb@bu3sch.de>
 *
 * Licensed under the GNU/GPL. See COPYING for details.
 */

#include <linux/ssb/ssb.h>
#include <linux/ssb/ssb_embedded.h>


int ssb_watchdog_timer_set(struct ssb_bus *bus, u32 ticks)
{
	if (ssb_chipco_available(&bus->chipco)) {
		ssb_chipco_watchdog_timer_set(&bus->chipco, ticks);
		return 0;
	}
	if (ssb_extif_available(&bus->extif)) {
		ssb_extif_watchdog_timer_set(&bus->extif, ticks);
		return 0;
	}
	return -ENODEV;
}
+5 −0
Original line number Diff line number Diff line
@@ -360,6 +360,11 @@ struct ssb_chipcommon {
	u16 fast_pwrup_delay;
};

static inline bool ssb_chipco_available(struct ssb_chipcommon *cc)
{
	return (cc->dev != NULL);
}

extern void ssb_chipcommon_init(struct ssb_chipcommon *cc);

#include <linux/pm.h>
Loading