Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/sti: remove stih415-416 platform support

stih415 and stih416 platform are obsolete and no more supported.
Only stih407 and stih410 platform are maintained.

Signed-off-by: Vincent Abriou <vincent.abriou@st.com>
Acked-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Acked-by: Peter Griffin <peter.griffin@linaro.org>

+14 -480
+3 -3
drivers/gpu/drm/sti/Kconfig
··· 1 1 config DRM_STI 2 - tristate "DRM Support for STMicroelectronics SoC stiH41x Series" 3 - depends on DRM && (SOC_STIH415 || SOC_STIH416 || ARCH_MULTIPLATFORM) 2 + tristate "DRM Support for STMicroelectronics SoC stiH4xx Series" 3 + depends on DRM && (ARCH_STI || ARCH_MULTIPLATFORM) 4 4 select RESET_CONTROLLER 5 5 select DRM_KMS_HELPER 6 6 select DRM_GEM_CMA_HELPER ··· 9 9 select FW_LOADER 10 10 select SND_SOC_HDMI_CODEC if SND_SOC 11 11 help 12 - Choose this option to enable DRM on STM stiH41x chipset 12 + Choose this option to enable DRM on STM stiH4xx chipset
-1
drivers/gpu/drm/sti/Makefile
··· 9 9 sti_crtc.o \ 10 10 sti_plane.o \ 11 11 sti_hdmi.o \ 12 - sti_hdmi_tx3g0c55phy.o \ 13 12 sti_hdmi_tx3g4c28phy.o \ 14 13 sti_dvo.o \ 15 14 sti_awg_utils.o \
-19
drivers/gpu/drm/sti/sti_compositor.c
··· 39 39 }, 40 40 }; 41 41 42 - /* 43 - * stiH416 compositor properties 44 - * Note: 45 - * on stih416 MIXER_AUX has a different base address from MIXER_MAIN 46 - * Moreover, GDPx is different for Main and Aux Mixer. So this subdev map does 47 - * not fit for stiH416 if we want to enable the MIXER_AUX. 48 - */ 49 - static const struct sti_compositor_data stih416_compositor_data = { 50 - .nb_subdev = 3, 51 - .subdev_desc = { 52 - {STI_GPD_SUBDEV, (int)STI_GDP_0, 0x100}, 53 - {STI_GPD_SUBDEV, (int)STI_GDP_1, 0x200}, 54 - {STI_MIXER_MAIN_SUBDEV, STI_MIXER_MAIN, 0xC00} 55 - }, 56 - }; 57 - 58 42 int sti_compositor_debugfs_init(struct sti_compositor *compo, 59 43 struct drm_minor *minor) 60 44 { ··· 163 179 164 180 static const struct of_device_id compositor_of_match[] = { 165 181 { 166 - .compatible = "st,stih416-compositor", 167 - .data = &stih416_compositor_data, 168 - }, { 169 182 .compatible = "st,stih407-compositor", 170 183 .data = &stih407_compositor_data, 171 184 }, {
+3 -36
drivers/gpu/drm/sti/sti_hda.c
··· 62 62 #define SCALE_CTRL_CR_DFLT 0x00DB0249 63 63 64 64 /* Video DACs control */ 65 - #define VIDEO_DACS_CONTROL_MASK 0x0FFF 66 - #define VIDEO_DACS_CONTROL_SYSCFG2535 0x085C /* for stih416 */ 67 - #define DAC_CFG_HD_OFF_SHIFT 5 68 - #define DAC_CFG_HD_OFF_MASK (0x7 << DAC_CFG_HD_OFF_SHIFT) 69 - #define VIDEO_DACS_CONTROL_SYSCFG5072 0x0120 /* for stih407 */ 70 65 #define DAC_CFG_HD_HZUVW_OFF_MASK BIT(1) 71 - 72 66 73 67 /* Upsampler values for the alternative 2X Filter */ 74 68 #define SAMPLER_COEF_NB 8 ··· 294 300 */ 295 301 static void hda_enable_hd_dacs(struct sti_hda *hda, bool enable) 296 302 { 297 - u32 mask; 298 - 299 303 if (hda->video_dacs_ctrl) { 300 304 u32 val; 301 305 302 - switch ((u32)hda->video_dacs_ctrl & VIDEO_DACS_CONTROL_MASK) { 303 - case VIDEO_DACS_CONTROL_SYSCFG2535: 304 - mask = DAC_CFG_HD_OFF_MASK; 305 - break; 306 - case VIDEO_DACS_CONTROL_SYSCFG5072: 307 - mask = DAC_CFG_HD_HZUVW_OFF_MASK; 308 - break; 309 - default: 310 - DRM_INFO("Video DACS control register not supported\n"); 311 - return; 312 - } 313 - 314 306 val = readl(hda->video_dacs_ctrl); 315 307 if (enable) 316 - val &= ~mask; 308 + val &= ~DAC_CFG_HD_HZUVW_OFF_MASK; 317 309 else 318 - val |= mask; 310 + val |= DAC_CFG_HD_HZUVW_OFF_MASK; 319 311 320 312 writel(val, hda->video_dacs_ctrl); 321 313 } ··· 332 352 static void hda_dbg_video_dacs_ctrl(struct seq_file *s, void __iomem *reg) 333 353 { 334 354 u32 val = readl(reg); 335 - u32 mask; 336 - 337 - switch ((u32)reg & VIDEO_DACS_CONTROL_MASK) { 338 - case VIDEO_DACS_CONTROL_SYSCFG2535: 339 - mask = DAC_CFG_HD_OFF_MASK; 340 - break; 341 - case VIDEO_DACS_CONTROL_SYSCFG5072: 342 - mask = DAC_CFG_HD_HZUVW_OFF_MASK; 343 - break; 344 - default: 345 - DRM_DEBUG_DRIVER("Warning: DACS ctrl register not supported\n"); 346 - return; 347 - } 348 355 349 356 seq_puts(s, "\n"); 350 357 seq_printf(s, "\n %-25s 0x%08X", "VIDEO_DACS_CONTROL", val); 351 358 seq_puts(s, "\tHD DACs "); 352 - seq_puts(s, val & mask ? "disabled" : "enabled"); 359 + seq_puts(s, val & DAC_CFG_HD_HZUVW_OFF_MASK ? "disabled" : "enabled"); 353 360 } 354 361 355 362 static int hda_dbg_show(struct seq_file *s, void *data)
-20
drivers/gpu/drm/sti/sti_hdmi.c
··· 22 22 23 23 #include "sti_hdmi.h" 24 24 #include "sti_hdmi_tx3g4c28phy.h" 25 - #include "sti_hdmi_tx3g0c55phy.h" 26 25 #include "sti_vtg.h" 27 26 28 27 #define HDMI_CFG 0x0000 ··· 1373 1374 1374 1375 static const struct of_device_id hdmi_of_match[] = { 1375 1376 { 1376 - .compatible = "st,stih416-hdmi", 1377 - .data = &tx3g0c55phy_ops, 1378 - }, { 1379 1377 .compatible = "st,stih407-hdmi", 1380 1378 .data = &tx3g4c28phy_ops, 1381 1379 }, { ··· 1417 1421 if (!hdmi->regs) { 1418 1422 ret = -ENOMEM; 1419 1423 goto release_adapter; 1420 - } 1421 - 1422 - if (of_device_is_compatible(np, "st,stih416-hdmi")) { 1423 - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, 1424 - "syscfg"); 1425 - if (!res) { 1426 - DRM_ERROR("Invalid syscfg resource\n"); 1427 - ret = -ENOMEM; 1428 - goto release_adapter; 1429 - } 1430 - hdmi->syscfg = devm_ioremap_nocache(dev, res->start, 1431 - resource_size(res)); 1432 - if (!hdmi->syscfg) { 1433 - ret = -ENOMEM; 1434 - goto release_adapter; 1435 - } 1436 1424 } 1437 1425 1438 1426 hdmi->phy_ops = (struct hdmi_phy_ops *)
-336
drivers/gpu/drm/sti/sti_hdmi_tx3g0c55phy.c
··· 1 - /* 2 - * Copyright (C) STMicroelectronics SA 2014 3 - * Author: Vincent Abriou <vincent.abriou@st.com> for STMicroelectronics. 4 - * License terms: GNU General Public License (GPL), version 2 5 - */ 6 - 7 - #include "sti_hdmi_tx3g0c55phy.h" 8 - 9 - #define HDMI_SRZ_PLL_CFG 0x0504 10 - #define HDMI_SRZ_TAP_1 0x0508 11 - #define HDMI_SRZ_TAP_2 0x050C 12 - #define HDMI_SRZ_TAP_3 0x0510 13 - #define HDMI_SRZ_CTRL 0x0514 14 - 15 - #define HDMI_SRZ_PLL_CFG_POWER_DOWN BIT(0) 16 - #define HDMI_SRZ_PLL_CFG_VCOR_SHIFT 1 17 - #define HDMI_SRZ_PLL_CFG_VCOR_425MHZ 0 18 - #define HDMI_SRZ_PLL_CFG_VCOR_850MHZ 1 19 - #define HDMI_SRZ_PLL_CFG_VCOR_1700MHZ 2 20 - #define HDMI_SRZ_PLL_CFG_VCOR_3000MHZ 3 21 - #define HDMI_SRZ_PLL_CFG_VCOR_MASK 3 22 - #define HDMI_SRZ_PLL_CFG_VCOR(x) (x << HDMI_SRZ_PLL_CFG_VCOR_SHIFT) 23 - #define HDMI_SRZ_PLL_CFG_NDIV_SHIFT 8 24 - #define HDMI_SRZ_PLL_CFG_NDIV_MASK (0x1F << HDMI_SRZ_PLL_CFG_NDIV_SHIFT) 25 - #define HDMI_SRZ_PLL_CFG_MODE_SHIFT 16 26 - #define HDMI_SRZ_PLL_CFG_MODE_13_5_MHZ 0x1 27 - #define HDMI_SRZ_PLL_CFG_MODE_25_2_MHZ 0x4 28 - #define HDMI_SRZ_PLL_CFG_MODE_27_MHZ 0x5 29 - #define HDMI_SRZ_PLL_CFG_MODE_33_75_MHZ 0x6 30 - #define HDMI_SRZ_PLL_CFG_MODE_40_5_MHZ 0x7 31 - #define HDMI_SRZ_PLL_CFG_MODE_54_MHZ 0x8 32 - #define HDMI_SRZ_PLL_CFG_MODE_67_5_MHZ 0x9 33 - #define HDMI_SRZ_PLL_CFG_MODE_74_25_MHZ 0xA 34 - #define HDMI_SRZ_PLL_CFG_MODE_81_MHZ 0xB 35 - #define HDMI_SRZ_PLL_CFG_MODE_82_5_MHZ 0xC 36 - #define HDMI_SRZ_PLL_CFG_MODE_108_MHZ 0xD 37 - #define HDMI_SRZ_PLL_CFG_MODE_148_5_MHZ 0xE 38 - #define HDMI_SRZ_PLL_CFG_MODE_165_MHZ 0xF 39 - #define HDMI_SRZ_PLL_CFG_MODE_MASK 0xF 40 - #define HDMI_SRZ_PLL_CFG_MODE(x) (x << HDMI_SRZ_PLL_CFG_MODE_SHIFT) 41 - 42 - #define HDMI_SRZ_CTRL_POWER_DOWN (1 << 0) 43 - #define HDMI_SRZ_CTRL_EXTERNAL_DATA_EN (1 << 1) 44 - 45 - /* sysconf registers */ 46 - #define HDMI_REJECTION_PLL_CONFIGURATION 0x0858 /* SYSTEM_CONFIG2534 */ 47 - #define HDMI_REJECTION_PLL_STATUS 0x0948 /* SYSTEM_CONFIG2594 */ 48 - 49 - #define REJECTION_PLL_HDMI_ENABLE_SHIFT 0 50 - #define REJECTION_PLL_HDMI_ENABLE_MASK (0x1 << REJECTION_PLL_HDMI_ENABLE_SHIFT) 51 - #define REJECTION_PLL_HDMI_PDIV_SHIFT 24 52 - #define REJECTION_PLL_HDMI_PDIV_MASK (0x7 << REJECTION_PLL_HDMI_PDIV_SHIFT) 53 - #define REJECTION_PLL_HDMI_NDIV_SHIFT 16 54 - #define REJECTION_PLL_HDMI_NDIV_MASK (0xFF << REJECTION_PLL_HDMI_NDIV_SHIFT) 55 - #define REJECTION_PLL_HDMI_MDIV_SHIFT 8 56 - #define REJECTION_PLL_HDMI_MDIV_MASK (0xFF << REJECTION_PLL_HDMI_MDIV_SHIFT) 57 - 58 - #define REJECTION_PLL_HDMI_REJ_PLL_LOCK BIT(0) 59 - 60 - #define HDMI_TIMEOUT_PLL_LOCK 50 /*milliseconds */ 61 - 62 - /** 63 - * pll mode structure 64 - * 65 - * A pointer to an array of these structures is passed to a TMDS (HDMI) output 66 - * via the control interface to provide board and SoC specific 67 - * configurations of the HDMI PHY. Each entry in the array specifies a hardware 68 - * specific configuration for a given TMDS clock frequency range. The array 69 - * should be terminated with an entry that has all fields set to zero. 70 - * 71 - * @min: Lower bound of TMDS clock frequency this entry applies to 72 - * @max: Upper bound of TMDS clock frequency this entry applies to 73 - * @mode: SoC specific register configuration 74 - */ 75 - struct pllmode { 76 - u32 min; 77 - u32 max; 78 - u32 mode; 79 - }; 80 - 81 - #define NB_PLL_MODE 7 82 - static struct pllmode pllmodes[NB_PLL_MODE] = { 83 - {13500000, 13513500, HDMI_SRZ_PLL_CFG_MODE_13_5_MHZ}, 84 - {25174800, 25200000, HDMI_SRZ_PLL_CFG_MODE_25_2_MHZ}, 85 - {27000000, 27027000, HDMI_SRZ_PLL_CFG_MODE_27_MHZ}, 86 - {54000000, 54054000, HDMI_SRZ_PLL_CFG_MODE_54_MHZ}, 87 - {72000000, 74250000, HDMI_SRZ_PLL_CFG_MODE_74_25_MHZ}, 88 - {108000000, 108108000, HDMI_SRZ_PLL_CFG_MODE_108_MHZ}, 89 - {148351648, 297000000, HDMI_SRZ_PLL_CFG_MODE_148_5_MHZ} 90 - }; 91 - 92 - #define NB_HDMI_PHY_CONFIG 5 93 - static struct hdmi_phy_config hdmiphy_config[NB_HDMI_PHY_CONFIG] = { 94 - {0, 40000000, {0x00101010, 0x00101010, 0x00101010, 0x02} }, 95 - {40000000, 140000000, {0x00111111, 0x00111111, 0x00111111, 0x02} }, 96 - {140000000, 160000000, {0x00131313, 0x00101010, 0x00101010, 0x02} }, 97 - {160000000, 250000000, {0x00131313, 0x00111111, 0x00111111, 0x03FE} }, 98 - {250000000, 300000000, {0x00151515, 0x00101010, 0x00101010, 0x03FE} }, 99 - }; 100 - 101 - #define PLL_CHANGE_DELAY 1 /* ms */ 102 - 103 - /** 104 - * Disable the pll rejection 105 - * 106 - * @hdmi: pointer on the hdmi internal structure 107 - * 108 - * return true if the pll has been disabled 109 - */ 110 - static bool disable_pll_rejection(struct sti_hdmi *hdmi) 111 - { 112 - u32 val; 113 - 114 - DRM_DEBUG_DRIVER("\n"); 115 - 116 - val = readl(hdmi->syscfg + HDMI_REJECTION_PLL_CONFIGURATION); 117 - val &= ~REJECTION_PLL_HDMI_ENABLE_MASK; 118 - writel(val, hdmi->syscfg + HDMI_REJECTION_PLL_CONFIGURATION); 119 - 120 - msleep(PLL_CHANGE_DELAY); 121 - val = readl(hdmi->syscfg + HDMI_REJECTION_PLL_STATUS); 122 - 123 - return !(val & REJECTION_PLL_HDMI_REJ_PLL_LOCK); 124 - } 125 - 126 - /** 127 - * Enable the old BCH/rejection PLL is now reused to provide the CLKPXPLL 128 - * clock input to the new PHY PLL that generates the serializer clock 129 - * (TMDS*10) and the TMDS clock which is now fed back into the HDMI 130 - * formatter instead of the TMDS clock line from ClockGenB. 131 - * 132 - * @hdmi: pointer on the hdmi internal structure 133 - * 134 - * return true if pll has been correctly set 135 - */ 136 - static bool enable_pll_rejection(struct sti_hdmi *hdmi) 137 - { 138 - unsigned int inputclock; 139 - u32 mdiv, ndiv, pdiv, val; 140 - 141 - DRM_DEBUG_DRIVER("\n"); 142 - 143 - if (!disable_pll_rejection(hdmi)) 144 - return false; 145 - 146 - inputclock = hdmi->mode.clock * 1000; 147 - 148 - DRM_DEBUG_DRIVER("hdmi rejection pll input clock = %dHz\n", inputclock); 149 - 150 - 151 - /* Power up the HDMI rejection PLL 152 - * Note: On this SoC (stiH416) we are forced to have the input clock 153 - * be equal to the HDMI pixel clock. 154 - * 155 - * The values here have been suggested by validation however they are 156 - * still provisional and subject to change. 157 - * 158 - * PLLout = (Fin*Mdiv) / ((2 * Ndiv) / 2^Pdiv) 159 - */ 160 - if (inputclock < 50000000) { 161 - /* 162 - * For slower clocks we need to multiply more to keep the 163 - * internal VCO frequency within the physical specification 164 - * of the PLL. 165 - */ 166 - pdiv = 4; 167 - ndiv = 240; 168 - mdiv = 30; 169 - } else { 170 - pdiv = 2; 171 - ndiv = 60; 172 - mdiv = 30; 173 - } 174 - 175 - val = readl(hdmi->syscfg + HDMI_REJECTION_PLL_CONFIGURATION); 176 - 177 - val &= ~(REJECTION_PLL_HDMI_PDIV_MASK | 178 - REJECTION_PLL_HDMI_NDIV_MASK | 179 - REJECTION_PLL_HDMI_MDIV_MASK | 180 - REJECTION_PLL_HDMI_ENABLE_MASK); 181 - 182 - val |= (pdiv << REJECTION_PLL_HDMI_PDIV_SHIFT) | 183 - (ndiv << REJECTION_PLL_HDMI_NDIV_SHIFT) | 184 - (mdiv << REJECTION_PLL_HDMI_MDIV_SHIFT) | 185 - (0x1 << REJECTION_PLL_HDMI_ENABLE_SHIFT); 186 - 187 - writel(val, hdmi->syscfg + HDMI_REJECTION_PLL_CONFIGURATION); 188 - 189 - msleep(PLL_CHANGE_DELAY); 190 - val = readl(hdmi->syscfg + HDMI_REJECTION_PLL_STATUS); 191 - 192 - return (val & REJECTION_PLL_HDMI_REJ_PLL_LOCK); 193 - } 194 - 195 - /** 196 - * Start hdmi phy macro cell tx3g0c55 197 - * 198 - * @hdmi: pointer on the hdmi internal structure 199 - * 200 - * Return false if an error occur 201 - */ 202 - static bool sti_hdmi_tx3g0c55phy_start(struct sti_hdmi *hdmi) 203 - { 204 - u32 ckpxpll = hdmi->mode.clock * 1000; 205 - u32 val, tmdsck, freqvco, pllctrl = 0; 206 - unsigned int i; 207 - 208 - if (!enable_pll_rejection(hdmi)) 209 - return false; 210 - 211 - DRM_DEBUG_DRIVER("ckpxpll = %dHz\n", ckpxpll); 212 - 213 - /* Assuming no pixel repetition and 24bits color */ 214 - tmdsck = ckpxpll; 215 - pllctrl = 2 << HDMI_SRZ_PLL_CFG_NDIV_SHIFT; 216 - 217 - /* 218 - * Setup the PLL mode parameter based on the ckpxpll. If we haven't got 219 - * a clock frequency supported by one of the specific PLL modes then we 220 - * will end up using the generic mode (0) which only supports a 10x 221 - * multiplier, hence only 24bit color. 222 - */ 223 - for (i = 0; i < NB_PLL_MODE; i++) { 224 - if (ckpxpll >= pllmodes[i].min && ckpxpll <= pllmodes[i].max) 225 - pllctrl |= HDMI_SRZ_PLL_CFG_MODE(pllmodes[i].mode); 226 - } 227 - 228 - freqvco = tmdsck * 10; 229 - if (freqvco <= 425000000UL) 230 - pllctrl |= HDMI_SRZ_PLL_CFG_VCOR(HDMI_SRZ_PLL_CFG_VCOR_425MHZ); 231 - else if (freqvco <= 850000000UL) 232 - pllctrl |= HDMI_SRZ_PLL_CFG_VCOR(HDMI_SRZ_PLL_CFG_VCOR_850MHZ); 233 - else if (freqvco <= 1700000000UL) 234 - pllctrl |= HDMI_SRZ_PLL_CFG_VCOR(HDMI_SRZ_PLL_CFG_VCOR_1700MHZ); 235 - else if (freqvco <= 2970000000UL) 236 - pllctrl |= HDMI_SRZ_PLL_CFG_VCOR(HDMI_SRZ_PLL_CFG_VCOR_3000MHZ); 237 - else { 238 - DRM_ERROR("PHY serializer clock out of range\n"); 239 - goto err; 240 - } 241 - 242 - /* 243 - * Configure and power up the PHY PLL 244 - */ 245 - hdmi->event_received = false; 246 - DRM_DEBUG_DRIVER("pllctrl = 0x%x\n", pllctrl); 247 - hdmi_write(hdmi, pllctrl, HDMI_SRZ_PLL_CFG); 248 - 249 - /* wait PLL interrupt */ 250 - wait_event_interruptible_timeout(hdmi->wait_event, 251 - hdmi->event_received == true, 252 - msecs_to_jiffies 253 - (HDMI_TIMEOUT_PLL_LOCK)); 254 - 255 - if ((hdmi_read(hdmi, HDMI_STA) & HDMI_STA_DLL_LCK) == 0) { 256 - DRM_ERROR("hdmi phy pll not locked\n"); 257 - goto err; 258 - } 259 - 260 - DRM_DEBUG_DRIVER("got PHY PLL Lock\n"); 261 - 262 - /* 263 - * To configure the source termination and pre-emphasis appropriately 264 - * for different high speed TMDS clock frequencies a phy configuration 265 - * table must be provided, tailored to the SoC and board combination. 266 - */ 267 - for (i = 0; i < NB_HDMI_PHY_CONFIG; i++) { 268 - if ((hdmiphy_config[i].min_tmds_freq <= tmdsck) && 269 - (hdmiphy_config[i].max_tmds_freq >= tmdsck)) { 270 - val = hdmiphy_config[i].config[0]; 271 - hdmi_write(hdmi, val, HDMI_SRZ_TAP_1); 272 - val = hdmiphy_config[i].config[1]; 273 - hdmi_write(hdmi, val, HDMI_SRZ_TAP_2); 274 - val = hdmiphy_config[i].config[2]; 275 - hdmi_write(hdmi, val, HDMI_SRZ_TAP_3); 276 - val = hdmiphy_config[i].config[3]; 277 - val |= HDMI_SRZ_CTRL_EXTERNAL_DATA_EN; 278 - val &= ~HDMI_SRZ_CTRL_POWER_DOWN; 279 - hdmi_write(hdmi, val, HDMI_SRZ_CTRL); 280 - 281 - DRM_DEBUG_DRIVER("serializer cfg 0x%x 0x%x 0x%x 0x%x\n", 282 - hdmiphy_config[i].config[0], 283 - hdmiphy_config[i].config[1], 284 - hdmiphy_config[i].config[2], 285 - hdmiphy_config[i].config[3]); 286 - return true; 287 - } 288 - } 289 - 290 - /* 291 - * Default, power up the serializer with no pre-emphasis or source 292 - * termination. 293 - */ 294 - hdmi_write(hdmi, 0x0, HDMI_SRZ_TAP_1); 295 - hdmi_write(hdmi, 0x0, HDMI_SRZ_TAP_2); 296 - hdmi_write(hdmi, 0x0, HDMI_SRZ_TAP_3); 297 - hdmi_write(hdmi, HDMI_SRZ_CTRL_EXTERNAL_DATA_EN, HDMI_SRZ_CTRL); 298 - 299 - return true; 300 - 301 - err: 302 - disable_pll_rejection(hdmi); 303 - 304 - return false; 305 - } 306 - 307 - /** 308 - * Stop hdmi phy macro cell tx3g0c55 309 - * 310 - * @hdmi: pointer on the hdmi internal structure 311 - */ 312 - static void sti_hdmi_tx3g0c55phy_stop(struct sti_hdmi *hdmi) 313 - { 314 - DRM_DEBUG_DRIVER("\n"); 315 - 316 - hdmi->event_received = false; 317 - 318 - hdmi_write(hdmi, HDMI_SRZ_CTRL_POWER_DOWN, HDMI_SRZ_CTRL); 319 - hdmi_write(hdmi, HDMI_SRZ_PLL_CFG_POWER_DOWN, HDMI_SRZ_PLL_CFG); 320 - 321 - /* wait PLL interrupt */ 322 - wait_event_interruptible_timeout(hdmi->wait_event, 323 - hdmi->event_received == true, 324 - msecs_to_jiffies 325 - (HDMI_TIMEOUT_PLL_LOCK)); 326 - 327 - if (hdmi_read(hdmi, HDMI_STA) & HDMI_STA_DLL_LCK) 328 - DRM_ERROR("hdmi phy pll not well disabled\n"); 329 - 330 - disable_pll_rejection(hdmi); 331 - } 332 - 333 - struct hdmi_phy_ops tx3g0c55phy_ops = { 334 - .start = sti_hdmi_tx3g0c55phy_start, 335 - .stop = sti_hdmi_tx3g0c55phy_stop, 336 - };
-14
drivers/gpu/drm/sti/sti_hdmi_tx3g0c55phy.h
··· 1 - /* 2 - * Copyright (C) STMicroelectronics SA 2014 3 - * Author: Benjamin Gaignard <benjamin.gaignard@st.com> for STMicroelectronics. 4 - * License terms: GNU General Public License (GPL), version 2 5 - */ 6 - 7 - #ifndef _STI_HDMI_TX3G0C55PHY_H_ 8 - #define _STI_HDMI_TX3G0C55PHY_H_ 9 - 10 - #include "sti_hdmi.h" 11 - 12 - extern struct hdmi_phy_ops tx3g0c55phy_ops; 13 - 14 - #endif
-19
drivers/gpu/drm/sti/sti_mixer.c
··· 16 16 MODULE_PARM_DESC(bkgcolor, "Value of the background color 0xRRGGBB"); 17 17 module_param_named(bkgcolor, bkg_color, int, 0644); 18 18 19 - /* Identity: G=Y , B=Cb , R=Cr */ 20 - static const u32 mixerColorSpaceMatIdentity[] = { 21 - 0x10000000, 0x00000000, 0x10000000, 0x00001000, 22 - 0x00000000, 0x00000000, 0x00000000, 0x00000000 23 - }; 24 - 25 19 /* regs offset */ 26 20 #define GAM_MIXER_CTL 0x00 27 21 #define GAM_MIXER_BKC 0x04 ··· 352 358 return 0; 353 359 } 354 360 355 - static void sti_mixer_set_matrix(struct sti_mixer *mixer) 356 - { 357 - unsigned int i; 358 - 359 - for (i = 0; i < ARRAY_SIZE(mixerColorSpaceMatIdentity); i++) 360 - sti_mixer_reg_write(mixer, GAM_MIXER_MX0 + (i * 4), 361 - mixerColorSpaceMatIdentity[i]); 362 - } 363 - 364 361 struct sti_mixer *sti_mixer_create(struct device *dev, 365 362 struct drm_device *drm_dev, 366 363 int id, 367 364 void __iomem *baseaddr) 368 365 { 369 366 struct sti_mixer *mixer = devm_kzalloc(dev, sizeof(*mixer), GFP_KERNEL); 370 - struct device_node *np = dev->of_node; 371 367 372 368 dev_dbg(dev, "%s\n", __func__); 373 369 if (!mixer) { ··· 367 383 mixer->regs = baseaddr; 368 384 mixer->dev = dev; 369 385 mixer->id = id; 370 - 371 - if (of_device_is_compatible(np, "st,stih416-compositor")) 372 - sti_mixer_set_matrix(mixer); 373 386 374 387 DRM_DEBUG_DRIVER("%s created. Regs=%p\n", 375 388 sti_mixer_to_str(mixer), mixer->regs);
+8 -32
drivers/gpu/drm/sti/sti_tvout.c
··· 210 210 * @tvout: tvout structure 211 211 * @reg: register to set 212 212 * @main_path: main or auxiliary path 213 - * @sel_input_logic_inverted: need to invert the logic 214 213 * @sel_input: selected_input (main/aux + conv) 215 214 */ 216 215 static void tvout_vip_set_sel_input(struct sti_tvout *tvout, 217 216 int reg, 218 217 bool main_path, 219 - bool sel_input_logic_inverted, 220 218 enum sti_tvout_video_out_type video_out) 221 219 { 222 220 u32 sel_input; ··· 235 237 } 236 238 237 239 /* on stih407 chip the sel_input bypass mode logic is inverted */ 238 - if (sel_input_logic_inverted) 239 - sel_input = sel_input ^ TVO_VIP_SEL_INPUT_BYPASS_MASK; 240 + sel_input = sel_input ^ TVO_VIP_SEL_INPUT_BYPASS_MASK; 240 241 241 242 val &= ~TVO_VIP_SEL_INPUT_MASK; 242 243 val |= sel_input; ··· 293 296 */ 294 297 static void tvout_dvo_start(struct sti_tvout *tvout, bool main_path) 295 298 { 296 - struct device_node *node = tvout->dev->of_node; 297 - bool sel_input_logic_inverted = false; 298 299 u32 tvo_in_vid_format; 299 300 int val, tmp; 300 301 ··· 330 335 /* Set round mode (rounded to 8-bit per component) */ 331 336 tvout_vip_set_rnd(tvout, TVO_VIP_DVO, TVO_VIP_RND_8BIT_ROUNDED); 332 337 333 - if (of_device_is_compatible(node, "st,stih407-tvout")) { 334 - /* Set input video format */ 335 - tvout_vip_set_in_vid_fmt(tvout, tvo_in_vid_format, 336 - TVO_IN_FMT_SIGNED); 337 - sel_input_logic_inverted = true; 338 - } 338 + /* Set input video format */ 339 + tvout_vip_set_in_vid_fmt(tvout, tvo_in_vid_format, TVO_IN_FMT_SIGNED); 339 340 340 341 /* Input selection */ 341 342 tvout_vip_set_sel_input(tvout, TVO_VIP_DVO, main_path, 342 - sel_input_logic_inverted, 343 343 STI_TVOUT_VIDEO_OUT_RGB); 344 344 } 345 345 ··· 347 357 */ 348 358 static void tvout_hdmi_start(struct sti_tvout *tvout, bool main_path) 349 359 { 350 - struct device_node *node = tvout->dev->of_node; 351 - bool sel_input_logic_inverted = false; 352 360 u32 tvo_in_vid_format; 353 361 354 362 dev_dbg(tvout->dev, "%s\n", __func__); ··· 379 391 /* set round mode (rounded to 8-bit per component) */ 380 392 tvout_vip_set_rnd(tvout, TVO_VIP_HDMI, TVO_VIP_RND_8BIT_ROUNDED); 381 393 382 - if (of_device_is_compatible(node, "st,stih407-tvout")) { 383 - /* set input video format */ 384 - tvout_vip_set_in_vid_fmt(tvout, tvo_in_vid_format, 385 - TVO_IN_FMT_SIGNED); 386 - sel_input_logic_inverted = true; 387 - } 394 + /* set input video format */ 395 + tvout_vip_set_in_vid_fmt(tvout, tvo_in_vid_format, TVO_IN_FMT_SIGNED); 388 396 389 397 /* input selection */ 390 398 tvout_vip_set_sel_input(tvout, TVO_VIP_HDMI, main_path, 391 - sel_input_logic_inverted, STI_TVOUT_VIDEO_OUT_RGB); 399 + STI_TVOUT_VIDEO_OUT_RGB); 392 400 } 393 401 394 402 /** ··· 396 412 */ 397 413 static void tvout_hda_start(struct sti_tvout *tvout, bool main_path) 398 414 { 399 - struct device_node *node = tvout->dev->of_node; 400 - bool sel_input_logic_inverted = false; 401 415 u32 tvo_in_vid_format; 402 416 int val; 403 417 ··· 431 449 /* set round mode (rounded to 10-bit per component) */ 432 450 tvout_vip_set_rnd(tvout, TVO_VIP_HDF, TVO_VIP_RND_10BIT_ROUNDED); 433 451 434 - if (of_device_is_compatible(node, "st,stih407-tvout")) { 435 - /* set input video format */ 436 - tvout_vip_set_in_vid_fmt(tvout, 437 - tvo_in_vid_format, TVO_IN_FMT_SIGNED); 438 - sel_input_logic_inverted = true; 439 - } 452 + /* Set input video format */ 453 + tvout_vip_set_in_vid_fmt(tvout, tvo_in_vid_format, TVO_IN_FMT_SIGNED); 440 454 441 455 /* Input selection */ 442 456 tvout_vip_set_sel_input(tvout, TVO_VIP_HDF, main_path, 443 - sel_input_logic_inverted, 444 457 STI_TVOUT_VIDEO_OUT_YUV); 445 458 446 459 /* power up HD DAC */ ··· 883 906 } 884 907 885 908 static const struct of_device_id tvout_of_match[] = { 886 - { .compatible = "st,stih416-tvout", }, 887 909 { .compatible = "st,stih407-tvout", }, 888 910 { /* end node */ } 889 911 };