aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDariusz Marcinkiewicz <darekm@google.com>2019-06-24 17:04:27 +0200
committerHans Verkuil <hverkuil-cisco@xs4all.nl>2019-06-25 16:34:23 +0200
commit51194f167e092845be79619eb590bc821271ac2b (patch)
tree2dfa845a9c25f52f158a24a9841e899156421e86
parenta25672239a01252f3d2869580997d91b1e8a2383 (diff)
tda998x: use cec_notifier_conn_(un)register
Use the new cec_notifier_conn_(un)register() functions to (un)register the notifier for the HDMI connector, and fill in the cec_connector_info. Signed-off-by: Dariusz Marcinkiewicz <darekm@google.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
-rw-r--r--drivers/gpu/drm/i2c/tda998x_drv.c56
1 files changed, 28 insertions, 28 deletions
diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
index 7f34601bb515..019e1f2f008c 100644
--- a/drivers/gpu/drm/i2c/tda998x_drv.c
+++ b/drivers/gpu/drm/i2c/tda998x_drv.c
@@ -1253,6 +1253,8 @@ static int tda998x_connector_init(struct tda998x_priv *priv,
struct drm_device *drm)
{
struct drm_connector *connector = &priv->connector;
+ struct cec_connector_info conn_info;
+ struct i2c_board_info cec_info;
int ret;
connector->interlace_allowed = 1;
@@ -1269,6 +1271,31 @@ static int tda998x_connector_init(struct tda998x_priv *priv,
if (ret)
return ret;
+ /*
+ * Some TDA998x are actually two I2C devices merged onto one piece
+ * of silicon: TDA9989 and TDA19989 combine the HDMI transmitter
+ * with a slightly modified TDA9950 CEC device. The CEC device
+ * is at the TDA9950 address, with the address pins strapped across
+ * to the TDA998x address pins. Hence, it always has the same
+ * offset.
+ */
+ memset(&cec_info, 0, sizeof(cec_info));
+ strlcpy(cec_info.type, "tda9950", sizeof(cec_info.type));
+ cec_info.addr = priv->cec_addr;
+ cec_info.platform_data = &priv->cec_glue;
+ cec_info.irq = priv->hdmi->irq;
+
+ priv->cec = i2c_new_device(priv->hdmi->adapter, &cec_info);
+ if (!priv->cec)
+ return -ENODEV;
+
+ cec_fill_conn_info_from_drm(&conn_info, connector);
+
+ priv->cec_notify = cec_notifier_conn_register(priv->cec_glue.parent,
+ NULL, &conn_info);
+ if (!priv->cec_notify)
+ return -ENOMEM;
+
drm_connector_attach_encoder(&priv->connector,
priv->bridge.encoder);
@@ -1651,14 +1678,13 @@ static void tda998x_destroy(struct device *dev)
i2c_unregister_device(priv->cec);
if (priv->cec_notify)
- cec_notifier_put(priv->cec_notify);
+ cec_notifier_conn_unregister(priv->cec_notify);
}
static int tda998x_create(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
struct device_node *np = client->dev.of_node;
- struct i2c_board_info cec_info;
struct tda998x_priv *priv;
u32 video;
int rev_lo, rev_hi, ret;
@@ -1776,12 +1802,6 @@ static int tda998x_create(struct device *dev)
cec_write(priv, REG_CEC_RXSHPDINTENA, CEC_RXSHPDLEV_HPD);
}
- priv->cec_notify = cec_notifier_get(dev);
- if (!priv->cec_notify) {
- ret = -ENOMEM;
- goto fail;
- }
-
priv->cec_glue.parent = dev;
priv->cec_glue.data = priv;
priv->cec_glue.init = tda998x_cec_hook_init;
@@ -1789,26 +1809,6 @@ static int tda998x_create(struct device *dev)
priv->cec_glue.open = tda998x_cec_hook_open;
priv->cec_glue.release = tda998x_cec_hook_release;
- /*
- * Some TDA998x are actually two I2C devices merged onto one piece
- * of silicon: TDA9989 and TDA19989 combine the HDMI transmitter
- * with a slightly modified TDA9950 CEC device. The CEC device
- * is at the TDA9950 address, with the address pins strapped across
- * to the TDA998x address pins. Hence, it always has the same
- * offset.
- */
- memset(&cec_info, 0, sizeof(cec_info));
- strlcpy(cec_info.type, "tda9950", sizeof(cec_info.type));
- cec_info.addr = priv->cec_addr;
- cec_info.platform_data = &priv->cec_glue;
- cec_info.irq = client->irq;
-
- priv->cec = i2c_new_device(client->adapter, &cec_info);
- if (!priv->cec) {
- ret = -ENODEV;
- goto fail;
- }
-
/* enable EDID read irq: */
reg_set(priv, REG_INT_FLAGS_2, INT_FLAGS_2_EDID_BLK_RD);

Privacy Policy