aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/omap2/dss/core.c4
-rw-r--r--drivers/video/omap2/dss/dss.h1
-rw-r--r--drivers/video/omap2/dss/dss_features.c5
-rw-r--r--drivers/video/omap2/dss/hdmi.c16
-rw-r--r--drivers/video/omap2/dss/ti_hdmi.h14
-rw-r--r--drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c173
6 files changed, 213 insertions, 0 deletions
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 76821fefce9..86ec12e16c7 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -145,6 +145,10 @@ static int dss_initialize_debugfs(void)
145 debugfs_create_file("venc", S_IRUGO, dss_debugfs_dir, 145 debugfs_create_file("venc", S_IRUGO, dss_debugfs_dir,
146 &venc_dump_regs, &dss_debug_fops); 146 &venc_dump_regs, &dss_debug_fops);
147#endif 147#endif
148#ifdef CONFIG_OMAP4_DSS_HDMI
149 debugfs_create_file("hdmi", S_IRUGO, dss_debugfs_dir,
150 &hdmi_dump_regs, &dss_debug_fops);
151#endif
148 return 0; 152 return 0;
149} 153}
150 154
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 47eebd80415..86520072477 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -472,6 +472,7 @@ int hdmi_init_platform_driver(void);
472void hdmi_uninit_platform_driver(void); 472void hdmi_uninit_platform_driver(void);
473int hdmi_init_display(struct omap_dss_device *dssdev); 473int hdmi_init_display(struct omap_dss_device *dssdev);
474unsigned long hdmi_get_pixel_clock(void); 474unsigned long hdmi_get_pixel_clock(void);
475void hdmi_dump_regs(struct seq_file *s);
475#else 476#else
476static inline int hdmi_init_display(struct omap_dss_device *dssdev) 477static inline int hdmi_init_display(struct omap_dss_device *dssdev)
477{ 478{
diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
index 47e66d87065..a2fc8e05868 100644
--- a/drivers/video/omap2/dss/dss_features.c
+++ b/drivers/video/omap2/dss/dss_features.c
@@ -447,6 +447,11 @@ static const struct ti_hdmi_ip_ops omap4_hdmi_functions = {
447 .pll_enable = ti_hdmi_4xxx_pll_enable, 447 .pll_enable = ti_hdmi_4xxx_pll_enable,
448 .pll_disable = ti_hdmi_4xxx_pll_disable, 448 .pll_disable = ti_hdmi_4xxx_pll_disable,
449 .video_enable = ti_hdmi_4xxx_wp_video_start, 449 .video_enable = ti_hdmi_4xxx_wp_video_start,
450 .dump_wrapper = ti_hdmi_4xxx_wp_dump,
451 .dump_core = ti_hdmi_4xxx_core_dump,
452 .dump_pll = ti_hdmi_4xxx_pll_dump,
453 .dump_phy = ti_hdmi_4xxx_phy_dump,
454
450}; 455};
451 456
452void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data) 457void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data)
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index 2f554ae6858..3262f0f1fa3 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -438,6 +438,22 @@ void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev)
438 } 438 }
439} 439}
440 440
441void hdmi_dump_regs(struct seq_file *s)
442{
443 mutex_lock(&hdmi.lock);
444
445 if (hdmi_runtime_get())
446 return;
447
448 hdmi.ip_data.ops->dump_wrapper(&hdmi.ip_data, s);
449 hdmi.ip_data.ops->dump_pll(&hdmi.ip_data, s);
450 hdmi.ip_data.ops->dump_phy(&hdmi.ip_data, s);
451 hdmi.ip_data.ops->dump_core(&hdmi.ip_data, s);
452
453 hdmi_runtime_put();
454 mutex_unlock(&hdmi.lock);
455}
456
441int omapdss_hdmi_read_edid(u8 *buf, int len) 457int omapdss_hdmi_read_edid(u8 *buf, int len)
442{ 458{
443 int r; 459 int r;
diff --git a/drivers/video/omap2/dss/ti_hdmi.h b/drivers/video/omap2/dss/ti_hdmi.h
index d48603c8e23..2c3443dabb1 100644
--- a/drivers/video/omap2/dss/ti_hdmi.h
+++ b/drivers/video/omap2/dss/ti_hdmi.h
@@ -101,6 +101,15 @@ struct ti_hdmi_ip_ops {
101 void (*pll_disable)(struct hdmi_ip_data *ip_data); 101 void (*pll_disable)(struct hdmi_ip_data *ip_data);
102 102
103 void (*video_enable)(struct hdmi_ip_data *ip_data, bool start); 103 void (*video_enable)(struct hdmi_ip_data *ip_data, bool start);
104
105 void (*dump_wrapper)(struct hdmi_ip_data *ip_data, struct seq_file *s);
106
107 void (*dump_core)(struct hdmi_ip_data *ip_data, struct seq_file *s);
108
109 void (*dump_pll)(struct hdmi_ip_data *ip_data, struct seq_file *s);
110
111 void (*dump_phy)(struct hdmi_ip_data *ip_data, struct seq_file *s);
112
104}; 113};
105 114
106struct hdmi_ip_data { 115struct hdmi_ip_data {
@@ -121,4 +130,9 @@ void ti_hdmi_4xxx_wp_video_start(struct hdmi_ip_data *ip_data, bool start);
121int ti_hdmi_4xxx_pll_enable(struct hdmi_ip_data *ip_data); 130int ti_hdmi_4xxx_pll_enable(struct hdmi_ip_data *ip_data);
122void ti_hdmi_4xxx_pll_disable(struct hdmi_ip_data *ip_data); 131void ti_hdmi_4xxx_pll_disable(struct hdmi_ip_data *ip_data);
123void ti_hdmi_4xxx_basic_configure(struct hdmi_ip_data *ip_data); 132void ti_hdmi_4xxx_basic_configure(struct hdmi_ip_data *ip_data);
133void ti_hdmi_4xxx_wp_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
134void ti_hdmi_4xxx_pll_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
135void ti_hdmi_4xxx_core_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
136void ti_hdmi_4xxx_phy_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
137
124#endif 138#endif
diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
index 5f22d2e5979..e1a6ce518af 100644
--- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
+++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
@@ -27,6 +27,7 @@
27#include <linux/mutex.h> 27#include <linux/mutex.h>
28#include <linux/delay.h> 28#include <linux/delay.h>
29#include <linux/string.h> 29#include <linux/string.h>
30#include <linux/seq_file.h>
30 31
31#include "ti_hdmi_4xxx_ip.h" 32#include "ti_hdmi_4xxx_ip.h"
32#include "dss.h" 33#include "dss.h"
@@ -805,6 +806,178 @@ void ti_hdmi_4xxx_basic_configure(struct hdmi_ip_data *ip_data)
805 hdmi_core_av_packet_config(ip_data, repeat_cfg); 806 hdmi_core_av_packet_config(ip_data, repeat_cfg);
806} 807}
807 808
809void ti_hdmi_4xxx_wp_dump(struct hdmi_ip_data *ip_data, struct seq_file *s)
810{
811#define DUMPREG(r) seq_printf(s, "%-35s %08x\n", #r,\
812 hdmi_read_reg(hdmi_wp_base(ip_data), r))
813
814 DUMPREG(HDMI_WP_REVISION);
815 DUMPREG(HDMI_WP_SYSCONFIG);
816 DUMPREG(HDMI_WP_IRQSTATUS_RAW);
817 DUMPREG(HDMI_WP_IRQSTATUS);
818 DUMPREG(HDMI_WP_PWR_CTRL);
819 DUMPREG(HDMI_WP_IRQENABLE_SET);
820 DUMPREG(HDMI_WP_VIDEO_CFG);
821 DUMPREG(HDMI_WP_VIDEO_SIZE);
822 DUMPREG(HDMI_WP_VIDEO_TIMING_H);
823 DUMPREG(HDMI_WP_VIDEO_TIMING_V);
824 DUMPREG(HDMI_WP_WP_CLK);
825 DUMPREG(HDMI_WP_AUDIO_CFG);
826 DUMPREG(HDMI_WP_AUDIO_CFG2);
827 DUMPREG(HDMI_WP_AUDIO_CTRL);
828 DUMPREG(HDMI_WP_AUDIO_DATA);
829}
830
831void ti_hdmi_4xxx_pll_dump(struct hdmi_ip_data *ip_data, struct seq_file *s)
832{
833#define DUMPPLL(r) seq_printf(s, "%-35s %08x\n", #r,\
834 hdmi_read_reg(hdmi_pll_base(ip_data), r))
835
836 DUMPPLL(PLLCTRL_PLL_CONTROL);
837 DUMPPLL(PLLCTRL_PLL_STATUS);
838 DUMPPLL(PLLCTRL_PLL_GO);
839 DUMPPLL(PLLCTRL_CFG1);
840 DUMPPLL(PLLCTRL_CFG2);
841 DUMPPLL(PLLCTRL_CFG3);
842 DUMPPLL(PLLCTRL_CFG4);
843}
844
845void ti_hdmi_4xxx_core_dump(struct hdmi_ip_data *ip_data, struct seq_file *s)
846{
847 int i;
848
849#define CORE_REG(i, name) name(i)
850#define DUMPCORE(r) seq_printf(s, "%-35s %08x\n", #r,\
851 hdmi_read_reg(hdmi_pll_base(ip_data), r))
852#define DUMPCOREAV(i, r) seq_printf(s, "%s[%d]%*s %08x\n", #r, i, \
853 (i < 10) ? 32 - strlen(#r) : 31 - strlen(#r), " ", \
854 hdmi_read_reg(hdmi_pll_base(ip_data), CORE_REG(i, r)))
855
856 DUMPCORE(HDMI_CORE_SYS_VND_IDL);
857 DUMPCORE(HDMI_CORE_SYS_DEV_IDL);
858 DUMPCORE(HDMI_CORE_SYS_DEV_IDH);
859 DUMPCORE(HDMI_CORE_SYS_DEV_REV);
860 DUMPCORE(HDMI_CORE_SYS_SRST);
861 DUMPCORE(HDMI_CORE_CTRL1);
862 DUMPCORE(HDMI_CORE_SYS_SYS_STAT);
863 DUMPCORE(HDMI_CORE_SYS_VID_ACEN);
864 DUMPCORE(HDMI_CORE_SYS_VID_MODE);
865 DUMPCORE(HDMI_CORE_SYS_INTR_STATE);
866 DUMPCORE(HDMI_CORE_SYS_INTR1);
867 DUMPCORE(HDMI_CORE_SYS_INTR2);
868 DUMPCORE(HDMI_CORE_SYS_INTR3);
869 DUMPCORE(HDMI_CORE_SYS_INTR4);
870 DUMPCORE(HDMI_CORE_SYS_UMASK1);
871 DUMPCORE(HDMI_CORE_SYS_TMDS_CTRL);
872 DUMPCORE(HDMI_CORE_SYS_DE_DLY);
873 DUMPCORE(HDMI_CORE_SYS_DE_CTRL);
874 DUMPCORE(HDMI_CORE_SYS_DE_TOP);
875 DUMPCORE(HDMI_CORE_SYS_DE_CNTL);
876 DUMPCORE(HDMI_CORE_SYS_DE_CNTH);
877 DUMPCORE(HDMI_CORE_SYS_DE_LINL);
878 DUMPCORE(HDMI_CORE_SYS_DE_LINH_1);
879
880 DUMPCORE(HDMI_CORE_DDC_CMD);
881 DUMPCORE(HDMI_CORE_DDC_STATUS);
882 DUMPCORE(HDMI_CORE_DDC_ADDR);
883 DUMPCORE(HDMI_CORE_DDC_OFFSET);
884 DUMPCORE(HDMI_CORE_DDC_COUNT1);
885 DUMPCORE(HDMI_CORE_DDC_COUNT2);
886 DUMPCORE(HDMI_CORE_DDC_DATA);
887 DUMPCORE(HDMI_CORE_DDC_SEGM);
888
889 DUMPCORE(HDMI_CORE_AV_HDMI_CTRL);
890 DUMPCORE(HDMI_CORE_AV_DPD);
891 DUMPCORE(HDMI_CORE_AV_PB_CTRL1);
892 DUMPCORE(HDMI_CORE_AV_PB_CTRL2);
893 DUMPCORE(HDMI_CORE_AV_AVI_TYPE);
894 DUMPCORE(HDMI_CORE_AV_AVI_VERS);
895 DUMPCORE(HDMI_CORE_AV_AVI_LEN);
896 DUMPCORE(HDMI_CORE_AV_AVI_CHSUM);
897
898 for (i = 0; i < HDMI_CORE_AV_AVI_DBYTE_NELEMS; i++)
899 DUMPCOREAV(i, HDMI_CORE_AV_AVI_DBYTE);
900
901 for (i = 0; i < HDMI_CORE_AV_SPD_DBYTE_NELEMS; i++)
902 DUMPCOREAV(i, HDMI_CORE_AV_SPD_DBYTE);
903
904 for (i = 0; i < HDMI_CORE_AV_AUD_DBYTE_NELEMS; i++)
905 DUMPCOREAV(i, HDMI_CORE_AV_AUD_DBYTE);
906
907 for (i = 0; i < HDMI_CORE_AV_MPEG_DBYTE_NELEMS; i++)
908 DUMPCOREAV(i, HDMI_CORE_AV_MPEG_DBYTE);
909
910 for (i = 0; i < HDMI_CORE_AV_GEN_DBYTE_NELEMS; i++)
911 DUMPCOREAV(i, HDMI_CORE_AV_GEN_DBYTE);
912
913 for (i = 0; i < HDMI_CORE_AV_GEN2_DBYTE_NELEMS; i++)
914 DUMPCOREAV(i, HDMI_CORE_AV_GEN2_DBYTE);
915
916 DUMPCORE(HDMI_CORE_AV_ACR_CTRL);
917 DUMPCORE(HDMI_CORE_AV_FREQ_SVAL);
918 DUMPCORE(HDMI_CORE_AV_N_SVAL1);
919 DUMPCORE(HDMI_CORE_AV_N_SVAL2);
920 DUMPCORE(HDMI_CORE_AV_N_SVAL3);
921 DUMPCORE(HDMI_CORE_AV_CTS_SVAL1);
922 DUMPCORE(HDMI_CORE_AV_CTS_SVAL2);
923 DUMPCORE(HDMI_CORE_AV_CTS_SVAL3);
924 DUMPCORE(HDMI_CORE_AV_CTS_HVAL1);
925 DUMPCORE(HDMI_CORE_AV_CTS_HVAL2);
926 DUMPCORE(HDMI_CORE_AV_CTS_HVAL3);
927 DUMPCORE(HDMI_CORE_AV_AUD_MODE);
928 DUMPCORE(HDMI_CORE_AV_SPDIF_CTRL);
929 DUMPCORE(HDMI_CORE_AV_HW_SPDIF_FS);
930 DUMPCORE(HDMI_CORE_AV_SWAP_I2S);
931 DUMPCORE(HDMI_CORE_AV_SPDIF_ERTH);
932 DUMPCORE(HDMI_CORE_AV_I2S_IN_MAP);
933 DUMPCORE(HDMI_CORE_AV_I2S_IN_CTRL);
934 DUMPCORE(HDMI_CORE_AV_I2S_CHST0);
935 DUMPCORE(HDMI_CORE_AV_I2S_CHST1);
936 DUMPCORE(HDMI_CORE_AV_I2S_CHST2);
937 DUMPCORE(HDMI_CORE_AV_I2S_CHST4);
938 DUMPCORE(HDMI_CORE_AV_I2S_CHST5);
939 DUMPCORE(HDMI_CORE_AV_ASRC);
940 DUMPCORE(HDMI_CORE_AV_I2S_IN_LEN);
941 DUMPCORE(HDMI_CORE_AV_HDMI_CTRL);
942 DUMPCORE(HDMI_CORE_AV_AUDO_TXSTAT);
943 DUMPCORE(HDMI_CORE_AV_AUD_PAR_BUSCLK_1);
944 DUMPCORE(HDMI_CORE_AV_AUD_PAR_BUSCLK_2);
945 DUMPCORE(HDMI_CORE_AV_AUD_PAR_BUSCLK_3);
946 DUMPCORE(HDMI_CORE_AV_TEST_TXCTRL);
947 DUMPCORE(HDMI_CORE_AV_DPD);
948 DUMPCORE(HDMI_CORE_AV_PB_CTRL1);
949 DUMPCORE(HDMI_CORE_AV_PB_CTRL2);
950 DUMPCORE(HDMI_CORE_AV_AVI_TYPE);
951 DUMPCORE(HDMI_CORE_AV_AVI_VERS);
952 DUMPCORE(HDMI_CORE_AV_AVI_LEN);
953 DUMPCORE(HDMI_CORE_AV_AVI_CHSUM);
954 DUMPCORE(HDMI_CORE_AV_SPD_TYPE);
955 DUMPCORE(HDMI_CORE_AV_SPD_VERS);
956 DUMPCORE(HDMI_CORE_AV_SPD_LEN);
957 DUMPCORE(HDMI_CORE_AV_SPD_CHSUM);
958 DUMPCORE(HDMI_CORE_AV_AUDIO_TYPE);
959 DUMPCORE(HDMI_CORE_AV_AUDIO_VERS);
960 DUMPCORE(HDMI_CORE_AV_AUDIO_LEN);
961 DUMPCORE(HDMI_CORE_AV_AUDIO_CHSUM);
962 DUMPCORE(HDMI_CORE_AV_MPEG_TYPE);
963 DUMPCORE(HDMI_CORE_AV_MPEG_VERS);
964 DUMPCORE(HDMI_CORE_AV_MPEG_LEN);
965 DUMPCORE(HDMI_CORE_AV_MPEG_CHSUM);
966 DUMPCORE(HDMI_CORE_AV_CP_BYTE1);
967 DUMPCORE(HDMI_CORE_AV_CEC_ADDR_ID);
968}
969
970void ti_hdmi_4xxx_phy_dump(struct hdmi_ip_data *ip_data, struct seq_file *s)
971{
972#define DUMPPHY(r) seq_printf(s, "%-35s %08x\n", #r,\
973 hdmi_read_reg(hdmi_phy_base(ip_data), r))
974
975 DUMPPHY(HDMI_TXPHY_TX_CTRL);
976 DUMPPHY(HDMI_TXPHY_DIGITAL_CTRL);
977 DUMPPHY(HDMI_TXPHY_POWER_CTRL);
978 DUMPPHY(HDMI_TXPHY_PAD_CFG_CTRL);
979}
980
808#if defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) || \ 981#if defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) || \
809 defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI_MODULE) 982 defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI_MODULE)
810void hdmi_wp_audio_config_format(struct hdmi_ip_data *ip_data, 983void hdmi_wp_audio_config_format(struct hdmi_ip_data *ip_data,