Lines Matching +full:- +full:- +full:pfuze3000

1 // SPDX-License-Identifier: GPL-2.0+
3 // Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved.
63 enum chips { PFUZE100, PFUZE200, PFUZE3000 = 3, PFUZE3001 = 0x31, }; enumerator
112 { .compatible = "fsl,pfuze3000", .data = (void *)PFUZE3000},
126 switch (pfuze100->chip_id) { in pfuze100_set_ramp_delay()
131 case PFUZE3000: in pfuze100_set_ramp_delay()
146 ramp_bits = (ramp_delay >> 1) - (ramp_delay >> 3); in pfuze100_set_ramp_delay()
149 ret = regmap_update_bits(pfuze100->regmap, in pfuze100_set_ramp_delay()
150 rdev->desc->vsel_reg + 4, in pfuze100_set_ramp_delay()
153 dev_err(pfuze100->dev, "ramp failed, err %d\n", ret); in pfuze100_set_ramp_delay()
155 ret = -EACCES; in pfuze100_set_ramp_delay()
239 .n_voltages = ((max) - (min)) / (step) + 1, \
277 .n_voltages = ((max) - (min)) / (step) + 1, \
313 .n_voltages = ((max) - (min)) / (step) + 1, \
329 /* No linar case for the some switches of PFUZE3000 */
355 .n_voltages = ((max) - (min)) / (step) + 1, \
407 PFUZE3000_SW_REG(PFUZE3000, SW1A, PFUZE100_SW1ABVOL, 0x1f, pfuze3000_sw1a),
408 PFUZE100_SW_REG(PFUZE3000, SW1B, PFUZE100_SW1CVOL, 700000, 1475000, 25000),
409 PFUZE3000_SW_REG(PFUZE3000, SW2, PFUZE100_SW2VOL, 0x7, pfuze3000_sw2lo),
410 PFUZE3000_SW3_REG(PFUZE3000, SW3, PFUZE100_SW3AVOL, 900000, 1650000, 50000),
411 PFUZE100_SWB_REG(PFUZE3000, SWBST, PFUZE100_SWBSTCON1, 0x3, pfuze100_swbst),
412 PFUZE100_SWB_REG(PFUZE3000, VSNVS, PFUZE100_VSNVSVOL, 0x7, pfuze100_vsnvs),
413 PFUZE100_FIXED_REG(PFUZE3000, VREFDDR, PFUZE100_VREFDDRCON, 750000),
414 PFUZE100_VGEN_REG(PFUZE3000, VLDO1, PFUZE100_VGEN1VOL, 1800000, 3300000, 100000),
415 PFUZE100_VGEN_REG(PFUZE3000, VLDO2, PFUZE100_VGEN2VOL, 800000, 1550000, 50000),
416 PFUZE3000_VCC_REG(PFUZE3000, VCCSD, PFUZE100_VGEN3VOL, 2850000, 3300000, 150000),
417 PFUZE3000_VCC_REG(PFUZE3000, V33, PFUZE100_VGEN4VOL, 2850000, 3300000, 150000),
418 PFUZE100_VGEN_REG(PFUZE3000, VLDO3, PFUZE100_VGEN5VOL, 1800000, 3300000, 100000),
419 PFUZE100_VGEN_REG(PFUZE3000, VLDO4, PFUZE100_VGEN6VOL, 1800000, 3300000, 100000),
474 /* PFUZE3000 */
511 struct device *dev = chip->dev; in pfuze_parse_regulators_dt()
515 np = of_node_get(dev->of_node); in pfuze_parse_regulators_dt()
517 return -EINVAL; in pfuze_parse_regulators_dt()
519 if (of_property_read_bool(np, "fsl,pfuze-support-disable-sw")) in pfuze_parse_regulators_dt()
520 chip->flags |= PFUZE_FLAG_DISABLE_SW; in pfuze_parse_regulators_dt()
526 return -EINVAL; in pfuze_parse_regulators_dt()
529 switch (chip->chip_id) { in pfuze_parse_regulators_dt()
535 case PFUZE3000: in pfuze_parse_regulators_dt()
577 struct pfuze_chip *syspm_pfuze_chip = data->cb_data; in pfuze_power_off_prepare()
579 dev_info(syspm_pfuze_chip->dev, "Configure standby mode for power off"); in pfuze_power_off_prepare()
582 regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_SW1ABMODE, in pfuze_power_off_prepare()
584 regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_SW1CMODE, in pfuze_power_off_prepare()
586 regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_SW2MODE, in pfuze_power_off_prepare()
588 regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_SW3AMODE, in pfuze_power_off_prepare()
590 regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_SW3BMODE, in pfuze_power_off_prepare()
592 regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_SW4MODE, in pfuze_power_off_prepare()
595 regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN1VOL, in pfuze_power_off_prepare()
598 regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN2VOL, in pfuze_power_off_prepare()
601 regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN3VOL, in pfuze_power_off_prepare()
604 regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN4VOL, in pfuze_power_off_prepare()
607 regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN5VOL, in pfuze_power_off_prepare()
610 regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN6VOL, in pfuze_power_off_prepare()
621 if (pfuze_chip->chip_id != PFUZE100) { in pfuze_power_off_prepare_init()
622 dev_warn(pfuze_chip->dev, "Requested pm_power_off_prepare handler for not supported chip\n"); in pfuze_power_off_prepare_init()
623 return -ENODEV; in pfuze_power_off_prepare_init()
626 err = devm_register_sys_off_handler(pfuze_chip->dev, in pfuze_power_off_prepare_init()
632 dev_err(pfuze_chip->dev, "failed to register sys-off handler: %d\n", in pfuze_power_off_prepare_init()
645 ret = regmap_read(pfuze_chip->regmap, PFUZE100_DEVICEID, &value); in pfuze_identify()
649 if (((value & 0x0f) == 0x8) && (pfuze_chip->chip_id == PFUZE100)) { in pfuze_identify()
651 * Freescale misprogrammed 1-3% of parts prior to week 8 of 2013 in pfuze_identify()
654 dev_info(pfuze_chip->dev, "Assuming misprogrammed ID=0x8"); in pfuze_identify()
655 } else if ((value & 0x0f) != pfuze_chip->chip_id && in pfuze_identify()
656 (value & 0xf0) >> 4 != pfuze_chip->chip_id && in pfuze_identify()
657 (value != pfuze_chip->chip_id)) { in pfuze_identify()
659 dev_warn(pfuze_chip->dev, "Illegal ID: %x\n", value); in pfuze_identify()
660 return -ENODEV; in pfuze_identify()
663 ret = regmap_read(pfuze_chip->regmap, PFUZE100_REVID, &value); in pfuze_identify()
666 dev_info(pfuze_chip->dev, in pfuze_identify()
670 ret = regmap_read(pfuze_chip->regmap, PFUZE100_FABID, &value); in pfuze_identify()
673 dev_info(pfuze_chip->dev, "FAB: %x, FIN: %x\n", in pfuze_identify()
682 .max_register = PFUZE_NUMREGS - 1,
696 pfuze_chip = devm_kzalloc(&client->dev, sizeof(*pfuze_chip), in pfuze100_regulator_probe()
699 return -ENOMEM; in pfuze100_regulator_probe()
701 if (client->dev.of_node) { in pfuze100_regulator_probe()
702 match = of_match_device(pfuze_dt_ids, &client->dev); in pfuze100_regulator_probe()
704 dev_err(&client->dev, "Error: No device match found\n"); in pfuze100_regulator_probe()
705 return -ENODEV; in pfuze100_regulator_probe()
707 pfuze_chip->chip_id = (int)(long)match->data; in pfuze100_regulator_probe()
709 pfuze_chip->chip_id = id->driver_data; in pfuze100_regulator_probe()
711 dev_err(&client->dev, "No dts match or id table match found\n"); in pfuze100_regulator_probe()
712 return -ENODEV; in pfuze100_regulator_probe()
716 pfuze_chip->dev = &client->dev; in pfuze100_regulator_probe()
718 pfuze_chip->regmap = devm_regmap_init_i2c(client, &pfuze_regmap_config); in pfuze100_regulator_probe()
719 if (IS_ERR(pfuze_chip->regmap)) { in pfuze100_regulator_probe()
720 ret = PTR_ERR(pfuze_chip->regmap); in pfuze100_regulator_probe()
721 dev_err(&client->dev, in pfuze100_regulator_probe()
728 dev_err(&client->dev, "unrecognized pfuze chip ID!\n"); in pfuze100_regulator_probe()
733 switch (pfuze_chip->chip_id) { in pfuze100_regulator_probe()
735 pfuze_chip->pfuze_regulators = pfuze3001_regulators; in pfuze100_regulator_probe()
741 case PFUZE3000: in pfuze100_regulator_probe()
742 pfuze_chip->pfuze_regulators = pfuze3000_regulators; in pfuze100_regulator_probe()
749 pfuze_chip->pfuze_regulators = pfuze200_regulators; in pfuze100_regulator_probe()
756 pfuze_chip->pfuze_regulators = pfuze100_regulators; in pfuze100_regulator_probe()
762 dev_info(&client->dev, "pfuze%s found.\n", in pfuze100_regulator_probe()
763 (pfuze_chip->chip_id == PFUZE100) ? "100" : in pfuze100_regulator_probe()
764 (((pfuze_chip->chip_id == PFUZE200) ? "200" : in pfuze100_regulator_probe()
765 ((pfuze_chip->chip_id == PFUZE3000) ? "3000" : "3001")))); in pfuze100_regulator_probe()
767 memcpy(pfuze_chip->regulator_descs, pfuze_chip->pfuze_regulators, in pfuze100_regulator_probe()
779 desc = &pfuze_chip->regulator_descs[i].desc; in pfuze100_regulator_probe()
785 ret = regmap_read(pfuze_chip->regmap, in pfuze100_regulator_probe()
786 desc->vsel_reg, &val); in pfuze100_regulator_probe()
788 dev_err(&client->dev, "Fails to read from the register.\n"); in pfuze100_regulator_probe()
793 if (pfuze_chip->chip_id == PFUZE3000 || in pfuze100_regulator_probe()
794 pfuze_chip->chip_id == PFUZE3001) { in pfuze100_regulator_probe()
795 desc->volt_table = pfuze3000_sw2hi; in pfuze100_regulator_probe()
796 desc->n_voltages = ARRAY_SIZE(pfuze3000_sw2hi); in pfuze100_regulator_probe()
798 desc->min_uV = 800000; in pfuze100_regulator_probe()
799 desc->uV_step = 50000; in pfuze100_regulator_probe()
800 desc->n_voltages = 51; in pfuze100_regulator_probe()
811 if (pfuze_chip->flags & PFUZE_FLAG_DISABLE_SW) { in pfuze100_regulator_probe()
812 if (pfuze_chip->chip_id == PFUZE100 || in pfuze100_regulator_probe()
813 pfuze_chip->chip_id == PFUZE200) { in pfuze100_regulator_probe()
814 if (pfuze_chip->regulator_descs[i].sw_reg) { in pfuze100_regulator_probe()
815 desc->ops = &pfuze100_sw_disable_regulator_ops; in pfuze100_regulator_probe()
816 desc->enable_val = 0x8; in pfuze100_regulator_probe()
817 desc->disable_val = 0x0; in pfuze100_regulator_probe()
818 desc->enable_time = 500; in pfuze100_regulator_probe()
823 config.dev = &client->dev; in pfuze100_regulator_probe()
828 pfuze_chip->regulators[i] = in pfuze100_regulator_probe()
829 devm_regulator_register(&client->dev, desc, &config); in pfuze100_regulator_probe()
830 if (IS_ERR(pfuze_chip->regulators[i])) { in pfuze100_regulator_probe()
831 dev_err(&client->dev, "register regulator%s failed\n", in pfuze100_regulator_probe()
832 pfuze_chip->pfuze_regulators[i].desc.name); in pfuze100_regulator_probe()
833 return PTR_ERR(pfuze_chip->regulators[i]); in pfuze100_regulator_probe()
837 if (of_property_read_bool(client->dev.of_node, in pfuze100_regulator_probe()
838 "fsl,pmic-stby-poweroff")) in pfuze100_regulator_probe()
846 .name = "pfuze100-regulator",