Lines Matching refs:pctl
374 static bool sx150x_pin_is_oscio(struct sx150x_pinctrl *pctl, unsigned int pin)
376 if (pin >= pctl->data->npins)
380 if (pctl->data->model != SX150X_789)
383 return !strcmp(pctl->data->pins[pin].name, "oscio");
389 struct sx150x_pinctrl *pctl = gpiochip_get_data(chip);
393 if (sx150x_pin_is_oscio(pctl, offset))
396 ret = regmap_read(pctl->regmap, pctl->data->reg_dir, &value);
408 struct sx150x_pinctrl *pctl = gpiochip_get_data(chip);
412 if (sx150x_pin_is_oscio(pctl, offset))
415 ret = regmap_read(pctl->regmap, pctl->data->reg_data, &value);
422 static int __sx150x_gpio_set(struct sx150x_pinctrl *pctl, unsigned int offset,
425 return regmap_write_bits(pctl->regmap, pctl->data->reg_data,
429 static int sx150x_gpio_oscio_set(struct sx150x_pinctrl *pctl,
432 return regmap_write(pctl->regmap,
433 pctl->data->pri.x789.reg_clock,
440 struct sx150x_pinctrl *pctl = gpiochip_get_data(chip);
442 if (sx150x_pin_is_oscio(pctl, offset))
443 sx150x_gpio_oscio_set(pctl, value);
445 __sx150x_gpio_set(pctl, offset, value);
452 struct sx150x_pinctrl *pctl = gpiochip_get_data(chip);
454 regmap_write_bits(pctl->regmap, pctl->data->reg_data, *mask, *bits);
460 struct sx150x_pinctrl *pctl = gpiochip_get_data(chip);
462 if (sx150x_pin_is_oscio(pctl, offset))
465 return regmap_write_bits(pctl->regmap,
466 pctl->data->reg_dir,
473 struct sx150x_pinctrl *pctl = gpiochip_get_data(chip);
476 if (sx150x_pin_is_oscio(pctl, offset))
477 return sx150x_gpio_oscio_set(pctl, value);
479 ret = __sx150x_gpio_set(pctl, offset, value);
483 return regmap_write_bits(pctl->regmap,
484 pctl->data->reg_dir,
490 struct sx150x_pinctrl *pctl =
494 pctl->irq.masked |= BIT(n);
499 struct sx150x_pinctrl *pctl =
503 pctl->irq.masked &= ~BIT(n);
506 static void sx150x_irq_set_sense(struct sx150x_pinctrl *pctl,
517 pctl->irq.sense &= mask;
518 pctl->irq.sense |= sense << n;
523 struct sx150x_pinctrl *pctl =
537 sx150x_irq_set_sense(pctl, n, val);
543 struct sx150x_pinctrl *pctl = (struct sx150x_pinctrl *)dev_id;
548 err = regmap_read(pctl->regmap, pctl->data->reg_irq_src, &val);
552 err = regmap_write(pctl->regmap, pctl->data->reg_irq_src, val);
557 for_each_set_bit(n, &status, pctl->data->ngpios)
558 handle_nested_irq(irq_find_mapping(pctl->gpio.irq.domain, n));
565 struct sx150x_pinctrl *pctl =
568 mutex_lock(&pctl->lock);
573 struct sx150x_pinctrl *pctl =
576 regmap_write(pctl->regmap, pctl->data->reg_irq_mask, pctl->irq.masked);
577 regmap_write(pctl->regmap, pctl->data->reg_sense, pctl->irq.sense);
578 mutex_unlock(&pctl->lock);
584 struct sx150x_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
590 if (sx150x_pin_is_oscio(pctl, pin)) {
594 ret = regmap_read(pctl->regmap,
595 pctl->data->pri.x789.reg_clock,
621 ret = regmap_read(pctl->regmap,
622 pctl->data->reg_pulldn,
636 ret = regmap_read(pctl->regmap,
637 pctl->data->reg_pullup,
651 if (pctl->data->model != SX150X_789)
654 ret = regmap_read(pctl->regmap,
655 pctl->data->pri.x789.reg_drain,
669 if (pctl->data->model != SX150X_789)
672 ret = regmap_read(pctl->regmap,
673 pctl->data->pri.x789.reg_drain,
688 ret = sx150x_gpio_get_direction(&pctl->gpio, pin);
695 ret = sx150x_gpio_get(&pctl->gpio, pin);
715 struct sx150x_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
725 if (sx150x_pin_is_oscio(pctl, pin)) {
727 ret = sx150x_gpio_direction_output(&pctl->gpio,
740 ret = regmap_write_bits(pctl->regmap,
741 pctl->data->reg_pulldn,
746 ret = regmap_write_bits(pctl->regmap,
747 pctl->data->reg_pullup,
755 ret = regmap_write_bits(pctl->regmap,
756 pctl->data->reg_pullup,
764 ret = regmap_write_bits(pctl->regmap,
765 pctl->data->reg_pulldn,
773 if (pctl->data->model != SX150X_789 ||
774 sx150x_pin_is_oscio(pctl, pin))
777 ret = regmap_write_bits(pctl->regmap,
778 pctl->data->pri.x789.reg_drain,
786 if (pctl->data->model != SX150X_789 ||
787 sx150x_pin_is_oscio(pctl, pin))
790 ret = regmap_write_bits(pctl->regmap,
791 pctl->data->pri.x789.reg_drain,
799 ret = sx150x_gpio_direction_output(&pctl->gpio,
846 static int sx150x_reset(struct sx150x_pinctrl *pctl)
850 err = i2c_smbus_write_byte_data(pctl->client,
851 pctl->data->pri.x789.reg_reset,
856 err = i2c_smbus_write_byte_data(pctl->client,
857 pctl->data->pri.x789.reg_reset,
862 static int sx150x_init_misc(struct sx150x_pinctrl *pctl)
866 switch (pctl->data->model) {
868 reg = pctl->data->pri.x789.reg_misc;
872 reg = pctl->data->pri.x456.reg_advanced;
883 reg = pctl->data->pri.x123.reg_advanced;
887 WARN(1, "Unknown chip model %d\n", pctl->data->model);
891 return regmap_write(pctl->regmap, reg, value);
894 static int sx150x_init_hw(struct sx150x_pinctrl *pctl)
897 [SX150X_789] = pctl->data->pri.x789.reg_polarity,
898 [SX150X_456] = pctl->data->pri.x456.reg_pld_mode,
899 [SX150X_123] = pctl->data->pri.x123.reg_pld_mode,
903 if (pctl->data->model == SX150X_789 &&
904 of_property_read_bool(pctl->dev->of_node, "semtech,probe-reset")) {
905 err = sx150x_reset(pctl);
910 err = sx150x_init_misc(pctl);
915 return regmap_write(pctl->regmap, reg[pctl->data->model], 0);
918 static int sx150x_regmap_reg_width(struct sx150x_pinctrl *pctl,
921 const struct sx150x_device_data *data = pctl->data;
947 static unsigned int sx150x_maybe_swizzle(struct sx150x_pinctrl *pctl,
951 const struct sx150x_device_data *data = pctl->data;
1003 struct sx150x_pinctrl *pctl = context;
1004 struct i2c_client *i2c = pctl->client;
1005 const int width = sx150x_regmap_reg_width(pctl, reg);
1047 *result = sx150x_maybe_swizzle(pctl, reg, val);
1056 struct sx150x_pinctrl *pctl = context;
1057 struct i2c_client *i2c = pctl->client;
1058 const int width = sx150x_regmap_reg_width(pctl, reg);
1060 val = sx150x_maybe_swizzle(pctl, reg, val);
1079 struct sx150x_pinctrl *pctl = i2c_get_clientdata(to_i2c_client(dev));
1081 return reg == pctl->data->reg_irq_src || reg == pctl->data->reg_data;
1103 struct sx150x_pinctrl *pctl;
1109 pctl = devm_kzalloc(dev, sizeof(*pctl), GFP_KERNEL);
1110 if (!pctl)
1113 i2c_set_clientdata(client, pctl);
1115 pctl->dev = dev;
1116 pctl->client = client;
1119 pctl->data = of_device_get_match_data(dev);
1121 pctl->data = (struct sx150x_device_data *)id->driver_data;
1123 if (!pctl->data)
1126 pctl->regmap = devm_regmap_init(dev, NULL, pctl,
1128 if (IS_ERR(pctl->regmap)) {
1129 ret = PTR_ERR(pctl->regmap);
1135 mutex_init(&pctl->lock);
1137 ret = sx150x_init_hw(pctl);
1142 pctl->pinctrl_desc.name = "sx150x-pinctrl";
1143 pctl->pinctrl_desc.pctlops = &sx150x_pinctrl_ops;
1144 pctl->pinctrl_desc.confops = &sx150x_pinconf_ops;
1145 pctl->pinctrl_desc.pins = pctl->data->pins;
1146 pctl->pinctrl_desc.npins = pctl->data->npins;
1147 pctl->pinctrl_desc.owner = THIS_MODULE;
1149 ret = devm_pinctrl_register_and_init(dev, &pctl->pinctrl_desc,
1150 pctl, &pctl->pctldev);
1157 pctl->gpio.base = -1;
1158 pctl->gpio.ngpio = pctl->data->npins;
1159 pctl->gpio.get_direction = sx150x_gpio_get_direction;
1160 pctl->gpio.direction_input = sx150x_gpio_direction_input;
1161 pctl->gpio.direction_output = sx150x_gpio_direction_output;
1162 pctl->gpio.get = sx150x_gpio_get;
1163 pctl->gpio.set = sx150x_gpio_set;
1164 pctl->gpio.set_config = gpiochip_generic_config;
1165 pctl->gpio.parent = dev;
1167 pctl->gpio.of_node = dev->of_node;
1169 pctl->gpio.can_sleep = true;
1170 pctl->gpio.label = devm_kstrdup(dev, client->name, GFP_KERNEL);
1171 if (!pctl->gpio.label)
1180 if (pctl->data->model != SX150X_789)
1181 pctl->gpio.set_multiple = sx150x_gpio_set_multiple;
1187 pctl->irq_chip.irq_mask = sx150x_irq_mask;
1188 pctl->irq_chip.irq_unmask = sx150x_irq_unmask;
1189 pctl->irq_chip.irq_set_type = sx150x_irq_set_type;
1190 pctl->irq_chip.irq_bus_lock = sx150x_irq_bus_lock;
1191 pctl->irq_chip.irq_bus_sync_unlock = sx150x_irq_bus_sync_unlock;
1192 pctl->irq_chip.name = devm_kstrdup(dev, client->name,
1194 if (!pctl->irq_chip.name)
1197 pctl->irq.masked = ~0;
1198 pctl->irq.sense = 0;
1211 girq = &pctl->gpio.irq;
1212 girq->chip = &pctl->irq_chip;
1225 pctl->irq_chip.name, pctl);
1230 ret = devm_gpiochip_add_data(dev, &pctl->gpio, pctl);
1239 ret = pinctrl_enable(pctl->pctldev);
1245 ret = gpiochip_add_pin_range(&pctl->gpio, dev_name(dev),
1246 0, 0, pctl->data->npins);