aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/omap2/displays/panel-taal.c120
-rw-r--r--drivers/video/omap2/dss/dsi.c48
-rw-r--r--include/video/omapdss.h35
3 files changed, 110 insertions, 93 deletions
diff --git a/drivers/video/omap2/displays/panel-taal.c b/drivers/video/omap2/displays/panel-taal.c
index be230b3ff875..90d79c0bc9f4 100644
--- a/drivers/video/omap2/displays/panel-taal.c
+++ b/drivers/video/omap2/displays/panel-taal.c
@@ -271,7 +271,7 @@ static int taal_dcs_read_1(struct taal_data *td, u8 dcs_cmd, u8 *data)
271 int r; 271 int r;
272 u8 buf[1]; 272 u8 buf[1];
273 273
274 r = dsi_vc_dcs_read(td->channel, dcs_cmd, buf, 1); 274 r = dsi_vc_dcs_read(td->dssdev, td->channel, dcs_cmd, buf, 1);
275 275
276 if (r < 0) 276 if (r < 0)
277 return r; 277 return r;
@@ -283,7 +283,7 @@ static int taal_dcs_read_1(struct taal_data *td, u8 dcs_cmd, u8 *data)
283 283
284static int taal_dcs_write_0(struct taal_data *td, u8 dcs_cmd) 284static int taal_dcs_write_0(struct taal_data *td, u8 dcs_cmd)
285{ 285{
286 return dsi_vc_dcs_write(td->channel, &dcs_cmd, 1); 286 return dsi_vc_dcs_write(td->dssdev, td->channel, &dcs_cmd, 1);
287} 287}
288 288
289static int taal_dcs_write_1(struct taal_data *td, u8 dcs_cmd, u8 param) 289static int taal_dcs_write_1(struct taal_data *td, u8 dcs_cmd, u8 param)
@@ -291,7 +291,7 @@ static int taal_dcs_write_1(struct taal_data *td, u8 dcs_cmd, u8 param)
291 u8 buf[2]; 291 u8 buf[2];
292 buf[0] = dcs_cmd; 292 buf[0] = dcs_cmd;
293 buf[1] = param; 293 buf[1] = param;
294 return dsi_vc_dcs_write(td->channel, buf, 2); 294 return dsi_vc_dcs_write(td->dssdev, td->channel, buf, 2);
295} 295}
296 296
297static int taal_sleep_in(struct taal_data *td) 297static int taal_sleep_in(struct taal_data *td)
@@ -303,7 +303,7 @@ static int taal_sleep_in(struct taal_data *td)
303 hw_guard_wait(td); 303 hw_guard_wait(td);
304 304
305 cmd = DCS_SLEEP_IN; 305 cmd = DCS_SLEEP_IN;
306 r = dsi_vc_dcs_write_nosync(td->channel, &cmd, 1); 306 r = dsi_vc_dcs_write_nosync(td->dssdev, td->channel, &cmd, 1);
307 if (r) 307 if (r)
308 return r; 308 return r;
309 309
@@ -409,7 +409,7 @@ static int taal_set_update_window(struct taal_data *td,
409 buf[3] = (x2 >> 8) & 0xff; 409 buf[3] = (x2 >> 8) & 0xff;
410 buf[4] = (x2 >> 0) & 0xff; 410 buf[4] = (x2 >> 0) & 0xff;
411 411
412 r = dsi_vc_dcs_write_nosync(td->channel, buf, sizeof(buf)); 412 r = dsi_vc_dcs_write_nosync(td->dssdev, td->channel, buf, sizeof(buf));
413 if (r) 413 if (r)
414 return r; 414 return r;
415 415
@@ -419,11 +419,11 @@ static int taal_set_update_window(struct taal_data *td,
419 buf[3] = (y2 >> 8) & 0xff; 419 buf[3] = (y2 >> 8) & 0xff;
420 buf[4] = (y2 >> 0) & 0xff; 420 buf[4] = (y2 >> 0) & 0xff;
421 421
422 r = dsi_vc_dcs_write_nosync(td->channel, buf, sizeof(buf)); 422 r = dsi_vc_dcs_write_nosync(td->dssdev, td->channel, buf, sizeof(buf));
423 if (r) 423 if (r)
424 return r; 424 return r;
425 425
426 dsi_vc_send_bta_sync(td->channel); 426 dsi_vc_send_bta_sync(td->dssdev, td->channel);
427 427
428 return r; 428 return r;
429} 429}
@@ -507,7 +507,7 @@ static int taal_exit_ulps(struct omap_dss_device *dssdev)
507 if (r) 507 if (r)
508 goto err; 508 goto err;
509 509
510 omapdss_dsi_vc_enable_hs(td->channel, true); 510 omapdss_dsi_vc_enable_hs(dssdev, td->channel, true);
511 511
512 r = _taal_enable_te(dssdev, true); 512 r = _taal_enable_te(dssdev, true);
513 if (r) 513 if (r)
@@ -565,13 +565,13 @@ static int taal_bl_update_status(struct backlight_device *dev)
565 565
566 if (td->use_dsi_bl) { 566 if (td->use_dsi_bl) {
567 if (td->enabled) { 567 if (td->enabled) {
568 dsi_bus_lock(); 568 dsi_bus_lock(dssdev);
569 569
570 r = taal_wake_up(dssdev); 570 r = taal_wake_up(dssdev);
571 if (!r) 571 if (!r)
572 r = taal_dcs_write_1(td, DCS_BRIGHTNESS, level); 572 r = taal_dcs_write_1(td, DCS_BRIGHTNESS, level);
573 573
574 dsi_bus_unlock(); 574 dsi_bus_unlock(dssdev);
575 } else { 575 } else {
576 r = 0; 576 r = 0;
577 } 577 }
@@ -632,13 +632,13 @@ static ssize_t taal_num_errors_show(struct device *dev,
632 mutex_lock(&td->lock); 632 mutex_lock(&td->lock);
633 633
634 if (td->enabled) { 634 if (td->enabled) {
635 dsi_bus_lock(); 635 dsi_bus_lock(dssdev);
636 636
637 r = taal_wake_up(dssdev); 637 r = taal_wake_up(dssdev);
638 if (!r) 638 if (!r)
639 r = taal_dcs_read_1(td, DCS_READ_NUM_ERRORS, &errors); 639 r = taal_dcs_read_1(td, DCS_READ_NUM_ERRORS, &errors);
640 640
641 dsi_bus_unlock(); 641 dsi_bus_unlock(dssdev);
642 } else { 642 } else {
643 r = -ENODEV; 643 r = -ENODEV;
644 } 644 }
@@ -662,13 +662,13 @@ static ssize_t taal_hw_revision_show(struct device *dev,
662 mutex_lock(&td->lock); 662 mutex_lock(&td->lock);
663 663
664 if (td->enabled) { 664 if (td->enabled) {
665 dsi_bus_lock(); 665 dsi_bus_lock(dssdev);
666 666
667 r = taal_wake_up(dssdev); 667 r = taal_wake_up(dssdev);
668 if (!r) 668 if (!r)
669 r = taal_get_id(td, &id1, &id2, &id3); 669 r = taal_get_id(td, &id1, &id2, &id3);
670 670
671 dsi_bus_unlock(); 671 dsi_bus_unlock(dssdev);
672 } else { 672 } else {
673 r = -ENODEV; 673 r = -ENODEV;
674 } 674 }
@@ -728,7 +728,7 @@ static ssize_t store_cabc_mode(struct device *dev,
728 mutex_lock(&td->lock); 728 mutex_lock(&td->lock);
729 729
730 if (td->enabled) { 730 if (td->enabled) {
731 dsi_bus_lock(); 731 dsi_bus_lock(dssdev);
732 732
733 if (!td->cabc_broken) { 733 if (!td->cabc_broken) {
734 r = taal_wake_up(dssdev); 734 r = taal_wake_up(dssdev);
@@ -740,7 +740,7 @@ static ssize_t store_cabc_mode(struct device *dev,
740 goto err; 740 goto err;
741 } 741 }
742 742
743 dsi_bus_unlock(); 743 dsi_bus_unlock(dssdev);
744 } 744 }
745 745
746 td->cabc_mode = i; 746 td->cabc_mode = i;
@@ -749,7 +749,7 @@ static ssize_t store_cabc_mode(struct device *dev,
749 749
750 return count; 750 return count;
751err: 751err:
752 dsi_bus_unlock(); 752 dsi_bus_unlock(dssdev);
753 mutex_unlock(&td->lock); 753 mutex_unlock(&td->lock);
754 return r; 754 return r;
755} 755}
@@ -825,14 +825,14 @@ static ssize_t taal_store_ulps(struct device *dev,
825 mutex_lock(&td->lock); 825 mutex_lock(&td->lock);
826 826
827 if (td->enabled) { 827 if (td->enabled) {
828 dsi_bus_lock(); 828 dsi_bus_lock(dssdev);
829 829
830 if (t) 830 if (t)
831 r = taal_enter_ulps(dssdev); 831 r = taal_enter_ulps(dssdev);
832 else 832 else
833 r = taal_wake_up(dssdev); 833 r = taal_wake_up(dssdev);
834 834
835 dsi_bus_unlock(); 835 dsi_bus_unlock(dssdev);
836 } 836 }
837 837
838 mutex_unlock(&td->lock); 838 mutex_unlock(&td->lock);
@@ -876,9 +876,9 @@ static ssize_t taal_store_ulps_timeout(struct device *dev,
876 876
877 if (td->enabled) { 877 if (td->enabled) {
878 /* taal_wake_up will restart the timer */ 878 /* taal_wake_up will restart the timer */
879 dsi_bus_lock(); 879 dsi_bus_lock(dssdev);
880 r = taal_wake_up(dssdev); 880 r = taal_wake_up(dssdev);
881 dsi_bus_unlock(); 881 dsi_bus_unlock(dssdev);
882 } 882 }
883 883
884 mutex_unlock(&td->lock); 884 mutex_unlock(&td->lock);
@@ -1165,7 +1165,7 @@ static int taal_power_on(struct omap_dss_device *dssdev)
1165 1165
1166 taal_hw_reset(dssdev); 1166 taal_hw_reset(dssdev);
1167 1167
1168 omapdss_dsi_vc_enable_hs(td->channel, false); 1168 omapdss_dsi_vc_enable_hs(dssdev, td->channel, false);
1169 1169
1170 r = taal_sleep_out(td); 1170 r = taal_sleep_out(td);
1171 if (r) 1171 if (r)
@@ -1222,7 +1222,7 @@ static int taal_power_on(struct omap_dss_device *dssdev)
1222 td->intro_printed = true; 1222 td->intro_printed = true;
1223 } 1223 }
1224 1224
1225 omapdss_dsi_vc_enable_hs(td->channel, true); 1225 omapdss_dsi_vc_enable_hs(dssdev, td->channel, true);
1226 1226
1227 return 0; 1227 return 0;
1228err: 1228err:
@@ -1281,11 +1281,11 @@ static int taal_enable(struct omap_dss_device *dssdev)
1281 goto err; 1281 goto err;
1282 } 1282 }
1283 1283
1284 dsi_bus_lock(); 1284 dsi_bus_lock(dssdev);
1285 1285
1286 r = taal_power_on(dssdev); 1286 r = taal_power_on(dssdev);
1287 1287
1288 dsi_bus_unlock(); 1288 dsi_bus_unlock(dssdev);
1289 1289
1290 if (r) 1290 if (r)
1291 goto err; 1291 goto err;
@@ -1314,14 +1314,14 @@ static void taal_disable(struct omap_dss_device *dssdev)
1314 taal_cancel_ulps_work(dssdev); 1314 taal_cancel_ulps_work(dssdev);
1315 taal_cancel_esd_work(dssdev); 1315 taal_cancel_esd_work(dssdev);
1316 1316
1317 dsi_bus_lock(); 1317 dsi_bus_lock(dssdev);
1318 1318
1319 if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) { 1319 if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
1320 taal_wake_up(dssdev); 1320 taal_wake_up(dssdev);
1321 taal_power_off(dssdev); 1321 taal_power_off(dssdev);
1322 } 1322 }
1323 1323
1324 dsi_bus_unlock(); 1324 dsi_bus_unlock(dssdev);
1325 1325
1326 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 1326 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
1327 1327
@@ -1345,13 +1345,13 @@ static int taal_suspend(struct omap_dss_device *dssdev)
1345 taal_cancel_ulps_work(dssdev); 1345 taal_cancel_ulps_work(dssdev);
1346 taal_cancel_esd_work(dssdev); 1346 taal_cancel_esd_work(dssdev);
1347 1347
1348 dsi_bus_lock(); 1348 dsi_bus_lock(dssdev);
1349 1349
1350 r = taal_wake_up(dssdev); 1350 r = taal_wake_up(dssdev);
1351 if (!r) 1351 if (!r)
1352 taal_power_off(dssdev); 1352 taal_power_off(dssdev);
1353 1353
1354 dsi_bus_unlock(); 1354 dsi_bus_unlock(dssdev);
1355 1355
1356 dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED; 1356 dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED;
1357 1357
@@ -1377,11 +1377,11 @@ static int taal_resume(struct omap_dss_device *dssdev)
1377 goto err; 1377 goto err;
1378 } 1378 }
1379 1379
1380 dsi_bus_lock(); 1380 dsi_bus_lock(dssdev);
1381 1381
1382 r = taal_power_on(dssdev); 1382 r = taal_power_on(dssdev);
1383 1383
1384 dsi_bus_unlock(); 1384 dsi_bus_unlock(dssdev);
1385 1385
1386 if (r) { 1386 if (r) {
1387 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 1387 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
@@ -1402,7 +1402,7 @@ static void taal_framedone_cb(int err, void *data)
1402{ 1402{
1403 struct omap_dss_device *dssdev = data; 1403 struct omap_dss_device *dssdev = data;
1404 dev_dbg(&dssdev->dev, "framedone, err %d\n", err); 1404 dev_dbg(&dssdev->dev, "framedone, err %d\n", err);
1405 dsi_bus_unlock(); 1405 dsi_bus_unlock(dssdev);
1406} 1406}
1407 1407
1408static irqreturn_t taal_te_isr(int irq, void *data) 1408static irqreturn_t taal_te_isr(int irq, void *data)
@@ -1430,7 +1430,7 @@ static irqreturn_t taal_te_isr(int irq, void *data)
1430 return IRQ_HANDLED; 1430 return IRQ_HANDLED;
1431err: 1431err:
1432 dev_err(&dssdev->dev, "start update failed\n"); 1432 dev_err(&dssdev->dev, "start update failed\n");
1433 dsi_bus_unlock(); 1433 dsi_bus_unlock(dssdev);
1434 return IRQ_HANDLED; 1434 return IRQ_HANDLED;
1435} 1435}
1436 1436
@@ -1443,7 +1443,7 @@ static void taal_te_timeout_work_callback(struct work_struct *work)
1443 dev_err(&dssdev->dev, "TE not received for 250ms!\n"); 1443 dev_err(&dssdev->dev, "TE not received for 250ms!\n");
1444 1444
1445 atomic_set(&td->do_update, 0); 1445 atomic_set(&td->do_update, 0);
1446 dsi_bus_unlock(); 1446 dsi_bus_unlock(dssdev);
1447} 1447}
1448 1448
1449static int taal_update(struct omap_dss_device *dssdev, 1449static int taal_update(struct omap_dss_device *dssdev,
@@ -1456,7 +1456,7 @@ static int taal_update(struct omap_dss_device *dssdev,
1456 dev_dbg(&dssdev->dev, "update %d, %d, %d x %d\n", x, y, w, h); 1456 dev_dbg(&dssdev->dev, "update %d, %d, %d x %d\n", x, y, w, h);
1457 1457
1458 mutex_lock(&td->lock); 1458 mutex_lock(&td->lock);
1459 dsi_bus_lock(); 1459 dsi_bus_lock(dssdev);
1460 1460
1461 r = taal_wake_up(dssdev); 1461 r = taal_wake_up(dssdev);
1462 if (r) 1462 if (r)
@@ -1495,7 +1495,7 @@ static int taal_update(struct omap_dss_device *dssdev,
1495 mutex_unlock(&td->lock); 1495 mutex_unlock(&td->lock);
1496 return 0; 1496 return 0;
1497err: 1497err:
1498 dsi_bus_unlock(); 1498 dsi_bus_unlock(dssdev);
1499 mutex_unlock(&td->lock); 1499 mutex_unlock(&td->lock);
1500 return r; 1500 return r;
1501} 1501}
@@ -1507,8 +1507,8 @@ static int taal_sync(struct omap_dss_device *dssdev)
1507 dev_dbg(&dssdev->dev, "sync\n"); 1507 dev_dbg(&dssdev->dev, "sync\n");
1508 1508
1509 mutex_lock(&td->lock); 1509 mutex_lock(&td->lock);
1510 dsi_bus_lock(); 1510 dsi_bus_lock(dssdev);
1511 dsi_bus_unlock(); 1511 dsi_bus_unlock(dssdev);
1512 mutex_unlock(&td->lock); 1512 mutex_unlock(&td->lock);
1513 1513
1514 dev_dbg(&dssdev->dev, "sync done\n"); 1514 dev_dbg(&dssdev->dev, "sync done\n");
@@ -1546,7 +1546,7 @@ static int taal_enable_te(struct omap_dss_device *dssdev, bool enable)
1546 if (td->te_enabled == enable) 1546 if (td->te_enabled == enable)
1547 goto end; 1547 goto end;
1548 1548
1549 dsi_bus_lock(); 1549 dsi_bus_lock(dssdev);
1550 1550
1551 if (td->enabled) { 1551 if (td->enabled) {
1552 r = taal_wake_up(dssdev); 1552 r = taal_wake_up(dssdev);
@@ -1560,13 +1560,13 @@ static int taal_enable_te(struct omap_dss_device *dssdev, bool enable)
1560 1560
1561 td->te_enabled = enable; 1561 td->te_enabled = enable;
1562 1562
1563 dsi_bus_unlock(); 1563 dsi_bus_unlock(dssdev);
1564end: 1564end:
1565 mutex_unlock(&td->lock); 1565 mutex_unlock(&td->lock);
1566 1566
1567 return 0; 1567 return 0;
1568err: 1568err:
1569 dsi_bus_unlock(); 1569 dsi_bus_unlock(dssdev);
1570 mutex_unlock(&td->lock); 1570 mutex_unlock(&td->lock);
1571 1571
1572 return r; 1572 return r;
@@ -1596,7 +1596,7 @@ static int taal_rotate(struct omap_dss_device *dssdev, u8 rotate)
1596 if (td->rotate == rotate) 1596 if (td->rotate == rotate)
1597 goto end; 1597 goto end;
1598 1598
1599 dsi_bus_lock(); 1599 dsi_bus_lock(dssdev);
1600 1600
1601 if (td->enabled) { 1601 if (td->enabled) {
1602 r = taal_wake_up(dssdev); 1602 r = taal_wake_up(dssdev);
@@ -1610,12 +1610,12 @@ static int taal_rotate(struct omap_dss_device *dssdev, u8 rotate)
1610 1610
1611 td->rotate = rotate; 1611 td->rotate = rotate;
1612 1612
1613 dsi_bus_unlock(); 1613 dsi_bus_unlock(dssdev);
1614end: 1614end:
1615 mutex_unlock(&td->lock); 1615 mutex_unlock(&td->lock);
1616 return 0; 1616 return 0;
1617err: 1617err:
1618 dsi_bus_unlock(); 1618 dsi_bus_unlock(dssdev);
1619 mutex_unlock(&td->lock); 1619 mutex_unlock(&td->lock);
1620 return r; 1620 return r;
1621} 1621}
@@ -1644,7 +1644,7 @@ static int taal_mirror(struct omap_dss_device *dssdev, bool enable)
1644 if (td->mirror == enable) 1644 if (td->mirror == enable)
1645 goto end; 1645 goto end;
1646 1646
1647 dsi_bus_lock(); 1647 dsi_bus_lock(dssdev);
1648 if (td->enabled) { 1648 if (td->enabled) {
1649 r = taal_wake_up(dssdev); 1649 r = taal_wake_up(dssdev);
1650 if (r) 1650 if (r)
@@ -1657,12 +1657,12 @@ static int taal_mirror(struct omap_dss_device *dssdev, bool enable)
1657 1657
1658 td->mirror = enable; 1658 td->mirror = enable;
1659 1659
1660 dsi_bus_unlock(); 1660 dsi_bus_unlock(dssdev);
1661end: 1661end:
1662 mutex_unlock(&td->lock); 1662 mutex_unlock(&td->lock);
1663 return 0; 1663 return 0;
1664err: 1664err:
1665 dsi_bus_unlock(); 1665 dsi_bus_unlock(dssdev);
1666 mutex_unlock(&td->lock); 1666 mutex_unlock(&td->lock);
1667 return r; 1667 return r;
1668} 1668}
@@ -1692,7 +1692,7 @@ static int taal_run_test(struct omap_dss_device *dssdev, int test_num)
1692 goto err1; 1692 goto err1;
1693 } 1693 }
1694 1694
1695 dsi_bus_lock(); 1695 dsi_bus_lock(dssdev);
1696 1696
1697 r = taal_wake_up(dssdev); 1697 r = taal_wake_up(dssdev);
1698 if (r) 1698 if (r)
@@ -1708,11 +1708,11 @@ static int taal_run_test(struct omap_dss_device *dssdev, int test_num)
1708 if (r) 1708 if (r)
1709 goto err2; 1709 goto err2;
1710 1710
1711 dsi_bus_unlock(); 1711 dsi_bus_unlock(dssdev);
1712 mutex_unlock(&td->lock); 1712 mutex_unlock(&td->lock);
1713 return 0; 1713 return 0;
1714err2: 1714err2:
1715 dsi_bus_unlock(); 1715 dsi_bus_unlock(dssdev);
1716err1: 1716err1:
1717 mutex_unlock(&td->lock); 1717 mutex_unlock(&td->lock);
1718 return r; 1718 return r;
@@ -1742,7 +1742,7 @@ static int taal_memory_read(struct omap_dss_device *dssdev,
1742 dssdev->panel.timings.x_res * 1742 dssdev->panel.timings.x_res *
1743 dssdev->panel.timings.y_res * 3); 1743 dssdev->panel.timings.y_res * 3);
1744 1744
1745 dsi_bus_lock(); 1745 dsi_bus_lock(dssdev);
1746 1746
1747 r = taal_wake_up(dssdev); 1747 r = taal_wake_up(dssdev);
1748 if (r) 1748 if (r)
@@ -1758,7 +1758,7 @@ static int taal_memory_read(struct omap_dss_device *dssdev,
1758 1758
1759 taal_set_update_window(td, x, y, w, h); 1759 taal_set_update_window(td, x, y, w, h);
1760 1760
1761 r = dsi_vc_set_max_rx_packet_size(td->channel, plen); 1761 r = dsi_vc_set_max_rx_packet_size(dssdev, td->channel, plen);
1762 if (r) 1762 if (r)
1763 goto err2; 1763 goto err2;
1764 1764
@@ -1766,7 +1766,7 @@ static int taal_memory_read(struct omap_dss_device *dssdev,
1766 u8 dcs_cmd = first ? 0x2e : 0x3e; 1766 u8 dcs_cmd = first ? 0x2e : 0x3e;
1767 first = 0; 1767 first = 0;
1768 1768
1769 r = dsi_vc_dcs_read(td->channel, dcs_cmd, 1769 r = dsi_vc_dcs_read(dssdev, td->channel, dcs_cmd,
1770 buf + buf_used, size - buf_used); 1770 buf + buf_used, size - buf_used);
1771 1771
1772 if (r < 0) { 1772 if (r < 0) {
@@ -1792,9 +1792,9 @@ static int taal_memory_read(struct omap_dss_device *dssdev,
1792 r = buf_used; 1792 r = buf_used;
1793 1793
1794err3: 1794err3:
1795 dsi_vc_set_max_rx_packet_size(td->channel, 1); 1795 dsi_vc_set_max_rx_packet_size(dssdev, td->channel, 1);
1796err2: 1796err2:
1797 dsi_bus_unlock(); 1797 dsi_bus_unlock(dssdev);
1798err1: 1798err1:
1799 mutex_unlock(&td->lock); 1799 mutex_unlock(&td->lock);
1800 return r; 1800 return r;
@@ -1813,11 +1813,11 @@ static void taal_ulps_work(struct work_struct *work)
1813 return; 1813 return;
1814 } 1814 }
1815 1815
1816 dsi_bus_lock(); 1816 dsi_bus_lock(dssdev);
1817 1817
1818 taal_enter_ulps(dssdev); 1818 taal_enter_ulps(dssdev);
1819 1819
1820 dsi_bus_unlock(); 1820 dsi_bus_unlock(dssdev);
1821 mutex_unlock(&td->lock); 1821 mutex_unlock(&td->lock);
1822} 1822}
1823 1823
@@ -1837,7 +1837,7 @@ static void taal_esd_work(struct work_struct *work)
1837 return; 1837 return;
1838 } 1838 }
1839 1839
1840 dsi_bus_lock(); 1840 dsi_bus_lock(dssdev);
1841 1841
1842 r = taal_wake_up(dssdev); 1842 r = taal_wake_up(dssdev);
1843 if (r) { 1843 if (r) {
@@ -1879,7 +1879,7 @@ static void taal_esd_work(struct work_struct *work)
1879 goto err; 1879 goto err;
1880 } 1880 }
1881 1881
1882 dsi_bus_unlock(); 1882 dsi_bus_unlock(dssdev);
1883 1883
1884 taal_queue_esd_work(dssdev); 1884 taal_queue_esd_work(dssdev);
1885 1885
@@ -1890,7 +1890,7 @@ err:
1890 1890
1891 taal_panel_reset(dssdev); 1891 taal_panel_reset(dssdev);
1892 1892
1893 dsi_bus_unlock(); 1893 dsi_bus_unlock(dssdev);
1894 1894
1895 taal_queue_esd_work(dssdev); 1895 taal_queue_esd_work(dssdev);
1896 1896
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index 162068f5f6ff..6d7148890aa0 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -354,13 +354,13 @@ void dsi_restore_context(void)
354{ 354{
355} 355}
356 356
357void dsi_bus_lock(void) 357void dsi_bus_lock(struct omap_dss_device *dssdev)
358{ 358{
359 down(&dsi.bus_lock); 359 down(&dsi.bus_lock);
360} 360}
361EXPORT_SYMBOL(dsi_bus_lock); 361EXPORT_SYMBOL(dsi_bus_lock);
362 362
363void dsi_bus_unlock(void) 363void dsi_bus_unlock(struct omap_dss_device *dssdev)
364{ 364{
365 up(&dsi.bus_lock); 365 up(&dsi.bus_lock);
366} 366}
@@ -2473,7 +2473,8 @@ static int dsi_vc_config_vp(int channel)
2473} 2473}
2474 2474
2475 2475
2476void omapdss_dsi_vc_enable_hs(int channel, bool enable) 2476void omapdss_dsi_vc_enable_hs(struct omap_dss_device *dssdev, int channel,
2477 bool enable)
2477{ 2478{
2478 DSSDBG("dsi_vc_enable_hs(%d, %d)\n", channel, enable); 2479 DSSDBG("dsi_vc_enable_hs(%d, %d)\n", channel, enable);
2479 2480
@@ -2587,7 +2588,7 @@ static int dsi_vc_send_bta(int channel)
2587 return 0; 2588 return 0;
2588} 2589}
2589 2590
2590int dsi_vc_send_bta_sync(int channel) 2591int dsi_vc_send_bta_sync(struct omap_dss_device *dssdev, int channel)
2591{ 2592{
2592 DECLARE_COMPLETION_ONSTACK(completion); 2593 DECLARE_COMPLETION_ONSTACK(completion);
2593 int r = 0; 2594 int r = 0;
@@ -2751,14 +2752,15 @@ static int dsi_vc_send_short(int channel, u8 data_type, u16 data, u8 ecc)
2751 return 0; 2752 return 0;
2752} 2753}
2753 2754
2754int dsi_vc_send_null(int channel) 2755int dsi_vc_send_null(struct omap_dss_device *dssdev, int channel)
2755{ 2756{
2756 u8 nullpkg[] = {0, 0, 0, 0}; 2757 u8 nullpkg[] = {0, 0, 0, 0};
2757 return dsi_vc_send_long(channel, DSI_DT_NULL_PACKET, nullpkg, 4, 0); 2758 return dsi_vc_send_long(channel, DSI_DT_NULL_PACKET, nullpkg, 4, 0);
2758} 2759}
2759EXPORT_SYMBOL(dsi_vc_send_null); 2760EXPORT_SYMBOL(dsi_vc_send_null);
2760 2761
2761int dsi_vc_dcs_write_nosync(int channel, u8 *data, int len) 2762int dsi_vc_dcs_write_nosync(struct omap_dss_device *dssdev, int channel,
2763 u8 *data, int len)
2762{ 2764{
2763 int r; 2765 int r;
2764 2766
@@ -2780,15 +2782,16 @@ int dsi_vc_dcs_write_nosync(int channel, u8 *data, int len)
2780} 2782}
2781EXPORT_SYMBOL(dsi_vc_dcs_write_nosync); 2783EXPORT_SYMBOL(dsi_vc_dcs_write_nosync);
2782 2784
2783int dsi_vc_dcs_write(int channel, u8 *data, int len) 2785int dsi_vc_dcs_write(struct omap_dss_device *dssdev, int channel, u8 *data,
2786 int len)
2784{ 2787{
2785 int r; 2788 int r;
2786 2789
2787 r = dsi_vc_dcs_write_nosync(channel, data, len); 2790 r = dsi_vc_dcs_write_nosync(dssdev, channel, data, len);
2788 if (r) 2791 if (r)
2789 goto err; 2792 goto err;
2790 2793
2791 r = dsi_vc_send_bta_sync(channel); 2794 r = dsi_vc_send_bta_sync(dssdev, channel);
2792 if (r) 2795 if (r)
2793 goto err; 2796 goto err;
2794 2797
@@ -2807,22 +2810,24 @@ err:
2807} 2810}
2808EXPORT_SYMBOL(dsi_vc_dcs_write); 2811EXPORT_SYMBOL(dsi_vc_dcs_write);
2809 2812
2810int dsi_vc_dcs_write_0(int channel, u8 dcs_cmd) 2813int dsi_vc_dcs_write_0(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd)
2811{ 2814{
2812 return dsi_vc_dcs_write(channel, &dcs_cmd, 1); 2815 return dsi_vc_dcs_write(dssdev, channel, &dcs_cmd, 1);
2813} 2816}
2814EXPORT_SYMBOL(dsi_vc_dcs_write_0); 2817EXPORT_SYMBOL(dsi_vc_dcs_write_0);
2815 2818
2816int dsi_vc_dcs_write_1(int channel, u8 dcs_cmd, u8 param) 2819int dsi_vc_dcs_write_1(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd,
2820 u8 param)
2817{ 2821{
2818 u8 buf[2]; 2822 u8 buf[2];
2819 buf[0] = dcs_cmd; 2823 buf[0] = dcs_cmd;
2820 buf[1] = param; 2824 buf[1] = param;
2821 return dsi_vc_dcs_write(channel, buf, 2); 2825 return dsi_vc_dcs_write(dssdev, channel, buf, 2);
2822} 2826}
2823EXPORT_SYMBOL(dsi_vc_dcs_write_1); 2827EXPORT_SYMBOL(dsi_vc_dcs_write_1);
2824 2828
2825int dsi_vc_dcs_read(int channel, u8 dcs_cmd, u8 *buf, int buflen) 2829int dsi_vc_dcs_read(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd,
2830 u8 *buf, int buflen)
2826{ 2831{
2827 u32 val; 2832 u32 val;
2828 u8 dt; 2833 u8 dt;
@@ -2835,7 +2840,7 @@ int dsi_vc_dcs_read(int channel, u8 dcs_cmd, u8 *buf, int buflen)
2835 if (r) 2840 if (r)
2836 goto err; 2841 goto err;
2837 2842
2838 r = dsi_vc_send_bta_sync(channel); 2843 r = dsi_vc_send_bta_sync(dssdev, channel);
2839 if (r) 2844 if (r)
2840 goto err; 2845 goto err;
2841 2846
@@ -2929,11 +2934,12 @@ err:
2929} 2934}
2930EXPORT_SYMBOL(dsi_vc_dcs_read); 2935EXPORT_SYMBOL(dsi_vc_dcs_read);
2931 2936
2932int dsi_vc_dcs_read_1(int channel, u8 dcs_cmd, u8 *data) 2937int dsi_vc_dcs_read_1(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd,
2938 u8 *data)
2933{ 2939{
2934 int r; 2940 int r;
2935 2941
2936 r = dsi_vc_dcs_read(channel, dcs_cmd, data, 1); 2942 r = dsi_vc_dcs_read(dssdev, channel, dcs_cmd, data, 1);
2937 2943
2938 if (r < 0) 2944 if (r < 0)
2939 return r; 2945 return r;
@@ -2945,12 +2951,13 @@ int dsi_vc_dcs_read_1(int channel, u8 dcs_cmd, u8 *data)
2945} 2951}
2946EXPORT_SYMBOL(dsi_vc_dcs_read_1); 2952EXPORT_SYMBOL(dsi_vc_dcs_read_1);
2947 2953
2948int dsi_vc_dcs_read_2(int channel, u8 dcs_cmd, u8 *data1, u8 *data2) 2954int dsi_vc_dcs_read_2(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd,
2955 u8 *data1, u8 *data2)
2949{ 2956{
2950 u8 buf[2]; 2957 u8 buf[2];
2951 int r; 2958 int r;
2952 2959
2953 r = dsi_vc_dcs_read(channel, dcs_cmd, buf, 2); 2960 r = dsi_vc_dcs_read(dssdev, channel, dcs_cmd, buf, 2);
2954 2961
2955 if (r < 0) 2962 if (r < 0)
2956 return r; 2963 return r;
@@ -2965,7 +2972,8 @@ int dsi_vc_dcs_read_2(int channel, u8 dcs_cmd, u8 *data1, u8 *data2)
2965} 2972}
2966EXPORT_SYMBOL(dsi_vc_dcs_read_2); 2973EXPORT_SYMBOL(dsi_vc_dcs_read_2);
2967 2974
2968int dsi_vc_set_max_rx_packet_size(int channel, u16 len) 2975int dsi_vc_set_max_rx_packet_size(struct omap_dss_device *dssdev, int channel,
2976 u16 len)
2969{ 2977{
2970 return dsi_vc_send_short(channel, DSI_DT_SET_MAX_RET_PKG_SIZE, 2978 return dsi_vc_send_short(channel, DSI_DT_SET_MAX_RET_PKG_SIZE,
2971 len, 0); 2979 len, 0);
diff --git a/include/video/omapdss.h b/include/video/omapdss.h
index ab7d6564e29b..e8e27caac190 100644
--- a/include/video/omapdss.h
+++ b/include/video/omapdss.h
@@ -214,18 +214,26 @@ int omap_rfbi_setup_te(enum omap_rfbi_te_mode mode,
214 int hs_pol_inv, int vs_pol_inv, int extif_div); 214 int hs_pol_inv, int vs_pol_inv, int extif_div);
215 215
216/* DSI */ 216/* DSI */
217void dsi_bus_lock(void); 217void dsi_bus_lock(struct omap_dss_device *dssdev);
218void dsi_bus_unlock(void); 218void dsi_bus_unlock(struct omap_dss_device *dssdev);
219int dsi_vc_dcs_write(int channel, u8 *data, int len); 219int dsi_vc_dcs_write(struct omap_dss_device *dssdev, int channel, u8 *data,
220int dsi_vc_dcs_write_0(int channel, u8 dcs_cmd); 220 int len);
221int dsi_vc_dcs_write_1(int channel, u8 dcs_cmd, u8 param); 221int dsi_vc_dcs_write_0(struct omap_dss_device *dssdev, int channel,
222int dsi_vc_dcs_write_nosync(int channel, u8 *data, int len); 222 u8 dcs_cmd);
223int dsi_vc_dcs_read(int channel, u8 dcs_cmd, u8 *buf, int buflen); 223int dsi_vc_dcs_write_1(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd,
224int dsi_vc_dcs_read_1(int channel, u8 dcs_cmd, u8 *data); 224 u8 param);
225int dsi_vc_dcs_read_2(int channel, u8 dcs_cmd, u8 *data1, u8 *data2); 225int dsi_vc_dcs_write_nosync(struct omap_dss_device *dssdev, int channel,
226int dsi_vc_set_max_rx_packet_size(int channel, u16 len); 226 u8 *data, int len);
227int dsi_vc_send_null(int channel); 227int dsi_vc_dcs_read(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd,
228int dsi_vc_send_bta_sync(int channel); 228 u8 *buf, int buflen);
229int dsi_vc_dcs_read_1(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd,
230 u8 *data);
231int dsi_vc_dcs_read_2(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd,
232 u8 *data1, u8 *data2);
233int dsi_vc_set_max_rx_packet_size(struct omap_dss_device *dssdev, int channel,
234 u16 len);
235int dsi_vc_send_null(struct omap_dss_device *dssdev, int channel);
236int dsi_vc_send_bta_sync(struct omap_dss_device *dssdev, int channel);
229 237
230/* Board specific data */ 238/* Board specific data */
231struct omap_dss_board_info { 239struct omap_dss_board_info {
@@ -575,7 +583,8 @@ int omap_dispc_wait_for_irq_interruptible_timeout(u32 irqmask,
575#define to_dss_driver(x) container_of((x), struct omap_dss_driver, driver) 583#define to_dss_driver(x) container_of((x), struct omap_dss_driver, driver)
576#define to_dss_device(x) container_of((x), struct omap_dss_device, dev) 584#define to_dss_device(x) container_of((x), struct omap_dss_device, dev)
577 585
578void omapdss_dsi_vc_enable_hs(int channel, bool enable); 586void omapdss_dsi_vc_enable_hs(struct omap_dss_device *dssdev, int channel,
587 bool enable);
579int omapdss_dsi_enable_te(struct omap_dss_device *dssdev, bool enable); 588int omapdss_dsi_enable_te(struct omap_dss_device *dssdev, bool enable);
580 589
581int omap_dsi_prepare_update(struct omap_dss_device *dssdev, 590int omap_dsi_prepare_update(struct omap_dss_device *dssdev,