diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c index 9a3cbeaef..3deb05f32 100644 --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c @@ -440,7 +440,11 @@ static int wpa_supplicant_ctrl_iface_set(struct wpa_supplicant *wpa_s, ret = wpa_drv_set_p2p_powersave(wpa_s, atoi(value), -1, -1); #ifdef CONFIG_WIFI_DISPLAY } else if (os_strcasecmp(cmd, "wifi_display") == 0) { - wifi_display_enable(wpa_s->global, !!atoi(value)); + int enabled = !!atoi(value); + if (enabled && !wpa_s->global->p2p) + ret = -1; + else + wifi_display_enable(wpa_s->global, enabled); #endif /* CONFIG_WIFI_DISPLAY */ } else if (os_strcasecmp(cmd, "bssid_filter") == 0) { ret = set_bssid_filter(wpa_s, value); @@ -475,8 +479,13 @@ static int wpa_supplicant_ctrl_iface_get(struct wpa_supplicant *wpa_s, wpa_s->conf->country[1]); #ifdef CONFIG_WIFI_DISPLAY } else if (os_strcasecmp(cmd, "wifi_display") == 0) { - res = os_snprintf(buf, buflen, "%d", - wpa_s->global->wifi_display); + int enabled; + if (wpa_s->global->p2p == NULL || + wpa_s->global->p2p_disabled) + enabled = 0; + else + enabled = wpa_s->global->wifi_display; + res = os_snprintf(buf, buflen, "%d", enabled); if (res < 0 || (unsigned int) res >= buflen) return -1; return res; diff --git a/wpa_supplicant/wifi_display.c b/wpa_supplicant/wifi_display.c index 578199ebe..8435b63a7 100644 --- a/wpa_supplicant/wifi_display.c +++ b/wpa_supplicant/wifi_display.c @@ -41,6 +41,9 @@ static int wifi_display_update_wfd_ie(struct wpa_global *global) struct wpabuf *ie, *buf; size_t len, plen; + if (global->p2p == NULL) + return 0; + wpa_printf(MSG_DEBUG, "WFD: Update WFD IE"); if (!global->wifi_display) {