#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/device.h>
#include <linux/gpio/driver.h>
#include <linux/mfd/rc5t583.h>
struct gpio_chip gpio_chip;
static int rc5t583_gpio_get(struct gpio_chip *gc, unsigned int offset)
struct rc5t583_gpio *rc5t583_gpio = gpiochip_get_data(gc);
struct device *parent = rc5t583_gpio->rc5t583->dev;
ret = rc5t583_read(parent, RC5T583_GPIO_MON_IOIN, &val);
return !!(val & BIT(offset));
static void rc5t583_gpio_set(struct gpio_chip *gc, unsigned int offset, int val)
struct rc5t583_gpio *rc5t583_gpio = gpiochip_get_data(gc);
struct device *parent = rc5t583_gpio->rc5t583->dev;
rc5t583_set_bits(parent, RC5T583_GPIO_IOOUT, BIT(offset));
rc5t583_clear_bits(parent, RC5T583_GPIO_IOOUT, BIT(offset));
static int rc5t583_gpio_dir_input(struct gpio_chip *gc, unsigned int offset)
struct rc5t583_gpio *rc5t583_gpio = gpiochip_get_data(gc);
struct device *parent = rc5t583_gpio->rc5t583->dev;