Lines Matching refs:gpio

17 #include <linux/gpio/driver.h>
18 #include <linux/gpio/regmap.h>
35 int (*reg_mask_xlate)(struct gpio_regmap *gpio, unsigned int base,
50 static int gpio_regmap_simple_xlate(struct gpio_regmap *gpio,
54 unsigned int line = offset % gpio->ngpio_per_reg;
55 unsigned int stride = offset / gpio->ngpio_per_reg;
57 *reg = base + stride * gpio->reg_stride;
65 struct gpio_regmap *gpio = gpiochip_get_data(chip);
70 if (gpio->reg_dat_base)
71 base = gpio_regmap_addr(gpio->reg_dat_base);
73 base = gpio_regmap_addr(gpio->reg_set_base);
75 ret = gpio->reg_mask_xlate(gpio, base, offset, &reg, &mask);
79 ret = regmap_read(gpio->regmap, reg, &val);
89 struct gpio_regmap *gpio = gpiochip_get_data(chip);
90 unsigned int base = gpio_regmap_addr(gpio->reg_set_base);
94 ret = gpio->reg_mask_xlate(gpio, base, offset, &reg, &mask);
99 ret = regmap_update_bits(gpio->regmap, reg, mask, mask);
101 ret = regmap_update_bits(gpio->regmap, reg, mask, 0);
109 struct gpio_regmap *gpio = gpiochip_get_data(chip);
114 base = gpio_regmap_addr(gpio->reg_set_base);
116 base = gpio_regmap_addr(gpio->reg_clr_base);
118 ret = gpio->reg_mask_xlate(gpio, base, offset, &reg, &mask);
122 return regmap_write(gpio->regmap, reg, mask);
128 struct gpio_regmap *gpio = gpiochip_get_data(chip);
132 if (gpio->reg_dat_base && !gpio->reg_set_base)
134 if (gpio->reg_set_base && !gpio->reg_dat_base)
137 if (gpio->reg_dir_out_base) {
138 base = gpio_regmap_addr(gpio->reg_dir_out_base);
140 } else if (gpio->reg_dir_in_base) {
141 base = gpio_regmap_addr(gpio->reg_dir_in_base);
147 ret = gpio->reg_mask_xlate(gpio, base, offset, &reg, &mask);
151 ret = regmap_read(gpio->regmap, reg, &val);
164 struct gpio_regmap *gpio = gpiochip_get_data(chip);
168 if (gpio->reg_dir_out_base) {
169 base = gpio_regmap_addr(gpio->reg_dir_out_base);
171 } else if (gpio->reg_dir_in_base) {
172 base = gpio_regmap_addr(gpio->reg_dir_in_base);
178 ret = gpio->reg_mask_xlate(gpio, base, offset, &reg, &mask);
187 return regmap_update_bits(gpio->regmap, reg, mask, val);
204 void *gpio_regmap_get_drvdata(struct gpio_regmap *gpio)
206 return gpio->driver_data;
218 struct gpio_regmap *gpio;
238 gpio = kzalloc(sizeof(*gpio), GFP_KERNEL);
239 if (!gpio)
242 gpio->parent = config->parent;
243 gpio->driver_data = config->drvdata;
244 gpio->regmap = config->regmap;
245 gpio->reg_dat_base = config->reg_dat_base;
246 gpio->reg_set_base = config->reg_set_base;
247 gpio->reg_clr_base = config->reg_clr_base;
248 gpio->reg_dir_in_base = config->reg_dir_in_base;
249 gpio->reg_dir_out_base = config->reg_dir_out_base;
251 chip = &gpio->gpio_chip;
262 if (gpio->reg_set_base && gpio->reg_clr_base)
264 else if (gpio->reg_set_base)
268 if (gpio->reg_dir_in_base || gpio->reg_dir_out_base) {
281 gpio->ngpio_per_reg = config->ngpio_per_reg;
282 if (!gpio->ngpio_per_reg)
283 gpio->ngpio_per_reg = config->ngpio;
286 gpio->reg_stride = config->reg_stride;
287 if (!gpio->reg_stride)
288 gpio->reg_stride = 1;
290 gpio->reg_mask_xlate = config->reg_mask_xlate;
291 if (!gpio->reg_mask_xlate)
292 gpio->reg_mask_xlate = gpio_regmap_simple_xlate;
294 ret = gpiochip_add_data(chip, gpio);
304 return gpio;
309 kfree(gpio);
316 * @gpio: gpio_regmap device to unregister
318 void gpio_regmap_unregister(struct gpio_regmap *gpio)
320 gpiochip_remove(&gpio->gpio_chip);
321 kfree(gpio);
344 struct gpio_regmap *gpio;
347 gpio = gpio_regmap_register(config);
349 if (IS_ERR(gpio))
350 return gpio;
352 ret = devm_add_action_or_reset(dev, devm_gpio_regmap_unregister, gpio);
356 return gpio;