Example #1
0
static int
wiigpio_pin_toggle(device_t dev, uint32_t pin)
{
	struct wiigpio_softc *sc;
	uint32_t val, pinbank, pinmask;

	if (pin >= WIIGPIO_NPINS)
		return (EINVAL);
	sc = device_get_softc(dev);
	pinbank = WIIGPIO_PINBANK(pin);
	pinmask = WIIGPIO_PINMASK(pin);
	WIIGPIO_LOCK(sc);
	val = wiigpio_read(sc, pinbank);
	if (val & pinmask)
		wiigpio_write(sc, pinbank, val & ~pinmask);
	else
		wiigpio_write(sc, pinbank, val | pinmask);
	WIIGPIO_UNLOCK(sc);

	return (0);
}
Example #2
0
static int
wiigpio_pin_set(device_t dev, uint32_t pin, unsigned int value)
{
	struct wiigpio_softc *sc;
	uint32_t reg, pinmask = 1 << pin;

	if (pin >= WIIGPIO_NPINS)
		return (EINVAL);
	sc = device_get_softc(dev);
	WIIGPIO_LOCK(sc);
	reg = wiigpio_read(sc) & ~pinmask;
	if (value)
		reg |= pinmask;
	wiigpio_write(sc, reg);
	WIIGPIO_UNLOCK(sc);

	return (0);
}