Commit 1e2cb06f authored by Jacopo Mondi's avatar Jacopo Mondi Committed by Mauro Carvalho Chehab

media: i2c: adv748x: Register only enabled inputs

The adv748x assumes input endpoints are always enabled, and registers
a subdevice for each of them when the corresponding output subdevice
is registered.

Fix this by conditionally registering the input subdevice only if it is
actually described in device tree.
Tested-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarJacopo Mondi <jacopo+renesas@jmondi.org>
Signed-off-by: default avatarKieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent a7f9d21e
...@@ -78,15 +78,15 @@ static int adv748x_csi2_registered(struct v4l2_subdev *sd) ...@@ -78,15 +78,15 @@ static int adv748x_csi2_registered(struct v4l2_subdev *sd)
* *
* Link HDMI->TXA, and AFE->TXB directly. * Link HDMI->TXA, and AFE->TXB directly.
*/ */
if (is_txa(tx)) { if (is_txa(tx) && is_hdmi_enabled(state))
return adv748x_csi2_register_link(tx, sd->v4l2_dev, return adv748x_csi2_register_link(tx, sd->v4l2_dev,
&state->hdmi.sd, &state->hdmi.sd,
ADV748X_HDMI_SOURCE); ADV748X_HDMI_SOURCE);
} else { if (!is_txa(tx) && is_afe_enabled(state))
return adv748x_csi2_register_link(tx, sd->v4l2_dev, return adv748x_csi2_register_link(tx, sd->v4l2_dev,
&state->afe.sd, &state->afe.sd,
ADV748X_AFE_SOURCE); ADV748X_AFE_SOURCE);
} return 0;
} }
static const struct v4l2_subdev_internal_ops adv748x_csi2_internal_ops = { static const struct v4l2_subdev_internal_ops adv748x_csi2_internal_ops = {
......
...@@ -90,6 +90,16 @@ struct adv748x_csi2 { ...@@ -90,6 +90,16 @@ struct adv748x_csi2 {
#define adv748x_sd_to_csi2(sd) container_of(sd, struct adv748x_csi2, sd) #define adv748x_sd_to_csi2(sd) container_of(sd, struct adv748x_csi2, sd)
#define is_tx_enabled(_tx) ((_tx)->state->endpoints[(_tx)->port] != NULL) #define is_tx_enabled(_tx) ((_tx)->state->endpoints[(_tx)->port] != NULL)
#define is_txa(_tx) ((_tx) == &(_tx)->state->txa) #define is_txa(_tx) ((_tx) == &(_tx)->state->txa)
#define is_afe_enabled(_state) \
((_state)->endpoints[ADV748X_PORT_AIN0] != NULL || \
(_state)->endpoints[ADV748X_PORT_AIN1] != NULL || \
(_state)->endpoints[ADV748X_PORT_AIN2] != NULL || \
(_state)->endpoints[ADV748X_PORT_AIN3] != NULL || \
(_state)->endpoints[ADV748X_PORT_AIN4] != NULL || \
(_state)->endpoints[ADV748X_PORT_AIN5] != NULL || \
(_state)->endpoints[ADV748X_PORT_AIN6] != NULL || \
(_state)->endpoints[ADV748X_PORT_AIN7] != NULL)
#define is_hdmi_enabled(_state) ((_state)->endpoints[ADV748X_PORT_HDMI] != NULL)
enum adv748x_hdmi_pads { enum adv748x_hdmi_pads {
ADV748X_HDMI_SINK, ADV748X_HDMI_SINK,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment