mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-11 17:47:02 +07:00
OMAP: DSS2: Use vdds_sdi regulator supply in SDI
This patch enables the use of vdds_sdi regulator in SDI subsystem. We can disable the vdds_sdi voltage when not in use to save power. Signed-off-by: Roger Quadros <roger.quadros@nokia.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
This commit is contained in:
parent
b1d145b6d3
commit
508886cf98
@ -23,13 +23,16 @@
|
|||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
|
#include <linux/regulator/consumer.h>
|
||||||
|
|
||||||
#include <plat/display.h>
|
#include <plat/display.h>
|
||||||
|
#include <plat/cpu.h>
|
||||||
#include "dss.h"
|
#include "dss.h"
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
bool skip_init;
|
bool skip_init;
|
||||||
bool update_enabled;
|
bool update_enabled;
|
||||||
|
struct regulator *vdds_sdi_reg;
|
||||||
} sdi;
|
} sdi;
|
||||||
|
|
||||||
static void sdi_basic_init(void)
|
static void sdi_basic_init(void)
|
||||||
@ -57,6 +60,10 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
|
|||||||
goto err0;
|
goto err0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r = regulator_enable(sdi.vdds_sdi_reg);
|
||||||
|
if (r)
|
||||||
|
goto err1;
|
||||||
|
|
||||||
/* In case of skip_init sdi_init has already enabled the clocks */
|
/* In case of skip_init sdi_init has already enabled the clocks */
|
||||||
if (!sdi.skip_init)
|
if (!sdi.skip_init)
|
||||||
dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
|
dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
|
||||||
@ -120,6 +127,7 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
|
|||||||
return 0;
|
return 0;
|
||||||
err2:
|
err2:
|
||||||
dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
|
dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
|
||||||
|
regulator_disable(sdi.vdds_sdi_reg);
|
||||||
err1:
|
err1:
|
||||||
omap_dss_stop_device(dssdev);
|
omap_dss_stop_device(dssdev);
|
||||||
err0:
|
err0:
|
||||||
@ -135,6 +143,8 @@ void omapdss_sdi_display_disable(struct omap_dss_device *dssdev)
|
|||||||
|
|
||||||
dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
|
dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
|
||||||
|
|
||||||
|
regulator_disable(sdi.vdds_sdi_reg);
|
||||||
|
|
||||||
omap_dss_stop_device(dssdev);
|
omap_dss_stop_device(dssdev);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(omapdss_sdi_display_disable);
|
EXPORT_SYMBOL(omapdss_sdi_display_disable);
|
||||||
@ -151,6 +161,11 @@ int sdi_init(bool skip_init)
|
|||||||
/* we store this for first display enable, then clear it */
|
/* we store this for first display enable, then clear it */
|
||||||
sdi.skip_init = skip_init;
|
sdi.skip_init = skip_init;
|
||||||
|
|
||||||
|
sdi.vdds_sdi_reg = dss_get_vdds_sdi();
|
||||||
|
if (IS_ERR(sdi.vdds_sdi_reg)) {
|
||||||
|
DSSERR("can't get VDDS_SDI regulator\n");
|
||||||
|
return PTR_ERR(sdi.vdds_sdi_reg);
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* Enable clocks already here, otherwise there would be a toggle
|
* Enable clocks already here, otherwise there would be a toggle
|
||||||
* of them until sdi_display_enable is called.
|
* of them until sdi_display_enable is called.
|
||||||
|
Loading…
Reference in New Issue
Block a user