|
@@ -202,6 +202,28 @@ static void max77620_gpio_set(struct gpio_chip *gc, unsigned int offset,
|
|
|
dev_err(mgpio->dev, "CNFG_GPIO_OUT update failed: %d\n", ret);
|
|
|
}
|
|
|
|
|
|
+static int max77620_gpio_set_single_ended(struct gpio_chip *gc,
|
|
|
+ unsigned int offset,
|
|
|
+ enum single_ended_mode mode)
|
|
|
+{
|
|
|
+ struct max77620_gpio *mgpio = gpiochip_get_data(gc);
|
|
|
+
|
|
|
+ switch (mode) {
|
|
|
+ case LINE_MODE_OPEN_DRAIN:
|
|
|
+ return regmap_update_bits(mgpio->rmap, GPIO_REG_ADDR(offset),
|
|
|
+ MAX77620_CNFG_GPIO_DRV_MASK,
|
|
|
+ MAX77620_CNFG_GPIO_DRV_OPENDRAIN);
|
|
|
+ case LINE_MODE_PUSH_PULL:
|
|
|
+ return regmap_update_bits(mgpio->rmap, GPIO_REG_ADDR(offset),
|
|
|
+ MAX77620_CNFG_GPIO_DRV_MASK,
|
|
|
+ MAX77620_CNFG_GPIO_DRV_PUSHPULL);
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return -ENOTSUPP;
|
|
|
+}
|
|
|
+
|
|
|
static int max77620_gpio_to_irq(struct gpio_chip *gc, unsigned int offset)
|
|
|
{
|
|
|
struct max77620_gpio *mgpio = gpiochip_get_data(gc);
|
|
@@ -238,6 +260,7 @@ static int max77620_gpio_probe(struct platform_device *pdev)
|
|
|
mgpio->gpio_chip.direction_output = max77620_gpio_dir_output;
|
|
|
mgpio->gpio_chip.set_debounce = max77620_gpio_set_debounce;
|
|
|
mgpio->gpio_chip.set = max77620_gpio_set;
|
|
|
+ mgpio->gpio_chip.set_single_ended = max77620_gpio_set_single_ended;
|
|
|
mgpio->gpio_chip.to_irq = max77620_gpio_to_irq;
|
|
|
mgpio->gpio_chip.ngpio = MAX77620_GPIO_NR;
|
|
|
mgpio->gpio_chip.can_sleep = 1;
|