Lines Matching +full:vinovp +full:- +full:microvolt
1 // SPDX-License-Identifier: GPL-2.0
6 #include <linux/devm-helpers.h>
132 u32 vinovp; member
170 ret = regmap_read(mci->regmap, MT6360_PMU_FOD_STAT, ®val); in mt6360_get_chrdet_ext_stat()
186 val->intval = pwr_rdy ? true : false; in mt6360_charger_get_online()
205 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_STAT, ®val); in mt6360_charger_get_status()
221 ret = -EIO; in mt6360_charger_get_status()
225 val->intval = status; in mt6360_charger_get_status()
236 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_STAT, ®val); in mt6360_charger_get_charge_type()
256 val->intval = type; in mt6360_charger_get_charge_type()
266 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_CTRL7, &sel); in mt6360_charger_get_ichg()
272 val->intval = value; in mt6360_charger_get_ichg()
279 val->intval = MT6360_ICHG_MAX; in mt6360_charger_get_max_ichg()
289 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_CTRL4, &sel); in mt6360_charger_get_cv()
295 val->intval = value; in mt6360_charger_get_cv()
302 val->intval = MT6360_VOREG_MAX; in mt6360_charger_get_max_cv()
312 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_CTRL3, &sel); in mt6360_charger_get_aicr()
318 val->intval = value; in mt6360_charger_get_aicr()
328 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_CTRL6, &sel); in mt6360_charger_get_mivr()
334 val->intval = value; in mt6360_charger_get_mivr()
344 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_CTRL8, &sel); in mt6360_charger_get_iprechg()
350 val->intval = value; in mt6360_charger_get_iprechg()
360 ret = regmap_read(mci->regmap, MT6360_PMU_CHG_CTRL9, &sel); in mt6360_charger_get_ieoc()
366 val->intval = value; in mt6360_charger_get_ieoc()
373 u8 force_sleep = val->intval ? 0 : 1; in mt6360_charger_set_online()
375 return regmap_update_bits(mci->regmap, in mt6360_charger_set_online()
386 linear_range_get_selector_within(&mt6360_chg_range[MT6360_RANGE_ICHG], val->intval, &sel); in mt6360_charger_set_ichg()
387 return regmap_update_bits(mci->regmap, in mt6360_charger_set_ichg()
398 linear_range_get_selector_within(&mt6360_chg_range[MT6360_RANGE_VOREG], val->intval, &sel); in mt6360_charger_set_cv()
399 return regmap_update_bits(mci->regmap, in mt6360_charger_set_cv()
410 linear_range_get_selector_within(&mt6360_chg_range[MT6360_RANGE_AICR], val->intval, &sel); in mt6360_charger_set_aicr()
411 return regmap_update_bits(mci->regmap, in mt6360_charger_set_aicr()
422 linear_range_get_selector_within(&mt6360_chg_range[MT6360_RANGE_VMIVR], val->intval, &sel); in mt6360_charger_set_mivr()
423 return regmap_update_bits(mci->regmap, in mt6360_charger_set_mivr()
434 linear_range_get_selector_within(&mt6360_chg_range[MT6360_RANGE_IPREC], val->intval, &sel); in mt6360_charger_set_iprechg()
435 return regmap_update_bits(mci->regmap, in mt6360_charger_set_iprechg()
446 linear_range_get_selector_within(&mt6360_chg_range[MT6360_RANGE_IEOC], val->intval, &sel); in mt6360_charger_set_ieoc()
447 return regmap_update_bits(mci->regmap, in mt6360_charger_set_ieoc()
495 val->intval = mci->psy_usb_type; in mt6360_charger_get_property()
498 ret = -ENODATA; in mt6360_charger_get_property()
533 ret = -EINVAL; in mt6360_charger_set_property()
591 .of_match = "usb-otg-vbus",
592 .name = "usb-otg-vbus",
612 mutex_lock(&mci->chgdet_lock); in mt6360_pmu_attach_i_handler()
613 if (!mci->bc12_en) { in mt6360_pmu_attach_i_handler()
614 dev_warn(mci->dev, "Received attach interrupt, bc12 disabled, ignore irq\n"); in mt6360_pmu_attach_i_handler()
617 last_usb_type = mci->psy_usb_type; in mt6360_pmu_attach_i_handler()
619 ret = regmap_read(mci->regmap, MT6360_PMU_USB_STATUS1, &usb_status); in mt6360_pmu_attach_i_handler()
626 dev_dbg(mci->dev, "Received attach interrupt, no vbus\n"); in mt6360_pmu_attach_i_handler()
629 dev_dbg(mci->dev, "Received attach interrupt, under going...\n"); in mt6360_pmu_attach_i_handler()
632 mci->psy_usb_type = POWER_SUPPLY_USB_TYPE_SDP; in mt6360_pmu_attach_i_handler()
635 mci->psy_usb_type = POWER_SUPPLY_USB_TYPE_SDP; in mt6360_pmu_attach_i_handler()
638 mci->psy_usb_type = POWER_SUPPLY_USB_TYPE_CDP; in mt6360_pmu_attach_i_handler()
641 mci->psy_usb_type = POWER_SUPPLY_USB_TYPE_DCP; in mt6360_pmu_attach_i_handler()
644 dev_dbg(mci->dev, "Received attach interrupt, bc12 detect not enable\n"); in mt6360_pmu_attach_i_handler()
647 mci->psy_usb_type = POWER_SUPPLY_USB_TYPE_UNKNOWN; in mt6360_pmu_attach_i_handler()
648 dev_dbg(mci->dev, "Received attach interrupt, reserved address\n"); in mt6360_pmu_attach_i_handler()
652 dev_dbg(mci->dev, "Received attach interrupt, chg_type = %d\n", mci->psy_usb_type); in mt6360_pmu_attach_i_handler()
653 if (last_usb_type != mci->psy_usb_type) in mt6360_pmu_attach_i_handler()
654 power_supply_changed(mci->psy); in mt6360_pmu_attach_i_handler()
656 mutex_unlock(&mci->chgdet_lock); in mt6360_pmu_attach_i_handler()
665 mutex_lock(&mci->chgdet_lock); in mt6360_handle_chrdet_ext_evt()
669 if (mci->pwr_rdy == pwr_rdy) { in mt6360_handle_chrdet_ext_evt()
670 dev_dbg(mci->dev, "Received vbus interrupt, pwr_rdy is same(%d)\n", pwr_rdy); in mt6360_handle_chrdet_ext_evt()
673 mci->pwr_rdy = pwr_rdy; in mt6360_handle_chrdet_ext_evt()
674 dev_dbg(mci->dev, "Received vbus interrupt, pwr_rdy = %d\n", pwr_rdy); in mt6360_handle_chrdet_ext_evt()
676 mci->psy_usb_type = POWER_SUPPLY_USB_TYPE_UNKNOWN; in mt6360_handle_chrdet_ext_evt()
677 power_supply_changed(mci->psy); in mt6360_handle_chrdet_ext_evt()
680 ret = regmap_update_bits(mci->regmap, in mt6360_handle_chrdet_ext_evt()
686 mci->bc12_en = pwr_rdy; in mt6360_handle_chrdet_ext_evt()
688 mutex_unlock(&mci->chgdet_lock); in mt6360_handle_chrdet_ext_evt()
723 ret = devm_request_threaded_irq(&pdev->dev, ret, NULL, in mt6360_chg_irq_register()
729 return dev_err_probe(&pdev->dev, ret, "Failed to request %s irq\n", in mt6360_chg_irq_register()
742 for (i = 0; i < ARRAY_SIZE(vinovp_tbl)-1; i++) { in mt6360_vinovp_trans_to_sel()
754 sel = mt6360_vinovp_trans_to_sel(mci->vinovp); in mt6360_chg_init_setting()
755 ret = regmap_update_bits(mci->regmap, MT6360_PMU_CHG_CTRL19, in mt6360_chg_init_setting()
758 return dev_err_probe(mci->dev, ret, "%s: Failed to apply vinovp\n", __func__); in mt6360_chg_init_setting()
759 ret = regmap_update_bits(mci->regmap, MT6360_PMU_DEVICE_TYPE, in mt6360_chg_init_setting()
762 return dev_err_probe(mci->dev, ret, "%s: Failed to disable bc12\n", __func__); in mt6360_chg_init_setting()
763 ret = regmap_update_bits(mci->regmap, MT6360_PMU_CHG_CTRL2, in mt6360_chg_init_setting()
768 return dev_err_probe(mci->dev, ret, in mt6360_chg_init_setting()
771 ret = regmap_update_bits(mci->regmap, MT6360_PMU_CHG_CTRL3, in mt6360_chg_init_setting()
774 return dev_err_probe(mci->dev, ret, in mt6360_chg_init_setting()
776 ret = regmap_update_bits(mci->regmap, MT6360_PMU_CHG_CTRL10, in mt6360_chg_init_setting()
779 return dev_err_probe(mci->dev, ret, in mt6360_chg_init_setting()
791 mci = devm_kzalloc(&pdev->dev, sizeof(*mci), GFP_KERNEL); in mt6360_charger_probe()
793 return -ENOMEM; in mt6360_charger_probe()
795 mci->dev = &pdev->dev; in mt6360_charger_probe()
796 mci->vinovp = 6500000; in mt6360_charger_probe()
797 mutex_init(&mci->chgdet_lock); in mt6360_charger_probe()
799 ret = devm_work_autocancel(&pdev->dev, &mci->chrdet_work, mt6360_chrdet_work); in mt6360_charger_probe()
801 return dev_err_probe(&pdev->dev, ret, "Failed to set delayed work\n"); in mt6360_charger_probe()
803 ret = device_property_read_u32(&pdev->dev, "richtek,vinovp-microvolt", &mci->vinovp); in mt6360_charger_probe()
805 dev_warn(&pdev->dev, "Failed to parse vinovp in DT, keep default 6.5v\n"); in mt6360_charger_probe()
807 mci->regmap = dev_get_regmap(pdev->dev.parent, NULL); in mt6360_charger_probe()
808 if (!mci->regmap) in mt6360_charger_probe()
809 return dev_err_probe(&pdev->dev, -ENODEV, "Failed to get parent regmap\n"); in mt6360_charger_probe()
813 return dev_err_probe(&pdev->dev, ret, "Failed to initial setting\n"); in mt6360_charger_probe()
815 memcpy(&mci->psy_desc, &mt6360_charger_desc, sizeof(mci->psy_desc)); in mt6360_charger_probe()
816 mci->psy_desc.name = dev_name(&pdev->dev); in mt6360_charger_probe()
818 charger_cfg.of_node = pdev->dev.of_node; in mt6360_charger_probe()
819 mci->psy = devm_power_supply_register(&pdev->dev, in mt6360_charger_probe()
820 &mci->psy_desc, &charger_cfg); in mt6360_charger_probe()
821 if (IS_ERR(mci->psy)) in mt6360_charger_probe()
822 return dev_err_probe(&pdev->dev, PTR_ERR(mci->psy), in mt6360_charger_probe()
828 return dev_err_probe(&pdev->dev, ret, "Failed to register irqs\n"); in mt6360_charger_probe()
830 config.dev = &pdev->dev; in mt6360_charger_probe()
831 config.regmap = mci->regmap; in mt6360_charger_probe()
832 mci->otg_rdev = devm_regulator_register(&pdev->dev, &mt6360_otg_rdesc, in mt6360_charger_probe()
834 if (IS_ERR(mci->otg_rdev)) in mt6360_charger_probe()
835 return PTR_ERR(mci->otg_rdev); in mt6360_charger_probe()
837 schedule_work(&mci->chrdet_work); in mt6360_charger_probe()
843 { .compatible = "mediatek,mt6360-chg", },
849 { "mt6360-chg", 0 },
856 .name = "mt6360-chg",