mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
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: Michael Buesch <mb@bu3sch.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
58ff70d4fe
commit
42bfad4f71
@ -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,5 +1,6 @@
|
||||
# core
|
||||
ssb-y += main.o scan.o
|
||||
ssb-$(CONFIG_SSB_EMBEDDED) += embedded.o
|
||||
|
||||
# host support
|
||||
ssb-$(CONFIG_SSB_PCIHOST) += pci.o pcihost_wrapper.o
|
||||
|
@ -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;
|
||||
|
26
drivers/ssb/embedded.c
Normal file
26
drivers/ssb/embedded.c
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
@ -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>
|
||||
|
@ -171,6 +171,9 @@ extern void ssb_extif_get_clockcontrol(struct ssb_extif *extif,
|
||||
extern void ssb_extif_timing_init(struct ssb_extif *extif,
|
||||
unsigned long ns);
|
||||
|
||||
extern void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
|
||||
u32 ticks);
|
||||
|
||||
u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask);
|
||||
|
||||
void ssb_extif_gpio_out(struct ssb_extif *extif, u32 mask, u32 value);
|
||||
@ -200,5 +203,11 @@ void ssb_extif_get_clockcontrol(struct ssb_extif *extif,
|
||||
{
|
||||
}
|
||||
|
||||
static inline
|
||||
void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
|
||||
u32 ticks)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* CONFIG_SSB_DRIVER_EXTIF */
|
||||
#endif /* LINUX_SSB_EXTIFCORE_H_ */
|
||||
|
10
include/linux/ssb/ssb_embedded.h
Normal file
10
include/linux/ssb/ssb_embedded.h
Normal file
@ -0,0 +1,10 @@
|
||||
#ifndef LINUX_SSB_EMBEDDED_H_
|
||||
#define LINUX_SSB_EMBEDDED_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/ssb/ssb.h>
|
||||
|
||||
|
||||
extern int ssb_watchdog_timer_set(struct ssb_bus *bus, u32 ticks);
|
||||
|
||||
#endif /* LINUX_SSB_EMBEDDED_H_ */
|
Loading…
Reference in New Issue
Block a user