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 errgen interfaces

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_disable_errgen() and sr_configure_errgen() are interface
functions between SR driver and SR class. They are typically
used by Class driver to configure error generator module during
SmartReflex enable/disable sequence.
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
3dfc35ff 33da2824

+17 -17
+2 -2
arch/arm/mach-omap2/smartreflex-class3.c
··· 31 31 32 32 static int sr_class3_disable(struct omap_sr *sr, int is_volt_reset) 33 33 { 34 - sr_disable_errgen(sr->voltdm); 34 + sr_disable_errgen(sr); 35 35 omap_vp_disable(sr->voltdm); 36 36 sr_disable(sr->voltdm); 37 37 if (is_volt_reset) ··· 42 42 43 43 static int sr_class3_configure(struct omap_sr *sr) 44 44 { 45 - return sr_configure_errgen(sr->voltdm); 45 + return sr_configure_errgen(sr); 46 46 } 47 47 48 48 /* SR class3 structure */
+13 -13
drivers/power/avs/smartreflex.c
··· 342 342 /* Public Functions */ 343 343 344 344 /** 345 - * sr_configure_errgen() - Configures the smrtreflex to perform AVS using the 345 + * sr_configure_errgen() - Configures the SmartReflex to perform AVS using the 346 346 * error generator module. 347 - * @voltdm: VDD pointer to which the SR module to be configured belongs to. 347 + * @sr: SR module to be configured. 348 348 * 349 349 * This API is to be called from the smartreflex class driver to 350 350 * configure the error generator module inside the smartreflex module. ··· 353 353 * SR CLASS 2 can choose between ERROR module and MINMAXAVG 354 354 * module. Returns 0 on success and error value in case of failure. 355 355 */ 356 - int sr_configure_errgen(struct voltagedomain *voltdm) 356 + int sr_configure_errgen(struct omap_sr *sr) 357 357 { 358 358 u32 sr_config, sr_errconfig, errconfig_offs; 359 359 u32 vpboundint_en, vpboundint_st; 360 360 u32 senp_en = 0, senn_en = 0; 361 361 u8 senp_shift, senn_shift; 362 - struct omap_sr *sr = _sr_lookup(voltdm); 363 362 364 - if (IS_ERR(sr)) { 365 - pr_warning("%s: omap_sr struct for voltdm not found\n", __func__); 366 - return PTR_ERR(sr); 363 + if (!sr) { 364 + pr_warn("%s: NULL omap_sr from %pF\n", __func__, 365 + (void *)_RET_IP_); 366 + return -EINVAL; 367 367 } 368 368 369 369 if (!sr->clk_length) ··· 415 415 416 416 /** 417 417 * sr_disable_errgen() - Disables SmartReflex AVS module's errgen component 418 - * @voltdm: VDD pointer to which the SR module to be configured belongs to. 418 + * @sr: SR module to be configured. 419 419 * 420 420 * This API is to be called from the smartreflex class driver to 421 421 * disable the error generator module inside the smartreflex module. 422 422 * 423 423 * Returns 0 on success and error value in case of failure. 424 424 */ 425 - int sr_disable_errgen(struct voltagedomain *voltdm) 425 + int sr_disable_errgen(struct omap_sr *sr) 426 426 { 427 427 u32 errconfig_offs; 428 428 u32 vpboundint_en, vpboundint_st; 429 - struct omap_sr *sr = _sr_lookup(voltdm); 430 429 431 - if (IS_ERR(sr)) { 432 - pr_warning("%s: omap_sr struct for voltdm not found\n", __func__); 433 - return PTR_ERR(sr); 430 + if (!sr) { 431 + pr_warn("%s: NULL omap_sr from %pF\n", __func__, 432 + (void *)_RET_IP_); 433 + return -EINVAL; 434 434 } 435 435 436 436 switch (sr->ip_type) {
+2 -2
include/linux/power/smartreflex.h
··· 301 301 /* Smartreflex driver hooks to be called from Smartreflex class driver */ 302 302 int sr_enable(struct voltagedomain *voltdm, unsigned long volt); 303 303 void sr_disable(struct voltagedomain *voltdm); 304 - int sr_configure_errgen(struct voltagedomain *voltdm); 305 - int sr_disable_errgen(struct voltagedomain *voltdm); 304 + int sr_configure_errgen(struct omap_sr *sr); 305 + int sr_disable_errgen(struct omap_sr *sr); 306 306 int sr_configure_minmax(struct voltagedomain *voltdm); 307 307 308 308 /* API to register the smartreflex class driver with the smartreflex driver */