|
@@ -132,6 +132,28 @@ static int wm831x_gpio_set_debounce(struct gpio_chip *chip, unsigned offset,
|
|
return wm831x_set_bits(wm831x, reg, WM831X_GPN_FN_MASK, fn);
|
|
return wm831x_set_bits(wm831x, reg, WM831X_GPN_FN_MASK, fn);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int wm831x_set_single_ended(struct gpio_chip *chip,
|
|
|
|
+ unsigned int offset,
|
|
|
|
+ enum single_ended_mode mode)
|
|
|
|
+{
|
|
|
|
+ struct wm831x_gpio *wm831x_gpio = gpiochip_get_data(chip);
|
|
|
|
+ struct wm831x *wm831x = wm831x_gpio->wm831x;
|
|
|
|
+ int reg = WM831X_GPIO1_CONTROL + offset;
|
|
|
|
+
|
|
|
|
+ switch (mode) {
|
|
|
|
+ case LINE_MODE_OPEN_DRAIN:
|
|
|
|
+ return wm831x_set_bits(wm831x, reg,
|
|
|
|
+ WM831X_GPN_OD_MASK, WM831X_GPN_OD);
|
|
|
|
+ case LINE_MODE_PUSH_PULL:
|
|
|
|
+ return wm831x_set_bits(wm831x, reg,
|
|
|
|
+ WM831X_GPN_OD_MASK, 0);
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return -ENOTSUPP;
|
|
|
|
+}
|
|
|
|
+
|
|
#ifdef CONFIG_DEBUG_FS
|
|
#ifdef CONFIG_DEBUG_FS
|
|
static void wm831x_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
|
|
static void wm831x_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
|
|
{
|
|
{
|
|
@@ -216,7 +238,7 @@ static void wm831x_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
|
|
pull,
|
|
pull,
|
|
powerdomain,
|
|
powerdomain,
|
|
reg & WM831X_GPN_POL ? "" : " inverted",
|
|
reg & WM831X_GPN_POL ? "" : " inverted",
|
|
- reg & WM831X_GPN_OD ? "open-drain" : "CMOS",
|
|
|
|
|
|
+ reg & WM831X_GPN_OD ? "open-drain" : "push-pull",
|
|
tristated ? " tristated" : "",
|
|
tristated ? " tristated" : "",
|
|
reg);
|
|
reg);
|
|
}
|
|
}
|
|
@@ -234,6 +256,7 @@ static struct gpio_chip template_chip = {
|
|
.set = wm831x_gpio_set,
|
|
.set = wm831x_gpio_set,
|
|
.to_irq = wm831x_gpio_to_irq,
|
|
.to_irq = wm831x_gpio_to_irq,
|
|
.set_debounce = wm831x_gpio_set_debounce,
|
|
.set_debounce = wm831x_gpio_set_debounce,
|
|
|
|
+ .set_single_ended = wm831x_set_single_ended,
|
|
.dbg_show = wm831x_gpio_dbg_show,
|
|
.dbg_show = wm831x_gpio_dbg_show,
|
|
.can_sleep = true,
|
|
.can_sleep = true,
|
|
};
|
|
};
|