Skip to content

Commit f551072

Browse files
committed
drm/mgag200: Add VGA-BMC output
Duplicate VGA output to VGA-BMC output and update all code for Matrox server chips. The new output represents a VGA output that has a BMC attached to it. No functional changes so far. Signed-off-by: Thomas Zimmermann <[email protected]> Reviewed-by: Jocelyn Falempe <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 17419a5 commit f551072

File tree

10 files changed

+83
-7
lines changed

10 files changed

+83
-7
lines changed

drivers/gpu/drm/mgag200/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ mgag200-y := \
1212
mgag200_g200se.o \
1313
mgag200_g200wb.o \
1414
mgag200_mode.o \
15+
mgag200_vga_bmc.o \
1516
mgag200_vga.o
1617

1718
obj-$(CONFIG_DRM_MGAG200) += mgag200.o

drivers/gpu/drm/mgag200/mgag200_drv.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,9 @@ void mgag200_enable_display(struct mga_device *mdev);
437437
void mgag200_init_registers(struct mga_device *mdev);
438438
int mgag200_mode_config_init(struct mga_device *mdev, resource_size_t vram_available);
439439

440+
/* mgag200_vga_bmc.c */
441+
int mgag200_vga_bmc_output_init(struct mga_device *mdev);
442+
440443
/* mgag200_vga.c */
441444
int mgag200_vga_output_init(struct mga_device *mdev);
442445

drivers/gpu/drm/mgag200/mgag200_g200eh.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ static int mgag200_g200eh_pipeline_init(struct mga_device *mdev)
215215
drm_mode_crtc_set_gamma_size(crtc, MGAG200_LUT_SIZE);
216216
drm_crtc_enable_color_mgmt(crtc, 0, false, MGAG200_LUT_SIZE);
217217

218-
ret = mgag200_vga_output_init(mdev);
218+
ret = mgag200_vga_bmc_output_init(mdev);
219219
if (ret)
220220
return ret;
221221

drivers/gpu/drm/mgag200/mgag200_g200eh3.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ static int mgag200_g200eh3_pipeline_init(struct mga_device *mdev)
119119
drm_mode_crtc_set_gamma_size(crtc, MGAG200_LUT_SIZE);
120120
drm_crtc_enable_color_mgmt(crtc, 0, false, MGAG200_LUT_SIZE);
121121

122-
ret = mgag200_vga_output_init(mdev);
122+
ret = mgag200_vga_bmc_output_init(mdev);
123123
if (ret)
124124
return ret;
125125

drivers/gpu/drm/mgag200/mgag200_g200er.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ static int mgag200_g200er_pipeline_init(struct mga_device *mdev)
258258
drm_mode_crtc_set_gamma_size(crtc, MGAG200_LUT_SIZE);
259259
drm_crtc_enable_color_mgmt(crtc, 0, false, MGAG200_LUT_SIZE);
260260

261-
ret = mgag200_vga_output_init(mdev);
261+
ret = mgag200_vga_bmc_output_init(mdev);
262262
if (ret)
263263
return ret;
264264

drivers/gpu/drm/mgag200/mgag200_g200ev.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ static int mgag200_g200ev_pipeline_init(struct mga_device *mdev)
259259
drm_mode_crtc_set_gamma_size(crtc, MGAG200_LUT_SIZE);
260260
drm_crtc_enable_color_mgmt(crtc, 0, false, MGAG200_LUT_SIZE);
261261

262-
ret = mgag200_vga_output_init(mdev);
262+
ret = mgag200_vga_bmc_output_init(mdev);
263263
if (ret)
264264
return ret;
265265

drivers/gpu/drm/mgag200/mgag200_g200ew3.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ static int mgag200_g200ew3_pipeline_init(struct mga_device *mdev)
128128
drm_mode_crtc_set_gamma_size(crtc, MGAG200_LUT_SIZE);
129129
drm_crtc_enable_color_mgmt(crtc, 0, false, MGAG200_LUT_SIZE);
130130

131-
ret = mgag200_vga_output_init(mdev);
131+
ret = mgag200_vga_bmc_output_init(mdev);
132132
if (ret)
133133
return ret;
134134

drivers/gpu/drm/mgag200/mgag200_g200se.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ static int mgag200_g200se_pipeline_init(struct mga_device *mdev)
390390
drm_mode_crtc_set_gamma_size(crtc, MGAG200_LUT_SIZE);
391391
drm_crtc_enable_color_mgmt(crtc, 0, false, MGAG200_LUT_SIZE);
392392

393-
ret = mgag200_vga_output_init(mdev);
393+
ret = mgag200_vga_bmc_output_init(mdev);
394394
if (ret)
395395
return ret;
396396

drivers/gpu/drm/mgag200/mgag200_g200wb.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ static int mgag200_g200wb_pipeline_init(struct mga_device *mdev)
262262
drm_mode_crtc_set_gamma_size(crtc, MGAG200_LUT_SIZE);
263263
drm_crtc_enable_color_mgmt(crtc, 0, false, MGAG200_LUT_SIZE);
264264

265-
ret = mgag200_vga_output_init(mdev);
265+
ret = mgag200_vga_bmc_output_init(mdev);
266266
if (ret)
267267
return ret;
268268

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// SPDX-License-Identifier: GPL-2.0-only
2+
3+
#include <drm/drm_atomic_helper.h>
4+
#include <drm/drm_modeset_helper_vtables.h>
5+
#include <drm/drm_probe_helper.h>
6+
7+
#include "mgag200_ddc.h"
8+
#include "mgag200_drv.h"
9+
10+
static const struct drm_encoder_funcs mgag200_dac_encoder_funcs = {
11+
.destroy = drm_encoder_cleanup
12+
};
13+
14+
static const struct drm_connector_helper_funcs mgag200_vga_connector_helper_funcs = {
15+
.get_modes = drm_connector_helper_get_modes,
16+
.detect_ctx = drm_connector_helper_detect_from_ddc
17+
};
18+
19+
static const struct drm_connector_funcs mgag200_vga_connector_funcs = {
20+
.reset = drm_atomic_helper_connector_reset,
21+
.fill_modes = drm_helper_probe_single_connector_modes,
22+
.destroy = drm_connector_cleanup,
23+
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
24+
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state
25+
};
26+
27+
int mgag200_vga_bmc_output_init(struct mga_device *mdev)
28+
{
29+
struct drm_device *dev = &mdev->base;
30+
struct drm_crtc *crtc = &mdev->crtc;
31+
struct drm_encoder *encoder;
32+
struct drm_connector *connector;
33+
struct i2c_adapter *ddc;
34+
int ret;
35+
36+
encoder = &mdev->output.vga.encoder;
37+
ret = drm_encoder_init(dev, encoder, &mgag200_dac_encoder_funcs,
38+
DRM_MODE_ENCODER_DAC, NULL);
39+
if (ret) {
40+
drm_err(dev, "drm_encoder_init() failed: %d\n", ret);
41+
return ret;
42+
}
43+
encoder->possible_crtcs = drm_crtc_mask(crtc);
44+
45+
ddc = mgag200_ddc_create(mdev);
46+
if (IS_ERR(ddc)) {
47+
ret = PTR_ERR(ddc);
48+
drm_err(dev, "failed to add DDC bus: %d\n", ret);
49+
return ret;
50+
}
51+
52+
connector = &mdev->output.vga.connector;
53+
ret = drm_connector_init_with_ddc(dev, connector,
54+
&mgag200_vga_connector_funcs,
55+
DRM_MODE_CONNECTOR_VGA, ddc);
56+
if (ret) {
57+
drm_err(dev, "drm_connector_init_with_ddc() failed: %d\n", ret);
58+
return ret;
59+
}
60+
drm_connector_helper_add(connector, &mgag200_vga_connector_helper_funcs);
61+
62+
connector->polled = DRM_CONNECTOR_POLL_CONNECT |
63+
DRM_CONNECTOR_POLL_DISCONNECT;
64+
65+
ret = drm_connector_attach_encoder(connector, encoder);
66+
if (ret) {
67+
drm_err(dev, "drm_connector_attach_encoder() failed: %d\n", ret);
68+
return ret;
69+
}
70+
71+
return 0;
72+
}

0 commit comments

Comments
 (0)