Lines Matching +full:n +full:- +full:mos
1 // SPDX-License-Identifier: GPL-2.0-only
69 #define RT9467_NUM_VOTG (RT9467_OTG_MAX_uV - RT9467_OTG_MIN_uV + 1)
173 .name = "rt9467-irqs",
289 struct rt9467_chg_data *data = cfg->driver_data;
291 cfg->ena_gpiod = fwnode_gpiod_get_index(of_fwnode_handle(of),
294 desc->name);
295 if (IS_ERR(cfg->ena_gpiod)) {
296 cfg->ena_gpiod = NULL;
300 return regmap_field_write(data->rm_field[F_OTG_PIN_EN], 1);
319 .name = "rt9476-usb-otg-vbus",
320 .of_match = "usb-otg-vbus-regulator",
341 .dev = data->dev,
342 .regmap = data->regmap,
346 data->rdev = devm_regulator_register(data->dev, &rt9467_otg_desc, &cfg);
347 return PTR_ERR_OR_ZERO(data->rdev);
359 ret = regmap_field_read(data->rm_field[field], &sel);
379 value = range->max_sel;
384 return regmap_field_write(data->rm_field[field], sel);
408 return -EINVAL;
419 mutex_lock(&data->adc_lock);
425 ret = regmap_write(data->regmap, RT9467_REG_CHG_ADC, 0);
427 dev_err(data->dev, "Failed to clear ADC enable\n");
432 ret = regmap_write(data->regmap, RT9467_REG_CHG_ADC, reg_val);
439 ret = regmap_read_poll_timeout(data->regmap, RT9467_REG_CHG_ADC,
444 dev_err(data->dev, "Failed to wait ADC conversion, chan = %d\n", chan);
448 ret = regmap_raw_read(data->regmap, RT9467_REG_ADC_DATA_H,
456 mutex_unlock(&data->adc_lock);
486 /* UUG MOS turn-on ratio will affect the IBUS adc scale */
495 /* PP MOS turn-on ratio will affect the ICHG adc scale */
505 *val = ((*val * 2) - 40) * 10;
508 return -EINVAL;
517 ret = regmap_field_read(data->rm_field[F_CHG_STAT], &status);
541 mutex_lock(&data->ichg_ieoc_lock);
544 dev_err(data->dev, "Minimum value must be 500mA\n");
553 &data->ichg_ua);
558 mutex_unlock(&data->ichg_ieoc_lock);
569 ret = regmap_read(data->regmap, RT9467_REG_CHG_STATC, &statc);
571 dev_err(data->dev, "Failed to read status\n");
576 dev_info(data->dev, "Condition not matched %d\n", statc);
583 dev_err(data->dev, "Failed to get mivr\n");
593 ret = regmap_field_write(data->rm_field[F_AICL_MEAS], 1);
595 dev_err(data->dev, "Failed to set aicl measurement\n");
599 reinit_completion(&data->aicl_done);
600 ret = wait_for_completion_timeout(&data->aicl_done, msecs_to_jiffies(3500));
602 return -ETIMEDOUT;
606 dev_err(data->dev, "Failed to get aicr\n");
610 dev_info(data->dev, "aicr get = %d uA\n", aicr_get);
618 mutex_lock(&data->ichg_ieoc_lock);
624 ret = rt9467_get_value_from_ranges(data, F_IEOC, RT9467_RANGE_IEOC, &data->ieoc_ua);
629 mutex_unlock(&data->ichg_ieoc_lock);
656 return rt9467_psy_get_status(data, &val->intval);
658 return regmap_field_read(data->rm_field[F_PWR_RDY], &val->intval);
660 mutex_lock(&data->attach_lock);
661 if (data->psy_usb_type == POWER_SUPPLY_USB_TYPE_UNKNOWN ||
662 data->psy_usb_type == POWER_SUPPLY_USB_TYPE_SDP)
663 val->intval = 500000;
665 val->intval = 1500000;
666 mutex_unlock(&data->attach_lock);
669 mutex_lock(&data->ichg_ieoc_lock);
670 val->intval = data->ichg_ua;
671 mutex_unlock(&data->ichg_ieoc_lock);
674 val->intval = RT9467_ICHG_MAX_uA;
679 &val->intval);
681 val->intval = RT9467_CV_MAX_uV;
686 &val->intval);
690 &val->intval);
692 mutex_lock(&data->attach_lock);
693 val->intval = data->psy_usb_type;
694 mutex_unlock(&data->attach_lock);
699 &val->intval);
701 mutex_lock(&data->ichg_ieoc_lock);
702 val->intval = data->ieoc_ua;
703 mutex_unlock(&data->ichg_ieoc_lock);
706 return -ENODATA;
718 return regmap_field_write(data->rm_field[F_CHG_EN], val->intval);
720 return regmap_field_write(data->rm_field[F_HZ], val->intval);
722 return rt9467_psy_set_ichg(data, val->intval);
725 RT9467_RANGE_VOREG, val->intval);
727 if (val->intval == -1)
732 val->intval);
735 RT9467_RANGE_VMIVR, val->intval);
738 RT9467_RANGE_IPREC, val->intval);
740 return rt9467_psy_set_ieoc(data, val->intval);
742 return -EINVAL;
765 .name = "rt9467-charger",
790 ret = regmap_field_read(data->rm_field[F_SHIP_MODE], &sysoff_enable);
794 return sysfs_emit(buf, "%d\n", sysoff_enable);
809 ret = regmap_field_write(data->rm_field[F_SHIP_MODE], !!tmp);
829 .fwnode = dev_fwnode(data->dev),
833 data->psy = devm_power_supply_register(data->dev, &rt9467_chg_psy_desc,
835 return PTR_ERR_OR_ZERO(data->psy);
844 * back-boost workaround
847 ret = regmap_field_read(data->rm_field[F_CHG_MIVR], &mivr_act);
849 dev_err(data->dev, "Failed to read MIVR stat\n");
858 dev_err(data->dev, "Failed to get IBUS\n");
863 ret = regmap_field_write(data->rm_field[F_CFO_EN], 0);
864 ret |= regmap_field_write(data->rm_field[F_CFO_EN], 1);
866 dev_err(data->dev, "Failed to toggle cfo\n");
878 ret = regmap_read(data->regmap, RT9467_REG_CHG_STATC, &new_stat);
880 dev_err(data->dev, "Failed to read chg_statc\n");
884 evts = data->old_stat ^ new_stat;
885 data->old_stat = new_stat;
890 dev_err(data->dev, "Failed to handle mivr stat\n");
903 ret = regmap_read(data->regmap, RT9467_REG_DEVICE_ID, &dev_id);
905 dev_err(data->dev, "Failed to kick wdt (%d)\n", ret);
918 ret = regmap_field_read(data->rm_field[F_USB_STATUS], &usb_stat);
919 ret |= regmap_field_read(data->rm_field[F_PWR_RDY], &power_ready);
926 mutex_lock(&data->attach_lock);
930 data->psy_usb_type = POWER_SUPPLY_USB_TYPE_UNKNOWN;
933 data->psy_usb_type = POWER_SUPPLY_USB_TYPE_SDP;
936 data->psy_usb_type = POWER_SUPPLY_USB_TYPE_DCP;
939 data->psy_usb_type = POWER_SUPPLY_USB_TYPE_DCP;
942 data->psy_usb_type = POWER_SUPPLY_USB_TYPE_CDP;
950 mutex_unlock(&data->attach_lock);
953 power_supply_changed(data->psy);
965 dev_err(data->dev, "Failed to report attach type (%d)\n", ret);
976 complete(&data->aicl_done);
989 struct device *dev = data->dev;
1007 if (data->vid == RT9466_VID) {
1016 virq = regmap_irq_get_virq(data->irq_chip_data, chg_irqs[i].hwirq);
1018 return dev_err_probe(dev, -EINVAL, "Failed to get (%s) irq\n",
1024 return dev_err_probe(dev, ret, "Failed to request (%s) irq\n",
1033 struct device *dev = data->dev;
1036 ret = regmap_write(data->regmap, RT9467_REG_CHG_ADC, 0);
1038 return dev_err_probe(dev, ret, "Failed to reset ADC\n");
1041 &data->ichg_ua);
1043 &data->ieoc_ua);
1045 return dev_err_probe(dev, ret, "Failed to init ichg/ieoc value\n");
1047 ret = regmap_update_bits(data->regmap, RT9467_REG_CHG_STATC_CTRL,
1050 return dev_err_probe(dev, ret, "Failed to make statc unmask\n");
1053 ret = regmap_field_write(data->rm_field[F_IINLMTSEL],
1056 return dev_err_probe(dev, ret, "Failed to set iinlmtsel to AICR\n");
1062 ret = regmap_field_write(data->rm_field[F_ILIM_EN], 0);
1064 return dev_err_probe(dev, ret, "Failed to disable hardware ILIM\n");
1067 ret = regmap_field_write(data->rm_field[F_OCP], 1);
1069 return dev_err_probe(dev, ret, "Failed to set higher inductor OCP level\n");
1072 ret = regmap_field_write(data->rm_field[F_TE], 1);
1074 return dev_err_probe(dev, ret, "Failed to set TE=1\n");
1077 ret = regmap_field_write(data->rm_field[F_WT_FC], 4);
1079 return dev_err_probe(dev, ret, "Failed to set WT_FC\n");
1082 ret = regmap_field_write(data->rm_field[F_USBCHGEN], 0);
1084 return dev_err_probe(dev, ret, "Failed to disable BC12\n");
1086 return regmap_field_write(data->rm_field[F_USBCHGEN], 1);
1118 ret = regmap_field_read(data->rm_field[F_VENDOR], &vid);
1120 dev_err(data->dev, "Failed to get vid\n");
1125 return dev_err_probe(data->dev, -ENODEV,
1126 "VID not correct [0x%02X]\n", vid);
1128 data->vid = vid;
1137 ret = regmap_field_write(data->rm_field[F_HZ], 0);
1141 return regmap_field_write(data->rm_field[F_RST], 1);
1174 struct device *dev = &i2c->dev;
1181 return -ENOMEM;
1183 data->dev = &i2c->dev;
1187 ceb_gpio = devm_gpiod_get_optional(dev, "charge-enable", GPIOD_OUT_HIGH);
1190 "Failed to config charge enable gpio\n");
1192 data->regmap = devm_regmap_init_i2c(i2c, &rt9467_regmap_config);
1193 if (IS_ERR(data->regmap))
1194 return dev_err_probe(dev, PTR_ERR(data->regmap),
1195 "Failed to init regmap\n");
1197 ret = devm_regmap_field_bulk_alloc(dev, data->regmap,
1198 data->rm_field, rt9467_chg_fields,
1201 return dev_err_probe(dev, ret, "Failed to alloc regmap fields\n");
1209 return dev_err_probe(dev, ret, "Failed to reset chip\n");
1211 ret = devm_regmap_add_irq_chip(dev, data->regmap, i2c->irq,
1213 &rt9467_irq_chip, &data->irq_chip_data);
1215 return dev_err_probe(dev, ret, "Failed to add irq chip\n");
1217 mutex_init(&data->adc_lock);
1219 &data->adc_lock);
1221 return dev_err_probe(dev, ret, "Failed to init ADC lock\n");
1223 mutex_init(&data->attach_lock);
1225 &data->attach_lock);
1227 return dev_err_probe(dev, ret, "Failed to init attach lock\n");
1229 mutex_init(&data->ichg_ieoc_lock);
1231 &data->ichg_ieoc_lock);
1233 return dev_err_probe(dev, ret, "Failed to init ICHG/IEOC lock\n");
1235 init_completion(&data->aicl_done);
1237 &data->aicl_done);
1239 return dev_err_probe(dev, ret, "Failed to init AICL done completion\n");
1264 .name = "rt9467-charger",