aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrik Jakobsson <patrik.r.jakobsson@gmail.com>2013-07-12 09:33:47 -0400
committerPatrik Jakobsson <patrik.r.jakobsson@gmail.com>2013-07-23 19:47:31 -0400
commitf0ff07b73b9b5be1f725f333d1516d569c697104 (patch)
treeac2e0aab675060bb8c546425e3fda1342c57fa87
parent0e5b26ab67bbc3f762444264cdc8be7db12f374c (diff)
drm/gma500/cdv: Convert to generic save/restore
Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
-rw-r--r--drivers/gpu/drm/gma500/cdv_intel_display.c172
1 files changed, 2 insertions, 170 deletions
diff --git a/drivers/gpu/drm/gma500/cdv_intel_display.c b/drivers/gpu/drm/gma500/cdv_intel_display.c
index 257e0e8820ec..b84912ff1711 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_display.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_display.c
@@ -867,174 +867,6 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
867 return 0; 867 return 0;
868} 868}
869 869
870
871/**
872 * Save HW states of giving crtc
873 */
874static void cdv_intel_crtc_save(struct drm_crtc *crtc)
875{
876 struct drm_device *dev = crtc->dev;
877 struct drm_psb_private *dev_priv = dev->dev_private;
878 struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc);
879 struct psb_intel_crtc_state *crtc_state = psb_intel_crtc->crtc_state;
880 const struct psb_offset *map = &dev_priv->regmap[psb_intel_crtc->pipe];
881 uint32_t paletteReg;
882 int i;
883
884 if (!crtc_state) {
885 dev_dbg(dev->dev, "No CRTC state found\n");
886 return;
887 }
888
889 crtc_state->saveDSPCNTR = REG_READ(map->cntr);
890 crtc_state->savePIPECONF = REG_READ(map->conf);
891 crtc_state->savePIPESRC = REG_READ(map->src);
892 crtc_state->saveFP0 = REG_READ(map->fp0);
893 crtc_state->saveFP1 = REG_READ(map->fp1);
894 crtc_state->saveDPLL = REG_READ(map->dpll);
895 crtc_state->saveHTOTAL = REG_READ(map->htotal);
896 crtc_state->saveHBLANK = REG_READ(map->hblank);
897 crtc_state->saveHSYNC = REG_READ(map->hsync);
898 crtc_state->saveVTOTAL = REG_READ(map->vtotal);
899 crtc_state->saveVBLANK = REG_READ(map->vblank);
900 crtc_state->saveVSYNC = REG_READ(map->vsync);
901 crtc_state->saveDSPSTRIDE = REG_READ(map->stride);
902
903 /*NOTE: DSPSIZE DSPPOS only for psb*/
904 crtc_state->saveDSPSIZE = REG_READ(map->size);
905 crtc_state->saveDSPPOS = REG_READ(map->pos);
906
907 crtc_state->saveDSPBASE = REG_READ(map->base);
908
909 DRM_DEBUG("(%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x)\n",
910 crtc_state->saveDSPCNTR,
911 crtc_state->savePIPECONF,
912 crtc_state->savePIPESRC,
913 crtc_state->saveFP0,
914 crtc_state->saveFP1,
915 crtc_state->saveDPLL,
916 crtc_state->saveHTOTAL,
917 crtc_state->saveHBLANK,
918 crtc_state->saveHSYNC,
919 crtc_state->saveVTOTAL,
920 crtc_state->saveVBLANK,
921 crtc_state->saveVSYNC,
922 crtc_state->saveDSPSTRIDE,
923 crtc_state->saveDSPSIZE,
924 crtc_state->saveDSPPOS,
925 crtc_state->saveDSPBASE
926 );
927
928 paletteReg = map->palette;
929 for (i = 0; i < 256; ++i)
930 crtc_state->savePalette[i] = REG_READ(paletteReg + (i << 2));
931}
932
933/**
934 * Restore HW states of giving crtc
935 */
936static void cdv_intel_crtc_restore(struct drm_crtc *crtc)
937{
938 struct drm_device *dev = crtc->dev;
939 struct drm_psb_private *dev_priv = dev->dev_private;
940 struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc);
941 struct psb_intel_crtc_state *crtc_state = psb_intel_crtc->crtc_state;
942 const struct psb_offset *map = &dev_priv->regmap[psb_intel_crtc->pipe];
943 uint32_t paletteReg;
944 int i;
945
946 if (!crtc_state) {
947 dev_dbg(dev->dev, "No crtc state\n");
948 return;
949 }
950
951 DRM_DEBUG(
952 "current:(%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x)\n",
953 REG_READ(map->cntr),
954 REG_READ(map->conf),
955 REG_READ(map->src),
956 REG_READ(map->fp0),
957 REG_READ(map->fp1),
958 REG_READ(map->dpll),
959 REG_READ(map->htotal),
960 REG_READ(map->hblank),
961 REG_READ(map->hsync),
962 REG_READ(map->vtotal),
963 REG_READ(map->vblank),
964 REG_READ(map->vsync),
965 REG_READ(map->stride),
966 REG_READ(map->size),
967 REG_READ(map->pos),
968 REG_READ(map->base)
969 );
970
971 DRM_DEBUG(
972 "saved: (%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x)\n",
973 crtc_state->saveDSPCNTR,
974 crtc_state->savePIPECONF,
975 crtc_state->savePIPESRC,
976 crtc_state->saveFP0,
977 crtc_state->saveFP1,
978 crtc_state->saveDPLL,
979 crtc_state->saveHTOTAL,
980 crtc_state->saveHBLANK,
981 crtc_state->saveHSYNC,
982 crtc_state->saveVTOTAL,
983 crtc_state->saveVBLANK,
984 crtc_state->saveVSYNC,
985 crtc_state->saveDSPSTRIDE,
986 crtc_state->saveDSPSIZE,
987 crtc_state->saveDSPPOS,
988 crtc_state->saveDSPBASE
989 );
990
991
992 if (crtc_state->saveDPLL & DPLL_VCO_ENABLE) {
993 REG_WRITE(map->dpll,
994 crtc_state->saveDPLL & ~DPLL_VCO_ENABLE);
995 REG_READ(map->dpll);
996 DRM_DEBUG("write dpll: %x\n",
997 REG_READ(map->dpll));
998 udelay(150);
999 }
1000
1001 REG_WRITE(map->fp0, crtc_state->saveFP0);
1002 REG_READ(map->fp0);
1003
1004 REG_WRITE(map->fp1, crtc_state->saveFP1);
1005 REG_READ(map->fp1);
1006
1007 REG_WRITE(map->dpll, crtc_state->saveDPLL);
1008 REG_READ(map->dpll);
1009 udelay(150);
1010
1011 REG_WRITE(map->htotal, crtc_state->saveHTOTAL);
1012 REG_WRITE(map->hblank, crtc_state->saveHBLANK);
1013 REG_WRITE(map->hsync, crtc_state->saveHSYNC);
1014 REG_WRITE(map->vtotal, crtc_state->saveVTOTAL);
1015 REG_WRITE(map->vblank, crtc_state->saveVBLANK);
1016 REG_WRITE(map->vsync, crtc_state->saveVSYNC);
1017 REG_WRITE(map->stride, crtc_state->saveDSPSTRIDE);
1018
1019 REG_WRITE(map->size, crtc_state->saveDSPSIZE);
1020 REG_WRITE(map->pos, crtc_state->saveDSPPOS);
1021
1022 REG_WRITE(map->src, crtc_state->savePIPESRC);
1023 REG_WRITE(map->base, crtc_state->saveDSPBASE);
1024 REG_WRITE(map->conf, crtc_state->savePIPECONF);
1025
1026 gma_wait_for_vblank(dev);
1027
1028 REG_WRITE(map->cntr, crtc_state->saveDSPCNTR);
1029 REG_WRITE(map->base, crtc_state->saveDSPBASE);
1030
1031 gma_wait_for_vblank(dev);
1032
1033 paletteReg = map->palette;
1034 for (i = 0; i < 256; ++i)
1035 REG_WRITE(paletteReg + (i << 2), crtc_state->savePalette[i]);
1036}
1037
1038static int cdv_crtc_set_config(struct drm_mode_set *set) 870static int cdv_crtc_set_config(struct drm_mode_set *set)
1039{ 871{
1040 int ret = 0; 872 int ret = 0;
@@ -1203,8 +1035,8 @@ const struct drm_crtc_helper_funcs cdv_intel_helper_funcs = {
1203}; 1035};
1204 1036
1205const struct drm_crtc_funcs cdv_intel_crtc_funcs = { 1037const struct drm_crtc_funcs cdv_intel_crtc_funcs = {
1206 .save = cdv_intel_crtc_save, 1038 .save = gma_crtc_save,
1207 .restore = cdv_intel_crtc_restore, 1039 .restore = gma_crtc_restore,
1208 .cursor_set = gma_crtc_cursor_set, 1040 .cursor_set = gma_crtc_cursor_set,
1209 .cursor_move = gma_crtc_cursor_move, 1041 .cursor_move = gma_crtc_cursor_move,
1210 .gamma_set = gma_crtc_gamma_set, 1042 .gamma_set = gma_crtc_gamma_set,