@@ -1612,6 +1612,71 @@ static int tv_is_present_in_vbt(struct drm_device *dev)
return ret;
}
+struct intel_tv_quirk {
+ int pci_device;
+ int subsys_vendor;
+ int subsys_device;
+};
+
+struct intel_tv_quirk intel_tv_quirk_list[] = {
+ /* Clevo M720R has no tv output */
+ { 0x2a02, 0x1558, 0x0721 },
+ /* Dell Latitude X1 */
+ { 0x2592, 0x1028, 0x01a3 },
+ /* Dell Latitude X1 / D630 (LP: #197740) */
+ { 0x2592, 0x1028, 0x01f9 },
+ /* Dell XPS 1330 */
+ { 0x2a02, 0x1028, 0x0209 },
+ /* Dell Inspiron 1535 */
+ { 0x2a02, 0x1028, 0x0254 },
+ /* Dell Inspiron 1735 */
+ { 0x2a02, 0x1028, 0x0256 },
+ /* Dell Inspiron 1318 */
+ { 0x2a02, 0x1028, 0x0286 },
+ /* Dell Vostro A840 (LP: #235155) */
+ { 0x2a02, 0x1028, 0x0298 },
+ /* Lenovo 3000 v200 */
+ { 0x2a02, 0x17aa, 0x3c18 },
+ /* Panasonic Toughbook CF-Y4 has no TV output */
+ { 0x2592, 0x10f7, 0x8338 },
+ /* Panasonic Toughbook CF-Y7 has no TV output */
+ { 0x2a02, 0x10f7, 0x8338 },
+ /* Toshiba Satellite U300 has no TV output */
+ { 0x2a02, 0x1179, 0xff50 },
+ /* Samsung Q35 has no TV output */
+ { 0x27a2, 0x144d, 0xc504 },
+ /* Samsung Q45 has no TV output */
+ { 0x2a02, 0x144d, 0xc510 },
+ /* HP Compaq nx6110 has no TV output */
+ { 0x2592, 0x103c, 0x099c },
+ /* HP Compaq nx6310 has no TV output */
+ { 0x27a2, 0x103c, 0x30aa },
+ /* HP Compaq 6730s has no TV output */
+ { 0x2a42, 0x103c, 0x30e8 },
+ /* Ordi Enduro UW31 (See LP: #152416) */
+ { 0x27a2, 0x1584, 0x9900 },
+ /* Littlebit Sepia X35 (rebranded Asus Z37E) (See LP: #201257) */
+ { 0x2a02, 0x1043, 0x8265 },
+ /* end mark */
+ { 0, 0, 0 }
+};
+
+static bool
+intel_tv_check(struct drm_device *dev)
+{
+ struct pci_dev *pdev = dev->pdev;
+ struct intel_tv_quirk *q = intel_tv_quirk_list;
+
+ while (q && q->pci_device) {
+ if (q->pci_device == dev->pci_device &&
+ q->subsys_vendor == pdev->subsystem_vendor &&
+ q->subsys_device == pdev->subsystem_device)
+ return true;
+ ++q;
+ }
+ return false;
+}
+
void
intel_tv_init(struct drm_device *dev)
{
@@ -1635,6 +1700,10 @@ intel_tv_init(struct drm_device *dev)
if (!dev_priv->int_tv_support)
return;
+ /* No real TV output quirks */
+ if (intel_tv_check(dev))
+ return;
+
/*
* Sanity check the TV output by checking to see if the
* DAC register holds a value