mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-31 04:01:48 -04:00
Linux 4.7
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJXlRXSAAoJEHm+PkMAQRiGG/gH/0Z8O4zWOsrwO+X1mRToRDBH joFOjAmCVe83T1VpF5LYNB+9+owL/dEDt6+ZIswnhH7AfQPjs4RqwS4PcuMbCDVO +mDm0PmfcKaYcQZrB2Z2OwIzRNnfCTVcsDPhIHwuIHk0m4z/xuGZonD8KoAj0+tO 3yJF6sbE1KubDVjOb+lmZZSP3cXA0pDXrNhkYhE4Tsr8fiihGjeXSNJ8t2zPLjxo W3MPqo0rzDvQsOwoF4TWHHagVaFSJlhLBBgqu33fI7uO3jtfQD2G8wG68JCND1j3 qbMoBfTLFV/yQmSIJUt0Wv1axaCcwnjpweEB35A/GEeZ0mNB1rDdoBeI1eKEQkc= =DGFC -----END PGP SIGNATURE----- Backmerge tag 'v4.7' into drm-next Linux 4.7 As requested by Daniel Vetter as the conflicts were getting messy.
This commit is contained in:
commit
5e580523d9
555 changed files with 5376 additions and 3035 deletions
|
|
@ -779,11 +779,31 @@ static const struct v4l2_dv_timings_cap adv76xx_timings_cap_digital = {
|
|||
V4L2_DV_BT_CAP_CUSTOM)
|
||||
};
|
||||
|
||||
static inline const struct v4l2_dv_timings_cap *
|
||||
adv76xx_get_dv_timings_cap(struct v4l2_subdev *sd)
|
||||
/*
|
||||
* Return the DV timings capabilities for the requested sink pad. As a special
|
||||
* case, pad value -1 returns the capabilities for the currently selected input.
|
||||
*/
|
||||
static const struct v4l2_dv_timings_cap *
|
||||
adv76xx_get_dv_timings_cap(struct v4l2_subdev *sd, int pad)
|
||||
{
|
||||
return is_digital_input(sd) ? &adv76xx_timings_cap_digital :
|
||||
&adv7604_timings_cap_analog;
|
||||
if (pad == -1) {
|
||||
struct adv76xx_state *state = to_state(sd);
|
||||
|
||||
pad = state->selected_input;
|
||||
}
|
||||
|
||||
switch (pad) {
|
||||
case ADV76XX_PAD_HDMI_PORT_A:
|
||||
case ADV7604_PAD_HDMI_PORT_B:
|
||||
case ADV7604_PAD_HDMI_PORT_C:
|
||||
case ADV7604_PAD_HDMI_PORT_D:
|
||||
return &adv76xx_timings_cap_digital;
|
||||
|
||||
case ADV7604_PAD_VGA_RGB:
|
||||
case ADV7604_PAD_VGA_COMP:
|
||||
default:
|
||||
return &adv7604_timings_cap_analog;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1329,7 +1349,7 @@ static int stdi2dv_timings(struct v4l2_subdev *sd,
|
|||
const struct v4l2_bt_timings *bt = &v4l2_dv_timings_presets[i].bt;
|
||||
|
||||
if (!v4l2_valid_dv_timings(&v4l2_dv_timings_presets[i],
|
||||
adv76xx_get_dv_timings_cap(sd),
|
||||
adv76xx_get_dv_timings_cap(sd, -1),
|
||||
adv76xx_check_dv_timings, NULL))
|
||||
continue;
|
||||
if (vtotal(bt) != stdi->lcf + 1)
|
||||
|
|
@ -1430,18 +1450,22 @@ static int adv76xx_enum_dv_timings(struct v4l2_subdev *sd,
|
|||
return -EINVAL;
|
||||
|
||||
return v4l2_enum_dv_timings_cap(timings,
|
||||
adv76xx_get_dv_timings_cap(sd), adv76xx_check_dv_timings, NULL);
|
||||
adv76xx_get_dv_timings_cap(sd, timings->pad),
|
||||
adv76xx_check_dv_timings, NULL);
|
||||
}
|
||||
|
||||
static int adv76xx_dv_timings_cap(struct v4l2_subdev *sd,
|
||||
struct v4l2_dv_timings_cap *cap)
|
||||
{
|
||||
struct adv76xx_state *state = to_state(sd);
|
||||
unsigned int pad = cap->pad;
|
||||
|
||||
if (cap->pad >= state->source_pad)
|
||||
return -EINVAL;
|
||||
|
||||
*cap = *adv76xx_get_dv_timings_cap(sd);
|
||||
*cap = *adv76xx_get_dv_timings_cap(sd, pad);
|
||||
cap->pad = pad;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1450,9 +1474,9 @@ static int adv76xx_dv_timings_cap(struct v4l2_subdev *sd,
|
|||
static void adv76xx_fill_optional_dv_timings_fields(struct v4l2_subdev *sd,
|
||||
struct v4l2_dv_timings *timings)
|
||||
{
|
||||
v4l2_find_dv_timings_cap(timings, adv76xx_get_dv_timings_cap(sd),
|
||||
is_digital_input(sd) ? 250000 : 1000000,
|
||||
adv76xx_check_dv_timings, NULL);
|
||||
v4l2_find_dv_timings_cap(timings, adv76xx_get_dv_timings_cap(sd, -1),
|
||||
is_digital_input(sd) ? 250000 : 1000000,
|
||||
adv76xx_check_dv_timings, NULL);
|
||||
}
|
||||
|
||||
static unsigned int adv7604_read_hdmi_pixelclock(struct v4l2_subdev *sd)
|
||||
|
|
@ -1620,7 +1644,7 @@ static int adv76xx_s_dv_timings(struct v4l2_subdev *sd,
|
|||
|
||||
bt = &timings->bt;
|
||||
|
||||
if (!v4l2_valid_dv_timings(timings, adv76xx_get_dv_timings_cap(sd),
|
||||
if (!v4l2_valid_dv_timings(timings, adv76xx_get_dv_timings_cap(sd, -1),
|
||||
adv76xx_check_dv_timings, NULL))
|
||||
return -ERANGE;
|
||||
|
||||
|
|
|
|||
|
|
@ -1072,7 +1072,7 @@ static int airspy_probe(struct usb_interface *intf,
|
|||
if (ret) {
|
||||
dev_err(s->dev, "Failed to register as video device (%d)\n",
|
||||
ret);
|
||||
goto err_unregister_v4l2_dev;
|
||||
goto err_free_controls;
|
||||
}
|
||||
dev_info(s->dev, "Registered as %s\n",
|
||||
video_device_node_name(&s->vdev));
|
||||
|
|
@ -1081,7 +1081,6 @@ static int airspy_probe(struct usb_interface *intf,
|
|||
|
||||
err_free_controls:
|
||||
v4l2_ctrl_handler_free(&s->hdl);
|
||||
err_unregister_v4l2_dev:
|
||||
v4l2_device_unregister(&s->v4l2_dev);
|
||||
err_free_mem:
|
||||
kfree(s);
|
||||
|
|
|
|||
|
|
@ -2171,7 +2171,7 @@ static int v4l_cropcap(const struct v4l2_ioctl_ops *ops,
|
|||
* The determine_valid_ioctls() call already should ensure
|
||||
* that this can never happen, but just in case...
|
||||
*/
|
||||
if (WARN_ON(!ops->vidioc_cropcap && !ops->vidioc_cropcap))
|
||||
if (WARN_ON(!ops->vidioc_cropcap && !ops->vidioc_g_selection))
|
||||
return -ENOTTY;
|
||||
|
||||
if (ops->vidioc_cropcap)
|
||||
|
|
|
|||
Loading…
Reference in a new issue