Skip to content

Commit 4ae9f87

Browse files
committed
Merge tag 'drm-misc-next-2022-09-30' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
drm-misc-next for v6.1: Core Changes: - Add dma_resv_assert_held to vmap/vunmap calls. - Add kunit tests for some format conversion calls. - Don't rewrite link config when setting phy test pattern in DP link training. Driver Changes: - Assorted small fixes in bridge/lt8192b, qxl, virtio-gpu, ast. - Fix corrupted image output in lt8912b. - Fix driver unbind in meson. - Add INX, BOE, AUO, Multi-Inno Technology panels to panel-edp. - Synchronize access to GEM bo's in simpledrm, ssd130x. - Use dev_err_probe in panel-edp and panel-simple. Signed-off-by: Dave Airlie <[email protected]> From: Maarten Lankhorst <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents 7860d72 + c9b48b9 commit 4ae9f87

22 files changed

+396
-115
lines changed

Documentation/devicetree/bindings/display/panel/panel-simple.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,8 @@ properties:
234234
- mitsubishi,aa070mc01-ca1
235235
# Multi-Inno Technology Co.,Ltd MI0700S4T-6 7" 800x480 TFT Resistive Touch Module
236236
- multi-inno,mi0700s4t-6
237+
# Multi-Inno Technology Co.,Ltd MI0800FT-9 8" 800x600 TFT Resistive Touch Module
238+
- multi-inno,mi0800ft-9
237239
# Multi-Inno Technology Co.,Ltd MI1010AIT-1CP 10.1" 1280x800 LVDS IPS Cap Touch Mod.
238240
- multi-inno,mi1010ait-1cp
239241
# NEC LCD Technologies, Ltd. 12.1" WXGA (1280x800) LVDS TFT LCD panel

drivers/gpu/drm/ast/ast_drv.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040
#include "ast_drv.h"
4141

42-
int ast_modeset = -1;
42+
static int ast_modeset = -1;
4343

4444
MODULE_PARM_DESC(modeset, "Disable/Enable modesetting");
4545
module_param_named(modeset, ast_modeset, int, 0400);

drivers/gpu/drm/bridge/lontium-lt8912b.c

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -165,30 +165,38 @@ static int lt8912_write_rxlogicres_config(struct lt8912 *lt)
165165
return ret;
166166
};
167167

168+
/* enable LVDS output with some hardcoded configuration, not required for the HDMI output */
168169
static int lt8912_write_lvds_config(struct lt8912 *lt)
169170
{
170171
const struct reg_sequence seq[] = {
172+
// lvds power up
171173
{0x44, 0x30},
172174
{0x51, 0x05},
173-
{0x50, 0x24},
174-
{0x51, 0x2d},
175-
{0x52, 0x04},
176-
{0x69, 0x0e},
175+
176+
// core pll bypass
177+
{0x50, 0x24}, // cp=50uA
178+
{0x51, 0x2d}, // Pix_clk as reference, second order passive LPF PLL
179+
{0x52, 0x04}, // loopdiv=0, use second-order PLL
180+
{0x69, 0x0e}, // CP_PRESET_DIV_RATIO
177181
{0x69, 0x8e},
178182
{0x6a, 0x00},
179-
{0x6c, 0xb8},
183+
{0x6c, 0xb8}, // RGD_CP_SOFT_K_EN,RGD_CP_SOFT_K[13:8]
180184
{0x6b, 0x51},
181-
{0x04, 0xfb},
185+
186+
{0x04, 0xfb}, // core pll reset
182187
{0x04, 0xff},
183-
{0x7f, 0x00},
184-
{0xa8, 0x13},
185-
{0x02, 0xf7},
188+
189+
// scaler bypass
190+
{0x7f, 0x00}, // disable scaler
191+
{0xa8, 0x13}, // 0x13: JEIDA, 0x33: VESA
192+
193+
{0x02, 0xf7}, // lvds pll reset
186194
{0x02, 0xff},
187195
{0x03, 0xcf},
188196
{0x03, 0xff},
189197
};
190198

191-
return regmap_multi_reg_write(lt->regmap[I2C_CEC_DSI], seq, ARRAY_SIZE(seq));
199+
return regmap_multi_reg_write(lt->regmap[I2C_MAIN], seq, ARRAY_SIZE(seq));
192200
};
193201

194202
static inline struct lt8912 *bridge_to_lt8912(struct drm_bridge *b)
@@ -268,7 +276,7 @@ static int lt8912_video_setup(struct lt8912 *lt)
268276
u32 hactive, h_total, hpw, hfp, hbp;
269277
u32 vactive, v_total, vpw, vfp, vbp;
270278
u8 settle = 0x08;
271-
int ret;
279+
int ret, hsync_activehigh, vsync_activehigh;
272280

273281
if (!lt)
274282
return -EINVAL;
@@ -278,12 +286,14 @@ static int lt8912_video_setup(struct lt8912 *lt)
278286
hpw = lt->mode.hsync_len;
279287
hbp = lt->mode.hback_porch;
280288
h_total = hactive + hfp + hpw + hbp;
289+
hsync_activehigh = lt->mode.flags & DISPLAY_FLAGS_HSYNC_HIGH;
281290

282291
vactive = lt->mode.vactive;
283292
vfp = lt->mode.vfront_porch;
284293
vpw = lt->mode.vsync_len;
285294
vbp = lt->mode.vback_porch;
286295
v_total = vactive + vfp + vpw + vbp;
296+
vsync_activehigh = lt->mode.flags & DISPLAY_FLAGS_VSYNC_HIGH;
287297

288298
if (vactive <= 600)
289299
settle = 0x04;
@@ -317,6 +327,13 @@ static int lt8912_video_setup(struct lt8912 *lt)
317327
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x3e, hfp & 0xff);
318328
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x3f, hfp >> 8);
319329

330+
ret |= regmap_update_bits(lt->regmap[I2C_MAIN], 0xab, BIT(0),
331+
vsync_activehigh ? BIT(0) : 0);
332+
ret |= regmap_update_bits(lt->regmap[I2C_MAIN], 0xab, BIT(1),
333+
hsync_activehigh ? BIT(1) : 0);
334+
ret |= regmap_update_bits(lt->regmap[I2C_MAIN], 0xb2, BIT(0),
335+
lt->connector.display_info.is_hdmi ? BIT(0) : 0);
336+
320337
return ret;
321338
}
322339

drivers/gpu/drm/display/drm_dp_helper.c

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2670,17 +2670,8 @@ int drm_dp_set_phy_test_pattern(struct drm_dp_aux *aux,
26702670
struct drm_dp_phy_test_params *data, u8 dp_rev)
26712671
{
26722672
int err, i;
2673-
u8 link_config[2];
26742673
u8 test_pattern;
26752674

2676-
link_config[0] = drm_dp_link_rate_to_bw_code(data->link_rate);
2677-
link_config[1] = data->num_lanes;
2678-
if (data->enhanced_frame_cap)
2679-
link_config[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
2680-
err = drm_dp_dpcd_write(aux, DP_LINK_BW_SET, link_config, 2);
2681-
if (err < 0)
2682-
return err;
2683-
26842675
test_pattern = data->phy_pattern;
26852676
if (dp_rev < 0x12) {
26862677
test_pattern = (test_pattern << 2) &

drivers/gpu/drm/drm_format_helper.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,7 @@ void drm_fb_xrgb8888_to_xrgb2101010(struct iosys_map *dst, const unsigned int *d
553553
drm_fb_xfrm(dst, dst_pitch, dst_pixsize, src, fb, clip, false,
554554
drm_fb_xrgb8888_to_xrgb2101010_line);
555555
}
556+
EXPORT_SYMBOL(drm_fb_xrgb8888_to_xrgb2101010);
556557

557558
static void drm_fb_xrgb8888_to_gray8_line(void *dbuf, const void *sbuf, unsigned int pixels)
558559
{

drivers/gpu/drm/drm_framebuffer.c

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,13 @@ int drm_framebuffer_check_src_coords(uint32_t src_x, uint32_t src_y,
8787
src_x > fb_width - src_w ||
8888
src_h > fb_height ||
8989
src_y > fb_height - src_h) {
90-
DRM_DEBUG_KMS("Invalid source coordinates "
91-
"%u.%06ux%u.%06u+%u.%06u+%u.%06u (fb %ux%u)\n",
92-
src_w >> 16, ((src_w & 0xffff) * 15625) >> 10,
93-
src_h >> 16, ((src_h & 0xffff) * 15625) >> 10,
94-
src_x >> 16, ((src_x & 0xffff) * 15625) >> 10,
95-
src_y >> 16, ((src_y & 0xffff) * 15625) >> 10,
96-
fb->width, fb->height);
90+
drm_dbg_kms(fb->dev, "Invalid source coordinates "
91+
"%u.%06ux%u.%06u+%u.%06u+%u.%06u (fb %ux%u)\n",
92+
src_w >> 16, ((src_w & 0xffff) * 15625) >> 10,
93+
src_h >> 16, ((src_h & 0xffff) * 15625) >> 10,
94+
src_x >> 16, ((src_x & 0xffff) * 15625) >> 10,
95+
src_y >> 16, ((src_y & 0xffff) * 15625) >> 10,
96+
fb->width, fb->height);
9797
return -ENOSPC;
9898
}
9999

@@ -125,7 +125,7 @@ int drm_mode_addfb(struct drm_device *dev, struct drm_mode_fb_cmd *or,
125125

126126
r.pixel_format = drm_driver_legacy_fb_format(dev, or->bpp, or->depth);
127127
if (r.pixel_format == DRM_FORMAT_INVALID) {
128-
DRM_DEBUG("bad {bpp:%d, depth:%d}\n", or->bpp, or->depth);
128+
drm_dbg_kms(dev, "bad {bpp:%d, depth:%d}\n", or->bpp, or->depth);
129129
return -EINVAL;
130130
}
131131

@@ -177,18 +177,18 @@ static int framebuffer_check(struct drm_device *dev,
177177

178178
/* check if the format is supported at all */
179179
if (!__drm_format_info(r->pixel_format)) {
180-
DRM_DEBUG_KMS("bad framebuffer format %p4cc\n",
181-
&r->pixel_format);
180+
drm_dbg_kms(dev, "bad framebuffer format %p4cc\n",
181+
&r->pixel_format);
182182
return -EINVAL;
183183
}
184184

185185
if (r->width == 0) {
186-
DRM_DEBUG_KMS("bad framebuffer width %u\n", r->width);
186+
drm_dbg_kms(dev, "bad framebuffer width %u\n", r->width);
187187
return -EINVAL;
188188
}
189189

190190
if (r->height == 0) {
191-
DRM_DEBUG_KMS("bad framebuffer height %u\n", r->height);
191+
drm_dbg_kms(dev, "bad framebuffer height %u\n", r->height);
192192
return -EINVAL;
193193
}
194194

@@ -202,12 +202,12 @@ static int framebuffer_check(struct drm_device *dev,
202202
u64 min_pitch = drm_format_info_min_pitch(info, i, width);
203203

204204
if (!block_size && (r->modifier[i] == DRM_FORMAT_MOD_LINEAR)) {
205-
DRM_DEBUG_KMS("Format requires non-linear modifier for plane %d\n", i);
205+
drm_dbg_kms(dev, "Format requires non-linear modifier for plane %d\n", i);
206206
return -EINVAL;
207207
}
208208

209209
if (!r->handles[i]) {
210-
DRM_DEBUG_KMS("no buffer object handle for plane %d\n", i);
210+
drm_dbg_kms(dev, "no buffer object handle for plane %d\n", i);
211211
return -EINVAL;
212212
}
213213

@@ -218,20 +218,20 @@ static int framebuffer_check(struct drm_device *dev,
218218
return -ERANGE;
219219

220220
if (block_size && r->pitches[i] < min_pitch) {
221-
DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
221+
drm_dbg_kms(dev, "bad pitch %u for plane %d\n", r->pitches[i], i);
222222
return -EINVAL;
223223
}
224224

225225
if (r->modifier[i] && !(r->flags & DRM_MODE_FB_MODIFIERS)) {
226-
DRM_DEBUG_KMS("bad fb modifier %llu for plane %d\n",
227-
r->modifier[i], i);
226+
drm_dbg_kms(dev, "bad fb modifier %llu for plane %d\n",
227+
r->modifier[i], i);
228228
return -EINVAL;
229229
}
230230

231231
if (r->flags & DRM_MODE_FB_MODIFIERS &&
232232
r->modifier[i] != r->modifier[0]) {
233-
DRM_DEBUG_KMS("bad fb modifier %llu for plane %d\n",
234-
r->modifier[i], i);
233+
drm_dbg_kms(dev, "bad fb modifier %llu for plane %d\n",
234+
r->modifier[i], i);
235235
return -EINVAL;
236236
}
237237

@@ -244,7 +244,7 @@ static int framebuffer_check(struct drm_device *dev,
244244
if (r->pixel_format != DRM_FORMAT_NV12 ||
245245
width % 128 || height % 32 ||
246246
r->pitches[i] % 128) {
247-
DRM_DEBUG_KMS("bad modifier data for plane %d\n", i);
247+
drm_dbg_kms(dev, "bad modifier data for plane %d\n", i);
248248
return -EINVAL;
249249
}
250250
break;
@@ -256,7 +256,7 @@ static int framebuffer_check(struct drm_device *dev,
256256

257257
for (i = info->num_planes; i < 4; i++) {
258258
if (r->modifier[i]) {
259-
DRM_DEBUG_KMS("non-zero modifier for unused plane %d\n", i);
259+
drm_dbg_kms(dev, "non-zero modifier for unused plane %d\n", i);
260260
return -EINVAL;
261261
}
262262

@@ -265,17 +265,17 @@ static int framebuffer_check(struct drm_device *dev,
265265
continue;
266266

267267
if (r->handles[i]) {
268-
DRM_DEBUG_KMS("buffer object handle for unused plane %d\n", i);
268+
drm_dbg_kms(dev, "buffer object handle for unused plane %d\n", i);
269269
return -EINVAL;
270270
}
271271

272272
if (r->pitches[i]) {
273-
DRM_DEBUG_KMS("non-zero pitch for unused plane %d\n", i);
273+
drm_dbg_kms(dev, "non-zero pitch for unused plane %d\n", i);
274274
return -EINVAL;
275275
}
276276

277277
if (r->offsets[i]) {
278-
DRM_DEBUG_KMS("non-zero offset for unused plane %d\n", i);
278+
drm_dbg_kms(dev, "non-zero offset for unused plane %d\n", i);
279279
return -EINVAL;
280280
}
281281
}
@@ -293,24 +293,24 @@ drm_internal_framebuffer_create(struct drm_device *dev,
293293
int ret;
294294

295295
if (r->flags & ~(DRM_MODE_FB_INTERLACED | DRM_MODE_FB_MODIFIERS)) {
296-
DRM_DEBUG_KMS("bad framebuffer flags 0x%08x\n", r->flags);
296+
drm_dbg_kms(dev, "bad framebuffer flags 0x%08x\n", r->flags);
297297
return ERR_PTR(-EINVAL);
298298
}
299299

300300
if ((config->min_width > r->width) || (r->width > config->max_width)) {
301-
DRM_DEBUG_KMS("bad framebuffer width %d, should be >= %d && <= %d\n",
302-
r->width, config->min_width, config->max_width);
301+
drm_dbg_kms(dev, "bad framebuffer width %d, should be >= %d && <= %d\n",
302+
r->width, config->min_width, config->max_width);
303303
return ERR_PTR(-EINVAL);
304304
}
305305
if ((config->min_height > r->height) || (r->height > config->max_height)) {
306-
DRM_DEBUG_KMS("bad framebuffer height %d, should be >= %d && <= %d\n",
307-
r->height, config->min_height, config->max_height);
306+
drm_dbg_kms(dev, "bad framebuffer height %d, should be >= %d && <= %d\n",
307+
r->height, config->min_height, config->max_height);
308308
return ERR_PTR(-EINVAL);
309309
}
310310

311311
if (r->flags & DRM_MODE_FB_MODIFIERS &&
312312
dev->mode_config.fb_modifiers_not_supported) {
313-
DRM_DEBUG_KMS("driver does not support fb modifiers\n");
313+
drm_dbg_kms(dev, "driver does not support fb modifiers\n");
314314
return ERR_PTR(-EINVAL);
315315
}
316316

@@ -320,7 +320,7 @@ drm_internal_framebuffer_create(struct drm_device *dev,
320320

321321
fb = dev->mode_config.funcs->fb_create(dev, file_priv, r);
322322
if (IS_ERR(fb)) {
323-
DRM_DEBUG_KMS("could not create framebuffer\n");
323+
drm_dbg_kms(dev, "could not create framebuffer\n");
324324
return fb;
325325
}
326326

@@ -356,7 +356,7 @@ int drm_mode_addfb2(struct drm_device *dev,
356356
if (IS_ERR(fb))
357357
return PTR_ERR(fb);
358358

359-
DRM_DEBUG_KMS("[FB:%d]\n", fb->base.id);
359+
drm_dbg_kms(dev, "[FB:%d]\n", fb->base.id);
360360
r->fb_id = fb->base.id;
361361

362362
/* Transfer ownership to the filp for reaping on close */
@@ -384,7 +384,7 @@ int drm_mode_addfb2_ioctl(struct drm_device *dev,
384384
* then. So block it to make userspace fallback to
385385
* ADDFB.
386386
*/
387-
DRM_DEBUG_KMS("addfb2 broken on bigendian");
387+
drm_dbg_kms(dev, "addfb2 broken on bigendian");
388388
return -EOPNOTSUPP;
389389
}
390390
#endif

drivers/gpu/drm/meson/meson_drv.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,10 +388,14 @@ static void meson_drv_unbind(struct device *dev)
388388
drm_dev_unregister(drm);
389389
drm_kms_helper_poll_fini(drm);
390390
drm_atomic_helper_shutdown(drm);
391-
component_unbind_all(dev, drm);
392391
free_irq(priv->vsync_irq, drm);
393392
drm_dev_put(drm);
394393

394+
meson_encoder_hdmi_remove(priv);
395+
meson_encoder_cvbs_remove(priv);
396+
397+
component_unbind_all(dev, drm);
398+
395399
if (priv->afbcd.ops)
396400
priv->afbcd.ops->exit(priv);
397401
}
@@ -493,6 +497,13 @@ static int meson_drv_probe(struct platform_device *pdev)
493497
return 0;
494498
};
495499

500+
static int meson_drv_remove(struct platform_device *pdev)
501+
{
502+
component_master_del(&pdev->dev, &meson_drv_master_ops);
503+
504+
return 0;
505+
}
506+
496507
static struct meson_drm_match_data meson_drm_gxbb_data = {
497508
.compat = VPU_COMPATIBLE_GXBB,
498509
};
@@ -530,6 +541,7 @@ static const struct dev_pm_ops meson_drv_pm_ops = {
530541

531542
static struct platform_driver meson_drm_platform_driver = {
532543
.probe = meson_drv_probe,
544+
.remove = meson_drv_remove,
533545
.shutdown = meson_drv_shutdown,
534546
.driver = {
535547
.name = "meson-drm",

drivers/gpu/drm/meson/meson_drv.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ enum vpu_compatible {
2525
VPU_COMPATIBLE_G12A = 3,
2626
};
2727

28+
enum {
29+
MESON_ENC_CVBS = 0,
30+
MESON_ENC_HDMI,
31+
MESON_ENC_LAST,
32+
};
33+
2834
struct meson_drm_match_data {
2935
enum vpu_compatible compat;
3036
struct meson_afbcd_ops *afbcd_ops;
@@ -51,6 +57,7 @@ struct meson_drm {
5157
struct drm_crtc *crtc;
5258
struct drm_plane *primary_plane;
5359
struct drm_plane *overlay_plane;
60+
void *encoders[MESON_ENC_LAST];
5461

5562
const struct meson_drm_soc_limits *limits;
5663

drivers/gpu/drm/meson/meson_encoder_cvbs.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,5 +281,18 @@ int meson_encoder_cvbs_init(struct meson_drm *priv)
281281
}
282282
drm_connector_attach_encoder(connector, &meson_encoder_cvbs->encoder);
283283

284+
priv->encoders[MESON_ENC_CVBS] = meson_encoder_cvbs;
285+
284286
return 0;
285287
}
288+
289+
void meson_encoder_cvbs_remove(struct meson_drm *priv)
290+
{
291+
struct meson_encoder_cvbs *meson_encoder_cvbs;
292+
293+
if (priv->encoders[MESON_ENC_CVBS]) {
294+
meson_encoder_cvbs = priv->encoders[MESON_ENC_CVBS];
295+
drm_bridge_remove(&meson_encoder_cvbs->bridge);
296+
drm_bridge_remove(meson_encoder_cvbs->next_bridge);
297+
}
298+
}

0 commit comments

Comments
 (0)