OMAP: DSS2: DSI: Get line buffer size from DSI_GNQ register
The line buffer sizes vary across DSI modules, create a function dsi_get_line_buf_size() using DSI_GNQ register to get the size of line buffer used for the DISPC video port data. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
75d7247c07
commit
0c65622b1f
|
@ -2036,6 +2036,37 @@ static inline int dsi_get_num_data_lanes_dssdev(struct omap_dss_device *dssdev)
|
|||
return num_data_lanes;
|
||||
}
|
||||
|
||||
static unsigned dsi_get_line_buf_size(struct platform_device *dsidev)
|
||||
{
|
||||
int val;
|
||||
|
||||
/* line buffer on OMAP3 is 1024 x 24bits */
|
||||
/* XXX: for some reason using full buffer size causes
|
||||
* considerable TX slowdown with update sizes that fill the
|
||||
* whole buffer */
|
||||
if (!dss_has_feature(FEAT_DSI_GNQ))
|
||||
return 1023 * 3;
|
||||
|
||||
val = REG_GET(dsidev, DSI_GNQ, 14, 12); /* VP1_LINE_BUFFER_SIZE */
|
||||
|
||||
switch (val) {
|
||||
case 1:
|
||||
return 512 * 3; /* 512x24 bits */
|
||||
case 2:
|
||||
return 682 * 3; /* 682x24 bits */
|
||||
case 3:
|
||||
return 853 * 3; /* 853x24 bits */
|
||||
case 4:
|
||||
return 1024 * 3; /* 1024x24 bits */
|
||||
case 5:
|
||||
return 1194 * 3; /* 1194x24 bits */
|
||||
case 6:
|
||||
return 1365 * 3; /* 1365x24 bits */
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
}
|
||||
|
||||
static void dsi_set_lane_config(struct omap_dss_device *dssdev)
|
||||
{
|
||||
struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
|
||||
|
@ -3771,10 +3802,7 @@ static void dsi_update_screen_dispc(struct omap_dss_device *dssdev,
|
|||
u32 l;
|
||||
int r;
|
||||
const unsigned channel = dsi->update_channel;
|
||||
/* line buffer is 1024 x 24bits */
|
||||
/* XXX: for some reason using full buffer size causes considerable TX
|
||||
* slowdown with update sizes that fill the whole buffer */
|
||||
const unsigned line_buf_size = 1023 * 3;
|
||||
const unsigned line_buf_size = dsi_get_line_buf_size(dsidev);
|
||||
|
||||
DSSDBG("dsi_update_screen_dispc(%d,%d %dx%d)\n",
|
||||
x, y, w, h);
|
||||
|
|
Loading…
Reference in a new issue