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

Merge tag 'drm-misc-fixes-2018-12-05' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes

UAPI:
- Distinguish lease events from hotplug (Daniel)

Other:
- omap: Restore panel-dpi bus flags (Tomi)
- omap: Fix a couple of dsi issues (Sebastian)

Cc: Sebastian Reichel <sebastian.reichel@collabora.com>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Sean Paul <sean@poorly.run>
Link: https://patchwork.freedesktop.org/patch/msgid/20181205201428.GA35447@art_vandelay

+60 -39
+1 -1
drivers/gpu/drm/bridge/ti-sn65dsi86.c
··· 54 54 #define SN_AUX_ADDR_7_0_REG 0x76 55 55 #define SN_AUX_LENGTH_REG 0x77 56 56 #define SN_AUX_CMD_REG 0x78 57 - #define AUX_CMD_SEND BIT(1) 57 + #define AUX_CMD_SEND BIT(0) 58 58 #define AUX_CMD_REQ(x) ((x) << 4) 59 59 #define SN_AUX_RDATA_REG(x) (0x79 + (x)) 60 60 #define SN_SSC_CONFIG_REG 0x93
+1 -1
drivers/gpu/drm/drm_fb_helper.c
··· 71 71 #if IS_ENABLED(CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM) 72 72 static bool drm_leak_fbdev_smem = false; 73 73 module_param_unsafe(drm_leak_fbdev_smem, bool, 0600); 74 - MODULE_PARM_DESC(fbdev_emulation, 74 + MODULE_PARM_DESC(drm_leak_fbdev_smem, 75 75 "Allow unsafe leaking fbdev physical smem address [default=false]"); 76 76 #endif 77 77
+2
drivers/gpu/drm/drm_internal.h
··· 104 104 int drm_sysfs_connector_add(struct drm_connector *connector); 105 105 void drm_sysfs_connector_remove(struct drm_connector *connector); 106 106 107 + void drm_sysfs_lease_event(struct drm_device *dev); 108 + 107 109 /* drm_gem.c */ 108 110 int drm_gem_init(struct drm_device *dev); 109 111 void drm_gem_destroy(struct drm_device *dev);
+1 -1
drivers/gpu/drm/drm_lease.c
··· 296 296 297 297 if (master->lessor) { 298 298 /* Tell the master to check the lessee list */ 299 - drm_sysfs_hotplug_event(dev); 299 + drm_sysfs_lease_event(dev); 300 300 drm_master_put(&master->lessor); 301 301 } 302 302
+10
drivers/gpu/drm/drm_sysfs.c
··· 301 301 connector->kdev = NULL; 302 302 } 303 303 304 + void drm_sysfs_lease_event(struct drm_device *dev) 305 + { 306 + char *event_string = "LEASE=1"; 307 + char *envp[] = { event_string, NULL }; 308 + 309 + DRM_DEBUG("generating lease event\n"); 310 + 311 + kobject_uevent_env(&dev->primary->kdev->kobj, KOBJ_CHANGE, envp); 312 + } 313 + 304 314 /** 305 315 * drm_sysfs_hotplug_event - generate a DRM uevent 306 316 * @dev: DRM device
+1
drivers/gpu/drm/omapdrm/displays/panel-dpi.c
··· 177 177 dssdev->type = OMAP_DISPLAY_TYPE_DPI; 178 178 dssdev->owner = THIS_MODULE; 179 179 dssdev->of_ports = BIT(0); 180 + drm_bus_flags_from_videomode(&ddata->vm, &dssdev->bus_flags); 180 181 181 182 omapdss_display_init(dssdev); 182 183 omapdss_device_register(dssdev);
+10 -10
drivers/gpu/drm/omapdrm/dss/dsi.c
··· 5418 5418 dsi->num_lanes_supported = 3; 5419 5419 } 5420 5420 5421 + r = of_platform_populate(dev->of_node, NULL, NULL, dev); 5422 + if (r) { 5423 + DSSERR("Failed to populate DSI child devices: %d\n", r); 5424 + goto err_pm_disable; 5425 + } 5426 + 5421 5427 r = dsi_init_output(dsi); 5422 5428 if (r) 5423 - goto err_pm_disable; 5429 + goto err_of_depopulate; 5424 5430 5425 5431 r = dsi_probe_of(dsi); 5426 5432 if (r) { ··· 5434 5428 goto err_uninit_output; 5435 5429 } 5436 5430 5437 - r = of_platform_populate(dev->of_node, NULL, NULL, dev); 5438 - if (r) { 5439 - DSSERR("Failed to populate DSI child devices: %d\n", r); 5440 - goto err_uninit_output; 5441 - } 5442 - 5443 5431 r = component_add(&pdev->dev, &dsi_component_ops); 5444 5432 if (r) 5445 - goto err_of_depopulate; 5433 + goto err_uninit_output; 5446 5434 5447 5435 return 0; 5448 5436 5449 - err_of_depopulate: 5450 - of_platform_depopulate(dev); 5451 5437 err_uninit_output: 5452 5438 dsi_uninit_output(dsi); 5439 + err_of_depopulate: 5440 + of_platform_depopulate(dev); 5453 5441 err_pm_disable: 5454 5442 pm_runtime_disable(dev); 5455 5443 return r;
+1 -1
drivers/gpu/drm/omapdrm/dss/omapdss.h
··· 432 432 const struct omap_dss_driver *driver; 433 433 const struct omap_dss_device_ops *ops; 434 434 unsigned long ops_flags; 435 - unsigned long bus_flags; 435 + u32 bus_flags; 436 436 437 437 /* helper variable for driver suspend/resume */ 438 438 bool activate_after_resume;
+33 -25
drivers/gpu/drm/omapdrm/omap_encoder.c
··· 52 52 .destroy = omap_encoder_destroy, 53 53 }; 54 54 55 + static void omap_encoder_hdmi_mode_set(struct drm_encoder *encoder, 56 + struct drm_display_mode *adjusted_mode) 57 + { 58 + struct drm_device *dev = encoder->dev; 59 + struct omap_encoder *omap_encoder = to_omap_encoder(encoder); 60 + struct omap_dss_device *dssdev = omap_encoder->output; 61 + struct drm_connector *connector; 62 + bool hdmi_mode; 63 + 64 + hdmi_mode = false; 65 + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 66 + if (connector->encoder == encoder) { 67 + hdmi_mode = omap_connector_get_hdmi_mode(connector); 68 + break; 69 + } 70 + } 71 + 72 + if (dssdev->ops->hdmi.set_hdmi_mode) 73 + dssdev->ops->hdmi.set_hdmi_mode(dssdev, hdmi_mode); 74 + 75 + if (hdmi_mode && dssdev->ops->hdmi.set_infoframe) { 76 + struct hdmi_avi_infoframe avi; 77 + int r; 78 + 79 + r = drm_hdmi_avi_infoframe_from_display_mode(&avi, adjusted_mode, 80 + false); 81 + if (r == 0) 82 + dssdev->ops->hdmi.set_infoframe(dssdev, &avi); 83 + } 84 + } 85 + 55 86 static void omap_encoder_mode_set(struct drm_encoder *encoder, 56 87 struct drm_display_mode *mode, 57 88 struct drm_display_mode *adjusted_mode) 58 89 { 59 - struct drm_device *dev = encoder->dev; 60 90 struct omap_encoder *omap_encoder = to_omap_encoder(encoder); 61 - struct drm_connector *connector; 62 91 struct omap_dss_device *dssdev; 63 92 struct videomode vm = { 0 }; 64 - bool hdmi_mode; 65 - int r; 66 93 67 94 drm_display_mode_to_videomode(adjusted_mode, &vm); 68 95 ··· 139 112 } 140 113 141 114 /* Set the HDMI mode and HDMI infoframe if applicable. */ 142 - hdmi_mode = false; 143 - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 144 - if (connector->encoder == encoder) { 145 - hdmi_mode = omap_connector_get_hdmi_mode(connector); 146 - break; 147 - } 148 - } 149 - 150 - dssdev = omap_encoder->output; 151 - 152 - if (dssdev->ops->hdmi.set_hdmi_mode) 153 - dssdev->ops->hdmi.set_hdmi_mode(dssdev, hdmi_mode); 154 - 155 - if (hdmi_mode && dssdev->ops->hdmi.set_infoframe) { 156 - struct hdmi_avi_infoframe avi; 157 - 158 - r = drm_hdmi_avi_infoframe_from_display_mode(&avi, adjusted_mode, 159 - false); 160 - if (r == 0) 161 - dssdev->ops->hdmi.set_infoframe(dssdev, &avi); 162 - } 115 + if (omap_encoder->output->output_type == OMAP_DISPLAY_TYPE_HDMI) 116 + omap_encoder_hdmi_mode_set(encoder, adjusted_mode); 163 117 } 164 118 165 119 static void omap_encoder_disable(struct drm_encoder *encoder)