Commit da1efdb2 authored by Thomas Zimmermann's avatar Thomas Zimmermann
Browse files

drm/mgag200: Store positions of I2C data and clock bits in device info



The bits for accessing I2C data and clock channels varies among
models. Store them in the device-info structure for consumption
by the DDC code.

Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarJocelyn Falempe <jfalempe@redhat.com>
Tested-by: default avatarJocelyn Falempe <jfalempe@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220601112522.5774-11-tzimmermann@suse.de
parent d1e40d8e
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -203,6 +203,11 @@ struct mgag200_device_info {
	/* HW has external source (e.g., BMC) to synchronize with */
	bool has_vidrst:1;

	struct {
		unsigned data_bit:3;
		unsigned clock_bit:3;
	} i2c;

	/*
	 * HW does not handle 'startadd' register correctly. Always set
	 * it's value to 0.
@@ -211,12 +216,17 @@ struct mgag200_device_info {
};

#define MGAG200_DEVICE_INFO_INIT(_max_hdisplay, _max_vdisplay, _max_mem_bandwidth, \
				 _has_vidrst, _bug_no_startadd) \
				 _has_vidrst, _i2c_data_bit, _i2c_clock_bit, \
				 _bug_no_startadd) \
	{ \
		.max_hdisplay = (_max_hdisplay), \
		.max_vdisplay = (_max_vdisplay), \
		.max_mem_bandwidth = (_max_mem_bandwidth), \
		.has_vidrst = (_has_vidrst), \
		.i2c = { \
			.data_bit = (_i2c_data_bit), \
			.clock_bit = (_i2c_clock_bit), \
		}, \
		.bug_no_startadd = (_bug_no_startadd), \
	}

+1 −1
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ static int mgag200_g200_init_pci_options(struct pci_dev *pdev)
 */

static const struct mgag200_device_info mgag200_g200_device_info =
	MGAG200_DEVICE_INFO_INIT(2048, 2048, 0, false, false);
	MGAG200_DEVICE_INFO_INIT(2048, 2048, 0, false, 1, 3, false);

static void mgag200_g200_interpret_bios(struct mgag200_g200_device *g200,
					const unsigned char *bios, size_t size)
+1 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@
 */

static const struct mgag200_device_info mgag200_g200eh_device_info =
	MGAG200_DEVICE_INFO_INIT(2048, 2048, 37500, false, false);
	MGAG200_DEVICE_INFO_INIT(2048, 2048, 37500, false, 1, 0, false);

struct mga_device *mgag200_g200eh_device_create(struct pci_dev *pdev, const struct drm_driver *drv,
						enum mga_type type)
+1 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@
 */

static const struct mgag200_device_info mgag200_g200eh3_device_info =
	MGAG200_DEVICE_INFO_INIT(2048, 2048, 0, false, false);
	MGAG200_DEVICE_INFO_INIT(2048, 2048, 0, false, 1, 0, false);

struct mga_device *mgag200_g200eh3_device_create(struct pci_dev *pdev,
						 const struct drm_driver *drv,
+1 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@
 */

static const struct mgag200_device_info mgag200_g200er_device_info =
	MGAG200_DEVICE_INFO_INIT(2048, 2048, 55000, false, false);
	MGAG200_DEVICE_INFO_INIT(2048, 2048, 55000, false, 1, 0, false);

struct mga_device *mgag200_g200er_device_create(struct pci_dev *pdev, const struct drm_driver *drv,
						enum mga_type type)
Loading