aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2013-09-25 07:40:06 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2013-12-30 09:14:15 -0500
commit558c73e26e8fadb4c1438af9d5277b4b3e8b5ba6 (patch)
treec5840038e7d6708fbf3f75894022694460a21305
parent303e4697e762dc92a40405f4e4b8aac02cd0d70b (diff)
OMAPDSS: DSI: fix fifosize
DSI has separate TX and RX fifos. However, the current code only has one field where the fifo size is stored, and the code for both TX and RX config write to the same field. This has not caused issues, as we've been using the same fifo sizes. Fix this bug by creating separate fields for TX and RX fifo sizes. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
-rw-r--r--drivers/video/omap2/dss/dsi.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index 6056b27cf73c..1cd3e47fd43f 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -297,7 +297,8 @@ struct dsi_data {
297 struct { 297 struct {
298 enum dsi_vc_source source; 298 enum dsi_vc_source source;
299 struct omap_dss_device *dssdev; 299 struct omap_dss_device *dssdev;
300 enum fifo_size fifo_size; 300 enum fifo_size tx_fifo_size;
301 enum fifo_size rx_fifo_size;
301 int vc_id; 302 int vc_id;
302 } vc[4]; 303 } vc[4];
303 304
@@ -2427,14 +2428,14 @@ static void dsi_config_tx_fifo(struct platform_device *dsidev,
2427 int add = 0; 2428 int add = 0;
2428 int i; 2429 int i;
2429 2430
2430 dsi->vc[0].fifo_size = size1; 2431 dsi->vc[0].tx_fifo_size = size1;
2431 dsi->vc[1].fifo_size = size2; 2432 dsi->vc[1].tx_fifo_size = size2;
2432 dsi->vc[2].fifo_size = size3; 2433 dsi->vc[2].tx_fifo_size = size3;
2433 dsi->vc[3].fifo_size = size4; 2434 dsi->vc[3].tx_fifo_size = size4;
2434 2435
2435 for (i = 0; i < 4; i++) { 2436 for (i = 0; i < 4; i++) {
2436 u8 v; 2437 u8 v;
2437 int size = dsi->vc[i].fifo_size; 2438 int size = dsi->vc[i].tx_fifo_size;
2438 2439
2439 if (add + size > 4) { 2440 if (add + size > 4) {
2440 DSSERR("Illegal FIFO configuration\n"); 2441 DSSERR("Illegal FIFO configuration\n");
@@ -2460,14 +2461,14 @@ static void dsi_config_rx_fifo(struct platform_device *dsidev,
2460 int add = 0; 2461 int add = 0;
2461 int i; 2462 int i;
2462 2463
2463 dsi->vc[0].fifo_size = size1; 2464 dsi->vc[0].rx_fifo_size = size1;
2464 dsi->vc[1].fifo_size = size2; 2465 dsi->vc[1].rx_fifo_size = size2;
2465 dsi->vc[2].fifo_size = size3; 2466 dsi->vc[2].rx_fifo_size = size3;
2466 dsi->vc[3].fifo_size = size4; 2467 dsi->vc[3].rx_fifo_size = size4;
2467 2468
2468 for (i = 0; i < 4; i++) { 2469 for (i = 0; i < 4; i++) {
2469 u8 v; 2470 u8 v;
2470 int size = dsi->vc[i].fifo_size; 2471 int size = dsi->vc[i].rx_fifo_size;
2471 2472
2472 if (add + size > 4) { 2473 if (add + size > 4) {
2473 DSSERR("Illegal FIFO configuration\n"); 2474 DSSERR("Illegal FIFO configuration\n");
@@ -2920,7 +2921,7 @@ static int dsi_vc_send_long(struct platform_device *dsidev, int channel,
2920 DSSDBG("dsi_vc_send_long, %d bytes\n", len); 2921 DSSDBG("dsi_vc_send_long, %d bytes\n", len);
2921 2922
2922 /* len + header */ 2923 /* len + header */
2923 if (dsi->vc[channel].fifo_size * 32 * 4 < len + 4) { 2924 if (dsi->vc[channel].tx_fifo_size * 32 * 4 < len + 4) {
2924 DSSERR("unable to send long packet: packet too long.\n"); 2925 DSSERR("unable to send long packet: packet too long.\n");
2925 return -EINVAL; 2926 return -EINVAL;
2926 } 2927 }