mirror of https://gitee.com/openkylin/linux.git
OMAPDSS: DSI: cleanup regulator init
Separate the regulator initialization code to its own function, removing duplicate code. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
51930bba8e
commit
b2541c40aa
|
@ -1114,6 +1114,30 @@ void dsi_runtime_put(struct platform_device *dsidev)
|
||||||
WARN_ON(r < 0 && r != -ENOSYS);
|
WARN_ON(r < 0 && r != -ENOSYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int dsi_regulator_init(struct platform_device *dsidev)
|
||||||
|
{
|
||||||
|
struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
|
||||||
|
struct regulator *vdds_dsi;
|
||||||
|
|
||||||
|
if (dsi->vdds_dsi_reg != NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
vdds_dsi = devm_regulator_get(&dsi->pdev->dev, "vdds_dsi");
|
||||||
|
|
||||||
|
/* DT HACK: try VCXIO to make omapdss work for o4 sdp/panda */
|
||||||
|
if (IS_ERR(vdds_dsi))
|
||||||
|
vdds_dsi = devm_regulator_get(&dsi->pdev->dev, "VCXIO");
|
||||||
|
|
||||||
|
if (IS_ERR(vdds_dsi)) {
|
||||||
|
DSSERR("can't get VDDS_DSI regulator\n");
|
||||||
|
return PTR_ERR(vdds_dsi);
|
||||||
|
}
|
||||||
|
|
||||||
|
dsi->vdds_dsi_reg = vdds_dsi;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* source clock for DSI PLL. this could also be PCLKFREE */
|
/* source clock for DSI PLL. this could also be PCLKFREE */
|
||||||
static inline void dsi_enable_pll_clock(struct platform_device *dsidev,
|
static inline void dsi_enable_pll_clock(struct platform_device *dsidev,
|
||||||
bool enable)
|
bool enable)
|
||||||
|
@ -1592,22 +1616,9 @@ int dsi_pll_init(struct platform_device *dsidev, bool enable_hsclk,
|
||||||
*/
|
*/
|
||||||
enable_hsclk = enable_hsdiv = true;
|
enable_hsclk = enable_hsdiv = true;
|
||||||
|
|
||||||
if (dsi->vdds_dsi_reg == NULL) {
|
r = dsi_regulator_init(dsidev);
|
||||||
struct regulator *vdds_dsi;
|
if (r)
|
||||||
|
return r;
|
||||||
vdds_dsi = regulator_get(&dsi->pdev->dev, "vdds_dsi");
|
|
||||||
|
|
||||||
/* DT HACK: try VCXIO to make omapdss work for o4 sdp/panda */
|
|
||||||
if (IS_ERR(vdds_dsi))
|
|
||||||
vdds_dsi = regulator_get(&dsi->pdev->dev, "VCXIO");
|
|
||||||
|
|
||||||
if (IS_ERR(vdds_dsi)) {
|
|
||||||
DSSERR("can't get VDDS_DSI regulator\n");
|
|
||||||
return PTR_ERR(vdds_dsi);
|
|
||||||
}
|
|
||||||
|
|
||||||
dsi->vdds_dsi_reg = vdds_dsi;
|
|
||||||
}
|
|
||||||
|
|
||||||
dsi_enable_pll_clock(dsidev, 1);
|
dsi_enable_pll_clock(dsidev, 1);
|
||||||
/*
|
/*
|
||||||
|
@ -5225,34 +5236,6 @@ static enum omap_channel dsi_get_channel(int module_id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dsi_init_display(struct omap_dss_device *dssdev)
|
|
||||||
{
|
|
||||||
struct platform_device *dsidev =
|
|
||||||
dsi_get_dsidev_from_id(dssdev->phy.dsi.module);
|
|
||||||
struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
|
|
||||||
|
|
||||||
DSSDBG("DSI init\n");
|
|
||||||
|
|
||||||
if (dsi->vdds_dsi_reg == NULL) {
|
|
||||||
struct regulator *vdds_dsi;
|
|
||||||
|
|
||||||
vdds_dsi = regulator_get(&dsi->pdev->dev, "vdds_dsi");
|
|
||||||
|
|
||||||
/* DT HACK: try VCXIO to make omapdss work for o4 sdp/panda */
|
|
||||||
if (IS_ERR(vdds_dsi))
|
|
||||||
vdds_dsi = regulator_get(&dsi->pdev->dev, "VCXIO");
|
|
||||||
|
|
||||||
if (IS_ERR(vdds_dsi)) {
|
|
||||||
DSSERR("can't get VDDS_DSI regulator\n");
|
|
||||||
return PTR_ERR(vdds_dsi);
|
|
||||||
}
|
|
||||||
|
|
||||||
dsi->vdds_dsi_reg = vdds_dsi;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int omap_dsi_request_vc(struct omap_dss_device *dssdev, int *channel)
|
int omap_dsi_request_vc(struct omap_dss_device *dssdev, int *channel)
|
||||||
{
|
{
|
||||||
struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
|
struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
|
||||||
|
@ -5410,19 +5393,16 @@ static int dsi_probe_pdata(struct platform_device *dsidev)
|
||||||
if (!plat_dssdev)
|
if (!plat_dssdev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
r = dsi_regulator_init(dsidev);
|
||||||
|
if (r)
|
||||||
|
return r;
|
||||||
|
|
||||||
dssdev = dss_alloc_and_init_device(&dsidev->dev);
|
dssdev = dss_alloc_and_init_device(&dsidev->dev);
|
||||||
if (!dssdev)
|
if (!dssdev)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
dss_copy_device_pdata(dssdev, plat_dssdev);
|
dss_copy_device_pdata(dssdev, plat_dssdev);
|
||||||
|
|
||||||
r = dsi_init_display(dssdev);
|
|
||||||
if (r) {
|
|
||||||
DSSERR("device %s init failed: %d\n", dssdev->name, r);
|
|
||||||
dss_put_device(dssdev);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
r = omapdss_output_set_device(&dsi->output, dssdev);
|
r = omapdss_output_set_device(&dsi->output, dssdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
DSSERR("failed to connect output to new device: %s\n",
|
DSSERR("failed to connect output to new device: %s\n",
|
||||||
|
@ -5604,14 +5584,9 @@ static int __exit omap_dsihw_remove(struct platform_device *dsidev)
|
||||||
|
|
||||||
pm_runtime_disable(&dsidev->dev);
|
pm_runtime_disable(&dsidev->dev);
|
||||||
|
|
||||||
if (dsi->vdds_dsi_reg != NULL) {
|
if (dsi->vdds_dsi_reg != NULL && dsi->vdds_dsi_enabled) {
|
||||||
if (dsi->vdds_dsi_enabled) {
|
regulator_disable(dsi->vdds_dsi_reg);
|
||||||
regulator_disable(dsi->vdds_dsi_reg);
|
dsi->vdds_dsi_enabled = false;
|
||||||
dsi->vdds_dsi_enabled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
regulator_put(dsi->vdds_dsi_reg);
|
|
||||||
dsi->vdds_dsi_reg = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue