Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

PM / AVS: SmartReflex: use omap_sr * for enable/disable interface

SmartReflex driver interface is natively divided to two parts:

- external SmartReflex interface
- interface between SmartReflex driver and SmartReflex Class

Functions which belong to AVS class interface can use
struct omap_sr* instead of struct voltatedomain*, to provide a
direct connection between SR driver and SR class. This allows
us to optimize and not do additional lookups where none is
required.

sr_enable() and sr_disable() are interface functions between
SR driver and SR class. They are typically used by Class driver
to enable/disable SmartReflex hardware module.
Now they take struct omap_sr* as input parameter.

Signed-off-by: Andrii Tseglytskyi <andrii.tseglytskyi@ti.com>
Acked-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Kevin Hilman <khilman@linaro.org>

authored by

Andrii Tseglytskyi and committed by
Kevin Hilman
299066bb 6c805734

+15 -16
+2 -2
arch/arm/mach-omap2/smartreflex-class3.c
··· 26 26 } 27 27 28 28 omap_vp_enable(sr->voltdm); 29 - return sr_enable(sr->voltdm, volt); 29 + return sr_enable(sr, volt); 30 30 } 31 31 32 32 static int sr_class3_disable(struct omap_sr *sr, int is_volt_reset) 33 33 { 34 34 sr_disable_errgen(sr); 35 35 omap_vp_disable(sr->voltdm); 36 - sr_disable(sr->voltdm); 36 + sr_disable(sr); 37 37 if (is_volt_reset) 38 38 voltdm_reset(sr->voltdm); 39 39
+11 -12
drivers/power/avs/smartreflex.c
··· 552 552 553 553 /** 554 554 * sr_enable() - Enables the smartreflex module. 555 - * @voltdm: VDD pointer to which the SR module to be configured belongs to. 555 + * @sr: pointer to which the SR module to be configured belongs to. 556 556 * @volt: The voltage at which the Voltage domain associated with 557 557 * the smartreflex module is operating at. 558 558 * This is required only to program the correct Ntarget value. ··· 561 561 * enable a smartreflex module. Returns 0 on success. Returns error 562 562 * value if the voltage passed is wrong or if ntarget value is wrong. 563 563 */ 564 - int sr_enable(struct voltagedomain *voltdm, unsigned long volt) 564 + int sr_enable(struct omap_sr *sr, unsigned long volt) 565 565 { 566 566 struct omap_volt_data *volt_data; 567 - struct omap_sr *sr = _sr_lookup(voltdm); 568 567 struct omap_sr_nvalue_table *nvalue_row; 569 568 int ret; 570 569 571 - if (IS_ERR(sr)) { 572 - pr_warning("%s: omap_sr struct for voltdm not found\n", __func__); 573 - return PTR_ERR(sr); 570 + if (!sr) { 571 + pr_warn("%s: NULL omap_sr from %pF\n", __func__, 572 + (void *)_RET_IP_); 573 + return -EINVAL; 574 574 } 575 575 576 576 volt_data = omap_voltage_get_voltdata(sr->voltdm, volt); ··· 612 612 613 613 /** 614 614 * sr_disable() - Disables the smartreflex module. 615 - * @voltdm: VDD pointer to which the SR module to be configured belongs to. 615 + * @sr: pointer to which the SR module to be configured belongs to. 616 616 * 617 617 * This API is to be called from the smartreflex class driver to 618 618 * disable a smartreflex module. 619 619 */ 620 - void sr_disable(struct voltagedomain *voltdm) 620 + void sr_disable(struct omap_sr *sr) 621 621 { 622 - struct omap_sr *sr = _sr_lookup(voltdm); 623 - 624 - if (IS_ERR(sr)) { 625 - pr_warning("%s: omap_sr struct for voltdm not found\n", __func__); 622 + if (!sr) { 623 + pr_warn("%s: NULL omap_sr from %pF\n", __func__, 624 + (void *)_RET_IP_); 626 625 return; 627 626 } 628 627
+2 -2
include/linux/power/smartreflex.h
··· 299 299 void omap_sr_register_pmic(struct omap_sr_pmic_data *pmic_data); 300 300 301 301 /* Smartreflex driver hooks to be called from Smartreflex class driver */ 302 - int sr_enable(struct voltagedomain *voltdm, unsigned long volt); 303 - void sr_disable(struct voltagedomain *voltdm); 302 + int sr_enable(struct omap_sr *sr, unsigned long volt); 303 + void sr_disable(struct omap_sr *sr); 304 304 int sr_configure_errgen(struct omap_sr *sr); 305 305 int sr_disable_errgen(struct omap_sr *sr); 306 306 int sr_configure_minmax(struct omap_sr *sr);