diff options
author | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2010-09-03 03:20:31 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-09-14 04:23:30 -0400 |
commit | 6aa966e610f918a6732a5acc102cb5e8de616cb3 (patch) | |
tree | 622336fd1183b50e67ea04e552757368b363dd2c /drivers/video/sh_mobile_hdmi.c | |
parent | 1c120deb60edd4c19a2109daa98f65f2ad3b9c06 (diff) |
fbdev: sh_mobile_hdmi: cosmetic improvements
Improve comments, unify function names, replace pr_debug with dev_dbg.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'drivers/video/sh_mobile_hdmi.c')
-rw-r--r-- | drivers/video/sh_mobile_hdmi.c | 82 |
1 files changed, 45 insertions, 37 deletions
diff --git a/drivers/video/sh_mobile_hdmi.c b/drivers/video/sh_mobile_hdmi.c index 51ce34990e24..91682f1bad79 100644 --- a/drivers/video/sh_mobile_hdmi.c +++ b/drivers/video/sh_mobile_hdmi.c | |||
@@ -206,7 +206,7 @@ enum hotplug_state { | |||
206 | 206 | ||
207 | struct sh_hdmi { | 207 | struct sh_hdmi { |
208 | void __iomem *base; | 208 | void __iomem *base; |
209 | enum hotplug_state hp_state; | 209 | enum hotplug_state hp_state; /* hot-plug status */ |
210 | bool preprogrammed_mode; /* use a pre-programmed VIC or the external mode */ | 210 | bool preprogrammed_mode; /* use a pre-programmed VIC or the external mode */ |
211 | struct clk *hdmi_clk; | 211 | struct clk *hdmi_clk; |
212 | struct device *dev; | 212 | struct device *dev; |
@@ -227,7 +227,7 @@ static u8 hdmi_read(struct sh_hdmi *hdmi, u8 reg) | |||
227 | } | 227 | } |
228 | 228 | ||
229 | /* External video parameter settings */ | 229 | /* External video parameter settings */ |
230 | static void hdmi_external_video_param(struct sh_hdmi *hdmi) | 230 | static void sh_hdmi_external_video_param(struct sh_hdmi *hdmi) |
231 | { | 231 | { |
232 | struct fb_var_screeninfo *var = &hdmi->var; | 232 | struct fb_var_screeninfo *var = &hdmi->var; |
233 | u16 htotal, hblank, hdelay, vtotal, vblank, vdelay, voffset; | 233 | u16 htotal, hblank, hdelay, vtotal, vblank, vdelay, voffset; |
@@ -259,9 +259,9 @@ static void hdmi_external_video_param(struct sh_hdmi *hdmi) | |||
259 | if (var->sync & FB_SYNC_VERT_HIGH_ACT) | 259 | if (var->sync & FB_SYNC_VERT_HIGH_ACT) |
260 | sync |= 8; | 260 | sync |= 8; |
261 | 261 | ||
262 | pr_debug("H: %u, %u, %u, %u; V: %u, %u, %u, %u; sync 0x%x\n", | 262 | dev_dbg(hdmi->dev, "H: %u, %u, %u, %u; V: %u, %u, %u, %u; sync 0x%x\n", |
263 | htotal, hblank, hdelay, var->hsync_len, | 263 | htotal, hblank, hdelay, var->hsync_len, |
264 | vtotal, vblank, vdelay, var->vsync_len, sync); | 264 | vtotal, vblank, vdelay, var->vsync_len, sync); |
265 | 265 | ||
266 | hdmi_write(hdmi, sync | (voffset << 4), HDMI_EXTERNAL_VIDEO_PARAM_SETTINGS); | 266 | hdmi_write(hdmi, sync | (voffset << 4), HDMI_EXTERNAL_VIDEO_PARAM_SETTINGS); |
267 | 267 | ||
@@ -476,9 +476,9 @@ static void sh_hdmi_avi_infoframe_setup(struct sh_hdmi *hdmi) | |||
476 | hdmi_write(hdmi, 0x00, HDMI_CTRL_PKT_BUF_ACCESS_PB1); | 476 | hdmi_write(hdmi, 0x00, HDMI_CTRL_PKT_BUF_ACCESS_PB1); |
477 | 477 | ||
478 | /* | 478 | /* |
479 | * C = No Data | 479 | * [7:6] C = Colorimetry: no data |
480 | * M = 16:9 Picture Aspect Ratio | 480 | * [5:4] M = 2: 16:9, 1: 4:3 Picture Aspect Ratio |
481 | * R = Same as picture aspect ratio | 481 | * [3:0] R = 8: Active Frame Aspect Ratio: same as picture aspect ratio |
482 | */ | 482 | */ |
483 | hdmi_write(hdmi, 0x28, HDMI_CTRL_PKT_BUF_ACCESS_PB2); | 483 | hdmi_write(hdmi, 0x28, HDMI_CTRL_PKT_BUF_ACCESS_PB2); |
484 | 484 | ||
@@ -619,7 +619,7 @@ static void sh_hdmi_read_edid(struct sh_hdmi *hdmi) | |||
619 | u8 edid[128]; | 619 | u8 edid[128]; |
620 | 620 | ||
621 | /* Read EDID */ | 621 | /* Read EDID */ |
622 | pr_debug("Read back EDID code:"); | 622 | dev_dbg(hdmi->dev, "Read back EDID code:"); |
623 | for (i = 0; i < 128; i++) { | 623 | for (i = 0; i < 128; i++) { |
624 | edid[i] = hdmi_read(hdmi, HDMI_EDID_KSV_FIFO_ACCESS_WINDOW); | 624 | edid[i] = hdmi_read(hdmi, HDMI_EDID_KSV_FIFO_ACCESS_WINDOW); |
625 | #ifdef DEBUG | 625 | #ifdef DEBUG |
@@ -635,10 +635,10 @@ static void sh_hdmi_read_edid(struct sh_hdmi *hdmi) | |||
635 | printk(KERN_CONT "\n"); | 635 | printk(KERN_CONT "\n"); |
636 | #endif | 636 | #endif |
637 | fb_parse_edid(edid, var); | 637 | fb_parse_edid(edid, var); |
638 | pr_debug("%u-%u-%u-%u x %u-%u-%u-%u @ %lu kHz monitor detected\n", | 638 | dev_dbg(hdmi->dev, "%u-%u-%u-%u x %u-%u-%u-%u @ %lu kHz monitor detected\n", |
639 | var->left_margin, var->xres, var->right_margin, var->hsync_len, | 639 | var->left_margin, var->xres, var->right_margin, var->hsync_len, |
640 | var->upper_margin, var->yres, var->lower_margin, var->vsync_len, | 640 | var->upper_margin, var->yres, var->lower_margin, var->vsync_len, |
641 | PICOS2KHZ(var->pixclock)); | 641 | PICOS2KHZ(var->pixclock)); |
642 | 642 | ||
643 | if ((hdmi->var.xres == 720 && hdmi->var.yres == 480) || | 643 | if ((hdmi->var.xres == 720 && hdmi->var.yres == 480) || |
644 | (hdmi->var.xres == 1280 && hdmi->var.yres == 720) || | 644 | (hdmi->var.xres == 1280 && hdmi->var.yres == 720) || |
@@ -647,7 +647,7 @@ static void sh_hdmi_read_edid(struct sh_hdmi *hdmi) | |||
647 | else | 647 | else |
648 | hdmi->preprogrammed_mode = false; | 648 | hdmi->preprogrammed_mode = false; |
649 | 649 | ||
650 | hdmi_external_video_param(hdmi); | 650 | sh_hdmi_external_video_param(hdmi); |
651 | } | 651 | } |
652 | 652 | ||
653 | static irqreturn_t sh_hdmi_hotplug(int irq, void *dev_id) | 653 | static irqreturn_t sh_hdmi_hotplug(int irq, void *dev_id) |
@@ -675,8 +675,8 @@ static irqreturn_t sh_hdmi_hotplug(int irq, void *dev_id) | |||
675 | hdmi_write(hdmi, 0xFF, HDMI_INTERRUPT_STATUS_2); | 675 | hdmi_write(hdmi, 0xFF, HDMI_INTERRUPT_STATUS_2); |
676 | 676 | ||
677 | if (printk_ratelimit()) | 677 | if (printk_ratelimit()) |
678 | pr_debug("IRQ #%d: Status #1: 0x%x & 0x%x, #2: 0x%x & 0x%x\n", | 678 | dev_dbg(hdmi->dev, "IRQ #%d: Status #1: 0x%x & 0x%x, #2: 0x%x & 0x%x\n", |
679 | irq, status1, mask1, status2, mask2); | 679 | irq, status1, mask1, status2, mask2); |
680 | 680 | ||
681 | if (!((status1 & mask1) | (status2 & mask2))) { | 681 | if (!((status1 & mask1) | (status2 & mask2))) { |
682 | return IRQ_NONE; | 682 | return IRQ_NONE; |
@@ -687,7 +687,7 @@ static irqreturn_t sh_hdmi_hotplug(int irq, void *dev_id) | |||
687 | udelay(500); | 687 | udelay(500); |
688 | 688 | ||
689 | msens = hdmi_read(hdmi, HDMI_HOT_PLUG_MSENS_STATUS); | 689 | msens = hdmi_read(hdmi, HDMI_HOT_PLUG_MSENS_STATUS); |
690 | pr_debug("MSENS 0x%x\n", msens); | 690 | dev_dbg(hdmi->dev, "MSENS 0x%x\n", msens); |
691 | /* Check, if hot plug & MSENS pin status are both high */ | 691 | /* Check, if hot plug & MSENS pin status are both high */ |
692 | if ((msens & 0xC0) == 0xC0) { | 692 | if ((msens & 0xC0) == 0xC0) { |
693 | /* Display plug in */ | 693 | /* Display plug in */ |
@@ -724,7 +724,7 @@ static irqreturn_t sh_hdmi_hotplug(int irq, void *dev_id) | |||
724 | } | 724 | } |
725 | 725 | ||
726 | /* locking: called with info->lock held, or before register_framebuffer() */ | 726 | /* locking: called with info->lock held, or before register_framebuffer() */ |
727 | static void hdmi_display_on(void *arg, struct fb_info *info) | 727 | static void sh_hdmi_display_on(void *arg, struct fb_info *info) |
728 | { | 728 | { |
729 | /* | 729 | /* |
730 | * info is guaranteed to be valid, when we are called, because our | 730 | * info is guaranteed to be valid, when we are called, because our |
@@ -734,16 +734,23 @@ static void hdmi_display_on(void *arg, struct fb_info *info) | |||
734 | struct sh_mobile_hdmi_info *pdata = hdmi->dev->platform_data; | 734 | struct sh_mobile_hdmi_info *pdata = hdmi->dev->platform_data; |
735 | struct sh_mobile_lcdc_chan *ch = info->par; | 735 | struct sh_mobile_lcdc_chan *ch = info->par; |
736 | 736 | ||
737 | pr_debug("%s(%p): state %x\n", __func__, pdata->lcd_dev, info->state); | 737 | dev_dbg(hdmi->dev, "%s(%p): state %x\n", __func__, |
738 | pdata->lcd_dev, info->state); | ||
738 | 739 | ||
739 | /* No need to lock */ | 740 | /* No need to lock */ |
740 | hdmi->info = info; | 741 | hdmi->info = info; |
741 | 742 | ||
743 | /* | ||
744 | * hp_state can be set to | ||
745 | * HDMI_HOTPLUG_DISCONNECTED: on monitor unplug | ||
746 | * HDMI_HOTPLUG_CONNECTED: on monitor plug-in | ||
747 | * HDMI_HOTPLUG_EDID_DONE: on EDID read completion | ||
748 | */ | ||
742 | switch (hdmi->hp_state) { | 749 | switch (hdmi->hp_state) { |
743 | case HDMI_HOTPLUG_EDID_DONE: | 750 | case HDMI_HOTPLUG_EDID_DONE: |
744 | /* PS mode d->e. All functions are active */ | 751 | /* PS mode d->e. All functions are active */ |
745 | hdmi_write(hdmi, 0x80, HDMI_SYSTEM_CTRL); | 752 | hdmi_write(hdmi, 0x80, HDMI_SYSTEM_CTRL); |
746 | pr_debug("HDMI running\n"); | 753 | dev_dbg(hdmi->dev, "HDMI running\n"); |
747 | break; | 754 | break; |
748 | case HDMI_HOTPLUG_DISCONNECTED: | 755 | case HDMI_HOTPLUG_DISCONNECTED: |
749 | info->state = FBINFO_STATE_SUSPENDED; | 756 | info->state = FBINFO_STATE_SUSPENDED; |
@@ -753,25 +760,25 @@ static void hdmi_display_on(void *arg, struct fb_info *info) | |||
753 | } | 760 | } |
754 | 761 | ||
755 | /* locking: called with info->lock held */ | 762 | /* locking: called with info->lock held */ |
756 | static void hdmi_display_off(void *arg) | 763 | static void sh_hdmi_display_off(void *arg) |
757 | { | 764 | { |
758 | struct sh_hdmi *hdmi = arg; | 765 | struct sh_hdmi *hdmi = arg; |
759 | struct sh_mobile_hdmi_info *pdata = hdmi->dev->platform_data; | 766 | struct sh_mobile_hdmi_info *pdata = hdmi->dev->platform_data; |
760 | 767 | ||
761 | pr_debug("%s(%p)\n", __func__, pdata->lcd_dev); | 768 | dev_dbg(hdmi->dev, "%s(%p)\n", __func__, pdata->lcd_dev); |
762 | /* PS mode e->a */ | 769 | /* PS mode e->a */ |
763 | hdmi_write(hdmi, 0x10, HDMI_SYSTEM_CTRL); | 770 | hdmi_write(hdmi, 0x10, HDMI_SYSTEM_CTRL); |
764 | } | 771 | } |
765 | 772 | ||
766 | /* Hotplug interrupt occurred, read EDID */ | 773 | /* Hotplug interrupt occurred, read EDID */ |
767 | static void edid_work_fn(struct work_struct *work) | 774 | static void sh_hdmi_edid_work_fn(struct work_struct *work) |
768 | { | 775 | { |
769 | struct sh_hdmi *hdmi = container_of(work, struct sh_hdmi, edid_work.work); | 776 | struct sh_hdmi *hdmi = container_of(work, struct sh_hdmi, edid_work.work); |
770 | struct sh_mobile_hdmi_info *pdata = hdmi->dev->platform_data; | 777 | struct sh_mobile_hdmi_info *pdata = hdmi->dev->platform_data; |
771 | struct sh_mobile_lcdc_chan *ch; | 778 | struct sh_mobile_lcdc_chan *ch; |
772 | 779 | ||
773 | pr_debug("%s(%p): begin, hotplug status %d\n", __func__, | 780 | dev_dbg(hdmi->dev, "%s(%p): begin, hotplug status %d\n", __func__, |
774 | pdata->lcd_dev, hdmi->hp_state); | 781 | pdata->lcd_dev, hdmi->hp_state); |
775 | 782 | ||
776 | if (!pdata->lcd_dev) | 783 | if (!pdata->lcd_dev) |
777 | return; | 784 | return; |
@@ -800,7 +807,7 @@ static void edid_work_fn(struct work_struct *work) | |||
800 | fb_set_suspend(hdmi->info, 0); | 807 | fb_set_suspend(hdmi->info, 0); |
801 | } else { | 808 | } else { |
802 | if (lock_fb_info(hdmi->info)) { | 809 | if (lock_fb_info(hdmi->info)) { |
803 | hdmi_display_on(hdmi, hdmi->info); | 810 | sh_hdmi_display_on(hdmi, hdmi->info); |
804 | unlock_fb_info(hdmi->info); | 811 | unlock_fb_info(hdmi->info); |
805 | } | 812 | } |
806 | } | 813 | } |
@@ -822,7 +829,7 @@ static void edid_work_fn(struct work_struct *work) | |||
822 | out: | 829 | out: |
823 | mutex_unlock(&hdmi->mutex); | 830 | mutex_unlock(&hdmi->mutex); |
824 | 831 | ||
825 | pr_debug("%s(%p): end\n", __func__, pdata->lcd_dev); | 832 | dev_dbg(hdmi->dev, "%s(%p): end\n", __func__, pdata->lcd_dev); |
826 | } | 833 | } |
827 | 834 | ||
828 | static int sh_hdmi_notify(struct notifier_block *nb, | 835 | static int sh_hdmi_notify(struct notifier_block *nb, |
@@ -846,18 +853,19 @@ static int sh_hdmi_notify(struct notifier_block *nb, | |||
846 | 853 | ||
847 | switch(action) { | 854 | switch(action) { |
848 | case FB_EVENT_FB_REGISTERED: | 855 | case FB_EVENT_FB_REGISTERED: |
849 | /* Unneeded, activation taken care by hdmi_display_on() */ | 856 | /* Unneeded, activation taken care by sh_hdmi_display_on() */ |
850 | break; | 857 | break; |
851 | case FB_EVENT_FB_UNREGISTERED: | 858 | case FB_EVENT_FB_UNREGISTERED: |
852 | /* | 859 | /* |
853 | * We are called from unregister_framebuffer() with the | 860 | * We are called from unregister_framebuffer() with the |
854 | * info->lock held. This is bad for us, because we can race with | 861 | * info->lock held. This is bad for us, because we can race with |
855 | * the scheduled work, which has to call fb_set_suspend(), which | 862 | * the scheduled work, which has to call fb_set_suspend(), which |
856 | * takes info->lock internally, so, edid_work_fn() cannot take | 863 | * takes info->lock internally, so, sh_hdmi_edid_work_fn() |
857 | * and hold info->lock for the whole function duration. Using an | 864 | * cannot take and hold info->lock for the whole function |
858 | * additional lock creates a classical AB-BA lock up. Therefore, | 865 | * duration. Using an additional lock creates a classical AB-BA |
859 | * we have to release the info->lock temporarily, synchronise | 866 | * lock up. Therefore, we have to release the info->lock |
860 | * with the work queue and re-acquire the info->lock. | 867 | * temporarily, synchronise with the work queue and re-acquire |
868 | * the info->lock. | ||
861 | */ | 869 | */ |
862 | unlock_fb_info(hdmi->info); | 870 | unlock_fb_info(hdmi->info); |
863 | mutex_lock(&hdmi->mutex); | 871 | mutex_lock(&hdmi->mutex); |
@@ -913,7 +921,7 @@ static int __init sh_hdmi_probe(struct platform_device *pdev) | |||
913 | goto erate; | 921 | goto erate; |
914 | } | 922 | } |
915 | 923 | ||
916 | pr_debug("HDMI set frequency %lu\n", rate); | 924 | dev_dbg(hdmi->dev, "HDMI set frequency %lu\n", rate); |
917 | 925 | ||
918 | ret = clk_enable(hdmi->hdmi_clk); | 926 | ret = clk_enable(hdmi->hdmi_clk); |
919 | if (ret < 0) { | 927 | if (ret < 0) { |
@@ -948,10 +956,10 @@ static int __init sh_hdmi_probe(struct platform_device *pdev) | |||
948 | board_cfg = &pdata->lcd_chan->board_cfg; | 956 | board_cfg = &pdata->lcd_chan->board_cfg; |
949 | board_cfg->owner = THIS_MODULE; | 957 | board_cfg->owner = THIS_MODULE; |
950 | board_cfg->board_data = hdmi; | 958 | board_cfg->board_data = hdmi; |
951 | board_cfg->display_on = hdmi_display_on; | 959 | board_cfg->display_on = sh_hdmi_display_on; |
952 | board_cfg->display_off = hdmi_display_off; | 960 | board_cfg->display_off = sh_hdmi_display_off; |
953 | 961 | ||
954 | INIT_DELAYED_WORK(&hdmi->edid_work, edid_work_fn); | 962 | INIT_DELAYED_WORK(&hdmi->edid_work, sh_hdmi_edid_work_fn); |
955 | 963 | ||
956 | pm_runtime_enable(&pdev->dev); | 964 | pm_runtime_enable(&pdev->dev); |
957 | pm_runtime_resume(&pdev->dev); | 965 | pm_runtime_resume(&pdev->dev); |