#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mfd/wm8350/core.h>
#include <linux/mfd/wm8350/gpio.h>
#include <linux/mfd/wm8350/pmic.h>
static int gpio_set_dir(struct wm8350 *wm8350, int gpio, int dir)
wm8350_reg_unlock(wm8350);
if (dir == WM8350_GPIO_DIR_OUT)
ret = wm8350_clear_bits(wm8350,
WM8350_GPIO_CONFIGURATION_I_O,
ret = wm8350_set_bits(wm8350,
WM8350_GPIO_CONFIGURATION_I_O,
static int wm8350_gpio_set_debounce(struct wm8350 *wm8350, int gpio, int db)
if (db == WM8350_GPIO_DEBOUNCE_ON)
return wm8350_set_bits(wm8350, WM8350_GPIO_DEBOUNCE,
return wm8350_clear_bits(wm8350,
WM8350_GPIO_DEBOUNCE, 1 << gpio);
static int gpio_set_func(struct wm8350 *wm8350, int gpio, int func)
wm8350_reg_unlock(wm8350);
reg = wm8350_reg_read(wm8350, WM8350_GPIO_FUNCTION_SELECT_1)
wm8350_reg_write(wm8350, WM8350_GPIO_FUNCTION_SELECT_1,
reg | ((func & 0xf) << 0));
reg = wm8350_reg_read(wm8350, WM8350_GPIO_FUNCTION_SELECT_1)
wm8350_reg_write(wm8350, WM8350_GPIO_FUNCTION_SELECT_1,
reg | ((func & 0xf) << 4));
reg = wm8350_reg_read(wm8350, WM8350_GPIO_FUNCTION_SELECT_1)
wm8350_reg_write(wm8350, WM8350_GPIO_FUNCTION_SELECT_1,
reg | ((func & 0xf) << 8));
reg = wm8350_reg_read(wm8350, WM8350_GPIO_FUNCTION_SELECT_1)
wm8350_reg_write(wm8350, WM8350_GPIO_FUNCTION_SELECT_1,
reg | ((func & 0xf) << 12));
reg = wm8350_reg_read(wm8350, WM8350_GPIO_FUNCTION_SELECT_2)
wm8350_reg_write(wm8350, WM8350_GPIO_FUNCTION_SELECT_2,
reg | ((func & 0xf) << 0));
reg = wm8350_reg_read(wm8350, WM8350_GPIO_FUNCTION_SELECT_2)
wm8350_reg_write(wm8350, WM8350_GPIO_FUNCTION_SELECT_2,
reg | ((func & 0xf) << 4));