OMAP: DSS2: Clean up stallmode and io pad mode selection
Split the function dispc_set_parallel_interface_mode() into 2 separate functions called dispc_mgr_set_io_pad_mode() and dispc_mgr_enable_stallmode(). The current function tries to set 2 different modes(io pad mode and stall mode) based on a parameter omap_parallel_interface_mode which loosely corresponds to the panel interface type. This isn't correct because a) these 2 modes are independent to some extent, b) we are currently configuring gpout0/gpout1 for DSI panels which is unnecessary, c) a DSI Video mode panel won't get configured correctly. Splitting the functions allows the interface driver to set these modes independently and hence allow more flexibility. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
b3b89c05cb
commit
569969d601
6 changed files with 36 additions and 41 deletions
|
@ -2205,46 +2205,41 @@ void dispc_mgr_set_tft_data_lines(enum omap_channel channel, u8 data_lines)
|
||||||
REG_FLD_MOD(DISPC_CONTROL, code, 9, 8);
|
REG_FLD_MOD(DISPC_CONTROL, code, 9, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispc_mgr_set_parallel_interface_mode(enum omap_channel channel,
|
void dispc_mgr_set_io_pad_mode(enum dss_io_pad_mode mode)
|
||||||
enum omap_parallel_interface_mode mode)
|
|
||||||
{
|
{
|
||||||
u32 l;
|
u32 l;
|
||||||
int stallmode;
|
int gpout0, gpout1;
|
||||||
int gpout0 = 1;
|
|
||||||
int gpout1;
|
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case OMAP_DSS_PARALLELMODE_BYPASS:
|
case DSS_IO_PAD_MODE_RESET:
|
||||||
stallmode = 0;
|
gpout0 = 0;
|
||||||
gpout1 = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OMAP_DSS_PARALLELMODE_RFBI:
|
|
||||||
stallmode = 1;
|
|
||||||
gpout1 = 0;
|
gpout1 = 0;
|
||||||
break;
|
break;
|
||||||
|
case DSS_IO_PAD_MODE_RFBI:
|
||||||
case OMAP_DSS_PARALLELMODE_DSI:
|
gpout0 = 1;
|
||||||
stallmode = 1;
|
gpout1 = 0;
|
||||||
|
break;
|
||||||
|
case DSS_IO_PAD_MODE_BYPASS:
|
||||||
|
gpout0 = 1;
|
||||||
gpout1 = 1;
|
gpout1 = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
BUG();
|
BUG();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (channel == OMAP_DSS_CHANNEL_LCD2) {
|
l = dispc_read_reg(DISPC_CONTROL);
|
||||||
l = dispc_read_reg(DISPC_CONTROL2);
|
l = FLD_MOD(l, gpout0, 15, 15);
|
||||||
l = FLD_MOD(l, stallmode, 11, 11);
|
l = FLD_MOD(l, gpout1, 16, 16);
|
||||||
dispc_write_reg(DISPC_CONTROL2, l);
|
dispc_write_reg(DISPC_CONTROL, l);
|
||||||
} else {
|
}
|
||||||
l = dispc_read_reg(DISPC_CONTROL);
|
|
||||||
l = FLD_MOD(l, stallmode, 11, 11);
|
void dispc_mgr_enable_stallmode(enum omap_channel channel, bool enable)
|
||||||
l = FLD_MOD(l, gpout0, 15, 15);
|
{
|
||||||
l = FLD_MOD(l, gpout1, 16, 16);
|
if (channel == OMAP_DSS_CHANNEL_LCD2)
|
||||||
dispc_write_reg(DISPC_CONTROL, l);
|
REG_FLD_MOD(DISPC_CONTROL2, enable, 11, 11);
|
||||||
}
|
else
|
||||||
|
REG_FLD_MOD(DISPC_CONTROL, enable, 11, 11);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool _dispc_lcd_timings_ok(int hsw, int hfp, int hbp,
|
static bool _dispc_lcd_timings_ok(int hsw, int hfp, int hbp,
|
||||||
|
|
|
@ -166,8 +166,9 @@ static void dpi_basic_init(struct omap_dss_device *dssdev)
|
||||||
|
|
||||||
is_tft = (dssdev->panel.config & OMAP_DSS_LCD_TFT) != 0;
|
is_tft = (dssdev->panel.config & OMAP_DSS_LCD_TFT) != 0;
|
||||||
|
|
||||||
dispc_mgr_set_parallel_interface_mode(dssdev->manager->id,
|
dispc_mgr_set_io_pad_mode(DSS_IO_PAD_MODE_BYPASS);
|
||||||
OMAP_DSS_PARALLELMODE_BYPASS);
|
dispc_mgr_enable_stallmode(dssdev->manager->id, false);
|
||||||
|
|
||||||
dispc_mgr_set_lcd_display_type(dssdev->manager->id, is_tft ?
|
dispc_mgr_set_lcd_display_type(dssdev->manager->id, is_tft ?
|
||||||
OMAP_DSS_LCD_DISPLAY_TFT : OMAP_DSS_LCD_DISPLAY_STN);
|
OMAP_DSS_LCD_DISPLAY_TFT : OMAP_DSS_LCD_DISPLAY_STN);
|
||||||
dispc_mgr_set_tft_data_lines(dssdev->manager->id,
|
dispc_mgr_set_tft_data_lines(dssdev->manager->id,
|
||||||
|
|
|
@ -4019,8 +4019,7 @@ static int dsi_display_init_dispc(struct omap_dss_device *dssdev)
|
||||||
dispc_mgr_set_lcd_display_type(dssdev->manager->id,
|
dispc_mgr_set_lcd_display_type(dssdev->manager->id,
|
||||||
OMAP_DSS_LCD_DISPLAY_TFT);
|
OMAP_DSS_LCD_DISPLAY_TFT);
|
||||||
|
|
||||||
dispc_mgr_set_parallel_interface_mode(dssdev->manager->id,
|
dispc_mgr_enable_stallmode(dssdev->manager->id, true);
|
||||||
OMAP_DSS_PARALLELMODE_DSI);
|
|
||||||
dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 1);
|
dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 1);
|
||||||
|
|
||||||
dispc_mgr_set_tft_data_lines(dssdev->manager->id,
|
dispc_mgr_set_tft_data_lines(dssdev->manager->id,
|
||||||
|
|
|
@ -97,10 +97,10 @@ extern unsigned int dss_debug;
|
||||||
#define FLD_MOD(orig, val, start, end) \
|
#define FLD_MOD(orig, val, start, end) \
|
||||||
(((orig) & ~FLD_MASK(start, end)) | FLD_VAL(val, start, end))
|
(((orig) & ~FLD_MASK(start, end)) | FLD_VAL(val, start, end))
|
||||||
|
|
||||||
enum omap_parallel_interface_mode {
|
enum dss_io_pad_mode {
|
||||||
OMAP_DSS_PARALLELMODE_BYPASS, /* MIPI DPI */
|
DSS_IO_PAD_MODE_RESET,
|
||||||
OMAP_DSS_PARALLELMODE_RFBI, /* MIPI DBI */
|
DSS_IO_PAD_MODE_RFBI,
|
||||||
OMAP_DSS_PARALLELMODE_DSI,
|
DSS_IO_PAD_MODE_BYPASS,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum dss_hdmi_venc_clk_source_select {
|
enum dss_hdmi_venc_clk_source_select {
|
||||||
|
@ -429,8 +429,8 @@ bool dispc_mgr_go_busy(enum omap_channel channel);
|
||||||
void dispc_mgr_go(enum omap_channel channel);
|
void dispc_mgr_go(enum omap_channel channel);
|
||||||
void dispc_mgr_enable(enum omap_channel channel, bool enable);
|
void dispc_mgr_enable(enum omap_channel channel, bool enable);
|
||||||
bool dispc_mgr_is_channel_enabled(enum omap_channel channel);
|
bool dispc_mgr_is_channel_enabled(enum omap_channel channel);
|
||||||
void dispc_mgr_set_parallel_interface_mode(enum omap_channel channel,
|
void dispc_mgr_set_io_pad_mode(enum dss_io_pad_mode mode);
|
||||||
enum omap_parallel_interface_mode mode);
|
void dispc_mgr_enable_stallmode(enum omap_channel channel, bool enable);
|
||||||
void dispc_mgr_set_tft_data_lines(enum omap_channel channel, u8 data_lines);
|
void dispc_mgr_set_tft_data_lines(enum omap_channel channel, u8 data_lines);
|
||||||
void dispc_mgr_set_lcd_display_type(enum omap_channel channel,
|
void dispc_mgr_set_lcd_display_type(enum omap_channel channel,
|
||||||
enum omap_lcd_display_type type);
|
enum omap_lcd_display_type type);
|
||||||
|
|
|
@ -868,8 +868,8 @@ int omapdss_rfbi_display_enable(struct omap_dss_device *dssdev)
|
||||||
dispc_mgr_set_lcd_display_type(dssdev->manager->id,
|
dispc_mgr_set_lcd_display_type(dssdev->manager->id,
|
||||||
OMAP_DSS_LCD_DISPLAY_TFT);
|
OMAP_DSS_LCD_DISPLAY_TFT);
|
||||||
|
|
||||||
dispc_mgr_set_parallel_interface_mode(dssdev->manager->id,
|
dispc_mgr_set_io_pad_mode(DSS_IO_PAD_MODE_RFBI);
|
||||||
OMAP_DSS_PARALLELMODE_RFBI);
|
dispc_mgr_enable_stallmode(dssdev->manager->id, true);
|
||||||
|
|
||||||
dispc_mgr_set_tft_data_lines(dssdev->manager->id, dssdev->ctrl.pixel_size);
|
dispc_mgr_set_tft_data_lines(dssdev->manager->id, dssdev->ctrl.pixel_size);
|
||||||
|
|
||||||
|
|
|
@ -35,8 +35,8 @@ static struct {
|
||||||
static void sdi_basic_init(struct omap_dss_device *dssdev)
|
static void sdi_basic_init(struct omap_dss_device *dssdev)
|
||||||
|
|
||||||
{
|
{
|
||||||
dispc_mgr_set_parallel_interface_mode(dssdev->manager->id,
|
dispc_mgr_set_io_pad_mode(DSS_IO_PAD_MODE_BYPASS);
|
||||||
OMAP_DSS_PARALLELMODE_BYPASS);
|
dispc_mgr_enable_stallmode(dssdev->manager->id, false);
|
||||||
|
|
||||||
dispc_mgr_set_lcd_display_type(dssdev->manager->id,
|
dispc_mgr_set_lcd_display_type(dssdev->manager->id,
|
||||||
OMAP_DSS_LCD_DISPLAY_TFT);
|
OMAP_DSS_LCD_DISPLAY_TFT);
|
||||||
|
|
Loading…
Add table
Reference in a new issue