drm/nouveau: report LVDS as disconnected if lid closed
Also adds a module option to ignore the status reported via ACPI, in case we hit systems with broken ACPI. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
@@ -24,9 +24,12 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <acpi/button.h>
|
||||||
|
|
||||||
#include "drmP.h"
|
#include "drmP.h"
|
||||||
#include "drm_edid.h"
|
#include "drm_edid.h"
|
||||||
#include "drm_crtc_helper.h"
|
#include "drm_crtc_helper.h"
|
||||||
|
|
||||||
#include "nouveau_reg.h"
|
#include "nouveau_reg.h"
|
||||||
#include "nouveau_drv.h"
|
#include "nouveau_drv.h"
|
||||||
#include "nouveau_encoder.h"
|
#include "nouveau_encoder.h"
|
||||||
@@ -235,6 +238,10 @@ nouveau_connector_detect(struct drm_connector *connector)
|
|||||||
if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)
|
if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)
|
||||||
nv_encoder = find_encoder_by_type(connector, OUTPUT_LVDS);
|
nv_encoder = find_encoder_by_type(connector, OUTPUT_LVDS);
|
||||||
if (nv_encoder && nv_connector->native_mode) {
|
if (nv_encoder && nv_connector->native_mode) {
|
||||||
|
#ifdef CONFIG_ACPI
|
||||||
|
if (!nouveau_ignorelid && !acpi_lid_open())
|
||||||
|
return connector_status_disconnected;
|
||||||
|
#endif
|
||||||
nouveau_connector_set_encoder(connector, nv_encoder);
|
nouveau_connector_set_encoder(connector, nv_encoder);
|
||||||
return connector_status_connected;
|
return connector_status_connected;
|
||||||
}
|
}
|
||||||
|
@@ -71,6 +71,10 @@ MODULE_PARM_DESC(uscript_tmds, "TMDS output script table ID (>=GeForce 8)");
|
|||||||
int nouveau_uscript_tmds = -1;
|
int nouveau_uscript_tmds = -1;
|
||||||
module_param_named(uscript_tmds, nouveau_uscript_tmds, int, 0400);
|
module_param_named(uscript_tmds, nouveau_uscript_tmds, int, 0400);
|
||||||
|
|
||||||
|
MODULE_PARM_DESC(ignorelid, "Ignore ACPI lid status");
|
||||||
|
int nouveau_ignorelid = 0;
|
||||||
|
module_param_named(ignorelid, nouveau_ignorelid, int, 0400);
|
||||||
|
|
||||||
MODULE_PARM_DESC(tv_norm, "Default TV norm.\n"
|
MODULE_PARM_DESC(tv_norm, "Default TV norm.\n"
|
||||||
"\t\tSupported: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J,\n"
|
"\t\tSupported: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J,\n"
|
||||||
"\t\t\thd480i, hd480p, hd576i, hd576p, hd720p, hd1080i.\n"
|
"\t\t\thd480i, hd480p, hd576i, hd576p, hd720p, hd1080i.\n"
|
||||||
|
@@ -677,6 +677,7 @@ extern char *nouveau_tv_norm;
|
|||||||
extern int nouveau_reg_debug;
|
extern int nouveau_reg_debug;
|
||||||
extern char *nouveau_vbios;
|
extern char *nouveau_vbios;
|
||||||
extern int nouveau_ctxfw;
|
extern int nouveau_ctxfw;
|
||||||
|
extern int nouveau_ignorelid;
|
||||||
|
|
||||||
/* nouveau_state.c */
|
/* nouveau_state.c */
|
||||||
extern void nouveau_preclose(struct drm_device *dev, struct drm_file *);
|
extern void nouveau_preclose(struct drm_device *dev, struct drm_file *);
|
||||||
|
Reference in New Issue
Block a user