mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
drm/omap: Use consistent name for struct videomode
Use 'vm' to refer to a struct videomode instead of 'p', 't', 'timings' or something else. The code will be easier to follow if we use consistent names. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
4520ff28aa
commit
da11bbbb10
33 changed files with 524 additions and 532 deletions
|
@ -24,12 +24,12 @@ struct panel_drv_data {
|
|||
|
||||
struct device *dev;
|
||||
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
|
||||
bool invert_polarity;
|
||||
};
|
||||
|
||||
static const struct videomode tvc_pal_timings = {
|
||||
static const struct videomode tvc_pal_vm = {
|
||||
.hactive = 720,
|
||||
.vactive = 574,
|
||||
.pixelclock = 13500000,
|
||||
|
@ -93,7 +93,7 @@ static int tvc_enable(struct omap_dss_device *dssdev)
|
|||
if (omapdss_device_is_enabled(dssdev))
|
||||
return 0;
|
||||
|
||||
in->ops.atv->set_timings(in, &ddata->timings);
|
||||
in->ops.atv->set_timings(in, &ddata->vm);
|
||||
|
||||
if (!ddata->dev->of_node) {
|
||||
in->ops.atv->set_type(in, OMAP_DSS_VENC_TYPE_COMPOSITE);
|
||||
|
@ -127,32 +127,32 @@ static void tvc_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void tvc_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
ddata->timings = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.atv->set_timings(in, timings);
|
||||
in->ops.atv->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void tvc_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
*timings = ddata->timings;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int tvc_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
return in->ops.atv->check_timings(in, timings);
|
||||
return in->ops.atv->check_timings(in, vm);
|
||||
}
|
||||
|
||||
static u32 tvc_get_wss(struct omap_dss_device *dssdev)
|
||||
|
@ -254,14 +254,14 @@ static int tvc_probe(struct platform_device *pdev)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
ddata->timings = tvc_pal_timings;
|
||||
ddata->vm = tvc_pal_vm;
|
||||
|
||||
dssdev = &ddata->dssdev;
|
||||
dssdev->driver = &tvc_driver;
|
||||
dssdev->dev = &pdev->dev;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_VENC;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->panel.timings = tvc_pal_timings;
|
||||
dssdev->panel.vm = tvc_pal_vm;
|
||||
|
||||
r = omapdss_register_display(dssdev);
|
||||
if (r) {
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
#include "../dss/omapdss.h"
|
||||
|
||||
static const struct videomode dvic_default_timings = {
|
||||
static const struct videomode dvic_default_vm = {
|
||||
.hactive = 640,
|
||||
.vactive = 480,
|
||||
|
||||
|
@ -42,7 +42,7 @@ struct panel_drv_data {
|
|||
struct omap_dss_device dssdev;
|
||||
struct omap_dss_device *in;
|
||||
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
|
||||
struct i2c_adapter *i2c_adapter;
|
||||
};
|
||||
|
@ -88,7 +88,7 @@ static int dvic_enable(struct omap_dss_device *dssdev)
|
|||
if (omapdss_device_is_enabled(dssdev))
|
||||
return 0;
|
||||
|
||||
in->ops.dvi->set_timings(in, &ddata->timings);
|
||||
in->ops.dvi->set_timings(in, &ddata->vm);
|
||||
|
||||
r = in->ops.dvi->enable(in);
|
||||
if (r)
|
||||
|
@ -113,32 +113,32 @@ static void dvic_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void dvic_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
ddata->timings = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.dvi->set_timings(in, timings);
|
||||
in->ops.dvi->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void dvic_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
*timings = ddata->timings;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int dvic_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
return in->ops.dvi->check_timings(in, timings);
|
||||
return in->ops.dvi->check_timings(in, vm);
|
||||
}
|
||||
|
||||
static int dvic_ddc_read(struct i2c_adapter *adapter,
|
||||
|
@ -285,14 +285,14 @@ static int dvic_probe(struct platform_device *pdev)
|
|||
if (r)
|
||||
return r;
|
||||
|
||||
ddata->timings = dvic_default_timings;
|
||||
ddata->vm = dvic_default_vm;
|
||||
|
||||
dssdev = &ddata->dssdev;
|
||||
dssdev->driver = &dvic_driver;
|
||||
dssdev->dev = &pdev->dev;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DVI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->panel.timings = dvic_default_timings;
|
||||
dssdev->panel.vm = dvic_default_vm;
|
||||
|
||||
r = omapdss_register_display(dssdev);
|
||||
if (r) {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
#include "../dss/omapdss.h"
|
||||
|
||||
static const struct videomode hdmic_default_timings = {
|
||||
static const struct videomode hdmic_default_vm = {
|
||||
.hactive = 640,
|
||||
.vactive = 480,
|
||||
.pixelclock = 25175000,
|
||||
|
@ -41,7 +41,7 @@ struct panel_drv_data {
|
|||
|
||||
struct device *dev;
|
||||
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
|
||||
int hpd_gpio;
|
||||
};
|
||||
|
@ -93,7 +93,7 @@ static int hdmic_enable(struct omap_dss_device *dssdev)
|
|||
if (omapdss_device_is_enabled(dssdev))
|
||||
return 0;
|
||||
|
||||
in->ops.hdmi->set_timings(in, &ddata->timings);
|
||||
in->ops.hdmi->set_timings(in, &ddata->vm);
|
||||
|
||||
r = in->ops.hdmi->enable(in);
|
||||
if (r)
|
||||
|
@ -120,32 +120,32 @@ static void hdmic_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void hdmic_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
ddata->timings = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.hdmi->set_timings(in, timings);
|
||||
in->ops.hdmi->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void hdmic_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
*timings = ddata->timings;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int hdmic_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
return in->ops.hdmi->check_timings(in, timings);
|
||||
return in->ops.hdmi->check_timings(in, vm);
|
||||
}
|
||||
|
||||
static int hdmic_read_edid(struct omap_dss_device *dssdev,
|
||||
|
@ -256,14 +256,14 @@ static int hdmic_probe(struct platform_device *pdev)
|
|||
goto err_reg;
|
||||
}
|
||||
|
||||
ddata->timings = hdmic_default_timings;
|
||||
ddata->vm = hdmic_default_vm;
|
||||
|
||||
dssdev = &ddata->dssdev;
|
||||
dssdev->driver = &hdmic_driver;
|
||||
dssdev->dev = &pdev->dev;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_HDMI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->panel.timings = hdmic_default_timings;
|
||||
dssdev->panel.vm = hdmic_default_vm;
|
||||
|
||||
r = omapdss_register_display(dssdev);
|
||||
if (r) {
|
||||
|
|
|
@ -27,7 +27,7 @@ struct panel_drv_data {
|
|||
|
||||
struct gpio_desc *enable_gpio;
|
||||
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
};
|
||||
|
||||
#define to_panel_data(x) container_of(x, struct panel_drv_data, dssdev)
|
||||
|
@ -90,7 +90,7 @@ static int opa362_enable(struct omap_dss_device *dssdev)
|
|||
if (omapdss_device_is_enabled(dssdev))
|
||||
return 0;
|
||||
|
||||
in->ops.atv->set_timings(in, &ddata->timings);
|
||||
in->ops.atv->set_timings(in, &ddata->vm);
|
||||
|
||||
r = in->ops.atv->enable(in);
|
||||
if (r)
|
||||
|
@ -123,38 +123,38 @@ static void opa362_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void opa362_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
dev_dbg(dssdev->dev, "set_timings\n");
|
||||
|
||||
ddata->timings = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.atv->set_timings(in, timings);
|
||||
in->ops.atv->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void opa362_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
dev_dbg(dssdev->dev, "get_timings\n");
|
||||
|
||||
*timings = ddata->timings;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int opa362_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
dev_dbg(dssdev->dev, "check_timings\n");
|
||||
|
||||
return in->ops.atv->check_timings(in, timings);
|
||||
return in->ops.atv->check_timings(in, vm);
|
||||
}
|
||||
|
||||
static void opa362_set_type(struct omap_dss_device *dssdev,
|
||||
|
|
|
@ -24,7 +24,7 @@ struct panel_drv_data {
|
|||
int pd_gpio;
|
||||
int data_lines;
|
||||
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
};
|
||||
|
||||
#define to_panel_data(x) container_of(x, struct panel_drv_data, dssdev)
|
||||
|
@ -81,7 +81,7 @@ static int tfp410_enable(struct omap_dss_device *dssdev)
|
|||
if (omapdss_device_is_enabled(dssdev))
|
||||
return 0;
|
||||
|
||||
in->ops.dpi->set_timings(in, &ddata->timings);
|
||||
in->ops.dpi->set_timings(in, &ddata->vm);
|
||||
if (ddata->data_lines)
|
||||
in->ops.dpi->set_data_lines(in, ddata->data_lines);
|
||||
|
||||
|
@ -113,44 +113,43 @@ static void tfp410_disable(struct omap_dss_device *dssdev)
|
|||
dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
|
||||
}
|
||||
|
||||
static void tfp410_fix_timings(struct videomode *timings)
|
||||
static void tfp410_fix_timings(struct videomode *vm)
|
||||
{
|
||||
timings->flags |= DISPLAY_FLAGS_DE_HIGH |
|
||||
DISPLAY_FLAGS_PIXDATA_POSEDGE |
|
||||
DISPLAY_FLAGS_SYNC_POSEDGE;
|
||||
vm->flags |= DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
|
||||
DISPLAY_FLAGS_SYNC_POSEDGE;
|
||||
}
|
||||
|
||||
static void tfp410_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
tfp410_fix_timings(timings);
|
||||
tfp410_fix_timings(vm);
|
||||
|
||||
ddata->timings = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.dpi->set_timings(in, timings);
|
||||
in->ops.dpi->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void tfp410_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
*timings = ddata->timings;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int tfp410_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
tfp410_fix_timings(timings);
|
||||
tfp410_fix_timings(vm);
|
||||
|
||||
return in->ops.dpi->check_timings(in, timings);
|
||||
return in->ops.dpi->check_timings(in, vm);
|
||||
}
|
||||
|
||||
static const struct omapdss_dvi_ops tfp410_dvi_ops = {
|
||||
|
|
|
@ -26,7 +26,7 @@ struct panel_drv_data {
|
|||
struct gpio_desc *ls_oe_gpio;
|
||||
struct gpio_desc *hpd_gpio;
|
||||
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
};
|
||||
|
||||
#define to_panel_data(x) container_of(x, struct panel_drv_data, dssdev)
|
||||
|
@ -80,7 +80,7 @@ static int tpd_enable(struct omap_dss_device *dssdev)
|
|||
if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE)
|
||||
return 0;
|
||||
|
||||
in->ops.hdmi->set_timings(in, &ddata->timings);
|
||||
in->ops.hdmi->set_timings(in, &ddata->vm);
|
||||
|
||||
r = in->ops.hdmi->enable(in);
|
||||
if (r)
|
||||
|
@ -105,33 +105,33 @@ static void tpd_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void tpd_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
ddata->timings = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.hdmi->set_timings(in, timings);
|
||||
in->ops.hdmi->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void tpd_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
*timings = ddata->timings;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int tpd_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
int r;
|
||||
|
||||
r = in->ops.hdmi->check_timings(in, timings);
|
||||
r = in->ops.hdmi->check_timings(in, vm);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ struct panel_drv_data {
|
|||
|
||||
int data_lines;
|
||||
|
||||
struct videomode videomode;
|
||||
struct videomode vm;
|
||||
|
||||
/* used for non-DT boot, to be removed */
|
||||
int backlight_gpio;
|
||||
|
@ -80,7 +80,7 @@ static int panel_dpi_enable(struct omap_dss_device *dssdev)
|
|||
|
||||
if (ddata->data_lines)
|
||||
in->ops.dpi->set_data_lines(in, ddata->data_lines);
|
||||
in->ops.dpi->set_timings(in, &ddata->videomode);
|
||||
in->ops.dpi->set_timings(in, &ddata->vm);
|
||||
|
||||
r = in->ops.dpi->enable(in);
|
||||
if (r)
|
||||
|
@ -122,32 +122,32 @@ static void panel_dpi_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void panel_dpi_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
ddata->videomode = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.dpi->set_timings(in, timings);
|
||||
in->ops.dpi->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void panel_dpi_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
*timings = ddata->videomode;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int panel_dpi_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
return in->ops.dpi->check_timings(in, timings);
|
||||
return in->ops.dpi->check_timings(in, vm);
|
||||
}
|
||||
|
||||
static struct omap_dss_driver panel_dpi_ops = {
|
||||
|
@ -184,7 +184,7 @@ static int panel_dpi_probe_pdata(struct platform_device *pdev)
|
|||
|
||||
ddata->data_lines = pdata->data_lines;
|
||||
|
||||
videomode_from_timing(pdata->display_timing, &ddata->videomode);
|
||||
videomode_from_timing(pdata->display_timing, &ddata->vm);
|
||||
|
||||
dssdev = &ddata->dssdev;
|
||||
dssdev->name = pdata->name;
|
||||
|
@ -242,7 +242,7 @@ static int panel_dpi_probe_of(struct platform_device *pdev)
|
|||
return r;
|
||||
}
|
||||
|
||||
videomode_from_timing(&timing, &ddata->videomode);
|
||||
videomode_from_timing(&timing, &ddata->vm);
|
||||
|
||||
in = omapdss_of_find_source_for_first_ep(node);
|
||||
if (IS_ERR(in)) {
|
||||
|
@ -291,7 +291,7 @@ static int panel_dpi_probe(struct platform_device *pdev)
|
|||
dssdev->driver = &panel_dpi_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->panel.timings = ddata->videomode;
|
||||
dssdev->panel.vm = ddata->vm;
|
||||
dssdev->phy.dpi.data_lines = ddata->data_lines;
|
||||
|
||||
r = omapdss_register_display(dssdev);
|
||||
|
|
|
@ -42,7 +42,7 @@ struct panel_drv_data {
|
|||
struct omap_dss_device dssdev;
|
||||
struct omap_dss_device *in;
|
||||
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
|
||||
struct platform_device *pdev;
|
||||
|
||||
|
@ -382,8 +382,8 @@ static const struct backlight_ops dsicm_bl_ops = {
|
|||
static void dsicm_get_resolution(struct omap_dss_device *dssdev,
|
||||
u16 *xres, u16 *yres)
|
||||
{
|
||||
*xres = dssdev->panel.timings.hactive;
|
||||
*yres = dssdev->panel.timings.vactive;
|
||||
*xres = dssdev->panel.vm.hactive;
|
||||
*yres = dssdev->panel.vm.vactive;
|
||||
}
|
||||
|
||||
static ssize_t dsicm_num_errors_show(struct device *dev,
|
||||
|
@ -589,7 +589,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
|
|||
struct omap_dss_dsi_config dsi_config = {
|
||||
.mode = OMAP_DSS_DSI_CMD_MODE,
|
||||
.pixel_format = OMAP_DSS_DSI_FMT_RGB888,
|
||||
.timings = &ddata->timings,
|
||||
.vm = &ddata->vm,
|
||||
.hs_clk_min = 150000000,
|
||||
.hs_clk_max = 300000000,
|
||||
.lp_clk_min = 7000000,
|
||||
|
@ -892,8 +892,8 @@ static int dsicm_update(struct omap_dss_device *dssdev,
|
|||
|
||||
/* XXX no need to send this every frame, but dsi break if not done */
|
||||
r = dsicm_set_update_window(ddata, 0, 0,
|
||||
dssdev->panel.timings.hactive,
|
||||
dssdev->panel.timings.vactive);
|
||||
dssdev->panel.vm.hactive,
|
||||
dssdev->panel.vm.vactive);
|
||||
if (r)
|
||||
goto err;
|
||||
|
||||
|
@ -1024,8 +1024,7 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
|
|||
}
|
||||
|
||||
size = min((u32)w * h * 3,
|
||||
dssdev->panel.timings.hactive *
|
||||
dssdev->panel.timings.vactive * 3);
|
||||
dssdev->panel.vm.hactive * dssdev->panel.vm.vactive * 3);
|
||||
|
||||
in->ops.dsi->bus_lock(in);
|
||||
|
||||
|
@ -1186,14 +1185,14 @@ static int dsicm_probe(struct platform_device *pdev)
|
|||
if (r)
|
||||
return r;
|
||||
|
||||
ddata->timings.hactive = 864;
|
||||
ddata->timings.vactive = 480;
|
||||
ddata->timings.pixelclock = 864 * 480 * 60;
|
||||
ddata->vm.hactive = 864;
|
||||
ddata->vm.vactive = 480;
|
||||
ddata->vm.pixelclock = 864 * 480 * 60;
|
||||
|
||||
dssdev = &ddata->dssdev;
|
||||
dssdev->dev = dev;
|
||||
dssdev->driver = &dsicm_ops;
|
||||
dssdev->panel.timings = ddata->timings;
|
||||
dssdev->panel.vm = ddata->vm;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DSI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
#include "../dss/omapdss.h"
|
||||
|
||||
static struct videomode lb035q02_timings = {
|
||||
static struct videomode lb035q02_vm = {
|
||||
.hactive = 320,
|
||||
.vactive = 240,
|
||||
|
||||
|
@ -46,7 +46,7 @@ struct panel_drv_data {
|
|||
|
||||
int data_lines;
|
||||
|
||||
struct videomode videomode;
|
||||
struct videomode vm;
|
||||
|
||||
struct gpio_desc *enable_gpio;
|
||||
};
|
||||
|
@ -156,7 +156,7 @@ static int lb035q02_enable(struct omap_dss_device *dssdev)
|
|||
|
||||
if (ddata->data_lines)
|
||||
in->ops.dpi->set_data_lines(in, ddata->data_lines);
|
||||
in->ops.dpi->set_timings(in, &ddata->videomode);
|
||||
in->ops.dpi->set_timings(in, &ddata->vm);
|
||||
|
||||
r = in->ops.dpi->enable(in);
|
||||
if (r)
|
||||
|
@ -187,32 +187,32 @@ static void lb035q02_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void lb035q02_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
ddata->videomode = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.dpi->set_timings(in, timings);
|
||||
in->ops.dpi->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void lb035q02_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
*timings = ddata->videomode;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int lb035q02_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
return in->ops.dpi->check_timings(in, timings);
|
||||
return in->ops.dpi->check_timings(in, vm);
|
||||
}
|
||||
|
||||
static struct omap_dss_driver lb035q02_ops = {
|
||||
|
@ -276,14 +276,14 @@ static int lb035q02_panel_spi_probe(struct spi_device *spi)
|
|||
if (r)
|
||||
return r;
|
||||
|
||||
ddata->videomode = lb035q02_timings;
|
||||
ddata->vm = lb035q02_vm;
|
||||
|
||||
dssdev = &ddata->dssdev;
|
||||
dssdev->dev = &spi->dev;
|
||||
dssdev->driver = &lb035q02_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->panel.timings = ddata->videomode;
|
||||
dssdev->panel.vm = ddata->vm;
|
||||
dssdev->phy.dpi.data_lines = ddata->data_lines;
|
||||
|
||||
r = omapdss_register_display(dssdev);
|
||||
|
|
|
@ -23,7 +23,7 @@ struct panel_drv_data {
|
|||
struct omap_dss_device dssdev;
|
||||
struct omap_dss_device *in;
|
||||
|
||||
struct videomode videomode;
|
||||
struct videomode vm;
|
||||
|
||||
int data_lines;
|
||||
|
||||
|
@ -65,7 +65,7 @@ static const struct {
|
|||
{ 156, 0x00 }, { 157, 0x00 }, { 2, 0x00 },
|
||||
};
|
||||
|
||||
static const struct videomode nec_8048_panel_timings = {
|
||||
static const struct videomode nec_8048_panel_vm = {
|
||||
.hactive = LCD_XRES,
|
||||
.vactive = LCD_YRES,
|
||||
.pixelclock = LCD_PIXEL_CLOCK,
|
||||
|
@ -155,7 +155,7 @@ static int nec_8048_enable(struct omap_dss_device *dssdev)
|
|||
|
||||
if (ddata->data_lines)
|
||||
in->ops.dpi->set_data_lines(in, ddata->data_lines);
|
||||
in->ops.dpi->set_timings(in, &ddata->videomode);
|
||||
in->ops.dpi->set_timings(in, &ddata->vm);
|
||||
|
||||
r = in->ops.dpi->enable(in);
|
||||
if (r)
|
||||
|
@ -186,32 +186,32 @@ static void nec_8048_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void nec_8048_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
ddata->videomode = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.dpi->set_timings(in, timings);
|
||||
in->ops.dpi->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void nec_8048_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
*timings = ddata->videomode;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int nec_8048_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
return in->ops.dpi->check_timings(in, timings);
|
||||
return in->ops.dpi->check_timings(in, vm);
|
||||
}
|
||||
|
||||
static struct omap_dss_driver nec_8048_ops = {
|
||||
|
@ -304,14 +304,14 @@ static int nec_8048_probe(struct spi_device *spi)
|
|||
goto err_gpio;
|
||||
}
|
||||
|
||||
ddata->videomode = nec_8048_panel_timings;
|
||||
ddata->vm = nec_8048_panel_vm;
|
||||
|
||||
dssdev = &ddata->dssdev;
|
||||
dssdev->dev = &spi->dev;
|
||||
dssdev->driver = &nec_8048_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->panel.timings = ddata->videomode;
|
||||
dssdev->panel.vm = ddata->vm;
|
||||
|
||||
r = omapdss_register_display(dssdev);
|
||||
if (r) {
|
||||
|
|
|
@ -26,7 +26,7 @@ struct panel_drv_data {
|
|||
|
||||
int data_lines;
|
||||
|
||||
struct videomode videomode;
|
||||
struct videomode vm;
|
||||
|
||||
struct gpio_desc *resb_gpio; /* low = reset active min 20 us */
|
||||
struct gpio_desc *ini_gpio; /* high = power on */
|
||||
|
@ -35,7 +35,7 @@ struct panel_drv_data {
|
|||
struct gpio_desc *ud_gpio; /* high = conventional vertical scanning */
|
||||
};
|
||||
|
||||
static const struct videomode sharp_ls_timings = {
|
||||
static const struct videomode sharp_ls_vm = {
|
||||
.hactive = 480,
|
||||
.vactive = 640,
|
||||
|
||||
|
@ -97,7 +97,7 @@ static int sharp_ls_enable(struct omap_dss_device *dssdev)
|
|||
|
||||
if (ddata->data_lines)
|
||||
in->ops.dpi->set_data_lines(in, ddata->data_lines);
|
||||
in->ops.dpi->set_timings(in, &ddata->videomode);
|
||||
in->ops.dpi->set_timings(in, &ddata->vm);
|
||||
|
||||
if (ddata->vcc) {
|
||||
r = regulator_enable(ddata->vcc);
|
||||
|
@ -152,32 +152,32 @@ static void sharp_ls_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void sharp_ls_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
ddata->videomode = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.dpi->set_timings(in, timings);
|
||||
in->ops.dpi->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void sharp_ls_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
*timings = ddata->videomode;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int sharp_ls_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
return in->ops.dpi->check_timings(in, timings);
|
||||
return in->ops.dpi->check_timings(in, vm);
|
||||
}
|
||||
|
||||
static struct omap_dss_driver sharp_ls_ops = {
|
||||
|
@ -277,14 +277,14 @@ static int sharp_ls_probe(struct platform_device *pdev)
|
|||
if (r)
|
||||
return r;
|
||||
|
||||
ddata->videomode = sharp_ls_timings;
|
||||
ddata->vm = sharp_ls_vm;
|
||||
|
||||
dssdev = &ddata->dssdev;
|
||||
dssdev->dev = &pdev->dev;
|
||||
dssdev->driver = &sharp_ls_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->panel.timings = ddata->videomode;
|
||||
dssdev->panel.vm = ddata->vm;
|
||||
dssdev->phy.dpi.data_lines = ddata->data_lines;
|
||||
|
||||
r = omapdss_register_display(dssdev);
|
||||
|
|
|
@ -71,7 +71,7 @@ struct panel_drv_data {
|
|||
int reset_gpio;
|
||||
int datapairs;
|
||||
|
||||
struct videomode videomode;
|
||||
struct videomode vm;
|
||||
|
||||
char *name;
|
||||
int enabled;
|
||||
|
@ -92,7 +92,7 @@ struct panel_drv_data {
|
|||
struct backlight_device *bl_dev;
|
||||
};
|
||||
|
||||
static const struct videomode acx565akm_panel_timings = {
|
||||
static const struct videomode acx565akm_panel_vm = {
|
||||
.hactive = 800,
|
||||
.vactive = 480,
|
||||
.pixelclock = 24000000,
|
||||
|
@ -545,7 +545,7 @@ static int acx565akm_panel_power_on(struct omap_dss_device *dssdev)
|
|||
|
||||
dev_dbg(&ddata->spi->dev, "%s\n", __func__);
|
||||
|
||||
in->ops.sdi->set_timings(in, &ddata->videomode);
|
||||
in->ops.sdi->set_timings(in, &ddata->vm);
|
||||
|
||||
if (ddata->datapairs > 0)
|
||||
in->ops.sdi->set_datapairs(in, ddata->datapairs);
|
||||
|
@ -659,32 +659,32 @@ static void acx565akm_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void acx565akm_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
ddata->videomode = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.sdi->set_timings(in, timings);
|
||||
in->ops.sdi->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void acx565akm_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
*timings = ddata->videomode;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int acx565akm_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
return in->ops.sdi->check_timings(in, timings);
|
||||
return in->ops.sdi->check_timings(in, vm);
|
||||
}
|
||||
|
||||
static struct omap_dss_driver acx565akm_ops = {
|
||||
|
@ -842,14 +842,14 @@ static int acx565akm_probe(struct spi_device *spi)
|
|||
acx565akm_bl_update_status(bldev);
|
||||
|
||||
|
||||
ddata->videomode = acx565akm_panel_timings;
|
||||
ddata->vm = acx565akm_panel_vm;
|
||||
|
||||
dssdev = &ddata->dssdev;
|
||||
dssdev->dev = &spi->dev;
|
||||
dssdev->driver = &acx565akm_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_SDI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->panel.timings = ddata->videomode;
|
||||
dssdev->panel.vm = ddata->vm;
|
||||
|
||||
r = omapdss_register_display(dssdev);
|
||||
if (r) {
|
||||
|
|
|
@ -37,12 +37,12 @@ struct panel_drv_data {
|
|||
|
||||
int data_lines;
|
||||
|
||||
struct videomode videomode;
|
||||
struct videomode vm;
|
||||
|
||||
struct spi_device *spi_dev;
|
||||
};
|
||||
|
||||
static struct videomode td028ttec1_panel_timings = {
|
||||
static struct videomode td028ttec1_panel_vm = {
|
||||
.hactive = 480,
|
||||
.vactive = 640,
|
||||
.pixelclock = 22153000,
|
||||
|
@ -205,7 +205,7 @@ static int td028ttec1_panel_enable(struct omap_dss_device *dssdev)
|
|||
|
||||
if (ddata->data_lines)
|
||||
in->ops.dpi->set_data_lines(in, ddata->data_lines);
|
||||
in->ops.dpi->set_timings(in, &ddata->videomode);
|
||||
in->ops.dpi->set_timings(in, &ddata->vm);
|
||||
|
||||
r = in->ops.dpi->enable(in);
|
||||
if (r)
|
||||
|
@ -322,32 +322,32 @@ static void td028ttec1_panel_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void td028ttec1_panel_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
ddata->videomode = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.dpi->set_timings(in, timings);
|
||||
in->ops.dpi->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void td028ttec1_panel_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
*timings = ddata->videomode;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int td028ttec1_panel_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
return in->ops.dpi->check_timings(in, timings);
|
||||
return in->ops.dpi->check_timings(in, vm);
|
||||
}
|
||||
|
||||
static struct omap_dss_driver td028ttec1_ops = {
|
||||
|
@ -411,14 +411,14 @@ static int td028ttec1_panel_probe(struct spi_device *spi)
|
|||
if (r)
|
||||
return r;
|
||||
|
||||
ddata->videomode = td028ttec1_panel_timings;
|
||||
ddata->vm = td028ttec1_panel_vm;
|
||||
|
||||
dssdev = &ddata->dssdev;
|
||||
dssdev->dev = &spi->dev;
|
||||
dssdev->driver = &td028ttec1_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->panel.timings = ddata->videomode;
|
||||
dssdev->panel.vm = ddata->vm;
|
||||
dssdev->phy.dpi.data_lines = ddata->data_lines;
|
||||
|
||||
r = omapdss_register_display(dssdev);
|
||||
|
|
|
@ -56,7 +56,7 @@ struct panel_drv_data {
|
|||
struct omap_dss_device dssdev;
|
||||
struct omap_dss_device *in;
|
||||
|
||||
struct videomode videomode;
|
||||
struct videomode vm;
|
||||
|
||||
int data_lines;
|
||||
|
||||
|
@ -72,7 +72,7 @@ struct panel_drv_data {
|
|||
u32 power_on_resume:1;
|
||||
};
|
||||
|
||||
static const struct videomode tpo_td043_timings = {
|
||||
static const struct videomode tpo_td043_vm = {
|
||||
.hactive = 800,
|
||||
.vactive = 480,
|
||||
|
||||
|
@ -376,7 +376,7 @@ static int tpo_td043_enable(struct omap_dss_device *dssdev)
|
|||
|
||||
if (ddata->data_lines)
|
||||
in->ops.dpi->set_data_lines(in, ddata->data_lines);
|
||||
in->ops.dpi->set_timings(in, &ddata->videomode);
|
||||
in->ops.dpi->set_timings(in, &ddata->vm);
|
||||
|
||||
r = in->ops.dpi->enable(in);
|
||||
if (r)
|
||||
|
@ -416,32 +416,32 @@ static void tpo_td043_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void tpo_td043_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
ddata->videomode = *timings;
|
||||
dssdev->panel.timings = *timings;
|
||||
ddata->vm = *vm;
|
||||
dssdev->panel.vm = *vm;
|
||||
|
||||
in->ops.dpi->set_timings(in, timings);
|
||||
in->ops.dpi->set_timings(in, vm);
|
||||
}
|
||||
|
||||
static void tpo_td043_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
|
||||
*timings = ddata->videomode;
|
||||
*vm = ddata->vm;
|
||||
}
|
||||
|
||||
static int tpo_td043_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
|
||||
return in->ops.dpi->check_timings(in, timings);
|
||||
return in->ops.dpi->check_timings(in, vm);
|
||||
}
|
||||
|
||||
static struct omap_dss_driver tpo_td043_ops = {
|
||||
|
@ -544,14 +544,14 @@ static int tpo_td043_probe(struct spi_device *spi)
|
|||
goto err_sysfs;
|
||||
}
|
||||
|
||||
ddata->videomode = tpo_td043_timings;
|
||||
ddata->vm = tpo_td043_vm;
|
||||
|
||||
dssdev = &ddata->dssdev;
|
||||
dssdev->dev = &spi->dev;
|
||||
dssdev->driver = &tpo_td043_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->panel.timings = ddata->videomode;
|
||||
dssdev->panel.vm = ddata->vm;
|
||||
|
||||
r = omapdss_register_display(dssdev);
|
||||
if (r) {
|
||||
|
|
|
@ -75,7 +75,7 @@ struct dispc_features {
|
|||
unsigned long max_lcd_pclk;
|
||||
unsigned long max_tv_pclk;
|
||||
int (*calc_scaling) (unsigned long pclk, unsigned long lclk,
|
||||
const struct videomode *mgr_timings,
|
||||
const struct videomode *vm,
|
||||
u16 width, u16 height, u16 out_width, u16 out_height,
|
||||
enum omap_color_mode color_mode, bool *five_taps,
|
||||
int *x_predecim, int *y_predecim, int *decim_x, int *decim_y,
|
||||
|
@ -2179,7 +2179,7 @@ static void calc_tiler_rotation_offset(u16 screen_width, u16 width,
|
|||
* undocumented horizontal position and timing related limitations.
|
||||
*/
|
||||
static int check_horiz_timing_omap3(unsigned long pclk, unsigned long lclk,
|
||||
const struct videomode *t, u16 pos_x,
|
||||
const struct videomode *vm, u16 pos_x,
|
||||
u16 width, u16 height, u16 out_width, u16 out_height,
|
||||
bool five_taps)
|
||||
{
|
||||
|
@ -2189,15 +2189,15 @@ static int check_horiz_timing_omap3(unsigned long pclk, unsigned long lclk,
|
|||
u64 val, blank;
|
||||
int i;
|
||||
|
||||
nonactive = t->hactive + t->hfront_porch + t->hsync_len +
|
||||
t->hback_porch - out_width;
|
||||
nonactive = vm->hactive + vm->hfront_porch + vm->hsync_len +
|
||||
vm->hback_porch - out_width;
|
||||
|
||||
i = 0;
|
||||
if (out_height < height)
|
||||
i++;
|
||||
if (out_width < width)
|
||||
i++;
|
||||
blank = div_u64((u64)(t->hback_porch + t->hsync_len + t->hfront_porch) *
|
||||
blank = div_u64((u64)(vm->hback_porch + vm->hsync_len + vm->hfront_porch) *
|
||||
lclk, pclk);
|
||||
DSSDBG("blanking period + ppl = %llu (limit = %u)\n", blank, limits[i]);
|
||||
if (blank <= limits[i])
|
||||
|
@ -2233,7 +2233,7 @@ static int check_horiz_timing_omap3(unsigned long pclk, unsigned long lclk,
|
|||
}
|
||||
|
||||
static unsigned long calc_core_clk_five_taps(unsigned long pclk,
|
||||
const struct videomode *mgr_timings, u16 width,
|
||||
const struct videomode *vm, u16 width,
|
||||
u16 height, u16 out_width, u16 out_height,
|
||||
enum omap_color_mode color_mode)
|
||||
{
|
||||
|
@ -2244,7 +2244,7 @@ static unsigned long calc_core_clk_five_taps(unsigned long pclk,
|
|||
return (unsigned long) pclk;
|
||||
|
||||
if (height > out_height) {
|
||||
unsigned int ppl = mgr_timings->hactive;
|
||||
unsigned int ppl = vm->hactive;
|
||||
|
||||
tmp = (u64)pclk * height * out_width;
|
||||
do_div(tmp, 2 * out_height * ppl);
|
||||
|
@ -2326,7 +2326,7 @@ static unsigned long calc_core_clk_44xx(unsigned long pclk, u16 width,
|
|||
}
|
||||
|
||||
static int dispc_ovl_calc_scaling_24xx(unsigned long pclk, unsigned long lclk,
|
||||
const struct videomode *mgr_timings,
|
||||
const struct videomode *vm,
|
||||
u16 width, u16 height, u16 out_width, u16 out_height,
|
||||
enum omap_color_mode color_mode, bool *five_taps,
|
||||
int *x_predecim, int *y_predecim, int *decim_x, int *decim_y,
|
||||
|
@ -2372,7 +2372,7 @@ static int dispc_ovl_calc_scaling_24xx(unsigned long pclk, unsigned long lclk,
|
|||
}
|
||||
|
||||
static int dispc_ovl_calc_scaling_34xx(unsigned long pclk, unsigned long lclk,
|
||||
const struct videomode *mgr_timings,
|
||||
const struct videomode *vm,
|
||||
u16 width, u16 height, u16 out_width, u16 out_height,
|
||||
enum omap_color_mode color_mode, bool *five_taps,
|
||||
int *x_predecim, int *y_predecim, int *decim_x, int *decim_y,
|
||||
|
@ -2394,7 +2394,7 @@ static int dispc_ovl_calc_scaling_34xx(unsigned long pclk, unsigned long lclk,
|
|||
*five_taps = false;
|
||||
again:
|
||||
if (*five_taps)
|
||||
*core_clk = calc_core_clk_five_taps(pclk, mgr_timings,
|
||||
*core_clk = calc_core_clk_five_taps(pclk, vm,
|
||||
in_width, in_height, out_width,
|
||||
out_height, color_mode);
|
||||
else
|
||||
|
@ -2402,7 +2402,7 @@ static int dispc_ovl_calc_scaling_34xx(unsigned long pclk, unsigned long lclk,
|
|||
in_height, out_width, out_height,
|
||||
mem_to_mem);
|
||||
|
||||
error = check_horiz_timing_omap3(pclk, lclk, mgr_timings,
|
||||
error = check_horiz_timing_omap3(pclk, lclk, vm,
|
||||
pos_x, in_width, in_height, out_width,
|
||||
out_height, *five_taps);
|
||||
if (error && *five_taps) {
|
||||
|
@ -2437,7 +2437,7 @@ static int dispc_ovl_calc_scaling_34xx(unsigned long pclk, unsigned long lclk,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (check_horiz_timing_omap3(pclk, lclk, mgr_timings, pos_x, in_width,
|
||||
if (check_horiz_timing_omap3(pclk, lclk, vm, pos_x, in_width,
|
||||
in_height, out_width, out_height, *five_taps)) {
|
||||
DSSERR("horizontal timing too tight\n");
|
||||
return -EINVAL;
|
||||
|
@ -2457,7 +2457,7 @@ static int dispc_ovl_calc_scaling_34xx(unsigned long pclk, unsigned long lclk,
|
|||
}
|
||||
|
||||
static int dispc_ovl_calc_scaling_44xx(unsigned long pclk, unsigned long lclk,
|
||||
const struct videomode *mgr_timings,
|
||||
const struct videomode *vm,
|
||||
u16 width, u16 height, u16 out_width, u16 out_height,
|
||||
enum omap_color_mode color_mode, bool *five_taps,
|
||||
int *x_predecim, int *y_predecim, int *decim_x, int *decim_y,
|
||||
|
@ -2503,7 +2503,7 @@ static int dispc_ovl_calc_scaling_44xx(unsigned long pclk, unsigned long lclk,
|
|||
|
||||
static int dispc_ovl_calc_scaling(unsigned long pclk, unsigned long lclk,
|
||||
enum omap_overlay_caps caps,
|
||||
const struct videomode *mgr_timings,
|
||||
const struct videomode *vm,
|
||||
u16 width, u16 height, u16 out_width, u16 out_height,
|
||||
enum omap_color_mode color_mode, bool *five_taps,
|
||||
int *x_predecim, int *y_predecim, u16 pos_x,
|
||||
|
@ -2517,7 +2517,7 @@ static int dispc_ovl_calc_scaling(unsigned long pclk, unsigned long lclk,
|
|||
if (width == out_width && height == out_height)
|
||||
return 0;
|
||||
|
||||
if (!mem_to_mem && (pclk == 0 || mgr_timings->pixelclock == 0)) {
|
||||
if (!mem_to_mem && (pclk == 0 || vm->pixelclock == 0)) {
|
||||
DSSERR("cannot calculate scaling settings: pclk is zero\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -2553,7 +2553,7 @@ static int dispc_ovl_calc_scaling(unsigned long pclk, unsigned long lclk,
|
|||
if (decim_y > *y_predecim || out_height > height * 8)
|
||||
return -EINVAL;
|
||||
|
||||
ret = dispc.feat->calc_scaling(pclk, lclk, mgr_timings, width, height,
|
||||
ret = dispc.feat->calc_scaling(pclk, lclk, vm, width, height,
|
||||
out_width, out_height, color_mode, five_taps,
|
||||
x_predecim, y_predecim, &decim_x, &decim_y, pos_x, &core_clk,
|
||||
mem_to_mem);
|
||||
|
@ -2593,7 +2593,7 @@ static int dispc_ovl_setup_common(enum omap_plane plane,
|
|||
u16 out_width, u16 out_height, enum omap_color_mode color_mode,
|
||||
u8 rotation, bool mirror, u8 zorder, u8 pre_mult_alpha,
|
||||
u8 global_alpha, enum omap_dss_rotation_type rotation_type,
|
||||
bool replication, const struct videomode *mgr_timings,
|
||||
bool replication, const struct videomode *vm,
|
||||
bool mem_to_mem)
|
||||
{
|
||||
bool five_taps = true;
|
||||
|
@ -2607,7 +2607,7 @@ static int dispc_ovl_setup_common(enum omap_plane plane,
|
|||
u16 in_height = height;
|
||||
u16 in_width = width;
|
||||
int x_predecim = 1, y_predecim = 1;
|
||||
bool ilace = !!(mgr_timings->flags & DISPLAY_FLAGS_INTERLACED);
|
||||
bool ilace = !!(vm->flags & DISPLAY_FLAGS_INTERLACED);
|
||||
unsigned long pclk = dispc_plane_pclk_rate(plane);
|
||||
unsigned long lclk = dispc_plane_lclk_rate(plane);
|
||||
|
||||
|
@ -2649,7 +2649,7 @@ static int dispc_ovl_setup_common(enum omap_plane plane,
|
|||
if (!dss_feat_color_mode_supported(plane, color_mode))
|
||||
return -EINVAL;
|
||||
|
||||
r = dispc_ovl_calc_scaling(pclk, lclk, caps, mgr_timings, in_width,
|
||||
r = dispc_ovl_calc_scaling(pclk, lclk, caps, vm, in_width,
|
||||
in_height, out_width, out_height, color_mode,
|
||||
&five_taps, &x_predecim, &y_predecim, pos_x,
|
||||
rotation_type, mem_to_mem);
|
||||
|
@ -2786,7 +2786,7 @@ static int dispc_ovl_setup_common(enum omap_plane plane,
|
|||
}
|
||||
|
||||
int dispc_ovl_setup(enum omap_plane plane, const struct omap_overlay_info *oi,
|
||||
bool replication, const struct videomode *mgr_timings,
|
||||
bool replication, const struct videomode *vm,
|
||||
bool mem_to_mem)
|
||||
{
|
||||
int r;
|
||||
|
@ -2805,14 +2805,14 @@ int dispc_ovl_setup(enum omap_plane plane, const struct omap_overlay_info *oi,
|
|||
oi->screen_width, oi->pos_x, oi->pos_y, oi->width, oi->height,
|
||||
oi->out_width, oi->out_height, oi->color_mode, oi->rotation,
|
||||
oi->mirror, oi->zorder, oi->pre_mult_alpha, oi->global_alpha,
|
||||
oi->rotation_type, replication, mgr_timings, mem_to_mem);
|
||||
oi->rotation_type, replication, vm, mem_to_mem);
|
||||
|
||||
return r;
|
||||
}
|
||||
EXPORT_SYMBOL(dispc_ovl_setup);
|
||||
|
||||
int dispc_wb_setup(const struct omap_dss_writeback_info *wi,
|
||||
bool mem_to_mem, const struct videomode *mgr_timings)
|
||||
bool mem_to_mem, const struct videomode *vm)
|
||||
{
|
||||
int r;
|
||||
u32 l;
|
||||
|
@ -2821,8 +2821,8 @@ int dispc_wb_setup(const struct omap_dss_writeback_info *wi,
|
|||
const u8 zorder = 0, global_alpha = 0;
|
||||
const bool replication = false;
|
||||
bool truncation;
|
||||
int in_width = mgr_timings->hactive;
|
||||
int in_height = mgr_timings->vactive;
|
||||
int in_width = vm->hactive;
|
||||
int in_height = vm->vactive;
|
||||
enum omap_overlay_caps caps =
|
||||
OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA;
|
||||
|
||||
|
@ -2835,7 +2835,7 @@ int dispc_wb_setup(const struct omap_dss_writeback_info *wi,
|
|||
wi->buf_width, pos_x, pos_y, in_width, in_height, wi->width,
|
||||
wi->height, wi->color_mode, wi->rotation, wi->mirror, zorder,
|
||||
wi->pre_mult_alpha, global_alpha, wi->rotation_type,
|
||||
replication, mgr_timings, mem_to_mem);
|
||||
replication, vm, mem_to_mem);
|
||||
|
||||
switch (wi->color_mode) {
|
||||
case OMAP_DSS_COLOR_RGB16:
|
||||
|
@ -2869,9 +2869,8 @@ int dispc_wb_setup(const struct omap_dss_writeback_info *wi,
|
|||
} else {
|
||||
int wbdelay;
|
||||
|
||||
wbdelay = min(mgr_timings->vfront_porch +
|
||||
mgr_timings->vsync_len + mgr_timings->vback_porch,
|
||||
(u32)255);
|
||||
wbdelay = min(vm->vfront_porch +
|
||||
vm->vsync_len + vm->vback_porch, (u32)255);
|
||||
|
||||
/* WBDELAYCOUNT */
|
||||
REG_FLD_MOD(DISPC_OVL_ATTRIBUTES2(plane), wbdelay, 7, 0);
|
||||
|
@ -3118,24 +3117,23 @@ static bool _dispc_mgr_pclk_ok(enum omap_channel channel,
|
|||
return pclk <= dispc.feat->max_tv_pclk;
|
||||
}
|
||||
|
||||
bool dispc_mgr_timings_ok(enum omap_channel channel,
|
||||
const struct videomode *timings)
|
||||
bool dispc_mgr_timings_ok(enum omap_channel channel, const struct videomode *vm)
|
||||
{
|
||||
if (!_dispc_mgr_size_ok(timings->hactive, timings->vactive))
|
||||
if (!_dispc_mgr_size_ok(vm->hactive, vm->vactive))
|
||||
return false;
|
||||
|
||||
if (!_dispc_mgr_pclk_ok(channel, timings->pixelclock))
|
||||
if (!_dispc_mgr_pclk_ok(channel, vm->pixelclock))
|
||||
return false;
|
||||
|
||||
if (dss_mgr_is_lcd(channel)) {
|
||||
/* TODO: OMAP4+ supports interlace for LCD outputs */
|
||||
if (timings->flags & DISPLAY_FLAGS_INTERLACED)
|
||||
if (vm->flags & DISPLAY_FLAGS_INTERLACED)
|
||||
return false;
|
||||
|
||||
if (!_dispc_lcd_timings_ok(timings->hsync_len,
|
||||
timings->hfront_porch, timings->hback_porch,
|
||||
timings->vsync_len, timings->vfront_porch,
|
||||
timings->vback_porch))
|
||||
if (!_dispc_lcd_timings_ok(vm->hsync_len,
|
||||
vm->hfront_porch, vm->hback_porch,
|
||||
vm->vsync_len, vm->vfront_porch,
|
||||
vm->vback_porch))
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -3143,37 +3141,37 @@ bool dispc_mgr_timings_ok(enum omap_channel channel,
|
|||
}
|
||||
|
||||
static void _dispc_mgr_set_lcd_timings(enum omap_channel channel,
|
||||
const struct videomode *ovt)
|
||||
const struct videomode *vm)
|
||||
{
|
||||
u32 timing_h, timing_v, l;
|
||||
bool onoff, rf, ipc, vs, hs, de;
|
||||
|
||||
timing_h = FLD_VAL(ovt->hsync_len - 1, dispc.feat->sw_start, 0) |
|
||||
FLD_VAL(ovt->hfront_porch - 1, dispc.feat->fp_start, 8) |
|
||||
FLD_VAL(ovt->hback_porch - 1, dispc.feat->bp_start, 20);
|
||||
timing_v = FLD_VAL(ovt->vsync_len - 1, dispc.feat->sw_start, 0) |
|
||||
FLD_VAL(ovt->vfront_porch, dispc.feat->fp_start, 8) |
|
||||
FLD_VAL(ovt->vback_porch, dispc.feat->bp_start, 20);
|
||||
timing_h = FLD_VAL(vm->hsync_len - 1, dispc.feat->sw_start, 0) |
|
||||
FLD_VAL(vm->hfront_porch - 1, dispc.feat->fp_start, 8) |
|
||||
FLD_VAL(vm->hback_porch - 1, dispc.feat->bp_start, 20);
|
||||
timing_v = FLD_VAL(vm->vsync_len - 1, dispc.feat->sw_start, 0) |
|
||||
FLD_VAL(vm->vfront_porch, dispc.feat->fp_start, 8) |
|
||||
FLD_VAL(vm->vback_porch, dispc.feat->bp_start, 20);
|
||||
|
||||
dispc_write_reg(DISPC_TIMING_H(channel), timing_h);
|
||||
dispc_write_reg(DISPC_TIMING_V(channel), timing_v);
|
||||
|
||||
if (ovt->flags & DISPLAY_FLAGS_VSYNC_HIGH)
|
||||
if (vm->flags & DISPLAY_FLAGS_VSYNC_HIGH)
|
||||
vs = false;
|
||||
else
|
||||
vs = true;
|
||||
|
||||
if (ovt->flags & DISPLAY_FLAGS_HSYNC_HIGH)
|
||||
if (vm->flags & DISPLAY_FLAGS_HSYNC_HIGH)
|
||||
hs = false;
|
||||
else
|
||||
hs = true;
|
||||
|
||||
if (ovt->flags & DISPLAY_FLAGS_DE_HIGH)
|
||||
if (vm->flags & DISPLAY_FLAGS_DE_HIGH)
|
||||
de = false;
|
||||
else
|
||||
de = true;
|
||||
|
||||
if (ovt->flags & DISPLAY_FLAGS_PIXDATA_POSEDGE)
|
||||
if (vm->flags & DISPLAY_FLAGS_PIXDATA_POSEDGE)
|
||||
ipc = false;
|
||||
else
|
||||
ipc = true;
|
||||
|
@ -3181,7 +3179,7 @@ static void _dispc_mgr_set_lcd_timings(enum omap_channel channel,
|
|||
/* always use the 'rf' setting */
|
||||
onoff = true;
|
||||
|
||||
if (ovt->flags & DISPLAY_FLAGS_SYNC_POSEDGE)
|
||||
if (vm->flags & DISPLAY_FLAGS_SYNC_POSEDGE)
|
||||
rf = true;
|
||||
else
|
||||
rf = false;
|
||||
|
@ -3221,11 +3219,11 @@ static void _dispc_mgr_set_lcd_timings(enum omap_channel channel,
|
|||
|
||||
/* change name to mode? */
|
||||
void dispc_mgr_set_timings(enum omap_channel channel,
|
||||
const struct videomode *timings)
|
||||
const struct videomode *vm)
|
||||
{
|
||||
unsigned xtot, ytot;
|
||||
unsigned long ht, vt;
|
||||
struct videomode t = *timings;
|
||||
struct videomode t = *vm;
|
||||
|
||||
DSSDBG("channel %d xres %u yres %u\n", channel, t.hactive, t.vactive);
|
||||
|
||||
|
@ -3240,10 +3238,10 @@ void dispc_mgr_set_timings(enum omap_channel channel,
|
|||
xtot = t.hactive + t.hfront_porch + t.hsync_len + t.hback_porch;
|
||||
ytot = t.vactive + t.vfront_porch + t.vsync_len + t.vback_porch;
|
||||
|
||||
ht = timings->pixelclock / xtot;
|
||||
vt = timings->pixelclock / xtot / ytot;
|
||||
ht = vm->pixelclock / xtot;
|
||||
vt = vm->pixelclock / xtot / ytot;
|
||||
|
||||
DSSDBG("pck %lu\n", timings->pixelclock);
|
||||
DSSDBG("pck %lu\n", vm->pixelclock);
|
||||
DSSDBG("hsync_len %d hfp %d hbp %d vsw %d vfp %d vbp %d\n",
|
||||
t.hsync_len, t.hfront_porch, t.hback_porch,
|
||||
t.vsync_len, t.vfront_porch, t.vback_porch);
|
||||
|
@ -4185,12 +4183,12 @@ EXPORT_SYMBOL(dispc_free_irq);
|
|||
*/
|
||||
|
||||
static const struct dispc_errata_i734_data {
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
struct omap_overlay_info ovli;
|
||||
struct omap_overlay_manager_info mgri;
|
||||
struct dss_lcd_mgr_config lcd_conf;
|
||||
} i734 = {
|
||||
.timings = {
|
||||
.vm = {
|
||||
.hactive = 8, .vactive = 1,
|
||||
.pixelclock = 16000000,
|
||||
.hsync_len = 8, .hfront_porch = 4, .hback_porch = 4,
|
||||
|
@ -4288,7 +4286,7 @@ static void dispc_errata_i734_wa(void)
|
|||
|
||||
/* Setup and enable GFX plane */
|
||||
dispc_ovl_set_channel_out(OMAP_DSS_GFX, OMAP_DSS_CHANNEL_LCD);
|
||||
dispc_ovl_setup(OMAP_DSS_GFX, &ovli, false, &i734.timings, false);
|
||||
dispc_ovl_setup(OMAP_DSS_GFX, &ovli, false, &i734.vm, false);
|
||||
dispc_ovl_enable(OMAP_DSS_GFX, true);
|
||||
|
||||
/* Set up and enable display manager for LCD1 */
|
||||
|
@ -4296,7 +4294,7 @@ static void dispc_errata_i734_wa(void)
|
|||
dispc_calc_clock_rates(dss_get_dispc_clk_rate(),
|
||||
&lcd_conf.clock_info);
|
||||
dispc_mgr_set_lcd_config(OMAP_DSS_CHANNEL_LCD, &lcd_conf);
|
||||
dispc_mgr_set_timings(OMAP_DSS_CHANNEL_LCD, &i734.timings);
|
||||
dispc_mgr_set_timings(OMAP_DSS_CHANNEL_LCD, &i734.vm);
|
||||
|
||||
dispc_clear_irqstatus(framedone_irq);
|
||||
|
||||
|
|
|
@ -35,8 +35,8 @@
|
|||
void omapdss_default_get_resolution(struct omap_dss_device *dssdev,
|
||||
u16 *xres, u16 *yres)
|
||||
{
|
||||
*xres = dssdev->panel.timings.hactive;
|
||||
*yres = dssdev->panel.timings.vactive;
|
||||
*xres = dssdev->panel.vm.hactive;
|
||||
*yres = dssdev->panel.vm.vactive;
|
||||
}
|
||||
EXPORT_SYMBOL(omapdss_default_get_resolution);
|
||||
|
||||
|
@ -72,9 +72,9 @@ int omapdss_default_get_recommended_bpp(struct omap_dss_device *dssdev)
|
|||
EXPORT_SYMBOL(omapdss_default_get_recommended_bpp);
|
||||
|
||||
void omapdss_default_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
*timings = dssdev->panel.timings;
|
||||
*vm = dssdev->panel.vm;
|
||||
}
|
||||
EXPORT_SYMBOL(omapdss_default_get_timings);
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ struct dpi_data {
|
|||
|
||||
struct mutex lock;
|
||||
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
struct dss_lcd_mgr_config mgr_config;
|
||||
int data_lines;
|
||||
|
||||
|
@ -333,31 +333,31 @@ static int dpi_set_mode(struct dpi_data *dpi)
|
|||
{
|
||||
struct omap_dss_device *out = &dpi->output;
|
||||
enum omap_channel channel = out->dispc_channel;
|
||||
struct videomode *t = &dpi->timings;
|
||||
struct videomode *vm = &dpi->vm;
|
||||
int lck_div = 0, pck_div = 0;
|
||||
unsigned long fck = 0;
|
||||
unsigned long pck;
|
||||
int r = 0;
|
||||
|
||||
if (dpi->pll)
|
||||
r = dpi_set_pll_clk(dpi, channel, t->pixelclock, &fck,
|
||||
r = dpi_set_pll_clk(dpi, channel, vm->pixelclock, &fck,
|
||||
&lck_div, &pck_div);
|
||||
else
|
||||
r = dpi_set_dispc_clk(dpi, t->pixelclock, &fck,
|
||||
r = dpi_set_dispc_clk(dpi, vm->pixelclock, &fck,
|
||||
&lck_div, &pck_div);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
pck = fck / lck_div / pck_div;
|
||||
|
||||
if (pck != t->pixelclock) {
|
||||
if (pck != vm->pixelclock) {
|
||||
DSSWARN("Could not find exact pixel clock. Requested %lu Hz, got %lu Hz\n",
|
||||
t->pixelclock, pck);
|
||||
vm->pixelclock, pck);
|
||||
|
||||
t->pixelclock = pck;
|
||||
vm->pixelclock = pck;
|
||||
}
|
||||
|
||||
dss_mgr_set_timings(channel, t);
|
||||
dss_mgr_set_timings(channel, vm);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -476,7 +476,7 @@ static void dpi_display_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void dpi_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
|
||||
|
||||
|
@ -484,25 +484,25 @@ static void dpi_set_timings(struct omap_dss_device *dssdev,
|
|||
|
||||
mutex_lock(&dpi->lock);
|
||||
|
||||
dpi->timings = *timings;
|
||||
dpi->vm = *vm;
|
||||
|
||||
mutex_unlock(&dpi->lock);
|
||||
}
|
||||
|
||||
static void dpi_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
|
||||
|
||||
mutex_lock(&dpi->lock);
|
||||
|
||||
*timings = dpi->timings;
|
||||
*vm = dpi->vm;
|
||||
|
||||
mutex_unlock(&dpi->lock);
|
||||
}
|
||||
|
||||
static int dpi_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
|
||||
enum omap_channel channel = dpi->output.dispc_channel;
|
||||
|
@ -512,23 +512,23 @@ static int dpi_check_timings(struct omap_dss_device *dssdev,
|
|||
struct dpi_clk_calc_ctx ctx;
|
||||
bool ok;
|
||||
|
||||
if (timings->hactive % 8 != 0)
|
||||
if (vm->hactive % 8 != 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (!dispc_mgr_timings_ok(channel, timings))
|
||||
if (!dispc_mgr_timings_ok(channel, vm))
|
||||
return -EINVAL;
|
||||
|
||||
if (timings->pixelclock == 0)
|
||||
if (vm->pixelclock == 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (dpi->pll) {
|
||||
ok = dpi_pll_clk_calc(dpi, timings->pixelclock, &ctx);
|
||||
ok = dpi_pll_clk_calc(dpi, vm->pixelclock, &ctx);
|
||||
if (!ok)
|
||||
return -EINVAL;
|
||||
|
||||
fck = ctx.pll_cinfo.clkout[ctx.clkout_idx];
|
||||
} else {
|
||||
ok = dpi_dss_clk_calc(timings->pixelclock, &ctx);
|
||||
ok = dpi_dss_clk_calc(vm->pixelclock, &ctx);
|
||||
if (!ok)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -540,7 +540,7 @@ static int dpi_check_timings(struct omap_dss_device *dssdev,
|
|||
|
||||
pck = fck / lck_div / pck_div;
|
||||
|
||||
timings->pixelclock = pck;
|
||||
vm->pixelclock = pck;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -289,7 +289,7 @@ struct dsi_clk_calc_ctx {
|
|||
struct dss_pll_clock_info dsi_cinfo;
|
||||
struct dispc_clock_info dispc_cinfo;
|
||||
|
||||
struct videomode dispc_vm;
|
||||
struct videomode vm;
|
||||
struct omap_dss_dsi_videomode_timings dsi_vm;
|
||||
};
|
||||
|
||||
|
@ -383,7 +383,7 @@ struct dsi_data {
|
|||
unsigned scp_clk_refcount;
|
||||
|
||||
struct dss_lcd_mgr_config mgr_config;
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
enum omap_dss_dsi_pixel_format pix_fmt;
|
||||
enum omap_dss_dsi_mode mode;
|
||||
struct omap_dss_dsi_videomode_timings vm_timings;
|
||||
|
@ -3321,12 +3321,12 @@ static void dsi_config_vp_num_line_buffers(struct platform_device *dsidev)
|
|||
|
||||
if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
|
||||
int bpp = dsi_get_pixel_size(dsi->pix_fmt);
|
||||
struct videomode *timings = &dsi->timings;
|
||||
struct videomode *vm = &dsi->vm;
|
||||
/*
|
||||
* Don't use line buffers if width is greater than the video
|
||||
* port's line buffer size
|
||||
*/
|
||||
if (dsi->line_buffer_size <= timings->hactive * bpp / 8)
|
||||
if (dsi->line_buffer_size <= vm->hactive * bpp / 8)
|
||||
num_line_buffers = 0;
|
||||
else
|
||||
num_line_buffers = 2;
|
||||
|
@ -3453,7 +3453,7 @@ static void dsi_config_cmd_mode_interleaving(struct platform_device *dsidev)
|
|||
int ddr_clk_pre, ddr_clk_post, enter_hs_mode_lat, exit_hs_mode_lat;
|
||||
int tclk_trail, ths_exit, exiths_clk;
|
||||
bool ddr_alwon;
|
||||
struct videomode *timings = &dsi->timings;
|
||||
struct videomode *vm = &dsi->vm;
|
||||
int bpp = dsi_get_pixel_size(dsi->pix_fmt);
|
||||
int ndl = dsi->num_lanes_used - 1;
|
||||
int dsi_fclk_hsdiv = dsi->user_dsi_cinfo.mX[HSDIV_DSI] + 1;
|
||||
|
@ -3494,7 +3494,7 @@ static void dsi_config_cmd_mode_interleaving(struct platform_device *dsidev)
|
|||
|
||||
exiths_clk = ths_exit + tclk_trail;
|
||||
|
||||
width_bytes = DIV_ROUND_UP(timings->hactive * bpp, 8);
|
||||
width_bytes = DIV_ROUND_UP(vm->hactive * bpp, 8);
|
||||
bllp = hbp + hfp + hsa + DIV_ROUND_UP(width_bytes + 6, ndl);
|
||||
|
||||
if (!hsa_blanking_mode) {
|
||||
|
@ -3705,7 +3705,7 @@ static void dsi_proto_timings(struct platform_device *dsidev)
|
|||
int vbp = dsi->vm_timings.vbp;
|
||||
int window_sync = dsi->vm_timings.window_sync;
|
||||
bool hsync_end;
|
||||
struct videomode *timings = &dsi->timings;
|
||||
struct videomode *vm = &dsi->vm;
|
||||
int bpp = dsi_get_pixel_size(dsi->pix_fmt);
|
||||
int tl, t_he, width_bytes;
|
||||
|
||||
|
@ -3713,7 +3713,7 @@ static void dsi_proto_timings(struct platform_device *dsidev)
|
|||
t_he = hsync_end ?
|
||||
((hsa == 0 && ndl == 3) ? 1 : DIV_ROUND_UP(4, ndl)) : 0;
|
||||
|
||||
width_bytes = DIV_ROUND_UP(timings->hactive * bpp, 8);
|
||||
width_bytes = DIV_ROUND_UP(vm->hactive * bpp, 8);
|
||||
|
||||
/* TL = t_HS + HSA + t_HE + HFP + ceil((WC + 6) / NDL) + HBP */
|
||||
tl = DIV_ROUND_UP(4, ndl) + (hsync_end ? hsa : 0) + t_he + hfp +
|
||||
|
@ -3722,7 +3722,7 @@ static void dsi_proto_timings(struct platform_device *dsidev)
|
|||
DSSDBG("HBP: %d, HFP: %d, HSA: %d, TL: %d TXBYTECLKHS\n", hbp,
|
||||
hfp, hsync_end ? hsa : 0, tl);
|
||||
DSSDBG("VBP: %d, VFP: %d, VSA: %d, VACT: %d lines\n", vbp, vfp,
|
||||
vsa, timings->vactive);
|
||||
vsa, vm->vactive);
|
||||
|
||||
r = dsi_read_reg(dsidev, DSI_VM_TIMING1);
|
||||
r = FLD_MOD(r, hbp, 11, 0); /* HBP */
|
||||
|
@ -3738,7 +3738,7 @@ static void dsi_proto_timings(struct platform_device *dsidev)
|
|||
dsi_write_reg(dsidev, DSI_VM_TIMING2, r);
|
||||
|
||||
r = dsi_read_reg(dsidev, DSI_VM_TIMING3);
|
||||
r = FLD_MOD(r, timings->vactive, 14, 0); /* VACT */
|
||||
r = FLD_MOD(r, vm->vactive, 14, 0); /* VACT */
|
||||
r = FLD_MOD(r, tl, 31, 16); /* TL */
|
||||
dsi_write_reg(dsidev, DSI_VM_TIMING3, r);
|
||||
}
|
||||
|
@ -3856,7 +3856,7 @@ static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
|
|||
/* MODE, 1 = video mode */
|
||||
REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), 1, 4, 4);
|
||||
|
||||
word_count = DIV_ROUND_UP(dsi->timings.hactive * bpp, 8);
|
||||
word_count = DIV_ROUND_UP(dsi->vm.hactive * bpp, 8);
|
||||
|
||||
dsi_vc_write_long_header(dsidev, channel, data_type,
|
||||
word_count, 0);
|
||||
|
@ -3918,8 +3918,8 @@ static void dsi_update_screen_dispc(struct platform_device *dsidev)
|
|||
int r;
|
||||
const unsigned channel = dsi->update_channel;
|
||||
const unsigned line_buf_size = dsi->line_buffer_size;
|
||||
u16 w = dsi->timings.hactive;
|
||||
u16 h = dsi->timings.vactive;
|
||||
u16 w = dsi->vm.hactive;
|
||||
u16 h = dsi->vm.vactive;
|
||||
|
||||
DSSDBG("dsi_update_screen_dispc(%dx%d)\n", w, h);
|
||||
|
||||
|
@ -3969,7 +3969,7 @@ static void dsi_update_screen_dispc(struct platform_device *dsidev)
|
|||
msecs_to_jiffies(250));
|
||||
BUG_ON(r == 0);
|
||||
|
||||
dss_mgr_set_timings(dispc_channel, &dsi->timings);
|
||||
dss_mgr_set_timings(dispc_channel, &dsi->vm);
|
||||
|
||||
dss_mgr_start_update(dispc_channel);
|
||||
|
||||
|
@ -4056,8 +4056,8 @@ static int dsi_update(struct omap_dss_device *dssdev, int channel,
|
|||
dsi->framedone_callback = callback;
|
||||
dsi->framedone_data = data;
|
||||
|
||||
dw = dsi->timings.hactive;
|
||||
dh = dsi->timings.vactive;
|
||||
dw = dsi->vm.hactive;
|
||||
dh = dsi->vm.vactive;
|
||||
|
||||
#ifdef DSI_PERF_MEASURE
|
||||
dsi->update_bytes = dw * dh *
|
||||
|
@ -4122,19 +4122,19 @@ static int dsi_display_init_dispc(struct platform_device *dsidev,
|
|||
* override interlace, logic level and edge related parameters in
|
||||
* videomode with default values
|
||||
*/
|
||||
dsi->timings.flags &= ~DISPLAY_FLAGS_INTERLACED;
|
||||
dsi->timings.flags &= ~DISPLAY_FLAGS_HSYNC_LOW;
|
||||
dsi->timings.flags |= DISPLAY_FLAGS_HSYNC_HIGH;
|
||||
dsi->timings.flags &= ~DISPLAY_FLAGS_VSYNC_LOW;
|
||||
dsi->timings.flags |= DISPLAY_FLAGS_VSYNC_HIGH;
|
||||
dsi->timings.flags &= ~DISPLAY_FLAGS_PIXDATA_NEGEDGE;
|
||||
dsi->timings.flags |= DISPLAY_FLAGS_PIXDATA_POSEDGE;
|
||||
dsi->timings.flags &= ~DISPLAY_FLAGS_DE_LOW;
|
||||
dsi->timings.flags |= DISPLAY_FLAGS_DE_HIGH;
|
||||
dsi->timings.flags &= ~DISPLAY_FLAGS_SYNC_POSEDGE;
|
||||
dsi->timings.flags |= DISPLAY_FLAGS_SYNC_NEGEDGE;
|
||||
dsi->vm.flags &= ~DISPLAY_FLAGS_INTERLACED;
|
||||
dsi->vm.flags &= ~DISPLAY_FLAGS_HSYNC_LOW;
|
||||
dsi->vm.flags |= DISPLAY_FLAGS_HSYNC_HIGH;
|
||||
dsi->vm.flags &= ~DISPLAY_FLAGS_VSYNC_LOW;
|
||||
dsi->vm.flags |= DISPLAY_FLAGS_VSYNC_HIGH;
|
||||
dsi->vm.flags &= ~DISPLAY_FLAGS_PIXDATA_NEGEDGE;
|
||||
dsi->vm.flags |= DISPLAY_FLAGS_PIXDATA_POSEDGE;
|
||||
dsi->vm.flags &= ~DISPLAY_FLAGS_DE_LOW;
|
||||
dsi->vm.flags |= DISPLAY_FLAGS_DE_HIGH;
|
||||
dsi->vm.flags &= ~DISPLAY_FLAGS_SYNC_POSEDGE;
|
||||
dsi->vm.flags |= DISPLAY_FLAGS_SYNC_NEGEDGE;
|
||||
|
||||
dss_mgr_set_timings(channel, &dsi->timings);
|
||||
dss_mgr_set_timings(channel, &dsi->vm);
|
||||
|
||||
r = dsi_configure_dispc_clocks(dsidev);
|
||||
if (r)
|
||||
|
@ -4361,13 +4361,13 @@ static void print_dsi_vm(const char *str,
|
|||
#undef TO_DSI_T
|
||||
}
|
||||
|
||||
static void print_dispc_vm(const char *str, const struct videomode *t)
|
||||
static void print_dispc_vm(const char *str, const struct videomode *vm)
|
||||
{
|
||||
unsigned long pck = t->pixelclock;
|
||||
unsigned long pck = vm->pixelclock;
|
||||
int hact, bl, tot;
|
||||
|
||||
hact = t->hactive;
|
||||
bl = t->hsync_len + t->hbp + t->hfront_porch;
|
||||
hact = vm->hactive;
|
||||
bl = vm->hsync_len + vm->hbp + vm->hfront_porch;
|
||||
tot = hact + bl;
|
||||
|
||||
#define TO_DISPC_T(x) ((u32)div64_u64((u64)x * 1000000000llu, pck))
|
||||
|
@ -4376,12 +4376,12 @@ static void print_dispc_vm(const char *str, const struct videomode *t)
|
|||
"%u/%u/%u/%u = %u + %u = %u\n",
|
||||
str,
|
||||
pck,
|
||||
t->hsync_len, t->hbp, hact, t->hfront_porch,
|
||||
vm->hsync_len, vm->hbp, hact, vm->hfront_porch,
|
||||
bl, hact, tot,
|
||||
TO_DISPC_T(t->hsync_len),
|
||||
TO_DISPC_T(t->hbp),
|
||||
TO_DISPC_T(vm->hsync_len),
|
||||
TO_DISPC_T(vm->hbp),
|
||||
TO_DISPC_T(hact),
|
||||
TO_DISPC_T(t->hfront_porch),
|
||||
TO_DISPC_T(vm->hfront_porch),
|
||||
TO_DISPC_T(bl),
|
||||
TO_DISPC_T(hact),
|
||||
TO_DISPC_T(tot));
|
||||
|
@ -4417,19 +4417,19 @@ static bool dsi_cm_calc_dispc_cb(int lckd, int pckd, unsigned long lck,
|
|||
unsigned long pck, void *data)
|
||||
{
|
||||
struct dsi_clk_calc_ctx *ctx = data;
|
||||
struct videomode *t = &ctx->dispc_vm;
|
||||
struct videomode *vm = &ctx->vm;
|
||||
|
||||
ctx->dispc_cinfo.lck_div = lckd;
|
||||
ctx->dispc_cinfo.pck_div = pckd;
|
||||
ctx->dispc_cinfo.lck = lck;
|
||||
ctx->dispc_cinfo.pck = pck;
|
||||
|
||||
*t = *ctx->config->timings;
|
||||
t->pixelclock = pck;
|
||||
t->hactive = ctx->config->timings->hactive;
|
||||
t->vactive = ctx->config->timings->vactive;
|
||||
t->hsync_len = t->hfront_porch = t->hback_porch = t->vsync_len = 1;
|
||||
t->vfront_porch = t->vback_porch = 0;
|
||||
*vm = *ctx->config->vm;
|
||||
vm->pixelclock = pck;
|
||||
vm->hactive = ctx->config->vm->hactive;
|
||||
vm->vactive = ctx->config->vm->vactive;
|
||||
vm->hsync_len = vm->hfront_porch = vm->hback_porch = vm->vsync_len = 1;
|
||||
vm->vfront_porch = vm->vback_porch = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -4480,7 +4480,7 @@ static bool dsi_cm_calc(struct dsi_data *dsi,
|
|||
* especially as we go to LP between each pixel packet due to HW
|
||||
* "feature". So let's just estimate very roughly and multiply by 1.5.
|
||||
*/
|
||||
pck = cfg->timings->pixelclock;
|
||||
pck = cfg->vm->pixelclock;
|
||||
pck = pck * 3 / 2;
|
||||
txbyteclk = pck * bitspp / 8 / ndl;
|
||||
|
||||
|
@ -4522,7 +4522,7 @@ static bool dsi_vm_calc_blanking(struct dsi_clk_calc_ctx *ctx)
|
|||
|
||||
dsi_tput = (u64)byteclk * ndl * 8;
|
||||
|
||||
req_vm = cfg->timings;
|
||||
req_vm = cfg->vm;
|
||||
req_pck_min = ctx->req_pck_min;
|
||||
req_pck_max = ctx->req_pck_max;
|
||||
req_pck_nom = ctx->req_pck_nom;
|
||||
|
@ -4656,7 +4656,7 @@ static bool dsi_vm_calc_blanking(struct dsi_clk_calc_ctx *ctx)
|
|||
|
||||
/* setup DISPC videomode */
|
||||
|
||||
dispc_vm = &ctx->dispc_vm;
|
||||
dispc_vm = &ctx->vm;
|
||||
*dispc_vm = *req_vm;
|
||||
dispc_vm->pixelclock = dispc_pck;
|
||||
|
||||
|
@ -4713,9 +4713,9 @@ static bool dsi_vm_calc_dispc_cb(int lckd, int pckd, unsigned long lck,
|
|||
return false;
|
||||
|
||||
#ifdef PRINT_VERBOSE_VM_TIMINGS
|
||||
print_dispc_vm("dispc", &ctx->dispc_vm);
|
||||
print_dispc_vm("dispc", &ctx->vm);
|
||||
print_dsi_vm("dsi ", &ctx->dsi_vm);
|
||||
print_dispc_vm("req ", ctx->config->timings);
|
||||
print_dispc_vm("req ", ctx->config->vm);
|
||||
print_dsi_dispc_vm("act ", &ctx->dsi_vm);
|
||||
#endif
|
||||
|
||||
|
@ -4764,7 +4764,7 @@ static bool dsi_vm_calc(struct dsi_data *dsi,
|
|||
const struct omap_dss_dsi_config *cfg,
|
||||
struct dsi_clk_calc_ctx *ctx)
|
||||
{
|
||||
const struct videomode *t = cfg->timings;
|
||||
const struct videomode *vm = cfg->vm;
|
||||
unsigned long clkin;
|
||||
unsigned long pll_min;
|
||||
unsigned long pll_max;
|
||||
|
@ -4780,9 +4780,9 @@ static bool dsi_vm_calc(struct dsi_data *dsi,
|
|||
ctx->config = cfg;
|
||||
|
||||
/* these limits should come from the panel driver */
|
||||
ctx->req_pck_min = t->pixelclock - 1000;
|
||||
ctx->req_pck_nom = t->pixelclock;
|
||||
ctx->req_pck_max = t->pixelclock + 1000;
|
||||
ctx->req_pck_min = vm->pixelclock - 1000;
|
||||
ctx->req_pck_nom = vm->pixelclock;
|
||||
ctx->req_pck_max = vm->pixelclock + 1000;
|
||||
|
||||
byteclk_min = div64_u64((u64)ctx->req_pck_min * bitspp, ndl * 8);
|
||||
pll_min = max(cfg->hs_clk_min * 4, byteclk_min * 4 * 4);
|
||||
|
@ -4839,7 +4839,7 @@ static int dsi_set_config(struct omap_dss_device *dssdev,
|
|||
dsi->user_dsi_cinfo = ctx.dsi_cinfo;
|
||||
dsi->user_dispc_cinfo = ctx.dispc_cinfo;
|
||||
|
||||
dsi->timings = ctx.dispc_vm;
|
||||
dsi->vm = ctx.vm;
|
||||
dsi->vm_timings = ctx.dsi_vm;
|
||||
|
||||
mutex_unlock(&dsi->lock);
|
||||
|
|
|
@ -366,8 +366,7 @@ bool dispc_div_calc(unsigned long dispc,
|
|||
unsigned long pck_min, unsigned long pck_max,
|
||||
dispc_div_calc_func func, void *data);
|
||||
|
||||
bool dispc_mgr_timings_ok(enum omap_channel channel,
|
||||
const struct videomode *timings);
|
||||
bool dispc_mgr_timings_ok(enum omap_channel channel, const struct videomode *vm);
|
||||
int dispc_calc_clock_rates(unsigned long dispc_fclk_rate,
|
||||
struct dispc_clock_info *cinfo);
|
||||
|
||||
|
@ -390,7 +389,7 @@ void dispc_wb_enable(bool enable);
|
|||
bool dispc_wb_is_enabled(void);
|
||||
void dispc_wb_set_channel_in(enum dss_writeback_channel channel);
|
||||
int dispc_wb_setup(const struct omap_dss_writeback_info *wi,
|
||||
bool mem_to_mem, const struct videomode *timings);
|
||||
bool mem_to_mem, const struct videomode *vm);
|
||||
|
||||
/* VENC */
|
||||
int venc_init_platform_driver(void) __init;
|
||||
|
|
|
@ -181,7 +181,7 @@ struct hdmi_video_format {
|
|||
};
|
||||
|
||||
struct hdmi_config {
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
struct hdmi_avi_infoframe infoframe;
|
||||
enum hdmi_core_hdmi_dvi hdmi_dvi_mode;
|
||||
};
|
||||
|
@ -298,11 +298,11 @@ int hdmi_wp_set_pll_pwr(struct hdmi_wp_data *wp, enum hdmi_pll_pwr val);
|
|||
void hdmi_wp_video_config_format(struct hdmi_wp_data *wp,
|
||||
struct hdmi_video_format *video_fmt);
|
||||
void hdmi_wp_video_config_interface(struct hdmi_wp_data *wp,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void hdmi_wp_video_config_timing(struct hdmi_wp_data *wp,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void hdmi_wp_init_vid_fmt_timings(struct hdmi_video_format *video_fmt,
|
||||
struct videomode *timings, struct hdmi_config *param);
|
||||
struct videomode *vm, struct hdmi_config *param);
|
||||
int hdmi_wp_init(struct platform_device *pdev, struct hdmi_wp_data *wp);
|
||||
phys_addr_t hdmi_wp_get_audio_dma_addr(struct hdmi_wp_data *wp);
|
||||
|
||||
|
|
|
@ -155,7 +155,7 @@ static void hdmi_power_off_core(struct omap_dss_device *dssdev)
|
|||
static int hdmi_power_on_full(struct omap_dss_device *dssdev)
|
||||
{
|
||||
int r;
|
||||
struct videomode *p;
|
||||
struct videomode *vm;
|
||||
enum omap_channel channel = dssdev->dispc_channel;
|
||||
struct hdmi_wp_data *wp = &hdmi.wp;
|
||||
struct dss_pll_clock_info hdmi_cinfo = { 0 };
|
||||
|
@ -169,13 +169,13 @@ static int hdmi_power_on_full(struct omap_dss_device *dssdev)
|
|||
hdmi_wp_clear_irqenable(wp, 0xffffffff);
|
||||
hdmi_wp_set_irqstatus(wp, 0xffffffff);
|
||||
|
||||
p = &hdmi.cfg.timings;
|
||||
vm = &hdmi.cfg.vm;
|
||||
|
||||
DSSDBG("hdmi_power_on hactive= %d vactive = %d\n", p->hactive,
|
||||
p->vactive);
|
||||
DSSDBG("hdmi_power_on hactive= %d vactive = %d\n", vm->hactive,
|
||||
vm->vactive);
|
||||
|
||||
pc = p->pixelclock;
|
||||
if (p->flags & DISPLAY_FLAGS_DOUBLECLK)
|
||||
pc = vm->pixelclock;
|
||||
if (vm->flags & DISPLAY_FLAGS_DOUBLECLK)
|
||||
pc *= 2;
|
||||
|
||||
/* DSS_HDMI_TCLK is bitclk / 10 */
|
||||
|
@ -210,7 +210,7 @@ static int hdmi_power_on_full(struct omap_dss_device *dssdev)
|
|||
hdmi4_configure(&hdmi.core, &hdmi.wp, &hdmi.cfg);
|
||||
|
||||
/* tv size */
|
||||
dss_mgr_set_timings(channel, p);
|
||||
dss_mgr_set_timings(channel, vm);
|
||||
|
||||
r = dss_mgr_enable(channel);
|
||||
if (r)
|
||||
|
@ -256,30 +256,30 @@ static void hdmi_power_off_full(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static int hdmi_display_check_timing(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
if (!dispc_mgr_timings_ok(dssdev->dispc_channel, timings))
|
||||
if (!dispc_mgr_timings_ok(dssdev->dispc_channel, vm))
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void hdmi_display_set_timing(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
mutex_lock(&hdmi.lock);
|
||||
|
||||
hdmi.cfg.timings = *timings;
|
||||
hdmi.cfg.vm = *vm;
|
||||
|
||||
dispc_set_tv_pclk(timings->pixelclock);
|
||||
dispc_set_tv_pclk(vm->pixelclock);
|
||||
|
||||
mutex_unlock(&hdmi.lock);
|
||||
}
|
||||
|
||||
static void hdmi_display_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
*timings = hdmi.cfg.timings;
|
||||
*vm = hdmi.cfg.vm;
|
||||
}
|
||||
|
||||
static void hdmi_dump_regs(struct seq_file *s)
|
||||
|
@ -353,7 +353,7 @@ static int hdmi_display_enable(struct omap_dss_device *dssdev)
|
|||
|
||||
if (hdmi.audio_configured) {
|
||||
r = hdmi4_audio_config(&hdmi.core, &hdmi.wp, &hdmi.audio_config,
|
||||
hdmi.cfg.timings.pixelclock);
|
||||
hdmi.cfg.vm.pixelclock);
|
||||
if (r) {
|
||||
DSSERR("Error restoring audio configuration: %d", r);
|
||||
hdmi.audio_abort_cb(&hdmi.pdev->dev);
|
||||
|
@ -644,7 +644,7 @@ static int hdmi_audio_config(struct device *dev,
|
|||
}
|
||||
|
||||
ret = hdmi4_audio_config(&hd->core, &hd->wp, dss_audio,
|
||||
hd->cfg.timings.pixelclock);
|
||||
hd->cfg.vm.pixelclock);
|
||||
if (!ret) {
|
||||
hd->audio_configured = true;
|
||||
hd->audio_config = *dss_audio;
|
||||
|
|
|
@ -310,7 +310,7 @@ void hdmi4_configure(struct hdmi_core_data *core,
|
|||
struct hdmi_wp_data *wp, struct hdmi_config *cfg)
|
||||
{
|
||||
/* HDMI */
|
||||
struct videomode video_timing;
|
||||
struct videomode vm;
|
||||
struct hdmi_video_format video_format;
|
||||
/* HDMI core */
|
||||
struct hdmi_core_video_config v_core_cfg;
|
||||
|
@ -318,16 +318,16 @@ void hdmi4_configure(struct hdmi_core_data *core,
|
|||
|
||||
hdmi_core_init(&v_core_cfg);
|
||||
|
||||
hdmi_wp_init_vid_fmt_timings(&video_format, &video_timing, cfg);
|
||||
hdmi_wp_init_vid_fmt_timings(&video_format, &vm, cfg);
|
||||
|
||||
hdmi_wp_video_config_timing(wp, &video_timing);
|
||||
hdmi_wp_video_config_timing(wp, &vm);
|
||||
|
||||
/* video config */
|
||||
video_format.packing_mode = HDMI_PACK_24b_RGB_YUV444_YUV422;
|
||||
|
||||
hdmi_wp_video_config_format(wp, &video_format);
|
||||
|
||||
hdmi_wp_video_config_interface(wp, &video_timing);
|
||||
hdmi_wp_video_config_interface(wp, &vm);
|
||||
|
||||
/*
|
||||
* configure core video part
|
||||
|
|
|
@ -172,7 +172,7 @@ static void hdmi_power_off_core(struct omap_dss_device *dssdev)
|
|||
static int hdmi_power_on_full(struct omap_dss_device *dssdev)
|
||||
{
|
||||
int r;
|
||||
struct videomode *p;
|
||||
struct videomode *vm;
|
||||
enum omap_channel channel = dssdev->dispc_channel;
|
||||
struct dss_pll_clock_info hdmi_cinfo = { 0 };
|
||||
unsigned pc;
|
||||
|
@ -181,13 +181,13 @@ static int hdmi_power_on_full(struct omap_dss_device *dssdev)
|
|||
if (r)
|
||||
return r;
|
||||
|
||||
p = &hdmi.cfg.timings;
|
||||
vm = &hdmi.cfg.vm;
|
||||
|
||||
DSSDBG("hdmi_power_on hactive= %d vactive = %d\n", p->hactive,
|
||||
p->vactive);
|
||||
DSSDBG("hdmi_power_on hactive= %d vactive = %d\n", vm->hactive,
|
||||
vm->vactive);
|
||||
|
||||
pc = p->pixelclock;
|
||||
if (p->flags & DISPLAY_FLAGS_DOUBLECLK)
|
||||
pc = vm->pixelclock;
|
||||
if (vm->flags & DISPLAY_FLAGS_DOUBLECLK)
|
||||
pc *= 2;
|
||||
|
||||
/* DSS_HDMI_TCLK is bitclk / 10 */
|
||||
|
@ -227,7 +227,7 @@ static int hdmi_power_on_full(struct omap_dss_device *dssdev)
|
|||
hdmi5_configure(&hdmi.core, &hdmi.wp, &hdmi.cfg);
|
||||
|
||||
/* tv size */
|
||||
dss_mgr_set_timings(channel, p);
|
||||
dss_mgr_set_timings(channel, vm);
|
||||
|
||||
r = dss_mgr_enable(channel);
|
||||
if (r)
|
||||
|
@ -273,30 +273,30 @@ static void hdmi_power_off_full(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static int hdmi_display_check_timing(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
if (!dispc_mgr_timings_ok(dssdev->dispc_channel, timings))
|
||||
if (!dispc_mgr_timings_ok(dssdev->dispc_channel, vm))
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void hdmi_display_set_timing(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
mutex_lock(&hdmi.lock);
|
||||
|
||||
hdmi.cfg.timings = *timings;
|
||||
hdmi.cfg.vm = *vm;
|
||||
|
||||
dispc_set_tv_pclk(timings->pixelclock);
|
||||
dispc_set_tv_pclk(vm->pixelclock);
|
||||
|
||||
mutex_unlock(&hdmi.lock);
|
||||
}
|
||||
|
||||
static void hdmi_display_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
*timings = hdmi.cfg.timings;
|
||||
*vm = hdmi.cfg.vm;
|
||||
}
|
||||
|
||||
static void hdmi_dump_regs(struct seq_file *s)
|
||||
|
@ -379,7 +379,7 @@ static int hdmi_display_enable(struct omap_dss_device *dssdev)
|
|||
|
||||
if (hdmi.audio_configured) {
|
||||
r = hdmi5_audio_config(&hdmi.core, &hdmi.wp, &hdmi.audio_config,
|
||||
hdmi.cfg.timings.pixelclock);
|
||||
hdmi.cfg.vm.pixelclock);
|
||||
if (r) {
|
||||
DSSERR("Error restoring audio configuration: %d", r);
|
||||
hdmi.audio_abort_cb(&hdmi.pdev->dev);
|
||||
|
@ -670,7 +670,7 @@ static int hdmi_audio_config(struct device *dev,
|
|||
}
|
||||
|
||||
ret = hdmi5_audio_config(&hd->core, &hd->wp, dss_audio,
|
||||
hd->cfg.timings.pixelclock);
|
||||
hd->cfg.vm.pixelclock);
|
||||
|
||||
if (!ret) {
|
||||
hd->audio_configured = true;
|
||||
|
|
|
@ -292,35 +292,35 @@ static void hdmi_core_init(struct hdmi_core_vid_config *video_cfg,
|
|||
{
|
||||
DSSDBG("hdmi_core_init\n");
|
||||
|
||||
video_cfg->v_fc_config.timings = cfg->timings;
|
||||
video_cfg->v_fc_config.vm = cfg->vm;
|
||||
|
||||
/* video core */
|
||||
video_cfg->data_enable_pol = 1; /* It is always 1*/
|
||||
video_cfg->hblank = cfg->timings.hfront_porch +
|
||||
cfg->timings.hback_porch + cfg->timings.hsync_len;
|
||||
video_cfg->hblank = cfg->vm.hfront_porch +
|
||||
cfg->vm.hback_porch + cfg->vm.hsync_len;
|
||||
video_cfg->vblank_osc = 0;
|
||||
video_cfg->vblank = cfg->timings.vsync_len + cfg->timings.vfront_porch +
|
||||
cfg->timings.vback_porch;
|
||||
video_cfg->vblank = cfg->vm.vsync_len + cfg->vm.vfront_porch +
|
||||
cfg->vm.vback_porch;
|
||||
video_cfg->v_fc_config.hdmi_dvi_mode = cfg->hdmi_dvi_mode;
|
||||
|
||||
if (cfg->timings.flags & DISPLAY_FLAGS_INTERLACED) {
|
||||
if (cfg->vm.flags & DISPLAY_FLAGS_INTERLACED) {
|
||||
/* set vblank_osc if vblank is fractional */
|
||||
if (video_cfg->vblank % 2 != 0)
|
||||
video_cfg->vblank_osc = 1;
|
||||
|
||||
video_cfg->v_fc_config.timings.vactive /= 2;
|
||||
video_cfg->v_fc_config.vm.vactive /= 2;
|
||||
video_cfg->vblank /= 2;
|
||||
video_cfg->v_fc_config.timings.vfront_porch /= 2;
|
||||
video_cfg->v_fc_config.timings.vsync_len /= 2;
|
||||
video_cfg->v_fc_config.timings.vback_porch /= 2;
|
||||
video_cfg->v_fc_config.vm.vfront_porch /= 2;
|
||||
video_cfg->v_fc_config.vm.vsync_len /= 2;
|
||||
video_cfg->v_fc_config.vm.vback_porch /= 2;
|
||||
}
|
||||
|
||||
if (cfg->timings.flags & DISPLAY_FLAGS_DOUBLECLK) {
|
||||
video_cfg->v_fc_config.timings.hactive *= 2;
|
||||
if (cfg->vm.flags & DISPLAY_FLAGS_DOUBLECLK) {
|
||||
video_cfg->v_fc_config.vm.hactive *= 2;
|
||||
video_cfg->hblank *= 2;
|
||||
video_cfg->v_fc_config.timings.hfront_porch *= 2;
|
||||
video_cfg->v_fc_config.timings.hsync_len *= 2;
|
||||
video_cfg->v_fc_config.timings.hback_porch *= 2;
|
||||
video_cfg->v_fc_config.vm.hfront_porch *= 2;
|
||||
video_cfg->v_fc_config.vm.hsync_len *= 2;
|
||||
video_cfg->v_fc_config.vm.hback_porch *= 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -329,12 +329,12 @@ static void hdmi_core_video_config(struct hdmi_core_data *core,
|
|||
struct hdmi_core_vid_config *cfg)
|
||||
{
|
||||
void __iomem *base = core->base;
|
||||
struct videomode *ovt = &cfg->v_fc_config.timings;
|
||||
struct videomode *vm = &cfg->v_fc_config.vm;
|
||||
unsigned char r = 0;
|
||||
bool vsync_pol, hsync_pol;
|
||||
|
||||
vsync_pol = !!(ovt->flags & DISPLAY_FLAGS_VSYNC_HIGH);
|
||||
hsync_pol = !!(ovt->flags & DISPLAY_FLAGS_HSYNC_HIGH);
|
||||
vsync_pol = !!(vm->flags & DISPLAY_FLAGS_VSYNC_HIGH);
|
||||
hsync_pol = !!(vm->flags & DISPLAY_FLAGS_HSYNC_HIGH);
|
||||
|
||||
/* Set hsync, vsync and data-enable polarity */
|
||||
r = hdmi_read_reg(base, HDMI_CORE_FC_INVIDCONF);
|
||||
|
@ -342,16 +342,16 @@ static void hdmi_core_video_config(struct hdmi_core_data *core,
|
|||
r = FLD_MOD(r, hsync_pol, 5, 5);
|
||||
r = FLD_MOD(r, cfg->data_enable_pol, 4, 4);
|
||||
r = FLD_MOD(r, cfg->vblank_osc, 1, 1);
|
||||
r = FLD_MOD(r, !!(ovt->flags & DISPLAY_FLAGS_INTERLACED), 0, 0);
|
||||
r = FLD_MOD(r, !!(vm->flags & DISPLAY_FLAGS_INTERLACED), 0, 0);
|
||||
hdmi_write_reg(base, HDMI_CORE_FC_INVIDCONF, r);
|
||||
|
||||
/* set x resolution */
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_INHACTIV1, ovt->hactive >> 8, 4, 0);
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_INHACTIV0, ovt->hactive & 0xFF, 7, 0);
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_INHACTIV1, vm->hactive >> 8, 4, 0);
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_INHACTIV0, vm->hactive & 0xFF, 7, 0);
|
||||
|
||||
/* set y resolution */
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_INVACTIV1, ovt->vactive >> 8, 4, 0);
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_INVACTIV0, ovt->vactive & 0xFF, 7, 0);
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_INVACTIV1, vm->vactive >> 8, 4, 0);
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_INVACTIV0, vm->vactive & 0xFF, 7, 0);
|
||||
|
||||
/* set horizontal blanking pixels */
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_INHBLANK1, cfg->hblank >> 8, 4, 0);
|
||||
|
@ -361,28 +361,28 @@ static void hdmi_core_video_config(struct hdmi_core_data *core,
|
|||
REG_FLD_MOD(base, HDMI_CORE_FC_INVBLANK, cfg->vblank, 7, 0);
|
||||
|
||||
/* set horizontal sync offset */
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_HSYNCINDELAY1, ovt->hfront_porch >> 8,
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_HSYNCINDELAY1, vm->hfront_porch >> 8,
|
||||
4, 0);
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_HSYNCINDELAY0, ovt->hfront_porch & 0xFF,
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_HSYNCINDELAY0, vm->hfront_porch & 0xFF,
|
||||
7, 0);
|
||||
|
||||
/* set vertical sync offset */
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_VSYNCINDELAY, ovt->vfront_porch, 7, 0);
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_VSYNCINDELAY, vm->vfront_porch, 7, 0);
|
||||
|
||||
/* set horizontal sync pulse width */
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_HSYNCINWIDTH1, (ovt->hsync_len >> 8),
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_HSYNCINWIDTH1, (vm->hsync_len >> 8),
|
||||
1, 0);
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_HSYNCINWIDTH0, ovt->hsync_len & 0xFF,
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_HSYNCINWIDTH0, vm->hsync_len & 0xFF,
|
||||
7, 0);
|
||||
|
||||
/* set vertical sync pulse width */
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_VSYNCINWIDTH, ovt->vsync_len, 5, 0);
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_VSYNCINWIDTH, vm->vsync_len, 5, 0);
|
||||
|
||||
/* select DVI mode */
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_INVIDCONF,
|
||||
cfg->v_fc_config.hdmi_dvi_mode, 3, 3);
|
||||
|
||||
if (ovt->flags & DISPLAY_FLAGS_DOUBLECLK)
|
||||
if (vm->flags & DISPLAY_FLAGS_DOUBLECLK)
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_PRCONF, 2, 7, 4);
|
||||
else
|
||||
REG_FLD_MOD(base, HDMI_CORE_FC_PRCONF, 1, 7, 4);
|
||||
|
@ -609,7 +609,7 @@ int hdmi5_core_handle_irqs(struct hdmi_core_data *core)
|
|||
void hdmi5_configure(struct hdmi_core_data *core, struct hdmi_wp_data *wp,
|
||||
struct hdmi_config *cfg)
|
||||
{
|
||||
struct videomode video_timing;
|
||||
struct videomode vm;
|
||||
struct hdmi_video_format video_format;
|
||||
struct hdmi_core_vid_config v_core_cfg;
|
||||
|
||||
|
@ -617,16 +617,16 @@ void hdmi5_configure(struct hdmi_core_data *core, struct hdmi_wp_data *wp,
|
|||
|
||||
hdmi_core_init(&v_core_cfg, cfg);
|
||||
|
||||
hdmi_wp_init_vid_fmt_timings(&video_format, &video_timing, cfg);
|
||||
hdmi_wp_init_vid_fmt_timings(&video_format, &vm, cfg);
|
||||
|
||||
hdmi_wp_video_config_timing(wp, &video_timing);
|
||||
hdmi_wp_video_config_timing(wp, &vm);
|
||||
|
||||
/* video config */
|
||||
video_format.packing_mode = HDMI_PACK_24b_RGB_YUV444_YUV422;
|
||||
|
||||
hdmi_wp_video_config_format(wp, &video_format);
|
||||
|
||||
hdmi_wp_video_config_interface(wp, &video_timing);
|
||||
hdmi_wp_video_config_interface(wp, &vm);
|
||||
|
||||
/* support limited range with 24 bit color depth for now */
|
||||
hdmi_core_configure_range(core);
|
||||
|
|
|
@ -144,25 +144,25 @@ void hdmi_wp_video_config_format(struct hdmi_wp_data *wp,
|
|||
}
|
||||
|
||||
void hdmi_wp_video_config_interface(struct hdmi_wp_data *wp,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
u32 r;
|
||||
bool vsync_pol, hsync_pol;
|
||||
DSSDBG("Enter hdmi_wp_video_config_interface\n");
|
||||
|
||||
vsync_pol = !!(timings->flags & DISPLAY_FLAGS_VSYNC_HIGH);
|
||||
hsync_pol = !!(timings->flags & DISPLAY_FLAGS_HSYNC_HIGH);
|
||||
vsync_pol = !!(vm->flags & DISPLAY_FLAGS_VSYNC_HIGH);
|
||||
hsync_pol = !!(vm->flags & DISPLAY_FLAGS_HSYNC_HIGH);
|
||||
|
||||
r = hdmi_read_reg(wp->base, HDMI_WP_VIDEO_CFG);
|
||||
r = FLD_MOD(r, vsync_pol, 7, 7);
|
||||
r = FLD_MOD(r, hsync_pol, 6, 6);
|
||||
r = FLD_MOD(r, !!(timings->flags & DISPLAY_FLAGS_INTERLACED), 3, 3);
|
||||
r = FLD_MOD(r, !!(vm->flags & DISPLAY_FLAGS_INTERLACED), 3, 3);
|
||||
r = FLD_MOD(r, 1, 1, 0); /* HDMI_TIMING_MASTER_24BIT */
|
||||
hdmi_write_reg(wp->base, HDMI_WP_VIDEO_CFG, r);
|
||||
}
|
||||
|
||||
void hdmi_wp_video_config_timing(struct hdmi_wp_data *wp,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
u32 timing_h = 0;
|
||||
u32 timing_v = 0;
|
||||
|
@ -181,47 +181,47 @@ void hdmi_wp_video_config_timing(struct hdmi_wp_data *wp,
|
|||
omapdss_get_version() == OMAPDSS_VER_OMAP4)
|
||||
hsync_len_offset = 0;
|
||||
|
||||
timing_h |= FLD_VAL(timings->hback_porch, 31, 20);
|
||||
timing_h |= FLD_VAL(timings->hfront_porch, 19, 8);
|
||||
timing_h |= FLD_VAL(timings->hsync_len - hsync_len_offset, 7, 0);
|
||||
timing_h |= FLD_VAL(vm->hback_porch, 31, 20);
|
||||
timing_h |= FLD_VAL(vm->hfront_porch, 19, 8);
|
||||
timing_h |= FLD_VAL(vm->hsync_len - hsync_len_offset, 7, 0);
|
||||
hdmi_write_reg(wp->base, HDMI_WP_VIDEO_TIMING_H, timing_h);
|
||||
|
||||
timing_v |= FLD_VAL(timings->vback_porch, 31, 20);
|
||||
timing_v |= FLD_VAL(timings->vfront_porch, 19, 8);
|
||||
timing_v |= FLD_VAL(timings->vsync_len, 7, 0);
|
||||
timing_v |= FLD_VAL(vm->vback_porch, 31, 20);
|
||||
timing_v |= FLD_VAL(vm->vfront_porch, 19, 8);
|
||||
timing_v |= FLD_VAL(vm->vsync_len, 7, 0);
|
||||
hdmi_write_reg(wp->base, HDMI_WP_VIDEO_TIMING_V, timing_v);
|
||||
}
|
||||
|
||||
void hdmi_wp_init_vid_fmt_timings(struct hdmi_video_format *video_fmt,
|
||||
struct videomode *timings, struct hdmi_config *param)
|
||||
struct videomode *vm, struct hdmi_config *param)
|
||||
{
|
||||
DSSDBG("Enter hdmi_wp_video_init_format\n");
|
||||
|
||||
video_fmt->packing_mode = HDMI_PACK_10b_RGB_YUV444;
|
||||
video_fmt->y_res = param->timings.vactive;
|
||||
video_fmt->x_res = param->timings.hactive;
|
||||
video_fmt->y_res = param->vm.vactive;
|
||||
video_fmt->x_res = param->vm.hactive;
|
||||
|
||||
timings->hback_porch = param->timings.hback_porch;
|
||||
timings->hfront_porch = param->timings.hfront_porch;
|
||||
timings->hsync_len = param->timings.hsync_len;
|
||||
timings->vback_porch = param->timings.vback_porch;
|
||||
timings->vfront_porch = param->timings.vfront_porch;
|
||||
timings->vsync_len = param->timings.vsync_len;
|
||||
vm->hback_porch = param->vm.hback_porch;
|
||||
vm->hfront_porch = param->vm.hfront_porch;
|
||||
vm->hsync_len = param->vm.hsync_len;
|
||||
vm->vback_porch = param->vm.vback_porch;
|
||||
vm->vfront_porch = param->vm.vfront_porch;
|
||||
vm->vsync_len = param->vm.vsync_len;
|
||||
|
||||
timings->flags = param->timings.flags;
|
||||
vm->flags = param->vm.flags;
|
||||
|
||||
if (param->timings.flags & DISPLAY_FLAGS_INTERLACED) {
|
||||
if (param->vm.flags & DISPLAY_FLAGS_INTERLACED) {
|
||||
video_fmt->y_res /= 2;
|
||||
timings->vback_porch /= 2;
|
||||
timings->vfront_porch /= 2;
|
||||
timings->vsync_len /= 2;
|
||||
vm->vback_porch /= 2;
|
||||
vm->vfront_porch /= 2;
|
||||
vm->vsync_len /= 2;
|
||||
}
|
||||
|
||||
if (param->timings.flags & DISPLAY_FLAGS_DOUBLECLK) {
|
||||
if (param->vm.flags & DISPLAY_FLAGS_DOUBLECLK) {
|
||||
video_fmt->x_res *= 2;
|
||||
timings->hfront_porch *= 2;
|
||||
timings->hsync_len *= 2;
|
||||
timings->hback_porch *= 2;
|
||||
vm->hfront_porch *= 2;
|
||||
vm->hsync_len *= 2;
|
||||
vm->hback_porch *= 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -290,7 +290,7 @@ struct omap_dss_dsi_videomode_timings {
|
|||
struct omap_dss_dsi_config {
|
||||
enum omap_dss_dsi_mode mode;
|
||||
enum omap_dss_dsi_pixel_format pixel_format;
|
||||
const struct videomode *timings;
|
||||
const struct videomode *vm;
|
||||
|
||||
unsigned long hs_clk_min, hs_clk_max;
|
||||
unsigned long lp_clk_min, lp_clk_max;
|
||||
|
@ -299,12 +299,12 @@ struct omap_dss_dsi_config {
|
|||
enum omap_dss_dsi_trans_mode trans_mode;
|
||||
};
|
||||
|
||||
/* Hardcoded timings for tv modes. Venc only uses these to
|
||||
/* Hardcoded videomodes for tv. Venc only uses these to
|
||||
* identify the mode, and does not actually use the configs
|
||||
* itself. However, the configs should be something that
|
||||
* a normal monitor can also show */
|
||||
extern const struct videomode omap_dss_pal_timings;
|
||||
extern const struct videomode omap_dss_ntsc_timings;
|
||||
extern const struct videomode omap_dss_pal_vm;
|
||||
extern const struct videomode omap_dss_ntsc_vm;
|
||||
|
||||
struct omap_dss_cpr_coefs {
|
||||
s16 rr, rg, rb;
|
||||
|
@ -466,11 +466,11 @@ struct omapdss_dpi_ops {
|
|||
void (*disable)(struct omap_dss_device *dssdev);
|
||||
|
||||
int (*check_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void (*set_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void (*get_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
|
||||
void (*set_data_lines)(struct omap_dss_device *dssdev, int data_lines);
|
||||
};
|
||||
|
@ -485,11 +485,11 @@ struct omapdss_sdi_ops {
|
|||
void (*disable)(struct omap_dss_device *dssdev);
|
||||
|
||||
int (*check_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void (*set_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void (*get_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
|
||||
void (*set_datapairs)(struct omap_dss_device *dssdev, int datapairs);
|
||||
};
|
||||
|
@ -504,11 +504,11 @@ struct omapdss_dvi_ops {
|
|||
void (*disable)(struct omap_dss_device *dssdev);
|
||||
|
||||
int (*check_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void (*set_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void (*get_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
};
|
||||
|
||||
struct omapdss_atv_ops {
|
||||
|
@ -521,11 +521,11 @@ struct omapdss_atv_ops {
|
|||
void (*disable)(struct omap_dss_device *dssdev);
|
||||
|
||||
int (*check_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void (*set_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void (*get_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
|
||||
void (*set_type)(struct omap_dss_device *dssdev,
|
||||
enum omap_dss_venc_type type);
|
||||
|
@ -546,11 +546,11 @@ struct omapdss_hdmi_ops {
|
|||
void (*disable)(struct omap_dss_device *dssdev);
|
||||
|
||||
int (*check_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void (*set_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void (*get_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
|
||||
int (*read_edid)(struct omap_dss_device *dssdev, u8 *buf, int len);
|
||||
bool (*detect)(struct omap_dss_device *dssdev);
|
||||
|
@ -656,7 +656,7 @@ struct omap_dss_device {
|
|||
} phy;
|
||||
|
||||
struct {
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
|
||||
enum omap_dss_dsi_pixel_format dsi_pix_fmt;
|
||||
enum omap_dss_dsi_mode dsi_mode;
|
||||
|
@ -749,11 +749,11 @@ struct omap_dss_driver {
|
|||
int (*get_recommended_bpp)(struct omap_dss_device *dssdev);
|
||||
|
||||
int (*check_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void (*set_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
void (*get_timings)(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
|
||||
int (*set_wss)(struct omap_dss_device *dssdev, u32 wss);
|
||||
u32 (*get_wss)(struct omap_dss_device *dssdev);
|
||||
|
@ -811,7 +811,7 @@ void omapdss_default_get_resolution(struct omap_dss_device *dssdev,
|
|||
u16 *xres, u16 *yres);
|
||||
int omapdss_default_get_recommended_bpp(struct omap_dss_device *dssdev);
|
||||
void omapdss_default_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings);
|
||||
struct videomode *vm);
|
||||
|
||||
typedef void (*omap_dispc_isr_t) (void *arg, u32 mask);
|
||||
int omap_dispc_register_isr(omap_dispc_isr_t isr, void *arg, u32 mask);
|
||||
|
@ -865,7 +865,7 @@ void dispc_mgr_go(enum omap_channel channel);
|
|||
void dispc_mgr_set_lcd_config(enum omap_channel channel,
|
||||
const struct dss_lcd_mgr_config *config);
|
||||
void dispc_mgr_set_timings(enum omap_channel channel,
|
||||
const struct videomode *timings);
|
||||
const struct videomode *vm);
|
||||
void dispc_mgr_setup(enum omap_channel channel,
|
||||
const struct omap_overlay_manager_info *info);
|
||||
u32 dispc_mgr_gamma_size(enum omap_channel channel);
|
||||
|
@ -878,8 +878,7 @@ bool dispc_ovl_enabled(enum omap_plane plane);
|
|||
void dispc_ovl_set_channel_out(enum omap_plane plane,
|
||||
enum omap_channel channel);
|
||||
int dispc_ovl_setup(enum omap_plane plane, const struct omap_overlay_info *oi,
|
||||
bool replication, const struct videomode *mgr_timings,
|
||||
bool mem_to_mem);
|
||||
bool replication, const struct videomode *vm, bool mem_to_mem);
|
||||
|
||||
enum omap_dss_output_id dispc_mgr_get_supported_outputs(enum omap_channel channel);
|
||||
|
||||
|
@ -893,7 +892,7 @@ struct dss_mgr_ops {
|
|||
int (*enable)(enum omap_channel channel);
|
||||
void (*disable)(enum omap_channel channel);
|
||||
void (*set_timings)(enum omap_channel channel,
|
||||
const struct videomode *timings);
|
||||
const struct videomode *vm);
|
||||
void (*set_lcd_config)(enum omap_channel channel,
|
||||
const struct dss_lcd_mgr_config *config);
|
||||
int (*register_framedone_handler)(enum omap_channel channel,
|
||||
|
@ -910,7 +909,7 @@ int dss_mgr_connect(enum omap_channel channel,
|
|||
void dss_mgr_disconnect(enum omap_channel channel,
|
||||
struct omap_dss_device *dst);
|
||||
void dss_mgr_set_timings(enum omap_channel channel,
|
||||
const struct videomode *timings);
|
||||
const struct videomode *vm);
|
||||
void dss_mgr_set_lcd_config(enum omap_channel channel,
|
||||
const struct dss_lcd_mgr_config *config);
|
||||
int dss_mgr_enable(enum omap_channel channel);
|
||||
|
|
|
@ -201,10 +201,9 @@ void dss_mgr_disconnect(enum omap_channel channel,
|
|||
}
|
||||
EXPORT_SYMBOL(dss_mgr_disconnect);
|
||||
|
||||
void dss_mgr_set_timings(enum omap_channel channel,
|
||||
const struct videomode *timings)
|
||||
void dss_mgr_set_timings(enum omap_channel channel, const struct videomode *vm)
|
||||
{
|
||||
dss_mgr_ops->set_timings(channel, timings);
|
||||
dss_mgr_ops->set_timings(channel, vm);
|
||||
}
|
||||
EXPORT_SYMBOL(dss_mgr_set_timings);
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@ static struct {
|
|||
|
||||
struct semaphore bus_lock;
|
||||
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
int pixel_size;
|
||||
int data_lines;
|
||||
struct rfbi_timings intf_timings;
|
||||
|
@ -308,15 +308,15 @@ static int rfbi_transfer_area(struct omap_dss_device *dssdev,
|
|||
u32 l;
|
||||
int r;
|
||||
struct omap_overlay_manager *mgr = rfbi.output.manager;
|
||||
u16 width = rfbi.timings.hactive;
|
||||
u16 height = rfbi.timings.vactive;
|
||||
u16 width = rfbi.vm.hactive;
|
||||
u16 height = rfbi.vm.vactive;
|
||||
|
||||
/*BUG_ON(callback == 0);*/
|
||||
BUG_ON(rfbi.framedone_callback != NULL);
|
||||
|
||||
DSSDBG("rfbi_transfer_area %dx%d\n", width, height);
|
||||
|
||||
dss_mgr_set_timings(mgr, &rfbi.timings);
|
||||
dss_mgr_set_timings(mgr, &rfbi.vm);
|
||||
|
||||
r = dss_mgr_enable(mgr);
|
||||
if (r)
|
||||
|
@ -777,8 +777,8 @@ static int rfbi_update(struct omap_dss_device *dssdev, void (*callback)(void *),
|
|||
|
||||
static void rfbi_set_size(struct omap_dss_device *dssdev, u16 w, u16 h)
|
||||
{
|
||||
rfbi.timings.hactive = w;
|
||||
rfbi.timings.vactive = h;
|
||||
rfbi.vm.hactive = w;
|
||||
rfbi.vm.vactive = h;
|
||||
}
|
||||
|
||||
static void rfbi_set_pixel_size(struct omap_dss_device *dssdev, int pixel_size)
|
||||
|
@ -858,26 +858,26 @@ static void rfbi_config_lcd_manager(struct omap_dss_device *dssdev)
|
|||
* are expected to be already configured by the panel driver via
|
||||
* omapdss_rfbi_set_size()
|
||||
*/
|
||||
rfbi.timings.hsync_len = 1;
|
||||
rfbi.timings.hfront_porch = 1;
|
||||
rfbi.timings.hback_porch = 1;
|
||||
rfbi.timings.vsync_len = 1;
|
||||
rfbi.timings.vfront_porch = 0;
|
||||
rfbi.timings.vback_porch = 0;
|
||||
rfbi.vm.hsync_len = 1;
|
||||
rfbi.vm.hfront_porch = 1;
|
||||
rfbi.vm.hback_porch = 1;
|
||||
rfbi.vm.vsync_len = 1;
|
||||
rfbi.vm.vfront_porch = 0;
|
||||
rfbi.vm.vback_porch = 0;
|
||||
|
||||
rfbi.timings.flags &= ~DISPLAY_FLAGS_INTERLACED;
|
||||
rfbi.timings.flags &= ~DISPLAY_FLAGS_HSYNC_LOW;
|
||||
rfbi.timings.flags |= DISPLAY_FLAGS_HSYNC_HIGH;
|
||||
rfbi.timings.flags &= ~DISPLAY_FLAGS_VSYNC_LOW;
|
||||
rfbi.timings.flags |= DISPLAY_FLAGS_VSYNC_HIGH;
|
||||
rfbi.timings.flags &= ~DISPLAY_FLAGS_PIXDATA_NEGEDGE;
|
||||
rfbi.timings.flags |= DISPLAY_FLAGS_PIXDATA_POSEDGE;
|
||||
rfbi.timings.flags &= ~DISPLAY_FLAGS_DE_LOW;
|
||||
rfbi.timings.flags |= DISPLAY_FLAGS_DE_HIGH;
|
||||
rfbi.timings.flags &= ~DISPLAY_FLAGS_SYNC_POSEDGE;
|
||||
rfbi.timings.flags |= DISPLAY_FLAGS_SYNC_NEGEDGE;
|
||||
rfbi.vm.flags &= ~DISPLAY_FLAGS_INTERLACED;
|
||||
rfbi.vm.flags &= ~DISPLAY_FLAGS_HSYNC_LOW;
|
||||
rfbi.vm.flags |= DISPLAY_FLAGS_HSYNC_HIGH;
|
||||
rfbi.vm.flags &= ~DISPLAY_FLAGS_VSYNC_LOW;
|
||||
rfbi.vm.flags |= DISPLAY_FLAGS_VSYNC_HIGH;
|
||||
rfbi.vm.flags &= ~DISPLAY_FLAGS_PIXDATA_NEGEDGE;
|
||||
rfbi.vm.flags |= DISPLAY_FLAGS_PIXDATA_POSEDGE;
|
||||
rfbi.vm.flags &= ~DISPLAY_FLAGS_DE_LOW;
|
||||
rfbi.vm.flags |= DISPLAY_FLAGS_DE_HIGH;
|
||||
rfbi.vm.flags &= ~DISPLAY_FLAGS_SYNC_POSEDGE;
|
||||
rfbi.vm.flags |= DISPLAY_FLAGS_SYNC_NEGEDGE;
|
||||
|
||||
dss_mgr_set_timings(mgr, &rfbi.timings);
|
||||
dss_mgr_set_timings(mgr, &rfbi.vm);
|
||||
}
|
||||
|
||||
static int rfbi_display_enable(struct omap_dss_device *dssdev)
|
||||
|
|
|
@ -39,7 +39,7 @@ static struct {
|
|||
struct regulator *vdds_sdi_reg;
|
||||
|
||||
struct dss_lcd_mgr_config mgr_config;
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
int datapairs;
|
||||
|
||||
struct omap_dss_device output;
|
||||
|
@ -131,7 +131,7 @@ static int sdi_display_enable(struct omap_dss_device *dssdev)
|
|||
{
|
||||
struct omap_dss_device *out = &sdi.output;
|
||||
enum omap_channel channel = dssdev->dispc_channel;
|
||||
struct videomode *t = &sdi.timings;
|
||||
struct videomode *vm = &sdi.vm;
|
||||
unsigned long fck;
|
||||
struct dispc_clock_info dispc_cinfo;
|
||||
unsigned long pck;
|
||||
|
@ -151,9 +151,9 @@ static int sdi_display_enable(struct omap_dss_device *dssdev)
|
|||
goto err_get_dispc;
|
||||
|
||||
/* 15.5.9.1.2 */
|
||||
t->flags |= DISPLAY_FLAGS_PIXDATA_POSEDGE | DISPLAY_FLAGS_SYNC_POSEDGE;
|
||||
vm->flags |= DISPLAY_FLAGS_PIXDATA_POSEDGE | DISPLAY_FLAGS_SYNC_POSEDGE;
|
||||
|
||||
r = sdi_calc_clock_div(t->pixelclock, &fck, &dispc_cinfo);
|
||||
r = sdi_calc_clock_div(vm->pixelclock, &fck, &dispc_cinfo);
|
||||
if (r)
|
||||
goto err_calc_clock_div;
|
||||
|
||||
|
@ -161,15 +161,15 @@ static int sdi_display_enable(struct omap_dss_device *dssdev)
|
|||
|
||||
pck = fck / dispc_cinfo.lck_div / dispc_cinfo.pck_div;
|
||||
|
||||
if (pck != t->pixelclock) {
|
||||
if (pck != vm->pixelclock) {
|
||||
DSSWARN("Could not find exact pixel clock. Requested %lu Hz, got %lu Hz\n",
|
||||
t->pixelclock, pck);
|
||||
vm->pixelclock, pck);
|
||||
|
||||
t->pixelclock = pck;
|
||||
vm->pixelclock = pck;
|
||||
}
|
||||
|
||||
|
||||
dss_mgr_set_timings(channel, t);
|
||||
dss_mgr_set_timings(channel, vm);
|
||||
|
||||
r = dss_set_fck_rate(fck);
|
||||
if (r)
|
||||
|
@ -228,26 +228,26 @@ static void sdi_display_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void sdi_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
sdi.timings = *timings;
|
||||
sdi.vm = *vm;
|
||||
}
|
||||
|
||||
static void sdi_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
*timings = sdi.timings;
|
||||
*vm = sdi.vm;
|
||||
}
|
||||
|
||||
static int sdi_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
enum omap_channel channel = dssdev->dispc_channel;
|
||||
|
||||
if (!dispc_mgr_timings_ok(channel, timings))
|
||||
if (!dispc_mgr_timings_ok(channel, vm))
|
||||
return -EINVAL;
|
||||
|
||||
if (timings->pixelclock == 0)
|
||||
if (vm->pixelclock == 0)
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -262,7 +262,7 @@ static const struct venc_config venc_config_pal_bdghi = {
|
|||
.fid_ext_start_y__fid_ext_offset_y = 0x01380005,
|
||||
};
|
||||
|
||||
const struct videomode omap_dss_pal_timings = {
|
||||
const struct videomode omap_dss_pal_vm = {
|
||||
.hactive = 720,
|
||||
.vactive = 574,
|
||||
.pixelclock = 13500000,
|
||||
|
@ -278,9 +278,9 @@ const struct videomode omap_dss_pal_timings = {
|
|||
DISPLAY_FLAGS_PIXDATA_POSEDGE |
|
||||
DISPLAY_FLAGS_SYNC_NEGEDGE,
|
||||
};
|
||||
EXPORT_SYMBOL(omap_dss_pal_timings);
|
||||
EXPORT_SYMBOL(omap_dss_pal_vm);
|
||||
|
||||
const struct videomode omap_dss_ntsc_timings = {
|
||||
const struct videomode omap_dss_ntsc_vm = {
|
||||
.hactive = 720,
|
||||
.vactive = 482,
|
||||
.pixelclock = 13500000,
|
||||
|
@ -296,7 +296,7 @@ const struct videomode omap_dss_ntsc_timings = {
|
|||
DISPLAY_FLAGS_PIXDATA_POSEDGE |
|
||||
DISPLAY_FLAGS_SYNC_NEGEDGE,
|
||||
};
|
||||
EXPORT_SYMBOL(omap_dss_ntsc_timings);
|
||||
EXPORT_SYMBOL(omap_dss_ntsc_vm);
|
||||
|
||||
static struct {
|
||||
struct platform_device *pdev;
|
||||
|
@ -307,7 +307,7 @@ static struct {
|
|||
|
||||
struct clk *tv_dac_clk;
|
||||
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
enum omap_dss_venc_type type;
|
||||
bool invert_polarity;
|
||||
|
||||
|
@ -421,13 +421,12 @@ static void venc_runtime_put(void)
|
|||
WARN_ON(r < 0 && r != -ENOSYS);
|
||||
}
|
||||
|
||||
static const struct venc_config *venc_timings_to_config(
|
||||
struct videomode *timings)
|
||||
static const struct venc_config *venc_timings_to_config(struct videomode *vm)
|
||||
{
|
||||
if (memcmp(&omap_dss_pal_timings, timings, sizeof(*timings)) == 0)
|
||||
if (memcmp(&omap_dss_pal_vm, vm, sizeof(*vm)) == 0)
|
||||
return &venc_config_pal_trm;
|
||||
|
||||
if (memcmp(&omap_dss_ntsc_timings, timings, sizeof(*timings)) == 0)
|
||||
if (memcmp(&omap_dss_ntsc_vm, vm, sizeof(*vm)) == 0)
|
||||
return &venc_config_ntsc_trm;
|
||||
|
||||
BUG();
|
||||
|
@ -445,7 +444,7 @@ static int venc_power_on(struct omap_dss_device *dssdev)
|
|||
goto err0;
|
||||
|
||||
venc_reset();
|
||||
venc_write_config(venc_timings_to_config(&venc.timings));
|
||||
venc_write_config(venc_timings_to_config(&venc.vm));
|
||||
|
||||
dss_set_venc_output(venc.type);
|
||||
dss_set_dac_pwrdn_bgz(1);
|
||||
|
@ -462,7 +461,7 @@ static int venc_power_on(struct omap_dss_device *dssdev)
|
|||
|
||||
venc_write_reg(VENC_OUTPUT_CONTROL, l);
|
||||
|
||||
dss_mgr_set_timings(channel, &venc.timings);
|
||||
dss_mgr_set_timings(channel, &venc.vm);
|
||||
|
||||
r = regulator_enable(venc.vdda_dac_reg);
|
||||
if (r)
|
||||
|
@ -540,17 +539,17 @@ static void venc_display_disable(struct omap_dss_device *dssdev)
|
|||
}
|
||||
|
||||
static void venc_set_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
DSSDBG("venc_set_timings\n");
|
||||
|
||||
mutex_lock(&venc.venc_lock);
|
||||
|
||||
/* Reset WSS data when the TV standard changes. */
|
||||
if (memcmp(&venc.timings, timings, sizeof(*timings)))
|
||||
if (memcmp(&venc.vm, vm, sizeof(*vm)))
|
||||
venc.wss_data = 0;
|
||||
|
||||
venc.timings = *timings;
|
||||
venc.vm = *vm;
|
||||
|
||||
dispc_set_tv_pclk(13500000);
|
||||
|
||||
|
@ -558,25 +557,25 @@ static void venc_set_timings(struct omap_dss_device *dssdev,
|
|||
}
|
||||
|
||||
static int venc_check_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
DSSDBG("venc_check_timings\n");
|
||||
|
||||
if (memcmp(&omap_dss_pal_timings, timings, sizeof(*timings)) == 0)
|
||||
if (memcmp(&omap_dss_pal_vm, vm, sizeof(*vm)) == 0)
|
||||
return 0;
|
||||
|
||||
if (memcmp(&omap_dss_ntsc_timings, timings, sizeof(*timings)) == 0)
|
||||
if (memcmp(&omap_dss_ntsc_vm, vm, sizeof(*vm)) == 0)
|
||||
return 0;
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static void venc_get_timings(struct omap_dss_device *dssdev,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
mutex_lock(&venc.venc_lock);
|
||||
|
||||
*timings = venc.timings;
|
||||
*vm = venc.vm;
|
||||
|
||||
mutex_unlock(&venc.venc_lock);
|
||||
}
|
||||
|
@ -596,7 +595,7 @@ static int venc_set_wss(struct omap_dss_device *dssdev, u32 wss)
|
|||
|
||||
mutex_lock(&venc.venc_lock);
|
||||
|
||||
config = venc_timings_to_config(&venc.timings);
|
||||
config = venc_timings_to_config(&venc.vm);
|
||||
|
||||
/* Invert due to VENC_L21_WC_CTL:INV=1 */
|
||||
venc.wss_data = (wss ^ 0xfffff) << 8;
|
||||
|
|
|
@ -118,11 +118,11 @@ static int omap_connector_get_modes(struct drm_connector *connector)
|
|||
kfree(edid);
|
||||
} else {
|
||||
struct drm_display_mode *mode = drm_mode_create(dev);
|
||||
struct videomode timings = {0};
|
||||
struct videomode vm = {0};
|
||||
|
||||
dssdrv->get_timings(dssdev, &timings);
|
||||
dssdrv->get_timings(dssdev, &vm);
|
||||
|
||||
drm_display_mode_from_videomode(&timings, mode);
|
||||
drm_display_mode_from_videomode(&vm, mode);
|
||||
|
||||
mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
|
||||
drm_mode_set_name(mode);
|
||||
|
@ -140,14 +140,14 @@ static int omap_connector_mode_valid(struct drm_connector *connector,
|
|||
struct omap_connector *omap_connector = to_omap_connector(connector);
|
||||
struct omap_dss_device *dssdev = omap_connector->dssdev;
|
||||
struct omap_dss_driver *dssdrv = dssdev->driver;
|
||||
struct videomode timings = {0};
|
||||
struct videomode vm = {0};
|
||||
struct drm_device *dev = connector->dev;
|
||||
struct drm_display_mode *new_mode;
|
||||
int r, ret = MODE_BAD;
|
||||
|
||||
drm_display_mode_to_videomode(mode, &timings);
|
||||
timings.flags |= DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
|
||||
DISPLAY_FLAGS_SYNC_NEGEDGE;
|
||||
drm_display_mode_to_videomode(mode, &vm);
|
||||
vm.flags |= DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
|
||||
DISPLAY_FLAGS_SYNC_NEGEDGE;
|
||||
mode->vrefresh = drm_mode_vrefresh(mode);
|
||||
|
||||
/*
|
||||
|
@ -156,13 +156,13 @@ static int omap_connector_mode_valid(struct drm_connector *connector,
|
|||
* panel's timings
|
||||
*/
|
||||
if (dssdrv->check_timings) {
|
||||
r = dssdrv->check_timings(dssdev, &timings);
|
||||
r = dssdrv->check_timings(dssdev, &vm);
|
||||
} else {
|
||||
struct videomode t = {0};
|
||||
|
||||
dssdrv->get_timings(dssdev, &t);
|
||||
|
||||
if (memcmp(&timings, &t, sizeof(struct videomode)))
|
||||
if (memcmp(&vm, &t, sizeof(struct videomode)))
|
||||
r = -EINVAL;
|
||||
else
|
||||
r = 0;
|
||||
|
@ -171,7 +171,7 @@ static int omap_connector_mode_valid(struct drm_connector *connector,
|
|||
if (!r) {
|
||||
/* check if vrefresh is still valid */
|
||||
new_mode = drm_mode_duplicate(dev, mode);
|
||||
new_mode->clock = timings.pixelclock / 1000;
|
||||
new_mode->clock = vm.pixelclock / 1000;
|
||||
new_mode->vrefresh = 0;
|
||||
if (mode->vrefresh == drm_mode_vrefresh(new_mode))
|
||||
ret = MODE_OK;
|
||||
|
|
|
@ -34,7 +34,7 @@ struct omap_crtc {
|
|||
const char *name;
|
||||
enum omap_channel channel;
|
||||
|
||||
struct videomode timings;
|
||||
struct videomode vm;
|
||||
|
||||
struct omap_drm_irq vblank_irq;
|
||||
struct omap_drm_irq error_irq;
|
||||
|
@ -59,7 +59,7 @@ uint32_t pipe2vbl(struct drm_crtc *crtc)
|
|||
struct videomode *omap_crtc_timings(struct drm_crtc *crtc)
|
||||
{
|
||||
struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
|
||||
return &omap_crtc->timings;
|
||||
return &omap_crtc->vm;
|
||||
}
|
||||
|
||||
enum omap_channel omap_crtc_channel(struct drm_crtc *crtc)
|
||||
|
@ -201,7 +201,7 @@ static int omap_crtc_dss_enable(enum omap_channel channel)
|
|||
|
||||
dispc_mgr_setup(omap_crtc->channel, &info);
|
||||
dispc_mgr_set_timings(omap_crtc->channel,
|
||||
&omap_crtc->timings);
|
||||
&omap_crtc->vm);
|
||||
omap_crtc_set_enabled(&omap_crtc->base, true);
|
||||
|
||||
return 0;
|
||||
|
@ -215,11 +215,11 @@ static void omap_crtc_dss_disable(enum omap_channel channel)
|
|||
}
|
||||
|
||||
static void omap_crtc_dss_set_timings(enum omap_channel channel,
|
||||
const struct videomode *timings)
|
||||
const struct videomode *vm)
|
||||
{
|
||||
struct omap_crtc *omap_crtc = omap_crtcs[channel];
|
||||
DBG("%s", omap_crtc->name);
|
||||
omap_crtc->timings = *timings;
|
||||
omap_crtc->vm = *vm;
|
||||
}
|
||||
|
||||
static void omap_crtc_dss_set_lcd_config(enum omap_channel channel,
|
||||
|
@ -369,10 +369,10 @@ static void omap_crtc_mode_set_nofb(struct drm_crtc *crtc)
|
|||
mode->vdisplay, mode->vsync_start, mode->vsync_end, mode->vtotal,
|
||||
mode->type, mode->flags);
|
||||
|
||||
drm_display_mode_to_videomode(mode, &omap_crtc->timings);
|
||||
omap_crtc->timings.flags |= DISPLAY_FLAGS_DE_HIGH |
|
||||
DISPLAY_FLAGS_PIXDATA_POSEDGE |
|
||||
DISPLAY_FLAGS_SYNC_NEGEDGE;
|
||||
drm_display_mode_to_videomode(mode, &omap_crtc->vm);
|
||||
omap_crtc->vm.flags |= DISPLAY_FLAGS_DE_HIGH |
|
||||
DISPLAY_FLAGS_PIXDATA_POSEDGE |
|
||||
DISPLAY_FLAGS_SYNC_NEGEDGE;
|
||||
}
|
||||
|
||||
static int omap_crtc_atomic_check(struct drm_crtc *crtc,
|
||||
|
|
|
@ -102,7 +102,7 @@ static void omap_encoder_disable(struct drm_encoder *encoder)
|
|||
|
||||
static int omap_encoder_update(struct drm_encoder *encoder,
|
||||
enum omap_channel channel,
|
||||
struct videomode *timings)
|
||||
struct videomode *vm)
|
||||
{
|
||||
struct drm_device *dev = encoder->dev;
|
||||
struct omap_encoder *omap_encoder = to_omap_encoder(encoder);
|
||||
|
@ -111,13 +111,13 @@ static int omap_encoder_update(struct drm_encoder *encoder,
|
|||
int ret;
|
||||
|
||||
if (dssdrv->check_timings) {
|
||||
ret = dssdrv->check_timings(dssdev, timings);
|
||||
ret = dssdrv->check_timings(dssdev, vm);
|
||||
} else {
|
||||
struct videomode t = {0};
|
||||
|
||||
dssdrv->get_timings(dssdev, &t);
|
||||
|
||||
if (memcmp(timings, &t, sizeof(struct videomode)))
|
||||
if (memcmp(vm, &t, sizeof(struct videomode)))
|
||||
ret = -EINVAL;
|
||||
else
|
||||
ret = 0;
|
||||
|
@ -129,7 +129,7 @@ static int omap_encoder_update(struct drm_encoder *encoder,
|
|||
}
|
||||
|
||||
if (dssdrv->set_timings)
|
||||
dssdrv->set_timings(dssdev, timings);
|
||||
dssdrv->set_timings(dssdev, vm);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue