Rev 4104 | Rev 5060 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4104 | Rev 4560 | ||
---|---|---|---|
Line 278... | Line 278... | ||
278 | dev_priv->vbt.bios_lvds_val); |
278 | dev_priv->vbt.bios_lvds_val); |
279 | } |
279 | } |
280 | } |
280 | } |
281 | } |
281 | } |
Line -... | Line 282... | ||
- | 282 | ||
- | 283 | static void |
|
- | 284 | parse_lfp_backlight(struct drm_i915_private *dev_priv, struct bdb_header *bdb) |
|
- | 285 | { |
|
- | 286 | const struct bdb_lfp_backlight_data *backlight_data; |
|
- | 287 | const struct bdb_lfp_backlight_data_entry *entry; |
|
- | 288 | ||
- | 289 | backlight_data = find_section(bdb, BDB_LVDS_BACKLIGHT); |
|
- | 290 | if (!backlight_data) |
|
- | 291 | return; |
|
- | 292 | ||
- | 293 | if (backlight_data->entry_size != sizeof(backlight_data->data[0])) { |
|
- | 294 | DRM_DEBUG_KMS("Unsupported backlight data entry size %u\n", |
|
- | 295 | backlight_data->entry_size); |
|
- | 296 | return; |
|
- | 297 | } |
|
- | 298 | ||
- | 299 | entry = &backlight_data->data[panel_type]; |
|
- | 300 | ||
- | 301 | dev_priv->vbt.backlight.pwm_freq_hz = entry->pwm_freq_hz; |
|
- | 302 | dev_priv->vbt.backlight.active_low_pwm = entry->active_low_pwm; |
|
- | 303 | DRM_DEBUG_KMS("VBT backlight PWM modulation frequency %u Hz, " |
|
- | 304 | "active %s, min brightness %u, level %u\n", |
|
- | 305 | dev_priv->vbt.backlight.pwm_freq_hz, |
|
- | 306 | dev_priv->vbt.backlight.active_low_pwm ? "low" : "high", |
|
- | 307 | entry->min_brightness, |
|
- | 308 | backlight_data->level[panel_type]); |
|
- | 309 | } |
|
282 | 310 | ||
283 | /* Try to find sdvo panel data */ |
311 | /* Try to find sdvo panel data */ |
284 | static void |
312 | static void |
285 | parse_sdvo_panel_data(struct drm_i915_private *dev_priv, |
313 | parse_sdvo_panel_data(struct drm_i915_private *dev_priv, |
286 | struct bdb_header *bdb) |
314 | struct bdb_header *bdb) |
Line 324... | Line 352... | ||
324 | static int intel_bios_ssc_frequency(struct drm_device *dev, |
352 | static int intel_bios_ssc_frequency(struct drm_device *dev, |
325 | bool alternate) |
353 | bool alternate) |
326 | { |
354 | { |
327 | switch (INTEL_INFO(dev)->gen) { |
355 | switch (INTEL_INFO(dev)->gen) { |
328 | case 2: |
356 | case 2: |
329 | return alternate ? 66 : 48; |
357 | return alternate ? 66667 : 48000; |
330 | case 3: |
358 | case 3: |
331 | case 4: |
359 | case 4: |
332 | return alternate ? 100 : 96; |
360 | return alternate ? 100000 : 96000; |
333 | default: |
361 | default: |
334 | return alternate ? 100 : 120; |
362 | return alternate ? 100000 : 120000; |
335 | } |
363 | } |
336 | } |
364 | } |
Line 337... | Line 365... | ||
337 | 365 | ||
338 | static void |
366 | static void |
Line 386... | Line 414... | ||
386 | parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, |
414 | parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, |
387 | struct bdb_header *bdb) |
415 | struct bdb_header *bdb) |
388 | { |
416 | { |
389 | struct sdvo_device_mapping *p_mapping; |
417 | struct sdvo_device_mapping *p_mapping; |
390 | struct bdb_general_definitions *p_defs; |
418 | struct bdb_general_definitions *p_defs; |
391 | struct child_device_config *p_child; |
419 | union child_device_config *p_child; |
392 | int i, child_device_num, count; |
420 | int i, child_device_num, count; |
393 | u16 block_size; |
421 | u16 block_size; |
Line 394... | Line 422... | ||
394 | 422 | ||
395 | p_defs = find_section(bdb, BDB_GENERAL_DEFINITIONS); |
423 | p_defs = find_section(bdb, BDB_GENERAL_DEFINITIONS); |
Line 413... | Line 441... | ||
413 | child_device_num = (block_size - sizeof(*p_defs)) / |
441 | child_device_num = (block_size - sizeof(*p_defs)) / |
414 | sizeof(*p_child); |
442 | sizeof(*p_child); |
415 | count = 0; |
443 | count = 0; |
416 | for (i = 0; i < child_device_num; i++) { |
444 | for (i = 0; i < child_device_num; i++) { |
417 | p_child = &(p_defs->devices[i]); |
445 | p_child = &(p_defs->devices[i]); |
418 | if (!p_child->device_type) { |
446 | if (!p_child->old.device_type) { |
419 | /* skip the device block if device type is invalid */ |
447 | /* skip the device block if device type is invalid */ |
420 | continue; |
448 | continue; |
421 | } |
449 | } |
422 | if (p_child->slave_addr != SLAVE_ADDR1 && |
450 | if (p_child->old.slave_addr != SLAVE_ADDR1 && |
423 | p_child->slave_addr != SLAVE_ADDR2) { |
451 | p_child->old.slave_addr != SLAVE_ADDR2) { |
424 | /* |
452 | /* |
425 | * If the slave address is neither 0x70 nor 0x72, |
453 | * If the slave address is neither 0x70 nor 0x72, |
426 | * it is not a SDVO device. Skip it. |
454 | * it is not a SDVO device. Skip it. |
427 | */ |
455 | */ |
428 | continue; |
456 | continue; |
429 | } |
457 | } |
430 | if (p_child->dvo_port != DEVICE_PORT_DVOB && |
458 | if (p_child->old.dvo_port != DEVICE_PORT_DVOB && |
431 | p_child->dvo_port != DEVICE_PORT_DVOC) { |
459 | p_child->old.dvo_port != DEVICE_PORT_DVOC) { |
432 | /* skip the incorrect SDVO port */ |
460 | /* skip the incorrect SDVO port */ |
433 | DRM_DEBUG_KMS("Incorrect SDVO port. Skip it\n"); |
461 | DRM_DEBUG_KMS("Incorrect SDVO port. Skip it\n"); |
434 | continue; |
462 | continue; |
435 | } |
463 | } |
436 | DRM_DEBUG_KMS("the SDVO device with slave addr %2x is found on" |
464 | DRM_DEBUG_KMS("the SDVO device with slave addr %2x is found on" |
437 | " %s port\n", |
465 | " %s port\n", |
438 | p_child->slave_addr, |
466 | p_child->old.slave_addr, |
439 | (p_child->dvo_port == DEVICE_PORT_DVOB) ? |
467 | (p_child->old.dvo_port == DEVICE_PORT_DVOB) ? |
440 | "SDVOB" : "SDVOC"); |
468 | "SDVOB" : "SDVOC"); |
441 | p_mapping = &(dev_priv->sdvo_mappings[p_child->dvo_port - 1]); |
469 | p_mapping = &(dev_priv->sdvo_mappings[p_child->old.dvo_port - 1]); |
442 | if (!p_mapping->initialized) { |
470 | if (!p_mapping->initialized) { |
443 | p_mapping->dvo_port = p_child->dvo_port; |
471 | p_mapping->dvo_port = p_child->old.dvo_port; |
444 | p_mapping->slave_addr = p_child->slave_addr; |
472 | p_mapping->slave_addr = p_child->old.slave_addr; |
445 | p_mapping->dvo_wiring = p_child->dvo_wiring; |
473 | p_mapping->dvo_wiring = p_child->old.dvo_wiring; |
446 | p_mapping->ddc_pin = p_child->ddc_pin; |
474 | p_mapping->ddc_pin = p_child->old.ddc_pin; |
447 | p_mapping->i2c_pin = p_child->i2c_pin; |
475 | p_mapping->i2c_pin = p_child->old.i2c_pin; |
448 | p_mapping->initialized = 1; |
476 | p_mapping->initialized = 1; |
449 | DRM_DEBUG_KMS("SDVO device: dvo=%x, addr=%x, wiring=%d, ddc_pin=%d, i2c_pin=%d\n", |
477 | DRM_DEBUG_KMS("SDVO device: dvo=%x, addr=%x, wiring=%d, ddc_pin=%d, i2c_pin=%d\n", |
450 | p_mapping->dvo_port, |
478 | p_mapping->dvo_port, |
451 | p_mapping->slave_addr, |
479 | p_mapping->slave_addr, |
452 | p_mapping->dvo_wiring, |
480 | p_mapping->dvo_wiring, |
Line 454... | Line 482... | ||
454 | p_mapping->i2c_pin); |
482 | p_mapping->i2c_pin); |
455 | } else { |
483 | } else { |
456 | DRM_DEBUG_KMS("Maybe one SDVO port is shared by " |
484 | DRM_DEBUG_KMS("Maybe one SDVO port is shared by " |
457 | "two SDVO device.\n"); |
485 | "two SDVO device.\n"); |
458 | } |
486 | } |
459 | if (p_child->slave2_addr) { |
487 | if (p_child->old.slave2_addr) { |
460 | /* Maybe this is a SDVO device with multiple inputs */ |
488 | /* Maybe this is a SDVO device with multiple inputs */ |
461 | /* And the mapping info is not added */ |
489 | /* And the mapping info is not added */ |
462 | DRM_DEBUG_KMS("there exists the slave2_addr. Maybe this" |
490 | DRM_DEBUG_KMS("there exists the slave2_addr. Maybe this" |
463 | " is a SDVO device with multiple inputs.\n"); |
491 | " is a SDVO device with multiple inputs.\n"); |
464 | } |
492 | } |
Line 474... | Line 502... | ||
474 | 502 | ||
475 | static void |
503 | static void |
476 | parse_driver_features(struct drm_i915_private *dev_priv, |
504 | parse_driver_features(struct drm_i915_private *dev_priv, |
477 | struct bdb_header *bdb) |
505 | struct bdb_header *bdb) |
478 | { |
- | |
479 | struct drm_device *dev = dev_priv->dev; |
506 | { |
Line 480... | Line 507... | ||
480 | struct bdb_driver_features *driver; |
507 | struct bdb_driver_features *driver; |
481 | 508 | ||
482 | driver = find_section(bdb, BDB_DRIVER_FEATURES); |
509 | driver = find_section(bdb, BDB_DRIVER_FEATURES); |
Line 483... | Line -... | ||
483 | if (!driver) |
- | |
484 | return; |
510 | if (!driver) |
485 | 511 | return; |
|
Line 486... | Line 512... | ||
486 | if (SUPPORTS_EDP(dev) && |
512 | |
487 | driver->lvds_config == BDB_DRIVER_FEATURE_EDP) |
513 | if (driver->lvds_config == BDB_DRIVER_FEATURE_EDP) |
488 | dev_priv->vbt.edp_support = 1; |
514 | dev_priv->vbt.edp_support = 1; |
Line 498... | Line 524... | ||
498 | struct edp_power_seq *edp_pps; |
524 | struct edp_power_seq *edp_pps; |
499 | struct edp_link_params *edp_link_params; |
525 | struct edp_link_params *edp_link_params; |
Line 500... | Line 526... | ||
500 | 526 | ||
501 | edp = find_section(bdb, BDB_EDP); |
527 | edp = find_section(bdb, BDB_EDP); |
502 | if (!edp) { |
528 | if (!edp) { |
503 | if (SUPPORTS_EDP(dev_priv->dev) && dev_priv->vbt.edp_support) |
529 | if (dev_priv->vbt.edp_support) |
504 | DRM_DEBUG_KMS("No eDP BDB found but eDP panel supported.\n"); |
530 | DRM_DEBUG_KMS("No eDP BDB found but eDP panel supported.\n"); |
505 | return; |
531 | return; |
Line 506... | Line 532... | ||
506 | } |
532 | } |
Line 566... | Line 592... | ||
566 | break; |
592 | break; |
567 | } |
593 | } |
568 | } |
594 | } |
Line 569... | Line 595... | ||
569 | 595 | ||
- | 596 | static void |
|
- | 597 | parse_mipi(struct drm_i915_private *dev_priv, struct bdb_header *bdb) |
|
- | 598 | { |
|
- | 599 | struct bdb_mipi *mipi; |
|
- | 600 | ||
- | 601 | mipi = find_section(bdb, BDB_MIPI); |
|
- | 602 | if (!mipi) { |
|
- | 603 | DRM_DEBUG_KMS("No MIPI BDB found"); |
|
- | 604 | return; |
|
- | 605 | } |
|
- | 606 | ||
- | 607 | /* XXX: add more info */ |
|
- | 608 | dev_priv->vbt.dsi.panel_id = mipi->panel_id; |
|
- | 609 | } |
|
- | 610 | ||
- | 611 | static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port, |
|
- | 612 | struct bdb_header *bdb) |
|
- | 613 | { |
|
- | 614 | union child_device_config *it, *child = NULL; |
|
- | 615 | struct ddi_vbt_port_info *info = &dev_priv->vbt.ddi_port_info[port]; |
|
- | 616 | uint8_t hdmi_level_shift; |
|
- | 617 | int i, j; |
|
- | 618 | bool is_dvi, is_hdmi, is_dp, is_edp, is_crt; |
|
- | 619 | uint8_t aux_channel; |
|
- | 620 | /* Each DDI port can have more than one value on the "DVO Port" field, |
|
- | 621 | * so look for all the possible values for each port and abort if more |
|
- | 622 | * than one is found. */ |
|
- | 623 | int dvo_ports[][2] = { |
|
- | 624 | {DVO_PORT_HDMIA, DVO_PORT_DPA}, |
|
- | 625 | {DVO_PORT_HDMIB, DVO_PORT_DPB}, |
|
- | 626 | {DVO_PORT_HDMIC, DVO_PORT_DPC}, |
|
- | 627 | {DVO_PORT_HDMID, DVO_PORT_DPD}, |
|
- | 628 | {DVO_PORT_CRT, -1 /* Port E can only be DVO_PORT_CRT */ }, |
|
- | 629 | }; |
|
- | 630 | ||
- | 631 | /* Find the child device to use, abort if more than one found. */ |
|
- | 632 | for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { |
|
- | 633 | it = dev_priv->vbt.child_dev + i; |
|
- | 634 | ||
- | 635 | for (j = 0; j < 2; j++) { |
|
- | 636 | if (dvo_ports[port][j] == -1) |
|
- | 637 | break; |
|
- | 638 | ||
- | 639 | if (it->common.dvo_port == dvo_ports[port][j]) { |
|
- | 640 | if (child) { |
|
- | 641 | DRM_DEBUG_KMS("More than one child device for port %c in VBT.\n", |
|
- | 642 | port_name(port)); |
|
- | 643 | return; |
|
- | 644 | } |
|
- | 645 | child = it; |
|
- | 646 | } |
|
- | 647 | } |
|
- | 648 | } |
|
- | 649 | if (!child) |
|
- | 650 | return; |
|
- | 651 | ||
- | 652 | aux_channel = child->raw[25]; |
|
- | 653 | ||
- | 654 | is_dvi = child->common.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING; |
|
- | 655 | is_dp = child->common.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT; |
|
- | 656 | is_crt = child->common.device_type & DEVICE_TYPE_ANALOG_OUTPUT; |
|
- | 657 | is_hdmi = is_dvi && (child->common.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0; |
|
- | 658 | is_edp = is_dp && (child->common.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR); |
|
- | 659 | ||
- | 660 | info->supports_dvi = is_dvi; |
|
- | 661 | info->supports_hdmi = is_hdmi; |
|
- | 662 | info->supports_dp = is_dp; |
|
- | 663 | ||
- | 664 | DRM_DEBUG_KMS("Port %c VBT info: DP:%d HDMI:%d DVI:%d EDP:%d CRT:%d\n", |
|
- | 665 | port_name(port), is_dp, is_hdmi, is_dvi, is_edp, is_crt); |
|
- | 666 | ||
- | 667 | if (is_edp && is_dvi) |
|
- | 668 | DRM_DEBUG_KMS("Internal DP port %c is TMDS compatible\n", |
|
- | 669 | port_name(port)); |
|
- | 670 | if (is_crt && port != PORT_E) |
|
- | 671 | DRM_DEBUG_KMS("Port %c is analog\n", port_name(port)); |
|
- | 672 | if (is_crt && (is_dvi || is_dp)) |
|
- | 673 | DRM_DEBUG_KMS("Analog port %c is also DP or TMDS compatible\n", |
|
- | 674 | port_name(port)); |
|
- | 675 | if (is_dvi && (port == PORT_A || port == PORT_E)) |
|
- | 676 | DRM_DEBUG_KMS("Port %c is TMDS compabile\n", port_name(port)); |
|
- | 677 | if (!is_dvi && !is_dp && !is_crt) |
|
- | 678 | DRM_DEBUG_KMS("Port %c is not DP/TMDS/CRT compatible\n", |
|
- | 679 | port_name(port)); |
|
- | 680 | if (is_edp && (port == PORT_B || port == PORT_C || port == PORT_E)) |
|
- | 681 | DRM_DEBUG_KMS("Port %c is internal DP\n", port_name(port)); |
|
- | 682 | ||
- | 683 | if (is_dvi) { |
|
- | 684 | if (child->common.ddc_pin == 0x05 && port != PORT_B) |
|
- | 685 | DRM_DEBUG_KMS("Unexpected DDC pin for port B\n"); |
|
- | 686 | if (child->common.ddc_pin == 0x04 && port != PORT_C) |
|
- | 687 | DRM_DEBUG_KMS("Unexpected DDC pin for port C\n"); |
|
- | 688 | if (child->common.ddc_pin == 0x06 && port != PORT_D) |
|
- | 689 | DRM_DEBUG_KMS("Unexpected DDC pin for port D\n"); |
|
- | 690 | } |
|
- | 691 | ||
- | 692 | if (is_dp) { |
|
- | 693 | if (aux_channel == 0x40 && port != PORT_A) |
|
- | 694 | DRM_DEBUG_KMS("Unexpected AUX channel for port A\n"); |
|
- | 695 | if (aux_channel == 0x10 && port != PORT_B) |
|
- | 696 | DRM_DEBUG_KMS("Unexpected AUX channel for port B\n"); |
|
- | 697 | if (aux_channel == 0x20 && port != PORT_C) |
|
- | 698 | DRM_DEBUG_KMS("Unexpected AUX channel for port C\n"); |
|
- | 699 | if (aux_channel == 0x30 && port != PORT_D) |
|
- | 700 | DRM_DEBUG_KMS("Unexpected AUX channel for port D\n"); |
|
- | 701 | } |
|
- | 702 | ||
- | 703 | if (bdb->version >= 158) { |
|
- | 704 | /* The VBT HDMI level shift values match the table we have. */ |
|
- | 705 | hdmi_level_shift = child->raw[7] & 0xF; |
|
- | 706 | if (hdmi_level_shift < 0xC) { |
|
- | 707 | DRM_DEBUG_KMS("VBT HDMI level shift for port %c: %d\n", |
|
- | 708 | port_name(port), |
|
- | 709 | hdmi_level_shift); |
|
- | 710 | info->hdmi_level_shift = hdmi_level_shift; |
|
- | 711 | } |
|
- | 712 | } |
|
- | 713 | } |
|
- | 714 | ||
- | 715 | static void parse_ddi_ports(struct drm_i915_private *dev_priv, |
|
- | 716 | struct bdb_header *bdb) |
|
- | 717 | { |
|
- | 718 | struct drm_device *dev = dev_priv->dev; |
|
- | 719 | enum port port; |
|
- | 720 | ||
- | 721 | if (!HAS_DDI(dev)) |
|
- | 722 | return; |
|
- | 723 | ||
- | 724 | if (!dev_priv->vbt.child_dev_num) |
|
- | 725 | return; |
|
- | 726 | ||
- | 727 | if (bdb->version < 155) |
|
- | 728 | return; |
|
- | 729 | ||
- | 730 | for (port = PORT_A; port < I915_MAX_PORTS; port++) |
|
- | 731 | parse_ddi_port(dev_priv, port, bdb); |
|
- | 732 | } |
|
- | 733 | ||
570 | static void |
734 | static void |
571 | parse_device_mapping(struct drm_i915_private *dev_priv, |
735 | parse_device_mapping(struct drm_i915_private *dev_priv, |
572 | struct bdb_header *bdb) |
736 | struct bdb_header *bdb) |
573 | { |
737 | { |
574 | struct bdb_general_definitions *p_defs; |
738 | struct bdb_general_definitions *p_defs; |
575 | struct child_device_config *p_child, *child_dev_ptr; |
739 | union child_device_config *p_child, *child_dev_ptr; |
576 | int i, child_device_num, count; |
740 | int i, child_device_num, count; |
Line 577... | Line 741... | ||
577 | u16 block_size; |
741 | u16 block_size; |
578 | 742 | ||
Line 598... | Line 762... | ||
598 | sizeof(*p_child); |
762 | sizeof(*p_child); |
599 | count = 0; |
763 | count = 0; |
600 | /* get the number of child device that is present */ |
764 | /* get the number of child device that is present */ |
601 | for (i = 0; i < child_device_num; i++) { |
765 | for (i = 0; i < child_device_num; i++) { |
602 | p_child = &(p_defs->devices[i]); |
766 | p_child = &(p_defs->devices[i]); |
603 | if (!p_child->device_type) { |
767 | if (!p_child->common.device_type) { |
604 | /* skip the device block if device type is invalid */ |
768 | /* skip the device block if device type is invalid */ |
605 | continue; |
769 | continue; |
606 | } |
770 | } |
607 | count++; |
771 | count++; |
608 | } |
772 | } |
Line 618... | Line 782... | ||
618 | 782 | ||
619 | dev_priv->vbt.child_dev_num = count; |
783 | dev_priv->vbt.child_dev_num = count; |
620 | count = 0; |
784 | count = 0; |
621 | for (i = 0; i < child_device_num; i++) { |
785 | for (i = 0; i < child_device_num; i++) { |
622 | p_child = &(p_defs->devices[i]); |
786 | p_child = &(p_defs->devices[i]); |
623 | if (!p_child->device_type) { |
787 | if (!p_child->common.device_type) { |
624 | /* skip the device block if device type is invalid */ |
788 | /* skip the device block if device type is invalid */ |
625 | continue; |
789 | continue; |
626 | } |
790 | } |
627 | child_dev_ptr = dev_priv->vbt.child_dev + count; |
791 | child_dev_ptr = dev_priv->vbt.child_dev + count; |
Line 634... | Line 798... | ||
634 | 798 | ||
635 | static void |
799 | static void |
636 | init_vbt_defaults(struct drm_i915_private *dev_priv) |
800 | init_vbt_defaults(struct drm_i915_private *dev_priv) |
637 | { |
801 | { |
- | 802 | struct drm_device *dev = dev_priv->dev; |
|
Line 638... | Line 803... | ||
638 | struct drm_device *dev = dev_priv->dev; |
803 | enum port port; |
Line 639... | Line 804... | ||
639 | 804 | ||
640 | dev_priv->vbt.crt_ddc_pin = GMBUS_PORT_VGADDC; |
805 | dev_priv->vbt.crt_ddc_pin = GMBUS_PORT_VGADDC; |
Line 650... | Line 815... | ||
650 | dev_priv->vbt.int_tv_support = 1; |
815 | dev_priv->vbt.int_tv_support = 1; |
651 | dev_priv->vbt.int_crt_support = 1; |
816 | dev_priv->vbt.int_crt_support = 1; |
Line 652... | Line 817... | ||
652 | 817 | ||
653 | /* Default to using SSC */ |
818 | /* Default to using SSC */ |
- | 819 | dev_priv->vbt.lvds_use_ssc = 1; |
|
- | 820 | /* |
|
- | 821 | * Core/SandyBridge/IvyBridge use alternative (120MHz) reference |
|
- | 822 | * clock for LVDS. |
|
654 | dev_priv->vbt.lvds_use_ssc = 1; |
823 | */ |
- | 824 | dev_priv->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(dev, |
|
655 | dev_priv->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(dev, 1); |
825 | !HAS_PCH_SPLIT(dev)); |
- | 826 | DRM_DEBUG_KMS("Set default to SSC at %d kHz\n", dev_priv->vbt.lvds_ssc_freq); |
|
- | 827 | ||
- | 828 | for (port = PORT_A; port < I915_MAX_PORTS; port++) { |
|
- | 829 | struct ddi_vbt_port_info *info = |
|
- | 830 | &dev_priv->vbt.ddi_port_info[port]; |
|
- | 831 | ||
- | 832 | /* Recommended BSpec default: 800mV 0dB. */ |
|
- | 833 | info->hdmi_level_shift = 6; |
|
- | 834 | ||
- | 835 | info->supports_dvi = (port != PORT_A && port != PORT_E); |
|
- | 836 | info->supports_hdmi = info->supports_dvi; |
|
- | 837 | info->supports_dp = (port != PORT_E); |
|
656 | DRM_DEBUG_KMS("Set default to SSC at %dMHz\n", dev_priv->vbt.lvds_ssc_freq); |
838 | } |
Line 657... | Line 839... | ||
657 | } |
839 | } |
658 | 840 | ||
Line 718... | Line 900... | ||
718 | 900 | ||
719 | /* Grab useful general definitions */ |
901 | /* Grab useful general definitions */ |
720 | parse_general_features(dev_priv, bdb); |
902 | parse_general_features(dev_priv, bdb); |
721 | parse_general_definitions(dev_priv, bdb); |
903 | parse_general_definitions(dev_priv, bdb); |
- | 904 | parse_lfp_panel_data(dev_priv, bdb); |
|
722 | parse_lfp_panel_data(dev_priv, bdb); |
905 | parse_lfp_backlight(dev_priv, bdb); |
723 | parse_sdvo_panel_data(dev_priv, bdb); |
906 | parse_sdvo_panel_data(dev_priv, bdb); |
724 | parse_sdvo_device_mapping(dev_priv, bdb); |
907 | parse_sdvo_device_mapping(dev_priv, bdb); |
725 | parse_device_mapping(dev_priv, bdb); |
908 | parse_device_mapping(dev_priv, bdb); |
726 | parse_driver_features(dev_priv, bdb); |
909 | parse_driver_features(dev_priv, bdb); |
- | 910 | parse_edp(dev_priv, bdb); |
|
- | 911 | parse_mipi(dev_priv, bdb); |
|
Line 727... | Line 912... | ||
727 | parse_edp(dev_priv, bdb); |
912 | parse_ddi_ports(dev_priv, bdb); |
728 | 913 | ||
Line 729... | Line 914... | ||
729 | if (bios) |
914 | if (bios) |