@@ -29,15 +29,11 @@
#define ZX_HDMI_INFOFRAME_SIZE 31
#define DDC_SEGMENT_ADDR 0x30
-struct zx_hdmi_i2c {
- struct i2c_adapter adap;
- struct mutex lock;
-};
-
struct zx_hdmi {
struct drm_connector connector;
struct drm_encoder encoder;
- struct zx_hdmi_i2c *ddc;
+ /* protects ddc access */
+ struct mutex ddc_lock;
struct device *dev;
struct drm_device *drm;
void __iomem *mmio;
@@ -264,7 +260,7 @@ static int zx_hdmi_connector_get_modes(struct drm_connector *connector)
struct edid *edid;
int ret;
- edid = drm_get_edid(connector, &hdmi->ddc->adap);
+ edid = drm_get_edid(connector, connector->ddc);
if (!edid)
return 0;
@@ -319,8 +315,10 @@ static int zx_hdmi_register(struct drm_device *drm, struct zx_hdmi *hdmi)
hdmi->connector.polled = DRM_CONNECTOR_POLL_HPD;
- drm_connector_init(drm, &hdmi->connector, &zx_hdmi_connector_funcs,
- DRM_MODE_CONNECTOR_HDMIA);
+ drm_connector_init_with_ddc(drm, &hdmi->connector,
+ &zx_hdmi_connector_funcs,
+ DRM_MODE_CONNECTOR_HDMIA,
+ hdmi->connector.ddc);
drm_connector_helper_add(&hdmi->connector,
&zx_hdmi_connector_helper_funcs);
@@ -562,10 +560,9 @@ static int zx_hdmi_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
int num)
{
struct zx_hdmi *hdmi = i2c_get_adapdata(adap);
- struct zx_hdmi_i2c *ddc = hdmi->ddc;
int i, ret = 0;
- mutex_lock(&ddc->lock);
+ mutex_lock(&hdmi->ddc_lock);
/* Enable DDC master access */
hdmi_writeb_mask(hdmi, TPI_DDC_MASTER_EN, HW_DDC_MASTER, HW_DDC_MASTER);
@@ -590,7 +587,7 @@ static int zx_hdmi_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
/* Disable DDC master access */
hdmi_writeb_mask(hdmi, TPI_DDC_MASTER_EN, HW_DDC_MASTER, 0);
- mutex_unlock(&ddc->lock);
+ mutex_unlock(&hdmi->ddc_lock);
return ret;
}
@@ -608,17 +605,15 @@ static const struct i2c_algorithm zx_hdmi_algorithm = {
static int zx_hdmi_ddc_register(struct zx_hdmi *hdmi)
{
struct i2c_adapter *adap;
- struct zx_hdmi_i2c *ddc;
int ret;
- ddc = devm_kzalloc(hdmi->dev, sizeof(*ddc), GFP_KERNEL);
- if (!ddc)
+ adap = devm_kzalloc(hdmi->dev, sizeof(*adap), GFP_KERNEL);
+ if (!adap)
return -ENOMEM;
- hdmi->ddc = ddc;
- mutex_init(&ddc->lock);
+ hdmi->connector.ddc = adap;
+ mutex_init(&hdmi->ddc_lock);
- adap = &ddc->adap;
adap->owner = THIS_MODULE;
adap->class = I2C_CLASS_DDC;
adap->dev.parent = hdmi->dev;
Use the ddc pointer provided by the generic connector. Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> --- drivers/gpu/drm/zte/zx_hdmi.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-)