Lines Matching refs:dcdc
3 // wm831x-dcdc.c -- DC-DC buck converter driver for the WM831x series
62 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
63 struct wm831x *wm831x = dcdc->wm831x;
64 u16 reg = dcdc->base + WM831X_DCDC_ON_CONFIG;
116 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
117 struct wm831x *wm831x = dcdc->wm831x;
118 u16 reg = dcdc->base + WM831X_DCDC_ON_CONFIG;
126 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
127 struct wm831x *wm831x = dcdc->wm831x;
128 u16 reg = dcdc->base + WM831X_DCDC_SLEEP_CONTROL;
135 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
136 struct wm831x *wm831x = dcdc->wm831x;
179 struct wm831x_dcdc *dcdc = data;
181 regulator_notifier_call_chain(dcdc->regulator,
190 struct wm831x_dcdc *dcdc = data;
192 regulator_notifier_call_chain(dcdc->regulator,
210 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
212 if (state == dcdc->dvs_gpio_state)
215 dcdc->dvs_gpio_state = state;
216 gpiod_set_value(dcdc->dvs_gpiod, state);
229 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
230 struct wm831x *wm831x = dcdc->wm831x;
231 int on_reg = dcdc->base + WM831X_DCDC_ON_CONFIG;
232 int dvs_reg = dcdc->base + WM831X_DCDC_DVS_CONTROL;
236 if (dcdc->dvs_gpiod && dcdc->on_vsel == vsel)
239 if (dcdc->dvs_gpiod && dcdc->dvs_vsel == vsel)
246 dcdc->on_vsel = vsel;
248 if (!dcdc->dvs_gpiod)
262 if (vsel > dcdc->dvs_vsel) {
267 dcdc->dvs_vsel = vsel;
279 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
280 struct wm831x *wm831x = dcdc->wm831x;
281 u16 reg = dcdc->base + WM831X_DCDC_SLEEP_CONTROL;
293 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
295 if (dcdc->dvs_gpiod && dcdc->dvs_gpio_state)
296 return dcdc->dvs_vsel;
298 return dcdc->on_vsel;
329 struct wm831x_dcdc *dcdc,
332 struct wm831x *wm831x = dcdc->wm831x;
342 dcdc->dvs_gpio_state = pdata->dvs_init_state;
344 dcdc->dvs_gpiod = devm_gpiod_get(&pdev->dev, "dvs",
345 dcdc->dvs_gpio_state ? GPIOD_OUT_HIGH : GPIOD_OUT_LOW);
346 if (IS_ERR(dcdc->dvs_gpiod)) {
348 dcdc->name, PTR_ERR(dcdc->dvs_gpiod));
361 pdata->dvs_control_src, dcdc->name);
368 if (!dcdc->dvs_vsel) {
370 dcdc->base + WM831X_DCDC_DVS_CONTROL,
371 WM831X_DC1_DVS_VSEL_MASK, dcdc->on_vsel);
373 dcdc->dvs_vsel = dcdc->on_vsel;
379 ret = wm831x_set_bits(wm831x, dcdc->base + WM831X_DCDC_DVS_CONTROL,
383 dcdc->name, ret);
393 struct wm831x_dcdc *dcdc;
405 dcdc = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_dcdc),
407 if (!dcdc)
410 dcdc->wm831x = wm831x;
418 dcdc->base = res->start;
420 snprintf(dcdc->name, sizeof(dcdc->name), "DCDC%d", id + 1);
421 dcdc->desc.name = dcdc->name;
423 snprintf(dcdc->supply_name, sizeof(dcdc->supply_name),
425 dcdc->desc.supply_name = dcdc->supply_name;
427 dcdc->desc.id = id;
428 dcdc->desc.type = REGULATOR_VOLTAGE;
429 dcdc->desc.n_voltages = WM831X_BUCKV_MAX_SELECTOR + 1;
430 dcdc->desc.linear_ranges = wm831x_buckv_ranges;
431 dcdc->desc.n_linear_ranges = ARRAY_SIZE(wm831x_buckv_ranges);
432 dcdc->desc.ops = &wm831x_buckv_ops;
433 dcdc->desc.owner = THIS_MODULE;
434 dcdc->desc.enable_reg = WM831X_DCDC_ENABLE;
435 dcdc->desc.enable_mask = 1 << id;
436 dcdc->desc.csel_reg = dcdc->base + WM831X_DCDC_CONTROL_2;
437 dcdc->desc.csel_mask = WM831X_DC1_HC_THR_MASK;
438 dcdc->desc.n_current_limits = ARRAY_SIZE(wm831x_dcdc_ilim);
439 dcdc->desc.curr_table = wm831x_dcdc_ilim;
441 ret = wm831x_reg_read(wm831x, dcdc->base + WM831X_DCDC_ON_CONFIG);
446 dcdc->on_vsel = ret & WM831X_DC1_ON_VSEL_MASK;
448 ret = wm831x_reg_read(wm831x, dcdc->base + WM831X_DCDC_DVS_CONTROL);
453 dcdc->dvs_vsel = ret & WM831X_DC1_DVS_VSEL_MASK;
455 if (pdata && pdata->dcdc[id])
456 wm831x_buckv_dvs_init(pdev, dcdc,
457 pdata->dcdc[id]->driver_data);
461 config.init_data = pdata->dcdc[id];
462 config.driver_data = dcdc;
465 dcdc->regulator = devm_regulator_register(&pdev->dev, &dcdc->desc,
467 if (IS_ERR(dcdc->regulator)) {
468 ret = PTR_ERR(dcdc->regulator);
478 dcdc->name, dcdc);
489 dcdc->name, dcdc);
496 platform_set_drvdata(pdev, dcdc);
517 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
518 struct wm831x *wm831x = dcdc->wm831x;
519 u16 reg = dcdc->base + WM831X_DCDC_SLEEP_CONTROL;
551 struct wm831x_dcdc *dcdc;
563 dcdc = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_dcdc),
565 if (!dcdc)
568 dcdc->wm831x = wm831x;
576 dcdc->base = res->start;
578 snprintf(dcdc->name, sizeof(dcdc->name), "DCDC%d", id + 1);
579 dcdc->desc.name = dcdc->name;
581 snprintf(dcdc->supply_name, sizeof(dcdc->supply_name),
583 dcdc->desc.supply_name = dcdc->supply_name;
585 dcdc->desc.id = id;
586 dcdc->desc.type = REGULATOR_VOLTAGE;
587 dcdc->desc.n_voltages = WM831X_BUCKP_MAX_SELECTOR + 1;
588 dcdc->desc.ops = &wm831x_buckp_ops;
589 dcdc->desc.owner = THIS_MODULE;
590 dcdc->desc.vsel_reg = dcdc->base + WM831X_DCDC_ON_CONFIG;
591 dcdc->desc.vsel_mask = WM831X_DC3_ON_VSEL_MASK;
592 dcdc->desc.enable_reg = WM831X_DCDC_ENABLE;
593 dcdc->desc.enable_mask = 1 << id;
594 dcdc->desc.min_uV = 850000;
595 dcdc->desc.uV_step = 25000;
599 config.init_data = pdata->dcdc[id];
600 config.driver_data = dcdc;
603 dcdc->regulator = devm_regulator_register(&pdev->dev, &dcdc->desc,
605 if (IS_ERR(dcdc->regulator)) {
606 ret = PTR_ERR(dcdc->regulator);
616 dcdc->name, dcdc);
623 platform_set_drvdata(pdev, dcdc);
644 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
645 struct wm831x *wm831x = dcdc->wm831x;
682 int id = pdev->id % ARRAY_SIZE(pdata->dcdc);
683 struct wm831x_dcdc *dcdc;
689 if (pdata == NULL || pdata->dcdc[id] == NULL)
692 dcdc = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_dcdc), GFP_KERNEL);
693 if (!dcdc)
696 dcdc->wm831x = wm831x;
703 dcdc->base = res->start;
705 snprintf(dcdc->name, sizeof(dcdc->name), "DCDC%d", id + 1);
706 dcdc->desc.name = dcdc->name;
707 dcdc->desc.id = id;
708 dcdc->desc.type = REGULATOR_VOLTAGE;
709 dcdc->desc.ops = &wm831x_boostp_ops;
710 dcdc->desc.owner = THIS_MODULE;
711 dcdc->desc.enable_reg = WM831X_DCDC_ENABLE;
712 dcdc->desc.enable_mask = 1 << id;
716 config.init_data = pdata->dcdc[id];
717 config.driver_data = dcdc;
720 dcdc->regulator = devm_regulator_register(&pdev->dev, &dcdc->desc,
722 if (IS_ERR(dcdc->regulator)) {
723 ret = PTR_ERR(dcdc->regulator);
733 dcdc->name,
734 dcdc);
741 platform_set_drvdata(pdev, dcdc);
775 struct wm831x_dcdc *dcdc;
780 dcdc = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_dcdc), GFP_KERNEL);
781 if (!dcdc)
784 dcdc->wm831x = wm831x;
789 snprintf(dcdc->name, sizeof(dcdc->name), "EPE%d", id + 1);
790 dcdc->desc.name = dcdc->name;
791 dcdc->desc.id = id + WM831X_EPE_BASE; /* Offset in DCDC registers */
792 dcdc->desc.ops = &wm831x_epe_ops;
793 dcdc->desc.type = REGULATOR_VOLTAGE;
794 dcdc->desc.owner = THIS_MODULE;
795 dcdc->desc.enable_reg = WM831X_DCDC_ENABLE;
796 dcdc->desc.enable_mask = 1 << dcdc->desc.id;
801 config.driver_data = dcdc;
804 dcdc->regulator = devm_regulator_register(&pdev->dev, &dcdc->desc,
806 if (IS_ERR(dcdc->regulator)) {
807 ret = PTR_ERR(dcdc->regulator);
813 platform_set_drvdata(pdev, dcdc);