Exemplo n.º 1
0
static void
avila_gpio_pin_configure(struct avila_gpio_softc *sc, struct gpio_pin *pin,
    unsigned int flags)
{
	uint32_t mask;

	mask = 1 << pin->gp_pin;

	/*
	 * Manage input/output
	 */
	if (flags & (GPIO_PIN_INPUT|GPIO_PIN_OUTPUT)) {
		IXP4XX_GPIO_LOCK();
		pin->gp_flags &= ~(GPIO_PIN_INPUT|GPIO_PIN_OUTPUT);
		if (flags & GPIO_PIN_OUTPUT) {
			pin->gp_flags |= GPIO_PIN_OUTPUT;
			GPIO_CLEAR_BITS(sc, IXP425_GPIO_GPOER, mask);
		}
		else {
			pin->gp_flags |= GPIO_PIN_INPUT;
			GPIO_SET_BITS(sc, IXP425_GPIO_GPOER, mask);
		}
		IXP4XX_GPIO_UNLOCK();
	}
}
Exemplo n.º 2
0
static int
i2c_getsda(struct cambria_gpio_softc *sc)
{
	uint32_t reg;

	IXP4XX_GPIO_LOCK();
	GPIO_CONF_SET(sc, IXP425_GPIO_GPOER, GPIO_I2C_SDA_BIT);

	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPINR);
	IXP4XX_GPIO_UNLOCK();
	return (reg & GPIO_I2C_SDA_BIT);
}
Exemplo n.º 3
0
static int 
ixpiic_getsda(device_t dev)
{
	struct ixpiic_softc *sc = ixpiic_sc;
	uint32_t reg;

	IXP4XX_GPIO_LOCK();
	GPIO_CONF_SET(sc, IXP425_GPIO_GPOER, GPIO_I2C_SDA_BIT);

	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPINR);
	IXP4XX_GPIO_UNLOCK();
	return (reg & GPIO_I2C_SDA_BIT);
}
Exemplo n.º 4
0
static void
i2c_setscl(struct cambria_gpio_softc *sc, int val)
{

	IXP4XX_GPIO_LOCK();
	GPIO_CONF_CLR(sc, IXP425_GPIO_GPOUTR, GPIO_I2C_SCL_BIT);
	if (val)
		GPIO_CONF_SET(sc, IXP425_GPIO_GPOER, GPIO_I2C_SCL_BIT);
	else
		GPIO_CONF_CLR(sc, IXP425_GPIO_GPOER, GPIO_I2C_SCL_BIT);
	IXP4XX_GPIO_UNLOCK();
	DELAY(I2C_DELAY);
}
Exemplo n.º 5
0
static void 
ixpiic_setscl(device_t dev, int val)
{
	struct ixpiic_softc *sc = ixpiic_sc;

	IXP4XX_GPIO_LOCK();
	GPIO_CONF_CLR(sc, IXP425_GPIO_GPOUTR, GPIO_I2C_SCL_BIT);
	if (val)
		GPIO_CONF_SET(sc, IXP425_GPIO_GPOER, GPIO_I2C_SCL_BIT);
	else
		GPIO_CONF_CLR(sc, IXP425_GPIO_GPOER, GPIO_I2C_SCL_BIT);
	IXP4XX_GPIO_UNLOCK();
	DELAY(I2C_DELAY);
}
Exemplo n.º 6
0
static int
avila_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *val)
{
	struct avila_gpio_softc *sc = device_get_softc(dev);

	if (pin >= IXP4XX_GPIO_PINS || !(sc->sc_valid & (1 << pin)))
		return (EINVAL);

	IXP4XX_GPIO_LOCK();
	*val = (GPIO_CONF_READ_4(sc, IXP425_GPIO_GPINR) & (1 << pin)) ? 1 : 0;
	IXP4XX_GPIO_UNLOCK();

	return (0);
}
Exemplo n.º 7
0
static void
led_func(void *arg, int onoff)
{
	struct led_avila_softc *sc = arg;
	uint32_t reg;

	IXP4XX_GPIO_LOCK();
	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPOUTR);
	if (onoff)
		reg &= ~GPIO_LED_STATUS_BIT;
	else
		reg |= GPIO_LED_STATUS_BIT;
	GPIO_CONF_WRITE_4(sc, IXP425_GPIO_GPOUTR, reg);
	IXP4XX_GPIO_UNLOCK();
}
Exemplo n.º 8
0
static int
avila_gpio_pin_getflags(device_t dev, uint32_t pin, uint32_t *flags)
{
	struct avila_gpio_softc *sc = device_get_softc(dev);

	if (pin >= IXP4XX_GPIO_PINS || !(sc->sc_valid & (1 << pin)))
		return (EINVAL);

	IXP4XX_GPIO_LOCK();
	/* refresh since we do not own all the pins */
	sc->sc_pins[pin].gp_flags = avila_gpio_pin_flags(sc, pin);
	*flags = sc->sc_pins[pin].gp_flags;
	IXP4XX_GPIO_UNLOCK();

	return (0);
}
Exemplo n.º 9
0
static int
avila_gpio_pin_set(device_t dev, uint32_t pin, unsigned int value)
{
	struct avila_gpio_softc *sc = device_get_softc(dev);
	uint32_t mask = 1 << pin;

	if (pin >= IXP4XX_GPIO_PINS || !(sc->sc_valid & mask))
		return (EINVAL);

	IXP4XX_GPIO_LOCK();
	if (value)
		GPIO_SET_BITS(sc, IXP425_GPIO_GPOUTR, mask);
	else
		GPIO_CLEAR_BITS(sc, IXP425_GPIO_GPOUTR, mask);
	IXP4XX_GPIO_UNLOCK();

	return (0);
}
Exemplo n.º 10
0
static int
avila_gpio_pin_toggle(device_t dev, uint32_t pin)
{
	struct avila_gpio_softc *sc = device_get_softc(dev);
	uint32_t mask = 1 << pin;
	int res;

	if (pin >= IXP4XX_GPIO_PINS || !(sc->sc_valid & mask))
		return (EINVAL);

	IXP4XX_GPIO_LOCK();
	res = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPINR) & mask;
	if (res)
		GPIO_CLEAR_BITS(sc, IXP425_GPIO_GPOUTR, mask);
	else
		GPIO_SET_BITS(sc, IXP425_GPIO_GPOUTR, mask);
	IXP4XX_GPIO_UNLOCK();

	return (0);
}