Skip to content
Snippets Groups Projects
Commit f418676e authored by Simon Glass's avatar Simon Glass
Browse files

rockchip: video: Add remove() methods


Add remove() methods for EDP and VOP so that U-Boot can shut down the
video on exit. This avoids leaving DMA running while booting Linux which
can cause problems if Linux uses the frame buffer for something else.

It also makes it clear what is needed to shut down video.

While we are here, make rkvop_enable() static.

Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
Acked-by: default avatarAnatolij Gustschin <agust@denx.de>
Squashed in 'rockchip: video: fix taking the VOP device out of standby':
Signed-off-by: default avatarPhilipp Tomsich <philipp.tomsich@theobroma-systems.com>
parent 6f06ef57
No related branches found
No related tags found
No related merge requests found
......@@ -70,6 +70,19 @@ static int rk3288_vop_probe(struct udevice *dev)
return rk_vop_probe(dev);
}
static int rk_vop_remove(struct udevice *dev)
{
struct rk_vop_priv *priv = dev_get_priv(dev);
struct rk3288_vop *regs = priv->regs;
setbits_le32(&regs->sys_ctrl, V_STANDBY_EN(1));
/* wait frame complete (60Hz) to enter standby */
mdelay(17);
return 0;
}
struct rkvop_driverdata rk3288_driverdata = {
.features = VOP_FEATURE_OUTPUT_10BIT,
.set_pin_polarity = rk3288_set_pin_polarity,
......@@ -91,5 +104,6 @@ U_BOOT_DRIVER(rk_vop) = {
.ops = &rk3288_vop_ops,
.bind = rk_vop_bind,
.probe = rk3288_vop_probe,
.remove = rk_vop_remove,
.priv_auto_alloc_size = sizeof(struct rk_vop_priv),
};
......@@ -1004,7 +1004,20 @@ static int rk_edp_ofdata_to_platdata(struct udevice *dev)
return 0;
}
int rk_edp_probe(struct udevice *dev)
static int rk_edp_remove(struct udevice *dev)
{
struct rk_edp_priv *priv = dev_get_priv(dev);
struct rk3288_edp *regs = priv->regs;
setbits_le32(&regs->video_ctl_1, VIDEO_MUTE);
clrbits_le32(&regs->video_ctl_1, VIDEO_EN);
clrbits_le32(&regs->sys_ctl_3, F_HPD | HPD_CTRL);
setbits_le32(&regs->func_en_1, SW_FUNC_EN_N);
return 0;
}
static int rk_edp_probe(struct udevice *dev)
{
struct display_plat *uc_plat = dev_get_uclass_platdata(dev);
struct rk_edp_priv *priv = dev_get_priv(dev);
......@@ -1080,5 +1093,6 @@ U_BOOT_DRIVER(dp_rockchip) = {
.ops = &dp_rockchip_ops,
.ofdata_to_platdata = rk_edp_ofdata_to_platdata,
.probe = rk_edp_probe,
.remove = rk_edp_remove,
.priv_auto_alloc_size = sizeof(struct rk_edp_priv),
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment