Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 114673
b: refs/heads/master
c: b06f3e1
h: refs/heads/master
i:
  114671: bb1f8ee
v: v3
  • Loading branch information
Aurelien Jarno authored and Ralf Baechle committed Oct 15, 2008
1 parent 691d91f commit c35d3e3
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 75 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d412283cef135811e1ed6c3840376c239f4920dd
refs/heads/master: b06f3e19a673e44ff56ce265600c5c6eb99aa914
1 change: 1 addition & 0 deletions trunk/arch/mips/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ config BCM47XX
select SSB
select SSB_DRIVER_MIPS
select SSB_DRIVER_EXTIF
select SSB_EMBEDDED
select SSB_PCICORE_HOSTMODE if PCI
select GENERIC_GPIO
select SYS_HAS_EARLY_PRINTK
Expand Down
85 changes: 34 additions & 51 deletions trunk/arch/mips/bcm47xx/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,68 +12,51 @@
#include <asm/mach-bcm47xx/bcm47xx.h>
#include <asm/mach-bcm47xx/gpio.h>

int bcm47xx_gpio_to_irq(unsigned gpio)
#if (BCM47XX_CHIPCO_GPIO_LINES > BCM47XX_EXTIF_GPIO_LINES)
static DECLARE_BITMAP(gpio_in_use, BCM47XX_CHIPCO_GPIO_LINES);
#else
static DECLARE_BITMAP(gpio_in_use, BCM47XX_EXTIF_GPIO_LINES);
#endif

int gpio_request(unsigned gpio, const char *tag)
{
if (ssb_bcm47xx.chipco.dev)
return ssb_mips_irq(ssb_bcm47xx.chipco.dev) + 2;
else if (ssb_bcm47xx.extif.dev)
return ssb_mips_irq(ssb_bcm47xx.extif.dev) + 2;
else
if (ssb_chipco_available(&ssb_bcm47xx.chipco) &&
((unsigned)gpio >= BCM47XX_CHIPCO_GPIO_LINES))
return -EINVAL;
}
EXPORT_SYMBOL_GPL(bcm47xx_gpio_to_irq);

int bcm47xx_gpio_get_value(unsigned gpio)
{
if (ssb_bcm47xx.chipco.dev)
return ssb_chipco_gpio_in(&ssb_bcm47xx.chipco, 1 << gpio);
else if (ssb_bcm47xx.extif.dev)
return ssb_extif_gpio_in(&ssb_bcm47xx.extif, 1 << gpio);
else
return 0;
}
EXPORT_SYMBOL_GPL(bcm47xx_gpio_get_value);
if (ssb_extif_available(&ssb_bcm47xx.extif) &&
((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
return -EINVAL;

void bcm47xx_gpio_set_value(unsigned gpio, int value)
{
if (ssb_bcm47xx.chipco.dev)
ssb_chipco_gpio_out(&ssb_bcm47xx.chipco,
1 << gpio,
value ? 1 << gpio : 0);
else if (ssb_bcm47xx.extif.dev)
ssb_extif_gpio_out(&ssb_bcm47xx.extif,
1 << gpio,
value ? 1 << gpio : 0);
}
EXPORT_SYMBOL_GPL(bcm47xx_gpio_set_value);
if (test_and_set_bit(gpio, gpio_in_use))
return -EBUSY;

int bcm47xx_gpio_direction_input(unsigned gpio)
{
if (ssb_bcm47xx.chipco.dev && (gpio < BCM47XX_CHIPCO_GPIO_LINES))
ssb_chipco_gpio_outen(&ssb_bcm47xx.chipco,
1 << gpio, 0);
else if (ssb_bcm47xx.extif.dev && (gpio < BCM47XX_EXTIF_GPIO_LINES))
ssb_extif_gpio_outen(&ssb_bcm47xx.extif,
1 << gpio, 0);
else
return -EINVAL;
return 0;
}
EXPORT_SYMBOL_GPL(bcm47xx_gpio_direction_input);
EXPORT_SYMBOL(gpio_request);

int bcm47xx_gpio_direction_output(unsigned gpio, int value)
void gpio_free(unsigned gpio)
{
bcm47xx_gpio_set_value(gpio, value);
if (ssb_chipco_available(&ssb_bcm47xx.chipco) &&
((unsigned)gpio >= BCM47XX_CHIPCO_GPIO_LINES))
return;

if (ssb_extif_available(&ssb_bcm47xx.extif) &&
((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
return;

clear_bit(gpio, gpio_in_use);
}
EXPORT_SYMBOL(gpio_free);

if (ssb_bcm47xx.chipco.dev && (gpio < BCM47XX_CHIPCO_GPIO_LINES))
ssb_chipco_gpio_outen(&ssb_bcm47xx.chipco,
1 << gpio, 1 << gpio);
else if (ssb_bcm47xx.extif.dev && (gpio < BCM47XX_EXTIF_GPIO_LINES))
ssb_extif_gpio_outen(&ssb_bcm47xx.extif,
1 << gpio, 1 << gpio);
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;
return 0;
}
EXPORT_SYMBOL_GPL(bcm47xx_gpio_direction_output);
EXPORT_SYMBOL_GPL(gpio_to_irq);

5 changes: 3 additions & 2 deletions trunk/arch/mips/bcm47xx/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

#include <linux/types.h>
#include <linux/ssb/ssb.h>
#include <linux/ssb/ssb_embedded.h>
#include <asm/bootinfo.h>
#include <asm/reboot.h>
#include <asm/time.h>
Expand All @@ -41,7 +42,7 @@ static void bcm47xx_machine_restart(char *command)
printk(KERN_ALERT "Please stand by while rebooting the system...\n");
local_irq_disable();
/* Set the watchdog timer to reset immediately */
ssb_chipco_watchdog_timer_set(&ssb_bcm47xx.chipco, 1);
ssb_watchdog_timer_set(&ssb_bcm47xx, 1);
while (1)
cpu_relax();
}
Expand All @@ -50,7 +51,7 @@ static void bcm47xx_machine_halt(void)
{
/* Disable interrupts and watchdog and spin forever */
local_irq_disable();
ssb_chipco_watchdog_timer_set(&ssb_bcm47xx.chipco, 0);
ssb_watchdog_timer_set(&ssb_bcm47xx, 0);
while (1)
cpu_relax();
}
Expand Down
41 changes: 20 additions & 21 deletions trunk/arch/mips/include/asm/mach-bcm47xx/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,47 +9,46 @@
#ifndef __BCM47XX_GPIO_H
#define __BCM47XX_GPIO_H

#include <linux/ssb/ssb_embedded.h>
#include <asm/mach-bcm47xx/bcm47xx.h>

#define BCM47XX_EXTIF_GPIO_LINES 5
#define BCM47XX_CHIPCO_GPIO_LINES 16

extern int bcm47xx_gpio_to_irq(unsigned gpio);
extern int bcm47xx_gpio_get_value(unsigned gpio);
extern void bcm47xx_gpio_set_value(unsigned gpio, int value);
extern int bcm47xx_gpio_direction_input(unsigned gpio);
extern int bcm47xx_gpio_direction_output(unsigned gpio, int value);

static inline int gpio_request(unsigned gpio, const char *label)
{
return 0;
}
extern int gpio_request(unsigned gpio, const char *label);
extern void gpio_free(unsigned gpio);
extern int gpio_to_irq(unsigned gpio);

static inline void gpio_free(unsigned gpio)
static inline int gpio_get_value(unsigned gpio)
{
return ssb_gpio_in(&ssb_bcm47xx, 1 << gpio);
}

static inline int gpio_to_irq(unsigned gpio)
static inline void gpio_set_value(unsigned gpio, int value)
{
return bcm47xx_gpio_to_irq(gpio);
ssb_gpio_out(&ssb_bcm47xx, 1 << gpio, value ? 1 << gpio : 0);
}

static inline int gpio_get_value(unsigned gpio)
static inline int gpio_direction_input(unsigned gpio)
{
return bcm47xx_gpio_get_value(gpio);
return ssb_gpio_outen(&ssb_bcm47xx, 1 << gpio, 0);
}

static inline void gpio_set_value(unsigned gpio, int value)
static inline int gpio_direction_output(unsigned gpio, int value)
{
bcm47xx_gpio_set_value(gpio, value);
return ssb_gpio_outen(&ssb_bcm47xx, 1 << gpio, 1 << gpio);
}

static inline int gpio_direction_input(unsigned gpio)
static int gpio_intmask(unsigned gpio, int value)
{
return bcm47xx_gpio_direction_input(gpio);
return ssb_gpio_intmask(&ssb_bcm47xx, 1 << gpio,
value ? 1 << gpio : 0);
}

static inline int gpio_direction_output(unsigned gpio, int value)
static int gpio_polarity(unsigned gpio, int value)
{
return bcm47xx_gpio_direction_output(gpio, value);
return ssb_gpio_polarity(&ssb_bcm47xx, 1 << gpio,
value ? 1 << gpio : 0);
}


Expand Down

0 comments on commit c35d3e3

Please sign in to comment.