Lines Matching refs:gpio
8 #include <linux/gpio/driver.h>
9 #include <linux/gpio/regmap.h>
27 int (*reg_mask_xlate)(struct gpio_regmap *gpio, unsigned int base,
42 static int gpio_regmap_simple_xlate(struct gpio_regmap *gpio,
46 unsigned int line = offset % gpio->ngpio_per_reg;
47 unsigned int stride = offset / gpio->ngpio_per_reg;
49 *reg = base + stride * gpio->reg_stride;
57 struct gpio_regmap *gpio = gpiochip_get_data(chip);
62 if (gpio->reg_dat_base)
63 base = gpio_regmap_addr(gpio->reg_dat_base);
65 base = gpio_regmap_addr(gpio->reg_set_base);
67 ret = gpio->reg_mask_xlate(gpio, base, offset, ®, &mask);
71 ret = regmap_read(gpio->regmap, reg, &val);
81 struct gpio_regmap *gpio = gpiochip_get_data(chip);
82 unsigned int base = gpio_regmap_addr(gpio->reg_set_base);
85 gpio->reg_mask_xlate(gpio, base, offset, ®, &mask);
87 regmap_update_bits(gpio->regmap, reg, mask, mask);
89 regmap_update_bits(gpio->regmap, reg, mask, 0);
95 struct gpio_regmap *gpio = gpiochip_get_data(chip);
99 base = gpio_regmap_addr(gpio->reg_set_base);
101 base = gpio_regmap_addr(gpio->reg_clr_base);
103 gpio->reg_mask_xlate(gpio, base, offset, ®, &mask);
104 regmap_write(gpio->regmap, reg, mask);
110 struct gpio_regmap *gpio = gpiochip_get_data(chip);
114 if (gpio->reg_dir_out_base) {
115 base = gpio_regmap_addr(gpio->reg_dir_out_base);
117 } else if (gpio->reg_dir_in_base) {
118 base = gpio_regmap_addr(gpio->reg_dir_in_base);
124 ret = gpio->reg_mask_xlate(gpio, base, offset, ®, &mask);
128 ret = regmap_read(gpio->regmap, reg, &val);
141 struct gpio_regmap *gpio = gpiochip_get_data(chip);
145 if (gpio->reg_dir_out_base) {
146 base = gpio_regmap_addr(gpio->reg_dir_out_base);
148 } else if (gpio->reg_dir_in_base) {
149 base = gpio_regmap_addr(gpio->reg_dir_in_base);
155 ret = gpio->reg_mask_xlate(gpio, base, offset, ®, &mask);
164 return regmap_update_bits(gpio->regmap, reg, mask, val);
181 void gpio_regmap_set_drvdata(struct gpio_regmap *gpio, void *data)
183 gpio->driver_data = data;
187 void *gpio_regmap_get_drvdata(struct gpio_regmap *gpio)
189 return gpio->driver_data;
201 struct gpio_regmap *gpio;
224 gpio = kzalloc(sizeof(*gpio), GFP_KERNEL);
225 if (!gpio)
228 gpio->parent = config->parent;
229 gpio->regmap = config->regmap;
230 gpio->ngpio_per_reg = config->ngpio_per_reg;
231 gpio->reg_stride = config->reg_stride;
232 gpio->reg_mask_xlate = config->reg_mask_xlate;
233 gpio->reg_dat_base = config->reg_dat_base;
234 gpio->reg_set_base = config->reg_set_base;
235 gpio->reg_clr_base = config->reg_clr_base;
236 gpio->reg_dir_in_base = config->reg_dir_in_base;
237 gpio->reg_dir_out_base = config->reg_dir_out_base;
240 if (!gpio->ngpio_per_reg)
241 gpio->ngpio_per_reg = config->ngpio;
244 if (!gpio->reg_stride)
245 gpio->reg_stride = 1;
247 if (!gpio->reg_mask_xlate)
248 gpio->reg_mask_xlate = gpio_regmap_simple_xlate;
250 chip = &gpio->gpio_chip;
267 if (gpio->reg_set_base && gpio->reg_clr_base)
269 else if (gpio->reg_set_base)
272 if (gpio->reg_dir_in_base || gpio->reg_dir_out_base) {
278 ret = gpiochip_add_data(chip, gpio);
288 return gpio;
293 kfree(gpio);
300 * @gpio: gpio_regmap device to unregister
302 void gpio_regmap_unregister(struct gpio_regmap *gpio)
304 gpiochip_remove(&gpio->gpio_chip);
305 kfree(gpio);
328 struct gpio_regmap **ptr, *gpio;
335 gpio = gpio_regmap_register(config);
336 if (!IS_ERR(gpio)) {
337 *ptr = gpio;
343 return gpio;