@@ -25,15 +25,11 @@ struct zx_vga_pwrctrl {
u32 mask;
};
-struct zx_vga_i2c {
- struct i2c_adapter adap;
- struct mutex lock;
-};
-
struct zx_vga {
struct drm_connector connector;
struct drm_encoder encoder;
- struct zx_vga_i2c *ddc;
+ /* protects ddc access */
+ struct mutex ddc_lock;
struct device *dev;
void __iomem *mmio;
struct clk *i2c_wclk;
@@ -88,7 +84,7 @@ static int zx_vga_connector_get_modes(struct drm_connector *connector)
*/
zx_writel(vga->mmio + VGA_AUTO_DETECT_SEL, 0);
- edid = drm_get_edid(connector, &vga->ddc->adap);
+ edid = drm_get_edid(connector, connector->ddc);
if (!edid) {
/*
* If EDID reading fails, we set the device state into
@@ -165,8 +161,10 @@ static int zx_vga_register(struct drm_device *drm, struct zx_vga *vga)
vga->connector.polled = DRM_CONNECTOR_POLL_HPD;
- ret = drm_connector_init(drm, connector, &zx_vga_connector_funcs,
- DRM_MODE_CONNECTOR_VGA);
+ ret = drm_connector_init_with_ddc(drm, connector,
+ &zx_vga_connector_funcs,
+ DRM_MODE_CONNECTOR_VGA,
+ connector->ddc);
if (ret) {
DRM_DEV_ERROR(dev, "failed to init connector: %d\n", ret);
goto clean_encoder;
@@ -284,11 +282,10 @@ static int zx_vga_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
int num)
{
struct zx_vga *vga = i2c_get_adapdata(adap);
- struct zx_vga_i2c *ddc = vga->ddc;
int ret = 0;
int i;
- mutex_lock(&ddc->lock);
+ mutex_lock(&vga->ddc_lock);
for (i = 0; i < num; i++) {
if (msgs[i].flags & I2C_M_RD)
@@ -303,7 +300,7 @@ static int zx_vga_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
if (!ret)
ret = num;
- mutex_unlock(&ddc->lock);
+ mutex_unlock(&vga->ddc_lock);
return ret;
}
@@ -322,17 +319,15 @@ static int zx_vga_ddc_register(struct zx_vga *vga)
{
struct device *dev = vga->dev;
struct i2c_adapter *adap;
- struct zx_vga_i2c *ddc;
int ret;
- ddc = devm_kzalloc(dev, sizeof(*ddc), GFP_KERNEL);
- if (!ddc)
+ adap = devm_kzalloc(dev, sizeof(*adap), GFP_KERNEL);
+ if (!adap)
return -ENOMEM;
- vga->ddc = ddc;
- mutex_init(&ddc->lock);
+ vga->connector.ddc = adap;
+ mutex_init(&vga->ddc_lock);
- adap = &ddc->adap;
adap->owner = THIS_MODULE;
adap->class = I2C_CLASS_DDC;
adap->dev.parent = dev;
Use the ddc pointer provided by the generic connector. Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> --- drivers/gpu/drm/zte/zx_vga.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-)