CC: Michael Buesch <m@xxxxxxx> Signed-off-by: Hauke Mehrtens <hauke@xxxxxxxxxx> --- drivers/ssb/embedded.c | 12 ++++++++++++ include/linux/ssb/ssb_embedded.h | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/drivers/ssb/embedded.c b/drivers/ssb/embedded.c index 9ef124f..078007c 100644 --- a/drivers/ssb/embedded.c +++ b/drivers/ssb/embedded.c @@ -136,6 +136,18 @@ u32 ssb_gpio_polarity(struct ssb_bus *bus, u32 mask, u32 value) } EXPORT_SYMBOL(ssb_gpio_polarity); +int ssb_gpio_count(struct ssb_bus *bus) +{ + if (ssb_chipco_available(&bus->chipco)) + return SSB_GPIO_CHIPCO_LINES; + else if (ssb_extif_available(&bus->extif)) + return SSB_GPIO_EXTIF_LINES; + else + SSB_WARN_ON(1); + return 0; +} +EXPORT_SYMBOL(ssb_gpio_count); + #ifdef CONFIG_SSB_DRIVER_GIGE static int gige_pci_init_callback(struct ssb_bus *bus, unsigned long data) { diff --git a/include/linux/ssb/ssb_embedded.h b/include/linux/ssb/ssb_embedded.h index 8d8dedf..f1618d2 100644 --- a/include/linux/ssb/ssb_embedded.h +++ b/include/linux/ssb/ssb_embedded.h @@ -7,6 +7,9 @@ extern int ssb_watchdog_timer_set(struct ssb_bus *bus, u32 ticks); +#define SSB_GPIO_EXTIF_LINES 5 +#define SSB_GPIO_CHIPCO_LINES 16 + /* Generic GPIO API */ u32 ssb_gpio_in(struct ssb_bus *bus, u32 mask); u32 ssb_gpio_out(struct ssb_bus *bus, u32 mask, u32 value); @@ -14,5 +17,6 @@ u32 ssb_gpio_outen(struct ssb_bus *bus, u32 mask, u32 value); u32 ssb_gpio_control(struct ssb_bus *bus, u32 mask, u32 value); u32 ssb_gpio_intmask(struct ssb_bus *bus, u32 mask, u32 value); u32 ssb_gpio_polarity(struct ssb_bus *bus, u32 mask, u32 value); +int ssb_gpio_count(struct ssb_bus *bus); #endif /* LINUX_SSB_EMBEDDED_H_ */ -- 1.7.9.5