1.1 --- a/pkg/devices/lib/gpio/src/jz4740.cc Fri Sep 22 21:56:34 2023 +0200
1.2 +++ b/pkg/devices/lib/gpio/src/jz4740.cc Sun Sep 24 01:53:43 2023 +0200
1.3 @@ -2,7 +2,7 @@
1.4 * GPIO driver for Ingenic JZ4740.
1.5 * (See below for additional copyright and licensing notices.)
1.6 *
1.7 - * Copyright (C) 2017, 2018 Paul Boddie <paul@boddie.org.uk>
1.8 + * Copyright (C) 2017, 2018, 2023 Paul Boddie <paul@boddie.org.uk>
1.9 *
1.10 * This program is free software; you can redistribute it and/or
1.11 * modify it under the terms of the GNU General Public License as
1.12 @@ -339,6 +339,38 @@
1.13 *value = (_regs[reg] >> _pin_shift(pin)) & 1;
1.14 }
1.15
1.16 +// Return function and function-specific configuration for a pin.
1.17 +
1.18 +void
1.19 +Gpio_jz4740_chip::config_pad_get(unsigned pin, unsigned *func, unsigned *value)
1.20 +{
1.21 + unsigned direction, function, select, trigger;
1.22 +
1.23 + config_get(pin, Port_function, &function);
1.24 + config_get(pin, Port_select, &select);
1.25 + config_get(pin, Port_dir, &direction);
1.26 +
1.27 + if (function)
1.28 + {
1.29 + *func = Hw::Gpio_chip::Function_alt;
1.30 + *value = select;
1.31 + return;
1.32 + }
1.33 +
1.34 + if (select)
1.35 + {
1.36 + config_get(pin, Port_trigger, &trigger);
1.37 +
1.38 + *func = Hw::Gpio_chip::Function_irq;
1.39 + *value = (trigger ? (direction ? L4_IRQ_F_POS_EDGE : L4_IRQ_F_NEG_EDGE)
1.40 + : (direction ? L4_IRQ_F_LEVEL_HIGH : L4_IRQ_F_LEVEL_LOW));
1.41 + return;
1.42 + }
1.43 +
1.44 + *func = Hw::Gpio_chip::Function_gpio;
1.45 + *value = direction ? Input : Output;
1.46 +}
1.47 +
1.48 // Obtain an IRQ abstraction for a pin.
1.49
1.50 Hw::Gpio_irq_pin *
1.51 @@ -406,6 +438,11 @@
1.52 static_cast<Gpio_jz4740_chip *>(gpio)->config_get(pin, reg, value);
1.53 }
1.54
1.55 +void jz4740_gpio_config_pad_get(void *gpio, unsigned pin, unsigned *func, unsigned *value)
1.56 +{
1.57 + static_cast<Gpio_jz4740_chip *>(gpio)->config_pad_get(pin, func, value);
1.58 +}
1.59 +
1.60 void jz4740_gpio_multi_setup(void *gpio, Pin_slice const *mask, unsigned mode, unsigned outvalues)
1.61 {
1.62 static_cast<Gpio_jz4740_chip *>(gpio)->multi_setup(*mask, mode, outvalues);