diff options
author | Mythri P K <mythripk@ti.com> | 2011-09-22 04:07:45 -0400 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2011-09-30 09:17:32 -0400 |
commit | 162874d5f5fa8aac7ff406825f152abb22d3c6c2 (patch) | |
tree | efbbfe47e3307eb9a2aeb425e04dcc04e19a18c7 /drivers/video | |
parent | 81302a75389d8c5b85cbaafba359c9b132704eb6 (diff) |
OMAPDSS: HDMI: Add support to dump registers through debugfs
Add support to dump the HDMI wrapper, core, PLL and PHY registers
through debugfs.
Signed-off-by: Mythri P K <mythripk@ti.com>
[tomi.valkeinen@ti.com: updated the description]
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/omap2/dss/core.c | 4 | ||||
-rw-r--r-- | drivers/video/omap2/dss/dss.h | 1 | ||||
-rw-r--r-- | drivers/video/omap2/dss/dss_features.c | 5 | ||||
-rw-r--r-- | drivers/video/omap2/dss/hdmi.c | 16 | ||||
-rw-r--r-- | drivers/video/omap2/dss/ti_hdmi.h | 14 | ||||
-rw-r--r-- | drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c | 173 |
6 files changed, 213 insertions, 0 deletions
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c index 76821fefce9a..86ec12e16c7c 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 47eebd804153..865200724778 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); | |||
472 | void hdmi_uninit_platform_driver(void); | 472 | void hdmi_uninit_platform_driver(void); |
473 | int hdmi_init_display(struct omap_dss_device *dssdev); | 473 | int hdmi_init_display(struct omap_dss_device *dssdev); |
474 | unsigned long hdmi_get_pixel_clock(void); | 474 | unsigned long hdmi_get_pixel_clock(void); |
475 | void hdmi_dump_regs(struct seq_file *s); | ||
475 | #else | 476 | #else |
476 | static inline int hdmi_init_display(struct omap_dss_device *dssdev) | 477 | static 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 47e66d87065f..a2fc8e058689 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 | ||
452 | void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data) | 457 | void 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 2f554ae6858e..3262f0f1fa35 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 | ||
441 | void 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 | |||
441 | int omapdss_hdmi_read_edid(u8 *buf, int len) | 457 | int 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 d48603c8e23d..2c3443dabb14 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 | ||
106 | struct hdmi_ip_data { | 115 | struct hdmi_ip_data { |
@@ -121,4 +130,9 @@ void ti_hdmi_4xxx_wp_video_start(struct hdmi_ip_data *ip_data, bool start); | |||
121 | int ti_hdmi_4xxx_pll_enable(struct hdmi_ip_data *ip_data); | 130 | int ti_hdmi_4xxx_pll_enable(struct hdmi_ip_data *ip_data); |
122 | void ti_hdmi_4xxx_pll_disable(struct hdmi_ip_data *ip_data); | 131 | void ti_hdmi_4xxx_pll_disable(struct hdmi_ip_data *ip_data); |
123 | void ti_hdmi_4xxx_basic_configure(struct hdmi_ip_data *ip_data); | 132 | void ti_hdmi_4xxx_basic_configure(struct hdmi_ip_data *ip_data); |
133 | void ti_hdmi_4xxx_wp_dump(struct hdmi_ip_data *ip_data, struct seq_file *s); | ||
134 | void ti_hdmi_4xxx_pll_dump(struct hdmi_ip_data *ip_data, struct seq_file *s); | ||
135 | void ti_hdmi_4xxx_core_dump(struct hdmi_ip_data *ip_data, struct seq_file *s); | ||
136 | void 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 5f22d2e5979e..e1a6ce518af6 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 | ||
809 | void 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 | |||
831 | void 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 | |||
845 | void 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 | |||
970 | void 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) |
810 | void hdmi_wp_audio_config_format(struct hdmi_ip_data *ip_data, | 983 | void hdmi_wp_audio_config_format(struct hdmi_ip_data *ip_data, |