drm/omap: displays: Remove input omap_dss_device from panel data
All connectors, encoders and panels store a pointer to their input omap_dss_device in the panel driver data structure. This duplicates the src field in the omap_dss_device structure. Remove the private copy and use the src field. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:

committed by
Tomi Valkeinen

parent
fb5571717c
commit
7269fde4e8
@@ -41,7 +41,6 @@
|
||||
|
||||
struct panel_drv_data {
|
||||
struct omap_dss_device dssdev;
|
||||
struct omap_dss_device *in;
|
||||
|
||||
struct videomode vm;
|
||||
|
||||
@@ -142,11 +141,11 @@ static void hw_guard_wait(struct panel_drv_data *ddata)
|
||||
|
||||
static int dsicm_dcs_read_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 *data)
|
||||
{
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
int r;
|
||||
u8 buf[1];
|
||||
|
||||
r = in->ops->dsi.dcs_read(in, ddata->channel, dcs_cmd, buf, 1);
|
||||
r = src->ops->dsi.dcs_read(src, ddata->channel, dcs_cmd, buf, 1);
|
||||
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -158,29 +157,30 @@ static int dsicm_dcs_read_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 *data)
|
||||
|
||||
static int dsicm_dcs_write_0(struct panel_drv_data *ddata, u8 dcs_cmd)
|
||||
{
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
return in->ops->dsi.dcs_write(in, ddata->channel, &dcs_cmd, 1);
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
|
||||
return src->ops->dsi.dcs_write(src, ddata->channel, &dcs_cmd, 1);
|
||||
}
|
||||
|
||||
static int dsicm_dcs_write_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 param)
|
||||
{
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
u8 buf[2] = { dcs_cmd, param };
|
||||
|
||||
return in->ops->dsi.dcs_write(in, ddata->channel, buf, 2);
|
||||
return src->ops->dsi.dcs_write(src, ddata->channel, buf, 2);
|
||||
}
|
||||
|
||||
static int dsicm_sleep_in(struct panel_drv_data *ddata)
|
||||
|
||||
{
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
u8 cmd;
|
||||
int r;
|
||||
|
||||
hw_guard_wait(ddata);
|
||||
|
||||
cmd = MIPI_DCS_ENTER_SLEEP_MODE;
|
||||
r = in->ops->dsi.dcs_write_nosync(in, ddata->channel, &cmd, 1);
|
||||
r = src->ops->dsi.dcs_write_nosync(src, ddata->channel, &cmd, 1);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
@@ -228,7 +228,7 @@ static int dsicm_get_id(struct panel_drv_data *ddata, u8 *id1, u8 *id2, u8 *id3)
|
||||
static int dsicm_set_update_window(struct panel_drv_data *ddata,
|
||||
u16 x, u16 y, u16 w, u16 h)
|
||||
{
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
int r;
|
||||
u16 x1 = x;
|
||||
u16 x2 = x + w - 1;
|
||||
@@ -242,7 +242,7 @@ static int dsicm_set_update_window(struct panel_drv_data *ddata,
|
||||
buf[3] = (x2 >> 8) & 0xff;
|
||||
buf[4] = (x2 >> 0) & 0xff;
|
||||
|
||||
r = in->ops->dsi.dcs_write_nosync(in, ddata->channel, buf, sizeof(buf));
|
||||
r = src->ops->dsi.dcs_write_nosync(src, ddata->channel, buf, sizeof(buf));
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
@@ -252,11 +252,11 @@ static int dsicm_set_update_window(struct panel_drv_data *ddata,
|
||||
buf[3] = (y2 >> 8) & 0xff;
|
||||
buf[4] = (y2 >> 0) & 0xff;
|
||||
|
||||
r = in->ops->dsi.dcs_write_nosync(in, ddata->channel, buf, sizeof(buf));
|
||||
r = src->ops->dsi.dcs_write_nosync(src, ddata->channel, buf, sizeof(buf));
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
in->ops->dsi.bta_sync(in, ddata->channel);
|
||||
src->ops->dsi.bta_sync(src, ddata->channel);
|
||||
|
||||
return r;
|
||||
}
|
||||
@@ -275,7 +275,7 @@ static void dsicm_cancel_ulps_work(struct panel_drv_data *ddata)
|
||||
|
||||
static int dsicm_enter_ulps(struct panel_drv_data *ddata)
|
||||
{
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
int r;
|
||||
|
||||
if (ddata->ulps_enabled)
|
||||
@@ -290,7 +290,7 @@ static int dsicm_enter_ulps(struct panel_drv_data *ddata)
|
||||
if (ddata->ext_te_gpio)
|
||||
disable_irq(gpiod_to_irq(ddata->ext_te_gpio));
|
||||
|
||||
in->ops->dsi.disable(in, false, true);
|
||||
src->ops->dsi.disable(src, false, true);
|
||||
|
||||
ddata->ulps_enabled = true;
|
||||
|
||||
@@ -309,19 +309,19 @@ err:
|
||||
|
||||
static int dsicm_exit_ulps(struct panel_drv_data *ddata)
|
||||
{
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
int r;
|
||||
|
||||
if (!ddata->ulps_enabled)
|
||||
return 0;
|
||||
|
||||
r = in->ops->enable(in);
|
||||
r = src->ops->enable(src);
|
||||
if (r) {
|
||||
dev_err(&ddata->pdev->dev, "failed to enable DSI\n");
|
||||
goto err1;
|
||||
}
|
||||
|
||||
in->ops->dsi.enable_hs(in, ddata->channel, true);
|
||||
src->ops->dsi.enable_hs(src, ddata->channel, true);
|
||||
|
||||
r = _dsicm_enable_te(ddata, true);
|
||||
if (r) {
|
||||
@@ -366,7 +366,7 @@ static int dsicm_wake_up(struct panel_drv_data *ddata)
|
||||
static int dsicm_bl_update_status(struct backlight_device *dev)
|
||||
{
|
||||
struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
int r = 0;
|
||||
int level;
|
||||
|
||||
@@ -381,13 +381,13 @@ static int dsicm_bl_update_status(struct backlight_device *dev)
|
||||
mutex_lock(&ddata->lock);
|
||||
|
||||
if (ddata->enabled) {
|
||||
in->ops->dsi.bus_lock(in);
|
||||
src->ops->dsi.bus_lock(src);
|
||||
|
||||
r = dsicm_wake_up(ddata);
|
||||
if (!r)
|
||||
r = dsicm_dcs_write_1(ddata, DCS_BRIGHTNESS, level);
|
||||
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
}
|
||||
|
||||
mutex_unlock(&ddata->lock);
|
||||
@@ -414,21 +414,21 @@ static ssize_t dsicm_num_errors_show(struct device *dev,
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
struct panel_drv_data *ddata = platform_get_drvdata(pdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
u8 errors = 0;
|
||||
int r;
|
||||
|
||||
mutex_lock(&ddata->lock);
|
||||
|
||||
if (ddata->enabled) {
|
||||
in->ops->dsi.bus_lock(in);
|
||||
src->ops->dsi.bus_lock(src);
|
||||
|
||||
r = dsicm_wake_up(ddata);
|
||||
if (!r)
|
||||
r = dsicm_dcs_read_1(ddata, DCS_READ_NUM_ERRORS,
|
||||
&errors);
|
||||
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
} else {
|
||||
r = -ENODEV;
|
||||
}
|
||||
@@ -446,20 +446,20 @@ static ssize_t dsicm_hw_revision_show(struct device *dev,
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
struct panel_drv_data *ddata = platform_get_drvdata(pdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
u8 id1, id2, id3;
|
||||
int r;
|
||||
|
||||
mutex_lock(&ddata->lock);
|
||||
|
||||
if (ddata->enabled) {
|
||||
in->ops->dsi.bus_lock(in);
|
||||
src->ops->dsi.bus_lock(src);
|
||||
|
||||
r = dsicm_wake_up(ddata);
|
||||
if (!r)
|
||||
r = dsicm_get_id(ddata, &id1, &id2, &id3);
|
||||
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
} else {
|
||||
r = -ENODEV;
|
||||
}
|
||||
@@ -478,7 +478,7 @@ static ssize_t dsicm_store_ulps(struct device *dev,
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
struct panel_drv_data *ddata = platform_get_drvdata(pdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
unsigned long t;
|
||||
int r;
|
||||
|
||||
@@ -489,14 +489,14 @@ static ssize_t dsicm_store_ulps(struct device *dev,
|
||||
mutex_lock(&ddata->lock);
|
||||
|
||||
if (ddata->enabled) {
|
||||
in->ops->dsi.bus_lock(in);
|
||||
src->ops->dsi.bus_lock(src);
|
||||
|
||||
if (t)
|
||||
r = dsicm_enter_ulps(ddata);
|
||||
else
|
||||
r = dsicm_wake_up(ddata);
|
||||
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
}
|
||||
|
||||
mutex_unlock(&ddata->lock);
|
||||
@@ -528,7 +528,7 @@ static ssize_t dsicm_store_ulps_timeout(struct device *dev,
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
struct panel_drv_data *ddata = platform_get_drvdata(pdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
unsigned long t;
|
||||
int r;
|
||||
|
||||
@@ -541,9 +541,9 @@ static ssize_t dsicm_store_ulps_timeout(struct device *dev,
|
||||
|
||||
if (ddata->enabled) {
|
||||
/* dsicm_wake_up will restart the timer */
|
||||
in->ops->dsi.bus_lock(in);
|
||||
src->ops->dsi.bus_lock(src);
|
||||
r = dsicm_wake_up(ddata);
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
}
|
||||
|
||||
mutex_unlock(&ddata->lock);
|
||||
@@ -603,7 +603,7 @@ static void dsicm_hw_reset(struct panel_drv_data *ddata)
|
||||
|
||||
static int dsicm_power_on(struct panel_drv_data *ddata)
|
||||
{
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
u8 id1, id2, id3;
|
||||
int r;
|
||||
struct omap_dss_dsi_config dsi_config = {
|
||||
@@ -635,7 +635,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
|
||||
}
|
||||
|
||||
if (ddata->pin_config.num_pins > 0) {
|
||||
r = in->ops->dsi.configure_pins(in, &ddata->pin_config);
|
||||
r = src->ops->dsi.configure_pins(src, &ddata->pin_config);
|
||||
if (r) {
|
||||
dev_err(&ddata->pdev->dev,
|
||||
"failed to configure DSI pins\n");
|
||||
@@ -643,13 +643,13 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
|
||||
}
|
||||
}
|
||||
|
||||
r = in->ops->dsi.set_config(in, &dsi_config);
|
||||
r = src->ops->dsi.set_config(src, &dsi_config);
|
||||
if (r) {
|
||||
dev_err(&ddata->pdev->dev, "failed to configure DSI\n");
|
||||
goto err_vddi;
|
||||
}
|
||||
|
||||
r = in->ops->enable(in);
|
||||
r = src->ops->enable(src);
|
||||
if (r) {
|
||||
dev_err(&ddata->pdev->dev, "failed to enable DSI\n");
|
||||
goto err_vddi;
|
||||
@@ -657,7 +657,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
|
||||
|
||||
dsicm_hw_reset(ddata);
|
||||
|
||||
in->ops->dsi.enable_hs(in, ddata->channel, false);
|
||||
src->ops->dsi.enable_hs(src, ddata->channel, false);
|
||||
|
||||
r = dsicm_sleep_out(ddata);
|
||||
if (r)
|
||||
@@ -689,7 +689,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
|
||||
if (r)
|
||||
goto err;
|
||||
|
||||
r = in->ops->dsi.enable_video_output(in, ddata->channel);
|
||||
r = src->ops->dsi.enable_video_output(src, ddata->channel);
|
||||
if (r)
|
||||
goto err;
|
||||
|
||||
@@ -701,7 +701,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
|
||||
ddata->intro_printed = true;
|
||||
}
|
||||
|
||||
in->ops->dsi.enable_hs(in, ddata->channel, true);
|
||||
src->ops->dsi.enable_hs(src, ddata->channel, true);
|
||||
|
||||
return 0;
|
||||
err:
|
||||
@@ -709,7 +709,7 @@ err:
|
||||
|
||||
dsicm_hw_reset(ddata);
|
||||
|
||||
in->ops->dsi.disable(in, true, false);
|
||||
src->ops->dsi.disable(src, true, false);
|
||||
err_vddi:
|
||||
if (ddata->vddi)
|
||||
regulator_disable(ddata->vddi);
|
||||
@@ -722,10 +722,10 @@ err_vpnl:
|
||||
|
||||
static void dsicm_power_off(struct panel_drv_data *ddata)
|
||||
{
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
int r;
|
||||
|
||||
in->ops->dsi.disable_video_output(in, ddata->channel);
|
||||
src->ops->dsi.disable_video_output(src, ddata->channel);
|
||||
|
||||
r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_DISPLAY_OFF);
|
||||
if (!r)
|
||||
@@ -737,7 +737,7 @@ static void dsicm_power_off(struct panel_drv_data *ddata)
|
||||
dsicm_hw_reset(ddata);
|
||||
}
|
||||
|
||||
in->ops->dsi.disable(in, true, false);
|
||||
src->ops->dsi.disable(src, true, false);
|
||||
|
||||
if (ddata->vddi)
|
||||
regulator_disable(ddata->vddi);
|
||||
@@ -760,61 +760,59 @@ static int dsicm_connect(struct omap_dss_device *dssdev)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct device *dev = &ddata->pdev->dev;
|
||||
struct omap_dss_device *in;
|
||||
struct omap_dss_device *src;
|
||||
int r;
|
||||
|
||||
in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
|
||||
if (IS_ERR(in)) {
|
||||
src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
|
||||
if (IS_ERR(src)) {
|
||||
dev_err(dssdev->dev, "failed to find video source\n");
|
||||
return PTR_ERR(in);
|
||||
return PTR_ERR(src);
|
||||
}
|
||||
|
||||
r = omapdss_device_connect(in, dssdev);
|
||||
r = omapdss_device_connect(src, dssdev);
|
||||
if (r) {
|
||||
dev_err(dev, "Failed to connect to video source\n");
|
||||
goto err_connect;
|
||||
}
|
||||
|
||||
r = in->ops->dsi.request_vc(in, &ddata->channel);
|
||||
r = src->ops->dsi.request_vc(src, &ddata->channel);
|
||||
if (r) {
|
||||
dev_err(dev, "failed to get virtual channel\n");
|
||||
goto err_req_vc;
|
||||
}
|
||||
|
||||
r = in->ops->dsi.set_vc_id(in, ddata->channel, TCH);
|
||||
r = src->ops->dsi.set_vc_id(src, ddata->channel, TCH);
|
||||
if (r) {
|
||||
dev_err(dev, "failed to set VC_ID\n");
|
||||
goto err_vc_id;
|
||||
}
|
||||
|
||||
ddata->in = in;
|
||||
return 0;
|
||||
|
||||
err_vc_id:
|
||||
in->ops->dsi.release_vc(in, ddata->channel);
|
||||
src->ops->dsi.release_vc(src, ddata->channel);
|
||||
err_req_vc:
|
||||
omapdss_device_disconnect(in, dssdev);
|
||||
omapdss_device_disconnect(src, dssdev);
|
||||
err_connect:
|
||||
omap_dss_put_device(in);
|
||||
omap_dss_put_device(src);
|
||||
return r;
|
||||
}
|
||||
|
||||
static void dsicm_disconnect(struct omap_dss_device *dssdev)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = dssdev->src;
|
||||
|
||||
in->ops->dsi.release_vc(in, ddata->channel);
|
||||
omapdss_device_disconnect(in, dssdev);
|
||||
src->ops->dsi.release_vc(src, ddata->channel);
|
||||
omapdss_device_disconnect(src, dssdev);
|
||||
|
||||
omap_dss_put_device(in);
|
||||
ddata->in = NULL;
|
||||
omap_dss_put_device(src);
|
||||
}
|
||||
|
||||
static int dsicm_enable(struct omap_dss_device *dssdev)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = dssdev->src;
|
||||
int r;
|
||||
|
||||
dev_dbg(&ddata->pdev->dev, "enable\n");
|
||||
@@ -831,11 +829,11 @@ static int dsicm_enable(struct omap_dss_device *dssdev)
|
||||
goto err;
|
||||
}
|
||||
|
||||
in->ops->dsi.bus_lock(in);
|
||||
src->ops->dsi.bus_lock(src);
|
||||
|
||||
r = dsicm_power_on(ddata);
|
||||
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
|
||||
if (r)
|
||||
goto err;
|
||||
@@ -856,7 +854,7 @@ err:
|
||||
static void dsicm_disable(struct omap_dss_device *dssdev)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = dssdev->src;
|
||||
int r;
|
||||
|
||||
dev_dbg(&ddata->pdev->dev, "disable\n");
|
||||
@@ -867,7 +865,7 @@ static void dsicm_disable(struct omap_dss_device *dssdev)
|
||||
|
||||
dsicm_cancel_ulps_work(ddata);
|
||||
|
||||
in->ops->dsi.bus_lock(in);
|
||||
src->ops->dsi.bus_lock(src);
|
||||
|
||||
if (omapdss_device_is_enabled(dssdev)) {
|
||||
r = dsicm_wake_up(ddata);
|
||||
@@ -875,7 +873,7 @@ static void dsicm_disable(struct omap_dss_device *dssdev)
|
||||
dsicm_power_off(ddata);
|
||||
}
|
||||
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
|
||||
dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
|
||||
|
||||
@@ -885,16 +883,16 @@ static void dsicm_disable(struct omap_dss_device *dssdev)
|
||||
static void dsicm_framedone_cb(int err, void *data)
|
||||
{
|
||||
struct panel_drv_data *ddata = data;
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
|
||||
dev_dbg(&ddata->pdev->dev, "framedone, err %d\n", err);
|
||||
in->ops->dsi.bus_unlock(ddata->in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
}
|
||||
|
||||
static irqreturn_t dsicm_te_isr(int irq, void *data)
|
||||
{
|
||||
struct panel_drv_data *ddata = data;
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
int old;
|
||||
int r;
|
||||
|
||||
@@ -903,7 +901,7 @@ static irqreturn_t dsicm_te_isr(int irq, void *data)
|
||||
if (old) {
|
||||
cancel_delayed_work(&ddata->te_timeout_work);
|
||||
|
||||
r = in->ops->dsi.update(in, ddata->channel, dsicm_framedone_cb,
|
||||
r = src->ops->dsi.update(src, ddata->channel, dsicm_framedone_cb,
|
||||
ddata);
|
||||
if (r)
|
||||
goto err;
|
||||
@@ -912,7 +910,7 @@ static irqreturn_t dsicm_te_isr(int irq, void *data)
|
||||
return IRQ_HANDLED;
|
||||
err:
|
||||
dev_err(&ddata->pdev->dev, "start update failed\n");
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -920,25 +918,25 @@ static void dsicm_te_timeout_work_callback(struct work_struct *work)
|
||||
{
|
||||
struct panel_drv_data *ddata = container_of(work, struct panel_drv_data,
|
||||
te_timeout_work.work);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
|
||||
dev_err(&ddata->pdev->dev, "TE not received for 250ms!\n");
|
||||
|
||||
atomic_set(&ddata->do_update, 0);
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
}
|
||||
|
||||
static int dsicm_update(struct omap_dss_device *dssdev,
|
||||
u16 x, u16 y, u16 w, u16 h)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = dssdev->src;
|
||||
int r;
|
||||
|
||||
dev_dbg(&ddata->pdev->dev, "update %d, %d, %d x %d\n", x, y, w, h);
|
||||
|
||||
mutex_lock(&ddata->lock);
|
||||
in->ops->dsi.bus_lock(in);
|
||||
src->ops->dsi.bus_lock(src);
|
||||
|
||||
r = dsicm_wake_up(ddata);
|
||||
if (r)
|
||||
@@ -960,17 +958,17 @@ static int dsicm_update(struct omap_dss_device *dssdev,
|
||||
msecs_to_jiffies(250));
|
||||
atomic_set(&ddata->do_update, 1);
|
||||
} else {
|
||||
r = in->ops->dsi.update(in, ddata->channel, dsicm_framedone_cb,
|
||||
r = src->ops->dsi.update(src, ddata->channel, dsicm_framedone_cb,
|
||||
ddata);
|
||||
if (r)
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* note: no bus_unlock here. unlock is in framedone_cb */
|
||||
/* note: no bus_unlock here. unlock is src framedone_cb */
|
||||
mutex_unlock(&ddata->lock);
|
||||
return 0;
|
||||
err:
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
mutex_unlock(&ddata->lock);
|
||||
return r;
|
||||
}
|
||||
@@ -978,13 +976,13 @@ err:
|
||||
static int dsicm_sync(struct omap_dss_device *dssdev)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = dssdev->src;
|
||||
|
||||
dev_dbg(&ddata->pdev->dev, "sync\n");
|
||||
|
||||
mutex_lock(&ddata->lock);
|
||||
in->ops->dsi.bus_lock(in);
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_lock(src);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
mutex_unlock(&ddata->lock);
|
||||
|
||||
dev_dbg(&ddata->pdev->dev, "sync done\n");
|
||||
@@ -994,7 +992,7 @@ static int dsicm_sync(struct omap_dss_device *dssdev)
|
||||
|
||||
static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable)
|
||||
{
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = ddata->dssdev.src;
|
||||
int r;
|
||||
|
||||
if (enable)
|
||||
@@ -1003,7 +1001,7 @@ static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable)
|
||||
r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_TEAR_OFF);
|
||||
|
||||
if (!ddata->ext_te_gpio)
|
||||
in->ops->dsi.enable_te(in, enable);
|
||||
src->ops->dsi.enable_te(src, enable);
|
||||
|
||||
/* possible panel bug */
|
||||
msleep(100);
|
||||
@@ -1014,7 +1012,7 @@ static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable)
|
||||
static int dsicm_enable_te(struct omap_dss_device *dssdev, bool enable)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = dssdev->src;
|
||||
int r;
|
||||
|
||||
mutex_lock(&ddata->lock);
|
||||
@@ -1022,7 +1020,7 @@ static int dsicm_enable_te(struct omap_dss_device *dssdev, bool enable)
|
||||
if (ddata->te_enabled == enable)
|
||||
goto end;
|
||||
|
||||
in->ops->dsi.bus_lock(in);
|
||||
src->ops->dsi.bus_lock(src);
|
||||
|
||||
if (ddata->enabled) {
|
||||
r = dsicm_wake_up(ddata);
|
||||
@@ -1036,13 +1034,13 @@ static int dsicm_enable_te(struct omap_dss_device *dssdev, bool enable)
|
||||
|
||||
ddata->te_enabled = enable;
|
||||
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
end:
|
||||
mutex_unlock(&ddata->lock);
|
||||
|
||||
return 0;
|
||||
err:
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
mutex_unlock(&ddata->lock);
|
||||
|
||||
return r;
|
||||
@@ -1065,7 +1063,7 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
|
||||
u16 x, u16 y, u16 w, u16 h)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = dssdev->src;
|
||||
int r;
|
||||
int first = 1;
|
||||
int plen;
|
||||
@@ -1084,7 +1082,7 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
|
||||
size = min((u32)w * h * 3,
|
||||
ddata->vm.hactive * ddata->vm.vactive * 3);
|
||||
|
||||
in->ops->dsi.bus_lock(in);
|
||||
src->ops->dsi.bus_lock(src);
|
||||
|
||||
r = dsicm_wake_up(ddata);
|
||||
if (r)
|
||||
@@ -1100,7 +1098,7 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
|
||||
|
||||
dsicm_set_update_window(ddata, x, y, w, h);
|
||||
|
||||
r = in->ops->dsi.set_max_rx_packet_size(in, ddata->channel, plen);
|
||||
r = src->ops->dsi.set_max_rx_packet_size(src, ddata->channel, plen);
|
||||
if (r)
|
||||
goto err2;
|
||||
|
||||
@@ -1108,7 +1106,7 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
|
||||
u8 dcs_cmd = first ? 0x2e : 0x3e;
|
||||
first = 0;
|
||||
|
||||
r = in->ops->dsi.dcs_read(in, ddata->channel, dcs_cmd,
|
||||
r = src->ops->dsi.dcs_read(src, ddata->channel, dcs_cmd,
|
||||
buf + buf_used, size - buf_used);
|
||||
|
||||
if (r < 0) {
|
||||
@@ -1134,9 +1132,9 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
|
||||
r = buf_used;
|
||||
|
||||
err3:
|
||||
in->ops->dsi.set_max_rx_packet_size(in, ddata->channel, 1);
|
||||
src->ops->dsi.set_max_rx_packet_size(src, ddata->channel, 1);
|
||||
err2:
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
err1:
|
||||
mutex_unlock(&ddata->lock);
|
||||
return r;
|
||||
@@ -1147,7 +1145,7 @@ static void dsicm_ulps_work(struct work_struct *work)
|
||||
struct panel_drv_data *ddata = container_of(work, struct panel_drv_data,
|
||||
ulps_work.work);
|
||||
struct omap_dss_device *dssdev = &ddata->dssdev;
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
struct omap_dss_device *src = dssdev->src;
|
||||
|
||||
mutex_lock(&ddata->lock);
|
||||
|
||||
@@ -1156,11 +1154,11 @@ static void dsicm_ulps_work(struct work_struct *work)
|
||||
return;
|
||||
}
|
||||
|
||||
in->ops->dsi.bus_lock(in);
|
||||
src->ops->dsi.bus_lock(src);
|
||||
|
||||
dsicm_enter_ulps(ddata);
|
||||
|
||||
in->ops->dsi.bus_unlock(in);
|
||||
src->ops->dsi.bus_unlock(src);
|
||||
mutex_unlock(&ddata->lock);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user