From b4efbf429ec391146c4f33286eef16b1762cbcb9 Mon Sep 17 00:00:00 2001 From: zrj Date: Fri, 31 Jul 2015 12:00:57 +0300 Subject: [PATCH] drm: add connector/encoder name creation This implements name creation using drm_asprintf() helper function. For now skip "adapter->name". --- sys/dev/drm/drm_crtc.c | 21 +++++++++++++++++ sys/dev/drm/drm_dragonfly.c | 37 ++++++++++++++++++++++++++++++ sys/dev/drm/i915/i915_irq.c | 8 +++---- sys/dev/drm/i915/intel_crt.c | 2 +- sys/dev/drm/i915/intel_display.c | 20 ++++++++-------- sys/dev/drm/i915/intel_dp.c | 2 +- sys/dev/drm/i915/intel_fbdev.c | 12 +++++----- sys/dev/drm/i915/intel_hdmi.c | 2 +- sys/dev/drm/i915/intel_lvds.c | 2 +- sys/dev/drm/i915/intel_panel.c | 2 +- sys/dev/drm/i915/intel_sdvo.c | 8 +++---- sys/dev/drm/i915/intel_tv.c | 2 +- sys/dev/drm/include/linux/kernel.h | 4 ++++ 13 files changed, 92 insertions(+), 30 deletions(-) diff --git a/sys/dev/drm/drm_crtc.c b/sys/dev/drm/drm_crtc.c index 61821b9883..a3a95e06e8 100644 --- a/sys/dev/drm/drm_crtc.c +++ b/sys/dev/drm/drm_crtc.c @@ -860,6 +860,14 @@ int drm_connector_init(struct drm_device *dev, ret = connector->connector_type_id; goto out_put; } + connector->name = + drm_asprintf(GFP_KERNEL, "%s-%d", + drm_connector_enum_list[connector_type].name, + connector->connector_type_id); + if (!connector->name) { + ret = -ENOMEM; + goto out_put; + } INIT_LIST_HEAD(&connector->probed_modes); INIT_LIST_HEAD(&connector->modes); @@ -906,6 +914,8 @@ void drm_connector_cleanup(struct drm_connector *connector) drm_mode_remove(connector, mode); drm_mode_object_put(dev, &connector->base); + kfree(connector->name); + connector->name = NULL; list_del(&connector->head); dev->mode_config.num_connector--; } @@ -1012,10 +1022,21 @@ int drm_encoder_init(struct drm_device *dev, encoder->dev = dev; encoder->encoder_type = encoder_type; encoder->funcs = funcs; + encoder->name = drm_asprintf(GFP_KERNEL, "%s-%d", + drm_encoder_enum_list[encoder_type].name, + encoder->base.id); + if (!encoder->name) { + ret = -ENOMEM; + goto out_put; + } list_add_tail(&encoder->head, &dev->mode_config.encoder_list); dev->mode_config.num_encoder++; +out_put: + if (ret) + drm_mode_object_put(dev, &encoder->base); + out_unlock: drm_modeset_unlock_all(dev); diff --git a/sys/dev/drm/drm_dragonfly.c b/sys/dev/drm/drm_dragonfly.c index c7362c2873..cc63815ba3 100644 --- a/sys/dev/drm/drm_dragonfly.c +++ b/sys/dev/drm/drm_dragonfly.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2015 Imre Vadász + * Copyright (c) 2015 Rimvydas Jasinskas * * DRM Dragonfly-specific helper functions * @@ -80,3 +81,39 @@ fb_get_options(const char *connector_name, char **option) } } +/* + * Implement simplified version of kvasnrprintf() for drm needs using + * M_DRM and kvsnprintf(). Since it is unclear what string size is + * optimal thus use of an actual length. + */ +char *drm_vasprintf(int flags, const char *format, __va_list ap) +{ + char *str; + size_t size; + __va_list aq; + + __va_copy(aq, ap); + size = kvsnprintf(NULL, 0, format, aq); + __va_end(aq); + + str = kmalloc(size+1, M_DRM, flags); + if (str == NULL) + return NULL; + + kvsnprintf(str, size+1, format, ap); + + return str; +} + +/* mimic ksnrprintf(), return pointer to char* and match drm api */ +char *drm_asprintf(int flags, const char *format, ...) +{ + char *str; + __va_list ap; + + __va_start(ap, format); + str = drm_vasprintf(flags, format, ap); + __va_end(ap); + + return str; +} diff --git a/sys/dev/drm/i915/i915_irq.c b/sys/dev/drm/i915/i915_irq.c index 9ad7283e24..9b81d60457 100644 --- a/sys/dev/drm/i915/i915_irq.c +++ b/sys/dev/drm/i915/i915_irq.c @@ -1071,7 +1071,7 @@ static bool intel_hpd_irq_event(struct drm_device *dev, DRM_DEBUG_KMS("[CONNECTOR:%d:%s] status updated from %s to %s\n", connector->base.id, - "connector->name", + connector->name, drm_get_connector_status_name(old_status), drm_get_connector_status_name(connector->status)); @@ -1115,7 +1115,7 @@ static void i915_hotplug_work_func(struct work_struct *work) connector->polled == DRM_CONNECTOR_POLL_HPD) { DRM_INFO("HPD interrupt storm detected on connector %s: " "switching from hotplug detection to polling\n", - "connector->name"); + connector->name); dev_priv->hpd_stats[intel_encoder->hpd_pin].hpd_mark = HPD_DISABLED; connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT; @@ -1123,7 +1123,7 @@ static void i915_hotplug_work_func(struct work_struct *work) } if (hpd_event_bits & (1 << intel_encoder->hpd_pin)) { DRM_DEBUG_KMS("Connector %s (pin %i) received hotplug event.\n", - "connector->name", intel_encoder->hpd_pin); + connector->name, intel_encoder->hpd_pin); } } /* if there were no outputs to poll, poll was disabled, @@ -4252,7 +4252,7 @@ static void intel_hpd_irq_reenable(unsigned long data) if (intel_connector->encoder->hpd_pin == i) { if (connector->polled != intel_connector->polled) DRM_DEBUG_DRIVER("Reenabling HPD on connector %s\n", - "connector->name"); + connector->name); connector->polled = intel_connector->polled; if (!connector->polled) connector->polled = DRM_CONNECTOR_POLL_HPD; diff --git a/sys/dev/drm/i915/intel_crt.c b/sys/dev/drm/i915/intel_crt.c index 0776536384..9031b86c2c 100644 --- a/sys/dev/drm/i915/intel_crt.c +++ b/sys/dev/drm/i915/intel_crt.c @@ -634,7 +634,7 @@ intel_crt_detect(struct drm_connector *connector, bool force) intel_runtime_pm_get(dev_priv); DRM_DEBUG_KMS("[CONNECTOR:%d:%s] force=%d\n", - connector->base.id, "connector->name", + connector->base.id, connector->name, force); power_domain = intel_display_port_power_domain(intel_encoder); diff --git a/sys/dev/drm/i915/intel_display.c b/sys/dev/drm/i915/intel_display.c index f1b54d7aeb..92b038d0be 100644 --- a/sys/dev/drm/i915/intel_display.c +++ b/sys/dev/drm/i915/intel_display.c @@ -4934,7 +4934,7 @@ static void intel_connector_check_state(struct intel_connector *connector) DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", connector->base.base.id, - "connector->base.name"); + connector->base.name); WARN(connector->base.dpms == DRM_MODE_DPMS_OFF, "wrong connector dpms state\n"); @@ -7857,7 +7857,7 @@ void intel_write_eld(struct drm_encoder *encoder, DRM_DEBUG_DRIVER("ELD on [CONNECTOR:%d:%s], [ENCODER:%d:%s]\n", connector->base.id, - "connector->name", + connector->name, connector->encoder->base.id, connector->encoder->name); @@ -8312,8 +8312,8 @@ bool intel_get_load_detect_pipe(struct drm_connector *connector, int ret, i = -1; DRM_DEBUG_KMS("[CONNECTOR:%d:%s], [ENCODER:%d:%s]\n", - connector->base.id, "connector->name", - encoder->base.id, "encoder->name"); + connector->base.id, connector->name, + encoder->base.id, encoder->name); drm_modeset_acquire_init(ctx, 0); @@ -8444,8 +8444,8 @@ void intel_release_load_detect_pipe(struct drm_connector *connector, struct intel_crtc *intel_crtc = to_intel_crtc(crtc); DRM_DEBUG_KMS("[CONNECTOR:%d:%s], [ENCODER:%d:%s]\n", - connector->base.id, "connector->name", - encoder->base.id, "encoder->name"); + connector->base.id, connector->name, + encoder->base.id, encoder->name); if (old->load_detect_temp) { to_intel_connector(connector)->new_encoder = NULL; @@ -9414,7 +9414,7 @@ connected_sink_compute_bpp(struct intel_connector *connector, DRM_DEBUG_KMS("[CONNECTOR:%d:%s] checking for sink bpp constrains\n", connector->base.base.id, - "connector->base.name"); + connector->base.name); /* Don't use an invalid EDID bpc value */ if (connector->base.display_info.bpc && @@ -10627,7 +10627,7 @@ intel_modeset_stage_output_state(struct drm_device *dev, DRM_DEBUG_KMS("[CONNECTOR:%d:%s] to [NOCRTC]\n", connector->base.base.id, - "connector->base.name"); + connector->base.name); } @@ -10662,7 +10662,7 @@ intel_modeset_stage_output_state(struct drm_device *dev, DRM_DEBUG_KMS("[CONNECTOR:%d:%s] to [CRTC:%d]\n", connector->base.base.id, - "connector->base.name", + connector->base.name, new_crtc->base.id); } @@ -12159,7 +12159,7 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev) } DRM_DEBUG_KMS("[CONNECTOR:%d:%s] hw state readout: %s\n", connector->base.base.id, - "connector->base.name", + connector->base.name, connector->base.encoder ? "enabled" : "disabled"); } } diff --git a/sys/dev/drm/i915/intel_dp.c b/sys/dev/drm/i915/intel_dp.c index 23c5067e2d..72fd42db9c 100644 --- a/sys/dev/drm/i915/intel_dp.c +++ b/sys/dev/drm/i915/intel_dp.c @@ -3641,7 +3641,7 @@ intel_dp_detect(struct drm_connector *connector, bool force) intel_display_power_get(dev_priv, power_domain); DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", - connector->base.id, "connector->name"); + connector->base.id, connector->name); intel_dp->has_audio = false; diff --git a/sys/dev/drm/i915/intel_fbdev.c b/sys/dev/drm/i915/intel_fbdev.c index 1e242ba3de..26d7bd7791 100644 --- a/sys/dev/drm/i915/intel_fbdev.c +++ b/sys/dev/drm/i915/intel_fbdev.c @@ -371,14 +371,14 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, if (!enabled[i]) { DRM_DEBUG_KMS("connector %s not enabled, skipping\n", - "connector->name"); + connector->name); continue; } encoder = connector->encoder; if (!encoder || WARN_ON(!encoder->crtc)) { DRM_DEBUG_KMS("connector %s has no encoder or crtc, skipping\n", - "connector->name"); + connector->name); enabled[i] = false; continue; } @@ -401,7 +401,7 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, } DRM_DEBUG_KMS("looking for cmdline mode on connector %s\n", - "connector->name"); + connector->name); /* go for command line mode first */ modes[i] = drm_pick_cmdline_mode(fb_conn, width, height); @@ -409,7 +409,7 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, /* try for preferred next */ if (!modes[i]) { DRM_DEBUG_KMS("looking for preferred mode on connector %s\n", - "connector->name"); + connector->name); modes[i] = drm_has_preferred_mode(fb_conn, width, height); } @@ -437,7 +437,7 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, * something we own. */ DRM_DEBUG_KMS("looking for current mode on connector %s\n", - "connector->name"); + connector->name); intel_mode_from_pipe_config(&encoder->crtc->hwmode, &to_intel_crtc(encoder->crtc)->config); modes[i] = &encoder->crtc->hwmode; @@ -445,7 +445,7 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, crtcs[i] = new_crtc; DRM_DEBUG_KMS("connector %s on pipe %d [CRTC:%d]: %dx%d%s\n", - "connector->name", + connector->name, pipe_name(to_intel_crtc(encoder->crtc)->pipe), encoder->crtc->base.id, modes[i]->hdisplay, modes[i]->vdisplay, diff --git a/sys/dev/drm/i915/intel_hdmi.c b/sys/dev/drm/i915/intel_hdmi.c index 2b2481bf93..c1288cafed 100644 --- a/sys/dev/drm/i915/intel_hdmi.c +++ b/sys/dev/drm/i915/intel_hdmi.c @@ -972,7 +972,7 @@ intel_hdmi_detect(struct drm_connector *connector, bool force) enum drm_connector_status status = connector_status_disconnected; DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", - connector->base.id, "connector->name"); + connector->base.id, connector->name); power_domain = intel_display_port_power_domain(intel_encoder); intel_display_power_get(dev_priv, power_domain); diff --git a/sys/dev/drm/i915/intel_lvds.c b/sys/dev/drm/i915/intel_lvds.c index e3fe0d79b3..d01222ff63 100644 --- a/sys/dev/drm/i915/intel_lvds.c +++ b/sys/dev/drm/i915/intel_lvds.c @@ -340,7 +340,7 @@ intel_lvds_detect(struct drm_connector *connector, bool force) enum drm_connector_status status; DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", - connector->base.id, "connector->name"); + connector->base.id, connector->name); status = intel_panel_detect(dev); if (status != connector_status_unknown) diff --git a/sys/dev/drm/i915/intel_panel.c b/sys/dev/drm/i915/intel_panel.c index f01ed297da..397c0e1c9b 100644 --- a/sys/dev/drm/i915/intel_panel.c +++ b/sys/dev/drm/i915/intel_panel.c @@ -1183,7 +1183,7 @@ int intel_panel_setup_backlight(struct drm_connector *connector) if (ret) { DRM_DEBUG_KMS("failed to setup backlight for connector %s\n", - "connector->name"); + connector->name); return ret; } diff --git a/sys/dev/drm/i915/intel_sdvo.c b/sys/dev/drm/i915/intel_sdvo.c index e9d67377b8..229caa148a 100644 --- a/sys/dev/drm/i915/intel_sdvo.c +++ b/sys/dev/drm/i915/intel_sdvo.c @@ -1750,7 +1750,7 @@ intel_sdvo_detect(struct drm_connector *connector, bool force) enum drm_connector_status ret; DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", - connector->base.id, "connector->name"); + connector->base.id, connector->name); if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_ATTACHED_DISPLAYS, @@ -1812,7 +1812,7 @@ static void intel_sdvo_get_ddc_modes(struct drm_connector *connector) struct edid *edid; DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", - connector->base.id, "connector->name"); + connector->base.id, connector->name); /* set the bus switch and get the modes */ edid = intel_sdvo_get_edid(connector); @@ -1910,7 +1910,7 @@ static void intel_sdvo_get_tv_modes(struct drm_connector *connector) int i; DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", - connector->base.id, "connector->name"); + connector->base.id, connector->name); /* Read the list of supported input resolutions for the selected TV * format. @@ -1947,7 +1947,7 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) struct drm_display_mode *newmode; DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", - connector->base.id, "connector->name"); + connector->base.id, connector->name); /* * Fetch modes from VBT. For SDVO prefer the VBT mode since some diff --git a/sys/dev/drm/i915/intel_tv.c b/sys/dev/drm/i915/intel_tv.c index 93bfd1c861..0a33f47d06 100644 --- a/sys/dev/drm/i915/intel_tv.c +++ b/sys/dev/drm/i915/intel_tv.c @@ -1313,7 +1313,7 @@ intel_tv_detect(struct drm_connector *connector, bool force) int type; DRM_DEBUG_KMS("[CONNECTOR:%d:%s] force=%d\n", - connector->base.id, "connector->name", + connector->base.id, connector->name, force); mode = reported_modes[0]; diff --git a/sys/dev/drm/include/linux/kernel.h b/sys/dev/drm/include/linux/kernel.h index f5d7927ab2..1b471bb436 100644 --- a/sys/dev/drm/include/linux/kernel.h +++ b/sys/dev/drm/include/linux/kernel.h @@ -215,4 +215,8 @@ static inline int64_t abs64(int64_t x) return (x < 0 ? -x : x); } +/* simplified version of kvasnrprintf() for drm needs. */ +char *drm_vasprintf(int flags, const char *format, __va_list ap) __printflike(2, 0); +char *drm_asprintf(int flags, const char *format, ...) __printflike(2, 3); + #endif /* _LINUX_KERNEL_H_ */ -- 2.41.0