Lines Matching +full:enable +full:- +full:otg +full:- +full:charging
1 // SPDX-License-Identifier: GPL-2.0
6 #include <linux/devm-helpers.h>
163 ret = regmap_read(mci->regmap, MT6360_PMU_FOD_STAT, ®val);
179 val->intval = pwr_rdy ? true : false;
198 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_STAT, ®val);
214 ret = -EIO;
218 val->intval = status;
229 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_STAT, ®val);
241 case 0x00: /* Not Charging */
249 val->intval = type;
259 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_CTRL7, &sel);
265 val->intval = value;
272 val->intval = MT6360_ICHG_MAX;
282 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_CTRL4, &sel);
288 val->intval = value;
295 val->intval = MT6360_VOREG_MAX;
305 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_CTRL3, &sel);
311 val->intval = value;
321 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_CTRL6, &sel);
327 val->intval = value;
337 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_CTRL8, &sel);
343 val->intval = value;
353 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_CTRL9, &sel);
359 val->intval = value;
366 u8 force_sleep = val->intval ? 0 : 1;
368 return regmap_update_bits(mci->regmap,
379 linear_range_get_selector_within(&mt6360_chg_range[MT6360_RANGE_ICHG], val->intval, &sel);
380 return regmap_update_bits(mci->regmap,
391 linear_range_get_selector_within(&mt6360_chg_range[MT6360_RANGE_VOREG], val->intval, &sel);
392 return regmap_update_bits(mci->regmap,
403 linear_range_get_selector_within(&mt6360_chg_range[MT6360_RANGE_AICR], val->intval, &sel);
404 return regmap_update_bits(mci->regmap,
415 linear_range_get_selector_within(&mt6360_chg_range[MT6360_RANGE_VMIVR], val->intval, &sel);
416 return regmap_update_bits(mci->regmap,
427 linear_range_get_selector_within(&mt6360_chg_range[MT6360_RANGE_IPREC], val->intval, &sel);
428 return regmap_update_bits(mci->regmap,
439 linear_range_get_selector_within(&mt6360_chg_range[MT6360_RANGE_IEOC], val->intval, &sel);
440 return regmap_update_bits(mci->regmap,
488 val->intval = mci->psy_usb_type;
491 ret = -ENODATA;
526 ret = -EINVAL;
578 .enable = regulator_enable_regmap,
586 .of_match = "usb-otg-vbus-regulator",
587 .name = "usb-otg-vbus",
607 mutex_lock(&mci->chgdet_lock);
608 if (!mci->bc12_en) {
609 dev_warn(mci->dev, "Received attach interrupt, bc12 disabled, ignore irq\n");
612 last_usb_type = mci->psy_usb_type;
614 ret = regmap_read(mci->regmap, MT6360_PMU_USB_STATUS1, &usb_status);
621 dev_dbg(mci->dev, "Received attach interrupt, no vbus\n");
624 dev_dbg(mci->dev, "Received attach interrupt, under going...\n");
627 mci->psy_usb_type = POWER_SUPPLY_USB_TYPE_SDP;
630 mci->psy_usb_type = POWER_SUPPLY_USB_TYPE_SDP;
633 mci->psy_usb_type = POWER_SUPPLY_USB_TYPE_CDP;
636 mci->psy_usb_type = POWER_SUPPLY_USB_TYPE_DCP;
639 dev_dbg(mci->dev, "Received attach interrupt, bc12 detect not enable\n");
642 mci->psy_usb_type = POWER_SUPPLY_USB_TYPE_UNKNOWN;
643 dev_dbg(mci->dev, "Received attach interrupt, reserved address\n");
647 dev_dbg(mci->dev, "Received attach interrupt, chg_type = %d\n", mci->psy_usb_type);
648 if (last_usb_type != mci->psy_usb_type)
649 power_supply_changed(mci->psy);
651 mutex_unlock(&mci->chgdet_lock);
660 mutex_lock(&mci->chgdet_lock);
664 if (mci->pwr_rdy == pwr_rdy) {
665 dev_dbg(mci->dev, "Received vbus interrupt, pwr_rdy is same(%d)\n", pwr_rdy);
668 mci->pwr_rdy = pwr_rdy;
669 dev_dbg(mci->dev, "Received vbus interrupt, pwr_rdy = %d\n", pwr_rdy);
671 mci->psy_usb_type = POWER_SUPPLY_USB_TYPE_UNKNOWN;
672 power_supply_changed(mci->psy);
675 ret = regmap_update_bits(mci->regmap,
681 mci->bc12_en = pwr_rdy;
683 mutex_unlock(&mci->chgdet_lock);
718 ret = devm_request_threaded_irq(&pdev->dev, ret, NULL,
724 return dev_err_probe(&pdev->dev, ret, "Failed to request %s irq\n",
737 for (i = 0; i < ARRAY_SIZE(vinovp_tbl)-1; i++) {
749 sel = mt6360_vinovp_trans_to_sel(mci->vinovp);
750 ret = regmap_update_bits(mci->regmap, MT6360_PMU_CHG_CTRL19,
753 return dev_err_probe(mci->dev, ret, "%s: Failed to apply vinovp\n", __func__);
754 ret = regmap_update_bits(mci->regmap, MT6360_PMU_DEVICE_TYPE,
757 return dev_err_probe(mci->dev, ret, "%s: Failed to disable bc12\n", __func__);
758 ret = regmap_update_bits(mci->regmap, MT6360_PMU_CHG_CTRL2,
763 return dev_err_probe(mci->dev, ret,
766 ret = regmap_update_bits(mci->regmap, MT6360_PMU_CHG_CTRL3,
769 return dev_err_probe(mci->dev, ret,
771 ret = regmap_update_bits(mci->regmap, MT6360_PMU_CHG_CTRL10,
774 return dev_err_probe(mci->dev, ret,
775 "%s: Failed to config otg oc to 3A\n", __func__);
786 mci = devm_kzalloc(&pdev->dev, sizeof(*mci), GFP_KERNEL);
788 return -ENOMEM;
790 mci->dev = &pdev->dev;
791 mci->vinovp = 6500000;
792 mutex_init(&mci->chgdet_lock);
794 ret = devm_work_autocancel(&pdev->dev, &mci->chrdet_work, mt6360_chrdet_work);
796 return dev_err_probe(&pdev->dev, ret, "Failed to set delayed work\n");
798 ret = device_property_read_u32(&pdev->dev, "richtek,vinovp-microvolt", &mci->vinovp);
800 dev_warn(&pdev->dev, "Failed to parse vinovp in DT, keep default 6.5v\n");
802 mci->regmap = dev_get_regmap(pdev->dev.parent, NULL);
803 if (!mci->regmap)
804 return dev_err_probe(&pdev->dev, -ENODEV, "Failed to get parent regmap\n");
808 return dev_err_probe(&pdev->dev, ret, "Failed to initial setting\n");
810 memcpy(&mci->psy_desc, &mt6360_charger_desc, sizeof(mci->psy_desc));
811 mci->psy_desc.name = dev_name(&pdev->dev);
813 charger_cfg.fwnode = dev_fwnode(&pdev->dev);
814 mci->psy = devm_power_supply_register(&pdev->dev,
815 &mci->psy_desc, &charger_cfg);
816 if (IS_ERR(mci->psy))
817 return dev_err_probe(&pdev->dev, PTR_ERR(mci->psy),
823 return dev_err_probe(&pdev->dev, ret, "Failed to register irqs\n");
825 config.dev = &pdev->dev;
826 config.regmap = mci->regmap;
827 mci->otg_rdev = devm_regulator_register(&pdev->dev, &mt6360_otg_rdesc,
829 if (IS_ERR(mci->otg_rdev))
830 return PTR_ERR(mci->otg_rdev);
832 schedule_work(&mci->chrdet_work);
838 { .compatible = "mediatek,mt6360-chg", },
844 { "mt6360-chg", 0 },
851 .name = "mt6360-chg",