s5m8767 162 drivers/regulator/s5m8767.c static int s5m8767_get_register(struct s5m8767_info *s5m8767, int reg_id, s5m8767 191 drivers/regulator/s5m8767.c for (i = 0; i < s5m8767->num_regulators; i++) { s5m8767 192 drivers/regulator/s5m8767.c if (s5m8767->opmode[i].id == reg_id) { s5m8767 193 drivers/regulator/s5m8767.c mode = s5m8767->opmode[i].mode; s5m8767 198 drivers/regulator/s5m8767.c if (i >= s5m8767->num_regulators) s5m8767 206 drivers/regulator/s5m8767.c static int s5m8767_get_vsel_reg(int reg_id, struct s5m8767_info *s5m8767) s5m8767 222 drivers/regulator/s5m8767.c if (s5m8767->buck2_gpiodvs) s5m8767 223 drivers/regulator/s5m8767.c reg += s5m8767->buck_gpioindex; s5m8767 227 drivers/regulator/s5m8767.c if (s5m8767->buck3_gpiodvs) s5m8767 228 drivers/regulator/s5m8767.c reg += s5m8767->buck_gpioindex; s5m8767 232 drivers/regulator/s5m8767.c if (s5m8767->buck4_gpiodvs) s5m8767 233 drivers/regulator/s5m8767.c reg += s5m8767->buck_gpioindex; s5m8767 270 drivers/regulator/s5m8767.c static inline int s5m8767_set_high(struct s5m8767_info *s5m8767) s5m8767 272 drivers/regulator/s5m8767.c int temp_index = s5m8767->buck_gpioindex; s5m8767 274 drivers/regulator/s5m8767.c gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); s5m8767 275 drivers/regulator/s5m8767.c gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1); s5m8767 276 drivers/regulator/s5m8767.c gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1); s5m8767 281 drivers/regulator/s5m8767.c static inline int s5m8767_set_low(struct s5m8767_info *s5m8767) s5m8767 283 drivers/regulator/s5m8767.c int temp_index = s5m8767->buck_gpioindex; s5m8767 285 drivers/regulator/s5m8767.c gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1); s5m8767 286 drivers/regulator/s5m8767.c gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1); s5m8767 287 drivers/regulator/s5m8767.c gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); s5m8767 295 drivers/regulator/s5m8767.c struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); s5m8767 304 drivers/regulator/s5m8767.c if (reg_id == S5M8767_BUCK2 && s5m8767->buck2_gpiodvs) s5m8767 305 drivers/regulator/s5m8767.c buck234_vol = &s5m8767->buck2_vol[0]; s5m8767 306 drivers/regulator/s5m8767.c else if (reg_id == S5M8767_BUCK3 && s5m8767->buck3_gpiodvs) s5m8767 307 drivers/regulator/s5m8767.c buck234_vol = &s5m8767->buck3_vol[0]; s5m8767 308 drivers/regulator/s5m8767.c else if (reg_id == S5M8767_BUCK4 && s5m8767->buck4_gpiodvs) s5m8767 309 drivers/regulator/s5m8767.c buck234_vol = &s5m8767->buck4_vol[0]; s5m8767 325 drivers/regulator/s5m8767.c old_index = s5m8767->buck_gpioindex; s5m8767 326 drivers/regulator/s5m8767.c s5m8767->buck_gpioindex = index; s5m8767 329 drivers/regulator/s5m8767.c return s5m8767_set_high(s5m8767); s5m8767 331 drivers/regulator/s5m8767.c return s5m8767_set_low(s5m8767); s5m8767 341 drivers/regulator/s5m8767.c struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); s5m8767 343 drivers/regulator/s5m8767.c if ((old_sel < new_sel) && s5m8767->ramp_delay) s5m8767 345 drivers/regulator/s5m8767.c s5m8767->ramp_delay * 1000); s5m8767 427 drivers/regulator/s5m8767.c static void s5m8767_regulator_config_ext_control(struct s5m8767_info *s5m8767, s5m8767 437 drivers/regulator/s5m8767.c for (i = 0; i < s5m8767->num_regulators; i++) { s5m8767 438 drivers/regulator/s5m8767.c const struct sec_opmode_data *opmode = &s5m8767->opmode[i]; s5m8767 445 drivers/regulator/s5m8767.c dev_warn(s5m8767->dev, s5m8767 452 drivers/regulator/s5m8767.c dev_warn(s5m8767->dev, s5m8767 464 drivers/regulator/s5m8767.c static int s5m8767_enable_ext_control(struct s5m8767_info *s5m8767, s5m8767 473 drivers/regulator/s5m8767.c ret = s5m8767_get_register(s5m8767, id, ®, &enable_ctrl); s5m8767 477 drivers/regulator/s5m8767.c return regmap_update_bits(s5m8767->iodev->regmap_pmic, s5m8767 689 drivers/regulator/s5m8767.c struct s5m8767_info *s5m8767; s5m8767 724 drivers/regulator/s5m8767.c s5m8767 = devm_kzalloc(&pdev->dev, sizeof(struct s5m8767_info), s5m8767 726 drivers/regulator/s5m8767.c if (!s5m8767) s5m8767 729 drivers/regulator/s5m8767.c s5m8767->dev = &pdev->dev; s5m8767 730 drivers/regulator/s5m8767.c s5m8767->iodev = iodev; s5m8767 731 drivers/regulator/s5m8767.c s5m8767->num_regulators = pdata->num_regulators; s5m8767 732 drivers/regulator/s5m8767.c platform_set_drvdata(pdev, s5m8767); s5m8767 734 drivers/regulator/s5m8767.c s5m8767->buck_gpioindex = pdata->buck_default_idx; s5m8767 735 drivers/regulator/s5m8767.c s5m8767->buck2_gpiodvs = pdata->buck2_gpiodvs; s5m8767 736 drivers/regulator/s5m8767.c s5m8767->buck3_gpiodvs = pdata->buck3_gpiodvs; s5m8767 737 drivers/regulator/s5m8767.c s5m8767->buck4_gpiodvs = pdata->buck4_gpiodvs; s5m8767 738 drivers/regulator/s5m8767.c s5m8767->buck_gpios[0] = pdata->buck_gpios[0]; s5m8767 739 drivers/regulator/s5m8767.c s5m8767->buck_gpios[1] = pdata->buck_gpios[1]; s5m8767 740 drivers/regulator/s5m8767.c s5m8767->buck_gpios[2] = pdata->buck_gpios[2]; s5m8767 741 drivers/regulator/s5m8767.c s5m8767->buck_ds[0] = pdata->buck_ds[0]; s5m8767 742 drivers/regulator/s5m8767.c s5m8767->buck_ds[1] = pdata->buck_ds[1]; s5m8767 743 drivers/regulator/s5m8767.c s5m8767->buck_ds[2] = pdata->buck_ds[2]; s5m8767 745 drivers/regulator/s5m8767.c s5m8767->ramp_delay = pdata->buck_ramp_delay; s5m8767 746 drivers/regulator/s5m8767.c s5m8767->buck2_ramp = pdata->buck2_ramp_enable; s5m8767 747 drivers/regulator/s5m8767.c s5m8767->buck3_ramp = pdata->buck3_ramp_enable; s5m8767 748 drivers/regulator/s5m8767.c s5m8767->buck4_ramp = pdata->buck4_ramp_enable; s5m8767 749 drivers/regulator/s5m8767.c s5m8767->opmode = pdata->opmode; s5m8767 754 drivers/regulator/s5m8767.c regmap_write(s5m8767->iodev->regmap_pmic, S5M8767_REG_BUCK2DVS2, s5m8767 760 drivers/regulator/s5m8767.c regmap_write(s5m8767->iodev->regmap_pmic, S5M8767_REG_BUCK3DVS2, s5m8767 766 drivers/regulator/s5m8767.c regmap_write(s5m8767->iodev->regmap_pmic, S5M8767_REG_BUCK4DVS2, s5m8767 770 drivers/regulator/s5m8767.c if (s5m8767->buck2_gpiodvs) { s5m8767 771 drivers/regulator/s5m8767.c s5m8767->buck2_vol[i] = s5m8767 777 drivers/regulator/s5m8767.c if (s5m8767->buck3_gpiodvs) { s5m8767 778 drivers/regulator/s5m8767.c s5m8767->buck3_vol[i] = s5m8767 784 drivers/regulator/s5m8767.c if (s5m8767->buck4_gpiodvs) { s5m8767 785 drivers/regulator/s5m8767.c s5m8767->buck4_vol[i] = s5m8767 819 drivers/regulator/s5m8767.c (s5m8767->buck_gpioindex >> 2) & 0x1); s5m8767 822 drivers/regulator/s5m8767.c (s5m8767->buck_gpioindex >> 1) & 0x1); s5m8767 825 drivers/regulator/s5m8767.c (s5m8767->buck_gpioindex >> 0) & 0x1); s5m8767 849 drivers/regulator/s5m8767.c regmap_update_bits(s5m8767->iodev->regmap_pmic, s5m8767 852 drivers/regulator/s5m8767.c regmap_update_bits(s5m8767->iodev->regmap_pmic, s5m8767 855 drivers/regulator/s5m8767.c regmap_update_bits(s5m8767->iodev->regmap_pmic, s5m8767 862 drivers/regulator/s5m8767.c if (s5m8767->buck2_gpiodvs) { s5m8767 863 drivers/regulator/s5m8767.c regmap_write(s5m8767->iodev->regmap_pmic, s5m8767 865 drivers/regulator/s5m8767.c s5m8767->buck2_vol[i]); s5m8767 868 drivers/regulator/s5m8767.c if (s5m8767->buck3_gpiodvs) { s5m8767 869 drivers/regulator/s5m8767.c regmap_write(s5m8767->iodev->regmap_pmic, s5m8767 871 drivers/regulator/s5m8767.c s5m8767->buck3_vol[i]); s5m8767 874 drivers/regulator/s5m8767.c if (s5m8767->buck4_gpiodvs) { s5m8767 875 drivers/regulator/s5m8767.c regmap_write(s5m8767->iodev->regmap_pmic, s5m8767 877 drivers/regulator/s5m8767.c s5m8767->buck4_vol[i]); s5m8767 881 drivers/regulator/s5m8767.c if (s5m8767->buck2_ramp) s5m8767 882 drivers/regulator/s5m8767.c regmap_update_bits(s5m8767->iodev->regmap_pmic, s5m8767 885 drivers/regulator/s5m8767.c if (s5m8767->buck3_ramp) s5m8767 886 drivers/regulator/s5m8767.c regmap_update_bits(s5m8767->iodev->regmap_pmic, s5m8767 889 drivers/regulator/s5m8767.c if (s5m8767->buck4_ramp) s5m8767 890 drivers/regulator/s5m8767.c regmap_update_bits(s5m8767->iodev->regmap_pmic, s5m8767 893 drivers/regulator/s5m8767.c if (s5m8767->buck2_ramp || s5m8767->buck3_ramp s5m8767 894 drivers/regulator/s5m8767.c || s5m8767->buck4_ramp) { s5m8767 896 drivers/regulator/s5m8767.c switch (s5m8767->ramp_delay) { s5m8767 915 drivers/regulator/s5m8767.c regmap_update_bits(s5m8767->iodev->regmap_pmic, s5m8767 934 drivers/regulator/s5m8767.c s5m8767_get_vsel_reg(id, s5m8767); s5m8767 940 drivers/regulator/s5m8767.c ret = s5m8767_get_register(s5m8767, id, &enable_reg, s5m8767 943 drivers/regulator/s5m8767.c dev_err(s5m8767->dev, "error reading registers\n"); s5m8767 951 drivers/regulator/s5m8767.c config.dev = s5m8767->dev; s5m8767 953 drivers/regulator/s5m8767.c config.driver_data = s5m8767; s5m8767 959 drivers/regulator/s5m8767.c s5m8767_regulator_config_ext_control(s5m8767, s5m8767 966 drivers/regulator/s5m8767.c devm_gpiod_unhinge(s5m8767->dev, config.ena_gpiod); s5m8767 972 drivers/regulator/s5m8767.c dev_err(s5m8767->dev, "regulator init failed for %d\n", s5m8767 978 drivers/regulator/s5m8767.c ret = s5m8767_enable_ext_control(s5m8767, rdev); s5m8767 980 drivers/regulator/s5m8767.c dev_err(s5m8767->dev,