Loading drivers/gpu/drm/nouveau/nouveau_bios.c +2 −0 Original line number Diff line number Diff line Loading @@ -5388,6 +5388,8 @@ parse_dcb20_entry(struct drm_device *dev, struct dcb_table *dcb, /* weird g80 mobile type that "nv" treats as a terminator */ dcb->entries--; return false; default: break; } /* unsure what DCB version introduces this, 3.0? */ Loading drivers/gpu/drm/nouveau/nouveau_bios.h +58 −44 Original line number Diff line number Diff line Loading @@ -34,9 +34,66 @@ #define DCB_LOC_ON_CHIP 0 struct dcb_i2c_entry { uint8_t port_type; uint8_t read, write; struct nouveau_i2c_chan *chan; }; enum dcb_gpio_tag { DCB_GPIO_TVDAC0 = 0xc, DCB_GPIO_TVDAC1 = 0x2d, }; struct dcb_gpio_entry { enum dcb_gpio_tag tag; int line; bool invert; }; struct dcb_gpio_table { int entries; struct dcb_gpio_entry entry[DCB_MAX_NUM_GPIO_ENTRIES]; }; enum dcb_connector_type { DCB_CONNECTOR_VGA = 0x00, DCB_CONNECTOR_TV_0 = 0x10, DCB_CONNECTOR_TV_1 = 0x11, DCB_CONNECTOR_TV_3 = 0x13, DCB_CONNECTOR_DVI_I = 0x30, DCB_CONNECTOR_DVI_D = 0x31, DCB_CONNECTOR_LVDS = 0x40, DCB_CONNECTOR_DP = 0x46, DCB_CONNECTOR_eDP = 0x47, DCB_CONNECTOR_HDMI_0 = 0x60, DCB_CONNECTOR_HDMI_1 = 0x61, }; struct dcb_connector_table_entry { uint32_t entry; enum dcb_connector_type type; uint8_t index; uint8_t gpio_tag; }; struct dcb_connector_table { int entries; struct dcb_connector_table_entry entry[DCB_MAX_NUM_CONNECTOR_ENTRIES]; }; enum dcb_type { OUTPUT_ANALOG = 0, OUTPUT_TV = 1, OUTPUT_TMDS = 2, OUTPUT_LVDS = 3, OUTPUT_DP = 6, OUTPUT_ANY = -1 }; struct dcb_entry { int index; /* may not be raw dcb index if merging has happened */ uint8_t type; enum dcb_type type; uint8_t i2c_index; uint8_t heads; uint8_t connector; Loading Loading @@ -71,40 +128,6 @@ struct dcb_entry { bool i2c_upper_default; }; struct dcb_i2c_entry { uint8_t port_type; uint8_t read, write; struct nouveau_i2c_chan *chan; }; enum dcb_gpio_tag { DCB_GPIO_TVDAC0 = 0xc, DCB_GPIO_TVDAC1 = 0x2d, }; struct dcb_gpio_entry { enum dcb_gpio_tag tag; int line; bool invert; }; struct dcb_gpio_table { int entries; struct dcb_gpio_entry entry[DCB_MAX_NUM_GPIO_ENTRIES]; }; struct dcb_connector_table_entry { uint32_t entry; uint8_t type; uint8_t index; uint8_t gpio_tag; }; struct dcb_connector_table { int entries; struct dcb_connector_table_entry entry[DCB_MAX_NUM_CONNECTOR_ENTRIES]; }; struct dcb_table { uint8_t version; Loading @@ -121,15 +144,6 @@ struct dcb_table { struct dcb_connector_table connector; }; enum nouveau_encoder_type { OUTPUT_ANALOG = 0, OUTPUT_TV = 1, OUTPUT_TMDS = 2, OUTPUT_LVDS = 3, OUTPUT_DP = 6, OUTPUT_ANY = -1 }; enum nouveau_or { OUTPUT_A = (1 << 0), OUTPUT_B = (1 << 1), Loading drivers/gpu/drm/nouveau/nouveau_connector.c +3 −0 Original line number Diff line number Diff line Loading @@ -613,6 +613,9 @@ nouveau_connector_mode_valid(struct drm_connector *connector, clock *= 3; break; default: BUG_ON(1); return MODE_BAD; } if (clock < min_clock) Loading Loading
drivers/gpu/drm/nouveau/nouveau_bios.c +2 −0 Original line number Diff line number Diff line Loading @@ -5388,6 +5388,8 @@ parse_dcb20_entry(struct drm_device *dev, struct dcb_table *dcb, /* weird g80 mobile type that "nv" treats as a terminator */ dcb->entries--; return false; default: break; } /* unsure what DCB version introduces this, 3.0? */ Loading
drivers/gpu/drm/nouveau/nouveau_bios.h +58 −44 Original line number Diff line number Diff line Loading @@ -34,9 +34,66 @@ #define DCB_LOC_ON_CHIP 0 struct dcb_i2c_entry { uint8_t port_type; uint8_t read, write; struct nouveau_i2c_chan *chan; }; enum dcb_gpio_tag { DCB_GPIO_TVDAC0 = 0xc, DCB_GPIO_TVDAC1 = 0x2d, }; struct dcb_gpio_entry { enum dcb_gpio_tag tag; int line; bool invert; }; struct dcb_gpio_table { int entries; struct dcb_gpio_entry entry[DCB_MAX_NUM_GPIO_ENTRIES]; }; enum dcb_connector_type { DCB_CONNECTOR_VGA = 0x00, DCB_CONNECTOR_TV_0 = 0x10, DCB_CONNECTOR_TV_1 = 0x11, DCB_CONNECTOR_TV_3 = 0x13, DCB_CONNECTOR_DVI_I = 0x30, DCB_CONNECTOR_DVI_D = 0x31, DCB_CONNECTOR_LVDS = 0x40, DCB_CONNECTOR_DP = 0x46, DCB_CONNECTOR_eDP = 0x47, DCB_CONNECTOR_HDMI_0 = 0x60, DCB_CONNECTOR_HDMI_1 = 0x61, }; struct dcb_connector_table_entry { uint32_t entry; enum dcb_connector_type type; uint8_t index; uint8_t gpio_tag; }; struct dcb_connector_table { int entries; struct dcb_connector_table_entry entry[DCB_MAX_NUM_CONNECTOR_ENTRIES]; }; enum dcb_type { OUTPUT_ANALOG = 0, OUTPUT_TV = 1, OUTPUT_TMDS = 2, OUTPUT_LVDS = 3, OUTPUT_DP = 6, OUTPUT_ANY = -1 }; struct dcb_entry { int index; /* may not be raw dcb index if merging has happened */ uint8_t type; enum dcb_type type; uint8_t i2c_index; uint8_t heads; uint8_t connector; Loading Loading @@ -71,40 +128,6 @@ struct dcb_entry { bool i2c_upper_default; }; struct dcb_i2c_entry { uint8_t port_type; uint8_t read, write; struct nouveau_i2c_chan *chan; }; enum dcb_gpio_tag { DCB_GPIO_TVDAC0 = 0xc, DCB_GPIO_TVDAC1 = 0x2d, }; struct dcb_gpio_entry { enum dcb_gpio_tag tag; int line; bool invert; }; struct dcb_gpio_table { int entries; struct dcb_gpio_entry entry[DCB_MAX_NUM_GPIO_ENTRIES]; }; struct dcb_connector_table_entry { uint32_t entry; uint8_t type; uint8_t index; uint8_t gpio_tag; }; struct dcb_connector_table { int entries; struct dcb_connector_table_entry entry[DCB_MAX_NUM_CONNECTOR_ENTRIES]; }; struct dcb_table { uint8_t version; Loading @@ -121,15 +144,6 @@ struct dcb_table { struct dcb_connector_table connector; }; enum nouveau_encoder_type { OUTPUT_ANALOG = 0, OUTPUT_TV = 1, OUTPUT_TMDS = 2, OUTPUT_LVDS = 3, OUTPUT_DP = 6, OUTPUT_ANY = -1 }; enum nouveau_or { OUTPUT_A = (1 << 0), OUTPUT_B = (1 << 1), Loading
drivers/gpu/drm/nouveau/nouveau_connector.c +3 −0 Original line number Diff line number Diff line Loading @@ -613,6 +613,9 @@ nouveau_connector_mode_valid(struct drm_connector *connector, clock *= 3; break; default: BUG_ON(1); return MODE_BAD; } if (clock < min_clock) Loading