Lines Matching refs:awi

176 	struct aw9523 *awi = pinctrl_dev_get_drvdata(pctl);
186 mutex_lock(&awi->i2c_lock);
187 ret = regmap_update_bits(awi->regmap, AW9523_REG_PORT_MODE(pin),
189 mutex_unlock(&awi->i2c_lock);
232 struct aw9523 *awi = pinctrl_dev_get_drvdata(pctldev);
243 mutex_lock(&awi->i2c_lock);
244 rc = regmap_read(awi->regmap, reg, &val);
245 mutex_unlock(&awi->i2c_lock);
286 struct aw9523 *awi = pinctrl_dev_get_drvdata(pctldev);
294 mutex_lock(&awi->i2c_lock);
306 rc = regmap_update_bits(awi->regmap,
348 rc = regmap_update_bits(awi->regmap, reg, mask, val);
353 mutex_unlock(&awi->i2c_lock);
429 struct aw9523 *awi = gpiochip_get_data(irq_data_get_irq_chip_data(d));
433 regmap_update_bits(awi->regmap, AW9523_REG_INTR_DIS(hwirq),
435 gpiochip_disable_irq(&awi->gpio, hwirq);
447 struct aw9523 *awi = gpiochip_get_data(irq_data_get_irq_chip_data(d));
451 gpiochip_enable_irq(&awi->gpio, hwirq);
452 regmap_update_bits(awi->regmap, AW9523_REG_INTR_DIS(hwirq),
458 struct aw9523 *awi = (struct aw9523 *)dev_id;
465 ret = regmap_read(awi->regmap,
474 changed_gpio = awi->irq->cached_gpio ^ val;
475 awi->irq->cached_gpio = val;
483 for_each_set_bit(n, &changed_gpio, awi->gpio.ngpio) {
484 tmp = irq_find_mapping(awi->gpio.irq.domain, n);
499 struct aw9523 *awi = gpiochip_get_data(irq_data_get_irq_chip_data(d));
501 mutex_lock(&awi->irq->lock);
502 regcache_cache_only(awi->regmap, true);
514 struct aw9523 *awi = gpiochip_get_data(irq_data_get_irq_chip_data(d));
516 regcache_cache_only(awi->regmap, false);
517 regcache_sync(awi->regmap);
518 mutex_unlock(&awi->irq->lock);
524 struct aw9523 *awi = gpiochip_get_data(chip);
528 mutex_lock(&awi->i2c_lock);
529 ret = aw9523_get_pin_direction(awi->regmap, offset, regbit);
530 mutex_unlock(&awi->i2c_lock);
537 struct aw9523 *awi = gpiochip_get_data(chip);
542 mutex_lock(&awi->i2c_lock);
543 ret = aw9523_get_port_state(awi->regmap, offset, regbit, &val);
544 mutex_unlock(&awi->i2c_lock);
560 static int _aw9523_gpio_get_multiple(struct aw9523 *awi, u8 regbit,
568 ret = regmap_read(awi->regmap, AW9523_REG_CONF_STATE(regbit), &dir_in);
575 ret = regmap_read(awi->regmap, AW9523_REG_IN_STATE(regbit),
584 ret = regmap_read(awi->regmap, AW9523_REG_OUT_STATE(regbit),
598 struct aw9523 *awi = gpiochip_get_data(chip);
602 mutex_lock(&awi->i2c_lock);
607 ret = _aw9523_gpio_get_multiple(awi, 0, &state, m);
616 ret = _aw9523_gpio_get_multiple(awi, AW9523_PINS_PER_PORT,
624 mutex_unlock(&awi->i2c_lock);
632 struct aw9523 *awi = gpiochip_get_data(chip);
642 mutex_lock(&awi->i2c_lock);
645 ret = regmap_write_bits(awi->regmap, reg, mask_hi, bits_hi);
647 dev_warn(awi->dev, "Cannot write port1 out level\n");
651 ret = regmap_write_bits(awi->regmap, reg, mask_lo, bits_lo);
653 dev_warn(awi->dev, "Cannot write port0 out level\n");
655 mutex_unlock(&awi->i2c_lock);
661 struct aw9523 *awi = gpiochip_get_data(chip);
664 mutex_lock(&awi->i2c_lock);
665 regmap_update_bits(awi->regmap, AW9523_REG_OUT_STATE(offset),
667 mutex_unlock(&awi->i2c_lock);
673 struct aw9523 *awi = gpiochip_get_data(chip);
677 mutex_lock(&awi->i2c_lock);
678 ret = regmap_update_bits(awi->regmap, AW9523_REG_CONF_STATE(offset),
680 mutex_unlock(&awi->i2c_lock);
688 struct aw9523 *awi = gpiochip_get_data(chip);
692 mutex_lock(&awi->i2c_lock);
693 ret = regmap_update_bits(awi->regmap, AW9523_REG_OUT_STATE(offset),
698 ret = regmap_update_bits(awi->regmap, AW9523_REG_CONF_STATE(offset),
701 mutex_unlock(&awi->i2c_lock);
705 static int aw9523_drive_reset_gpio(struct aw9523 *awi)
716 ret = regmap_write(awi->regmap, AW9523_REG_SOFT_RESET, 0);
720 dev_dbg(awi->dev, "Cannot execute soft reset: trying hard reset\n");
721 ret = gpiod_direction_output(awi->reset_gpio, 0);
728 ret = gpiod_direction_output(awi->reset_gpio, 1);
737 ret = regmap_read(awi->regmap, AW9523_REG_CHIPID, &chip_id);
739 dev_err(awi->dev, "Cannot read Chip ID: %d\n", ret);
743 dev_err(awi->dev, "Bad ChipID; read 0x%x, expected 0x%x\n",
751 static int aw9523_hw_reset(struct aw9523 *awi)
757 ret = aw9523_drive_reset_gpio(awi);
766 static int aw9523_init_gpiochip(struct aw9523 *awi, unsigned int npins)
768 struct device *dev = awi->dev;
769 struct gpio_chip *gc = &awi->gpio;
803 static int aw9523_init_irq(struct aw9523 *awi, int irq)
805 struct device *dev = awi->dev;
812 awi->irq = devm_kzalloc(dev, sizeof(*awi->irq), GFP_KERNEL);
813 if (!awi->irq)
816 mutex_init(&awi->irq->lock);
819 IRQF_ONESHOT, dev_name(dev), awi);
823 girq = &awi->gpio.irq;
887 static int aw9523_hw_init(struct aw9523 *awi)
894 regcache_cache_bypass(awi->regmap, true);
897 ret = aw9523_hw_reset(awi);
899 dev_err(awi->dev, "HW Reset failed: %d\n", ret);
911 ret = regmap_write(awi->regmap, AW9523_REG_PORT_MODE(0), U8_MAX);
914 ret = regmap_write(awi->regmap, AW9523_REG_PORT_MODE(p1_pin), U8_MAX);
919 ret = regmap_write(awi->regmap, AW9523_REG_GCR, 0);
924 ret = regmap_write(awi->regmap, AW9523_REG_CONF_STATE(0), U8_MAX);
927 ret = regmap_write(awi->regmap, AW9523_REG_CONF_STATE(p1_pin), U8_MAX);
932 ret = regmap_write(awi->regmap, AW9523_REG_INTR_DIS(0), U8_MAX);
935 ret = regmap_write(awi->regmap, AW9523_REG_INTR_DIS(p1_pin), U8_MAX);
940 ret = aw9523_get_port_state(awi->regmap, 0, 0, &val);
943 ret = aw9523_get_port_state(awi->regmap, p1_pin, 0, &val);
948 regcache_cache_bypass(awi->regmap, false);
949 return regmap_reinit_cache(awi->regmap, &aw9523_regmap);
956 struct aw9523 *awi;
959 awi = devm_kzalloc(dev, sizeof(*awi), GFP_KERNEL);
960 if (!awi)
963 i2c_set_clientdata(client, awi);
965 awi->dev = dev;
966 awi->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
967 if (IS_ERR(awi->reset_gpio))
968 return PTR_ERR(awi->reset_gpio);
969 gpiod_set_consumer_name(awi->reset_gpio, "aw9523 reset");
971 awi->regmap = devm_regmap_init_i2c(client, &aw9523_regmap);
972 if (IS_ERR(awi->regmap))
973 return PTR_ERR(awi->regmap);
975 awi->vio_vreg = devm_regulator_get_optional(dev, "vio");
976 if (IS_ERR(awi->vio_vreg)) {
977 if (PTR_ERR(awi->vio_vreg) == -EPROBE_DEFER)
979 awi->vio_vreg = NULL;
981 ret = regulator_enable(awi->vio_vreg);
986 mutex_init(&awi->i2c_lock);
987 lockdep_set_subclass(&awi->i2c_lock, i2c_adapter_depth(client->adapter));
993 ret = aw9523_hw_init(awi);
1005 ret = aw9523_init_gpiochip(awi, pdesc->npins);
1010 ret = aw9523_init_irq(awi, client->irq);
1015 awi->pctl = devm_pinctrl_register(dev, pdesc, awi);
1016 if (IS_ERR(awi->pctl)) {
1017 ret = dev_err_probe(dev, PTR_ERR(awi->pctl), "Cannot register pinctrl");
1021 ret = devm_gpiochip_add_data(dev, &awi->gpio, awi);
1028 if (awi->vio_vreg)
1029 regulator_disable(awi->vio_vreg);
1030 mutex_destroy(&awi->i2c_lock);
1036 struct aw9523 *awi = i2c_get_clientdata(client);
1044 if (awi->vio_vreg) {
1045 regulator_disable(awi->vio_vreg);
1047 mutex_lock(&awi->i2c_lock);
1048 aw9523_hw_init(awi);
1049 mutex_unlock(&awi->i2c_lock);
1052 mutex_destroy(&awi->i2c_lock);