diff options
| author | Tomi Valkeinen <tomi.valkeinen@nokia.com> | 2010-01-19 08:53:16 -0500 |
|---|---|---|
| committer | Tomi Valkeinen <tomi.valkeinen@nokia.com> | 2010-02-24 07:31:28 -0500 |
| commit | 3651131268d7eae63efdffe6fa4a361abd44d747 (patch) | |
| tree | 9ef7a38028cc1763c8ff895aeba8ae40ffb5c572 | |
| parent | 37ac60e414052f1d9301368437db8f0cb9e323fe (diff) | |
OMAP: DSS2: move set/get_wss()
Move set/get_wss() from omap_dss_device to omap_dss_driver.
This is part of a larger patch-set, which moves the control from omapdss
driver to the display driver.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
| -rw-r--r-- | arch/arm/plat-omap/include/plat/display.h | 6 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/display.c | 8 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/venc.c | 67 |
3 files changed, 41 insertions, 40 deletions
diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h index 5221951350cd..3f7b20990086 100644 --- a/arch/arm/plat-omap/include/plat/display.h +++ b/arch/arm/plat-omap/include/plat/display.h | |||
| @@ -469,9 +469,6 @@ struct omap_dss_device { | |||
| 469 | void (*get_timings)(struct omap_dss_device *dssdev, | 469 | void (*get_timings)(struct omap_dss_device *dssdev, |
| 470 | struct omap_video_timings *timings); | 470 | struct omap_video_timings *timings); |
| 471 | 471 | ||
| 472 | int (*set_wss)(struct omap_dss_device *dssdev, u32 wss); | ||
| 473 | u32 (*get_wss)(struct omap_dss_device *dssdev); | ||
| 474 | |||
| 475 | /* platform specific */ | 472 | /* platform specific */ |
| 476 | int (*platform_enable)(struct omap_dss_device *dssdev); | 473 | int (*platform_enable)(struct omap_dss_device *dssdev); |
| 477 | void (*platform_disable)(struct omap_dss_device *dssdev); | 474 | void (*platform_disable)(struct omap_dss_device *dssdev); |
| @@ -516,6 +513,9 @@ struct omap_dss_driver { | |||
| 516 | void (*get_resolution)(struct omap_dss_device *dssdev, | 513 | void (*get_resolution)(struct omap_dss_device *dssdev, |
| 517 | u16 *xres, u16 *yres); | 514 | u16 *xres, u16 *yres); |
| 518 | int (*get_recommended_bpp)(struct omap_dss_device *dssdev); | 515 | int (*get_recommended_bpp)(struct omap_dss_device *dssdev); |
| 516 | |||
| 517 | int (*set_wss)(struct omap_dss_device *dssdev, u32 wss); | ||
| 518 | u32 (*get_wss)(struct omap_dss_device *dssdev); | ||
| 519 | }; | 519 | }; |
| 520 | 520 | ||
| 521 | int omap_dss_register_driver(struct omap_dss_driver *); | 521 | int omap_dss_register_driver(struct omap_dss_driver *); |
diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c index 29ec5a4a46bc..351c8abae0b2 100644 --- a/drivers/video/omap2/dss/display.c +++ b/drivers/video/omap2/dss/display.c | |||
| @@ -247,10 +247,10 @@ static ssize_t display_wss_show(struct device *dev, | |||
| 247 | struct omap_dss_device *dssdev = to_dss_device(dev); | 247 | struct omap_dss_device *dssdev = to_dss_device(dev); |
| 248 | unsigned int wss; | 248 | unsigned int wss; |
| 249 | 249 | ||
| 250 | if (!dssdev->get_wss) | 250 | if (!dssdev->driver->get_wss) |
| 251 | return -ENOENT; | 251 | return -ENOENT; |
| 252 | 252 | ||
| 253 | wss = dssdev->get_wss(dssdev); | 253 | wss = dssdev->driver->get_wss(dssdev); |
| 254 | 254 | ||
| 255 | return snprintf(buf, PAGE_SIZE, "0x%05x\n", wss); | 255 | return snprintf(buf, PAGE_SIZE, "0x%05x\n", wss); |
| 256 | } | 256 | } |
| @@ -262,7 +262,7 @@ static ssize_t display_wss_store(struct device *dev, | |||
| 262 | unsigned long wss; | 262 | unsigned long wss; |
| 263 | int r; | 263 | int r; |
| 264 | 264 | ||
| 265 | if (!dssdev->get_wss || !dssdev->set_wss) | 265 | if (!dssdev->driver->get_wss || !dssdev->driver->set_wss) |
| 266 | return -ENOENT; | 266 | return -ENOENT; |
| 267 | 267 | ||
| 268 | if (strict_strtoul(buf, 0, &wss)) | 268 | if (strict_strtoul(buf, 0, &wss)) |
| @@ -271,7 +271,7 @@ static ssize_t display_wss_store(struct device *dev, | |||
| 271 | if (wss > 0xfffff) | 271 | if (wss > 0xfffff) |
| 272 | return -EINVAL; | 272 | return -EINVAL; |
| 273 | 273 | ||
| 274 | r = dssdev->set_wss(dssdev, wss); | 274 | r = dssdev->driver->set_wss(dssdev, wss); |
| 275 | if (r) | 275 | if (r) |
| 276 | return r; | 276 | return r; |
| 277 | 277 | ||
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c index a0ab52c841ee..5c6e98bbb663 100644 --- a/drivers/video/omap2/dss/venc.c +++ b/drivers/video/omap2/dss/venc.c | |||
| @@ -557,6 +557,37 @@ static int venc_set_update_mode(struct omap_dss_device *dssdev, | |||
| 557 | return 0; | 557 | return 0; |
| 558 | } | 558 | } |
| 559 | 559 | ||
| 560 | static u32 venc_get_wss(struct omap_dss_device *dssdev) | ||
| 561 | { | ||
| 562 | /* Invert due to VENC_L21_WC_CTL:INV=1 */ | ||
| 563 | return (venc.wss_data >> 8) ^ 0xfffff; | ||
| 564 | } | ||
| 565 | |||
| 566 | static int venc_set_wss(struct omap_dss_device *dssdev, u32 wss) | ||
| 567 | { | ||
| 568 | const struct venc_config *config; | ||
| 569 | |||
| 570 | DSSDBG("venc_set_wss\n"); | ||
| 571 | |||
| 572 | mutex_lock(&venc.venc_lock); | ||
| 573 | |||
| 574 | config = venc_timings_to_config(&dssdev->panel.timings); | ||
| 575 | |||
| 576 | /* Invert due to VENC_L21_WC_CTL:INV=1 */ | ||
| 577 | venc.wss_data = (wss ^ 0xfffff) << 8; | ||
| 578 | |||
| 579 | venc_enable_clocks(1); | ||
| 580 | |||
| 581 | venc_write_reg(VENC_BSTAMP_WSS_DATA, config->bstamp_wss_data | | ||
| 582 | venc.wss_data); | ||
| 583 | |||
| 584 | venc_enable_clocks(0); | ||
| 585 | |||
| 586 | mutex_unlock(&venc.venc_lock); | ||
| 587 | |||
| 588 | return 0; | ||
| 589 | } | ||
| 590 | |||
| 560 | static struct omap_dss_driver venc_driver = { | 591 | static struct omap_dss_driver venc_driver = { |
| 561 | .probe = venc_panel_probe, | 592 | .probe = venc_panel_probe, |
| 562 | .remove = venc_panel_remove, | 593 | .remove = venc_panel_remove, |
| @@ -572,6 +603,9 @@ static struct omap_dss_driver venc_driver = { | |||
| 572 | .set_update_mode = venc_set_update_mode, | 603 | .set_update_mode = venc_set_update_mode, |
| 573 | .get_update_mode = venc_get_update_mode, | 604 | .get_update_mode = venc_get_update_mode, |
| 574 | 605 | ||
| 606 | .get_wss = venc_get_wss, | ||
| 607 | .set_wss = venc_set_wss, | ||
| 608 | |||
| 575 | .driver = { | 609 | .driver = { |
| 576 | .name = "venc", | 610 | .name = "venc", |
| 577 | .owner = THIS_MODULE, | 611 | .owner = THIS_MODULE, |
| @@ -656,37 +690,6 @@ static int venc_check_timings(struct omap_dss_device *dssdev, | |||
| 656 | return -EINVAL; | 690 | return -EINVAL; |
| 657 | } | 691 | } |
| 658 | 692 | ||
| 659 | static u32 venc_get_wss(struct omap_dss_device *dssdev) | ||
| 660 | { | ||
| 661 | /* Invert due to VENC_L21_WC_CTL:INV=1 */ | ||
| 662 | return (venc.wss_data >> 8) ^ 0xfffff; | ||
| 663 | } | ||
| 664 | |||
| 665 | static int venc_set_wss(struct omap_dss_device *dssdev, u32 wss) | ||
| 666 | { | ||
| 667 | const struct venc_config *config; | ||
| 668 | |||
| 669 | DSSDBG("venc_set_wss\n"); | ||
| 670 | |||
| 671 | mutex_lock(&venc.venc_lock); | ||
| 672 | |||
| 673 | config = venc_timings_to_config(&dssdev->panel.timings); | ||
| 674 | |||
| 675 | /* Invert due to VENC_L21_WC_CTL:INV=1 */ | ||
| 676 | venc.wss_data = (wss ^ 0xfffff) << 8; | ||
| 677 | |||
| 678 | venc_enable_clocks(1); | ||
| 679 | |||
| 680 | venc_write_reg(VENC_BSTAMP_WSS_DATA, config->bstamp_wss_data | | ||
| 681 | venc.wss_data); | ||
| 682 | |||
| 683 | venc_enable_clocks(0); | ||
| 684 | |||
| 685 | mutex_unlock(&venc.venc_lock); | ||
| 686 | |||
| 687 | return 0; | ||
| 688 | } | ||
| 689 | |||
| 690 | int venc_init_display(struct omap_dss_device *dssdev) | 693 | int venc_init_display(struct omap_dss_device *dssdev) |
| 691 | { | 694 | { |
| 692 | DSSDBG("init_display\n"); | 695 | DSSDBG("init_display\n"); |
| @@ -694,8 +697,6 @@ int venc_init_display(struct omap_dss_device *dssdev) | |||
| 694 | dssdev->get_timings = venc_get_timings; | 697 | dssdev->get_timings = venc_get_timings; |
| 695 | dssdev->set_timings = venc_set_timings; | 698 | dssdev->set_timings = venc_set_timings; |
| 696 | dssdev->check_timings = venc_check_timings; | 699 | dssdev->check_timings = venc_check_timings; |
| 697 | dssdev->get_wss = venc_get_wss; | ||
| 698 | dssdev->set_wss = venc_set_wss; | ||
| 699 | 700 | ||
| 700 | return 0; | 701 | return 0; |
| 701 | } | 702 | } |
