drivers: gpio_ht16k33: update to use new GPIO API
Implement the new GPIO driver APIs for the HT16K33 and update the driver to use the new GPIO flags. Signed-off-by: Henrik Brix Andersen <henrik@brixandersen.dk>
This commit is contained in:
parent
5edb7288ad
commit
c7382c80a0
2 changed files with 77 additions and 4 deletions
|
@ -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,
|
||||
|
|
|
@ -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>;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue