int hdmi_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl) { struct hdmi_device *hdev = sd_to_hdmi_dev(sd); struct device *dev = hdev->dev; switch (ctrl->id) { case V4L2_CID_TV_GET_DVI_MODE: ctrl->value = hdev->dvi_mode; break; case V4L2_CID_TV_HPD_STATUS: ctrl->value = switch_get_state(&hdev->hpd_switch); break; case V4L2_CID_TV_HDMI_STATUS: ctrl->value = (hdev->streaming | switch_get_state(&hdev->hpd_switch)); break; case V4L2_CID_TV_MAX_AUDIO_CHANNELS: ctrl->value = edid_max_audio_channels(hdev); break; case V4L2_CID_TV_SOURCE_PHY_ADDR: ctrl->value = edid_source_phy_addr(hdev); break; default: dev_err(dev, "invalid control id\n"); return -EINVAL; } return 0; }
int hdmi_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl) { struct hdmi_device *hdev = sd_to_hdmi_dev(sd); struct device *dev = hdev->dev; int ret = 0; switch (ctrl->id) { case V4L2_CID_TV_HPD_STATUS: ctrl->value = switch_get_state(&hdev->hpd_switch); break; case V4L2_CID_TV_GET_DVI_MODE: ctrl->value = hdev->dvi_mode; break; case V4L2_CID_TV_MAX_AUDIO_CHANNELS: ctrl->value = edid_max_audio_channels(hdev); break; default: dev_err(dev, "invalid control id\n"); ret = -EINVAL; break; } return ret; }