diff --git a/drivers/gpio/gpio_ht16k33.c b/drivers/gpio/gpio_ht16k33.c index 32dbfb640b6..5450da81d01 100644 --- a/drivers/gpio/gpio_ht16k33.c +++ b/drivers/gpio/gpio_ht16k33.c @@ -36,15 +36,16 @@ struct gpio_ht16k33_data { }; static int gpio_ht16k33_cfg(struct device *dev, int access_op, - u32_t pin, int flags) + u32_t pin, int flags) { ARG_UNUSED(dev); ARG_UNUSED(access_op); ARG_UNUSED(pin); /* Keyscan is input-only */ - if ((flags & GPIO_DIR_MASK) != GPIO_DIR_IN) { - return -EINVAL; + if (((flags & (GPIO_INPUT | GPIO_OUTPUT)) == GPIO_DISCONNECTED) + || ((flags & GPIO_OUTPUT) != 0)) { + return -ENOTSUP; } return 0; @@ -74,6 +75,72 @@ static int gpio_ht16k33_read(struct device *dev, int access_op, return -ENOTSUP; } +static int gpio_ht16k33_port_get_raw(struct device *port, + gpio_port_value_t *value) +{ + ARG_UNUSED(port); + ARG_UNUSED(value); + + /* Keyscan only supports interrupt mode */ + return -ENOTSUP; +} + +static int gpio_ht16k33_port_set_masked_raw(struct device *port, + gpio_port_pins_t mask, + gpio_port_value_t value) +{ + ARG_UNUSED(port); + ARG_UNUSED(mask); + ARG_UNUSED(value); + + /* Keyscan is input-only */ + return -ENOTSUP; +} + +static int gpio_ht16k33_port_set_bits_raw(struct device *port, + gpio_port_pins_t pins) +{ + ARG_UNUSED(port); + ARG_UNUSED(pins); + + /* Keyscan is input-only */ + return -ENOTSUP; +} + +static int gpio_ht16k33_port_clear_bits_raw(struct device *port, + gpio_port_pins_t pins) +{ + ARG_UNUSED(port); + ARG_UNUSED(pins); + + /* Keyscan is input-only */ + return -ENOTSUP; +} + +static int gpio_ht16k33_port_toggle_bits(struct device *port, + gpio_port_pins_t pins) +{ + ARG_UNUSED(port); + ARG_UNUSED(pins); + + /* Keyscan is input-only */ + return -ENOTSUP; +} + +static int gpio_ht16k33_pin_interrupt_configure(struct device *port, + unsigned int pin, + enum gpio_int_mode int_mode, + enum gpio_int_trig int_trig) +{ + ARG_UNUSED(port); + ARG_UNUSED(pin); + ARG_UNUSED(int_mode); + ARG_UNUSED(int_trig); + + /* Interrupts are always enabled */ + return 0; +} + void ht16k33_process_keyscan_row_data(struct device *dev, u32_t keys) { @@ -141,6 +208,12 @@ static const struct gpio_driver_api gpio_ht16k33_api = { .config = gpio_ht16k33_cfg, .write = gpio_ht16k33_write, .read = gpio_ht16k33_read, + .port_get_raw = gpio_ht16k33_port_get_raw, + .port_set_masked_raw = gpio_ht16k33_port_set_masked_raw, + .port_set_bits_raw = gpio_ht16k33_port_set_bits_raw, + .port_clear_bits_raw = gpio_ht16k33_port_clear_bits_raw, + .port_toggle_bits = gpio_ht16k33_port_toggle_bits, + .pin_interrupt_configure = gpio_ht16k33_pin_interrupt_configure, .manage_callback = gpio_ht16k33_manage_callback, .enable_callback = gpio_ht16k33_enable_callback, .disable_callback = gpio_ht16k33_disable_callback, diff --git a/samples/drivers/ht16k33/nrf52840_pca10056.overlay b/samples/drivers/ht16k33/nrf52840_pca10056.overlay index af5f12bc3b4..98650dd2d45 100644 --- a/samples/drivers/ht16k33/nrf52840_pca10056.overlay +++ b/samples/drivers/ht16k33/nrf52840_pca10056.overlay @@ -12,7 +12,7 @@ reg = <0x70>; label = "HT16K33"; /* Uncomment to use IRQ instead of polling: */ - /* irq-gpios = <&gpio1 8 (GPIO_PUD_PULL_UP | GPIO_INT_ACTIVE_LOW)>; */ + /* irq-gpios = <&gpio1 8 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; */ #address-cells = <1>; #size-cells = <0>;