OMAP: DSS2: DSI: Improve dsi_mux_pads parameters
dsi_mux_pads() needs to know about the DSI HW module and the DSI lanes used. Split the function into two, enable and disable, which take necessary arguments, and add empty implementations for both. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
4e6a0ab0f9
commit
5bc416cba1
3 changed files with 47 additions and 12 deletions
|
@ -74,6 +74,15 @@ static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initdata = {
|
||||||
{ "dss_hdmi", "omapdss_hdmi", -1 },
|
{ "dss_hdmi", "omapdss_hdmi", -1 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void omap_dsi_disable_pads(int dsi_id, unsigned lane_mask)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
int __init omap_display_init(struct omap_dss_board_info *board_data)
|
int __init omap_display_init(struct omap_dss_board_info *board_data)
|
||||||
{
|
{
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
@ -96,6 +105,11 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
|
||||||
oh_count = ARRAY_SIZE(omap4_dss_hwmod_data);
|
oh_count = ARRAY_SIZE(omap4_dss_hwmod_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (board_data->dsi_enable_pads == NULL)
|
||||||
|
board_data->dsi_enable_pads = omap_dsi_enable_pads;
|
||||||
|
if (board_data->dsi_disable_pads == NULL)
|
||||||
|
board_data->dsi_disable_pads = omap_dsi_disable_pads;
|
||||||
|
|
||||||
pdata.board_data = board_data;
|
pdata.board_data = board_data;
|
||||||
pdata.board_data->get_context_loss_count =
|
pdata.board_data->get_context_loss_count =
|
||||||
omap_pm_get_dev_context_loss_count;
|
omap_pm_get_dev_context_loss_count;
|
||||||
|
|
|
@ -274,7 +274,8 @@ struct dsi_data {
|
||||||
struct clk *dss_clk;
|
struct clk *dss_clk;
|
||||||
struct clk *sys_clk;
|
struct clk *sys_clk;
|
||||||
|
|
||||||
void (*dsi_mux_pads)(bool enable);
|
int (*enable_pads)(int dsi_id, unsigned lane_mask);
|
||||||
|
void (*disable_pads)(int dsi_id, unsigned lane_mask);
|
||||||
|
|
||||||
struct dsi_clock_info current_cinfo;
|
struct dsi_clock_info current_cinfo;
|
||||||
|
|
||||||
|
@ -2355,6 +2356,24 @@ static int dsi_cio_wait_tx_clk_esc_reset(struct omap_dss_device *dssdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned dsi_get_lane_mask(struct omap_dss_device *dssdev)
|
||||||
|
{
|
||||||
|
unsigned lanes = 0;
|
||||||
|
|
||||||
|
if (dssdev->phy.dsi.clk_lane != 0)
|
||||||
|
lanes |= 1 << (dssdev->phy.dsi.clk_lane - 1);
|
||||||
|
if (dssdev->phy.dsi.data1_lane != 0)
|
||||||
|
lanes |= 1 << (dssdev->phy.dsi.data1_lane - 1);
|
||||||
|
if (dssdev->phy.dsi.data2_lane != 0)
|
||||||
|
lanes |= 1 << (dssdev->phy.dsi.data2_lane - 1);
|
||||||
|
if (dssdev->phy.dsi.data3_lane != 0)
|
||||||
|
lanes |= 1 << (dssdev->phy.dsi.data3_lane - 1);
|
||||||
|
if (dssdev->phy.dsi.data4_lane != 0)
|
||||||
|
lanes |= 1 << (dssdev->phy.dsi.data4_lane - 1);
|
||||||
|
|
||||||
|
return lanes;
|
||||||
|
}
|
||||||
|
|
||||||
static int dsi_cio_init(struct omap_dss_device *dssdev)
|
static int dsi_cio_init(struct omap_dss_device *dssdev)
|
||||||
{
|
{
|
||||||
struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
|
struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
|
||||||
|
@ -2365,8 +2384,9 @@ static int dsi_cio_init(struct omap_dss_device *dssdev)
|
||||||
|
|
||||||
DSSDBGF();
|
DSSDBGF();
|
||||||
|
|
||||||
if (dsi->dsi_mux_pads)
|
r = dsi->enable_pads(dsidev->id, dsi_get_lane_mask(dssdev));
|
||||||
dsi->dsi_mux_pads(true);
|
if (r)
|
||||||
|
return r;
|
||||||
|
|
||||||
dsi_enable_scp_clk(dsidev);
|
dsi_enable_scp_clk(dsidev);
|
||||||
|
|
||||||
|
@ -2462,19 +2482,18 @@ static int dsi_cio_init(struct omap_dss_device *dssdev)
|
||||||
dsi_cio_disable_lane_override(dsidev);
|
dsi_cio_disable_lane_override(dsidev);
|
||||||
err_scp_clk_dom:
|
err_scp_clk_dom:
|
||||||
dsi_disable_scp_clk(dsidev);
|
dsi_disable_scp_clk(dsidev);
|
||||||
if (dsi->dsi_mux_pads)
|
dsi->disable_pads(dsidev->id, dsi_get_lane_mask(dssdev));
|
||||||
dsi->dsi_mux_pads(false);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dsi_cio_uninit(struct platform_device *dsidev)
|
static void dsi_cio_uninit(struct omap_dss_device *dssdev)
|
||||||
{
|
{
|
||||||
|
struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
|
||||||
struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
|
struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
|
||||||
|
|
||||||
dsi_cio_power(dsidev, DSI_COMPLEXIO_POWER_OFF);
|
dsi_cio_power(dsidev, DSI_COMPLEXIO_POWER_OFF);
|
||||||
dsi_disable_scp_clk(dsidev);
|
dsi_disable_scp_clk(dsidev);
|
||||||
if (dsi->dsi_mux_pads)
|
dsi->disable_pads(dsidev->id, dsi_get_lane_mask(dssdev));
|
||||||
dsi->dsi_mux_pads(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dsi_config_tx_fifo(struct platform_device *dsidev,
|
static void dsi_config_tx_fifo(struct platform_device *dsidev,
|
||||||
|
@ -4161,7 +4180,7 @@ static int dsi_display_init_dsi(struct omap_dss_device *dssdev)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
err3:
|
err3:
|
||||||
dsi_cio_uninit(dsidev);
|
dsi_cio_uninit(dssdev);
|
||||||
err2:
|
err2:
|
||||||
dss_select_dispc_clk_source(OMAP_DSS_CLK_SRC_FCK);
|
dss_select_dispc_clk_source(OMAP_DSS_CLK_SRC_FCK);
|
||||||
dss_select_dsi_clk_source(dsi_module, OMAP_DSS_CLK_SRC_FCK);
|
dss_select_dsi_clk_source(dsi_module, OMAP_DSS_CLK_SRC_FCK);
|
||||||
|
@ -4190,7 +4209,7 @@ static void dsi_display_uninit_dsi(struct omap_dss_device *dssdev,
|
||||||
|
|
||||||
dss_select_dispc_clk_source(OMAP_DSS_CLK_SRC_FCK);
|
dss_select_dispc_clk_source(OMAP_DSS_CLK_SRC_FCK);
|
||||||
dss_select_dsi_clk_source(dsi_module, OMAP_DSS_CLK_SRC_FCK);
|
dss_select_dsi_clk_source(dsi_module, OMAP_DSS_CLK_SRC_FCK);
|
||||||
dsi_cio_uninit(dsidev);
|
dsi_cio_uninit(dssdev);
|
||||||
dsi_pll_uninit(dsidev, disconnect_lanes);
|
dsi_pll_uninit(dsidev, disconnect_lanes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4481,7 +4500,8 @@ static int omap_dsihw_probe(struct platform_device *dsidev)
|
||||||
|
|
||||||
dss_plat_data = dsidev->dev.platform_data;
|
dss_plat_data = dsidev->dev.platform_data;
|
||||||
board_info = dss_plat_data->board_data;
|
board_info = dss_plat_data->board_data;
|
||||||
dsi->dsi_mux_pads = board_info->dsi_mux_pads;
|
dsi->enable_pads = board_info->dsi_enable_pads;
|
||||||
|
dsi->disable_pads = board_info->dsi_disable_pads;
|
||||||
|
|
||||||
spin_lock_init(&dsi->irq_lock);
|
spin_lock_init(&dsi->irq_lock);
|
||||||
spin_lock_init(&dsi->errors_lock);
|
spin_lock_init(&dsi->errors_lock);
|
||||||
|
|
|
@ -242,7 +242,8 @@ struct omap_dss_board_info {
|
||||||
int num_devices;
|
int num_devices;
|
||||||
struct omap_dss_device **devices;
|
struct omap_dss_device **devices;
|
||||||
struct omap_dss_device *default_device;
|
struct omap_dss_device *default_device;
|
||||||
void (*dsi_mux_pads)(bool enable);
|
int (*dsi_enable_pads)(int dsi_id, unsigned lane_mask);
|
||||||
|
void (*dsi_disable_pads)(int dsi_id, unsigned lane_mask);
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(CONFIG_OMAP2_DSS_MODULE) || defined(CONFIG_OMAP2_DSS)
|
#if defined(CONFIG_OMAP2_DSS_MODULE) || defined(CONFIG_OMAP2_DSS)
|
||||||
|
|
Loading…
Reference in a new issue